GloVe 模型介绍

下面的内容主要来自https://blog.csdn.net/u014665013/article/details/79642083

GloVe的推导

GloVe是基于共现信息来获得词的分布表示的,所以需要统计词的共现对信息。在设定的窗口内,统计中心词\(k\)与其上下文词\(i\)的共现次数\(X_{i,k}\)。那么有
\[
P_{i,k} = \dfrac{X_{i,k}}{X_i}
\]
其中
\[
X_i = \sum_{j}X_{i,j}
\]
作者发现对于任意三个词\(i,j,k\), \[
ratio_{i,j,k} = \dfrac{P_{i,k}}{P_{j,k}}
\]存在以下关系

\(ratio_{i,j,k}\) 单词\(j,k\)相关 单词\(j,k\)不相关
单词\(i,k\)相关 趋近1 很大
单词\(i,k\)不相关 很小 趋近1

GloVe模型要做的就是建模上述关系,因此需要寻找一个函数\(g\),使得
\[
\dfrac{P_{i,k}}{P_{j,k}} = g(v_i, v_j, v_k)
\]
一个较为直观的做法就是
\[
g(v_i,v_j,v_k) = \exp(v_i^Tv_k - v_j^Tv_k) = \dfrac{\exp (v_i^Tv_k)}{\exp(v_j^Tv_k)} = \dfrac{P_{i,k}}{P_{j,k}}
\]
所以,对于任意的词\(i,k\),仅需要使得\(v_i^Tv_k = \log P_{i,k}\)即可,便可得到目标函数
\[
J= \sum_{i,k}^N(v_i^Tv_k - \log P_{i,k})^2
\]
等等,这个方法似乎存在问题,因为\(\log P_{i,k}\) 不等于\(\log P_{k,i}\)但是\(v_i^Tv_j = v_j^Tv_i\),这样需要进行补救一下
\[
\log P_{i,k} = \log(X_{i,k}) - \log(X_i) = v_i^Tv_k
\]
此时引入两个偏置\(b_i, b_j\),
使得
\[
\log(X_{i,k}) = v_i^Tv_k + b_i + b_k
\]
\(\log(X_i)\)被偏置项吸纳。进而,我们的优化目标变为
\[
J = \sum_{i,k}f(X_{i,k})(v_i^Tv_j+b_i+b_k - \log(X_{i,k}))^2
\]
其中\(f(X_{i,k})\)为一个常量,其计算如下
\[
f(x) = \begin{cases}
(x/xmax)^0.75 & x < xmax\\
1 & x \ge xmax
\end{cases}
\]
其作用是某些词频率过高,通常没有多大的意义,比如停用词,所以不能给过高的权重,此处的xmax是一个超参数。

如何理解Global

GloVe 即Global Vectors,如word2vec一样,都有滑动窗口,那么Global体现在哪里?
从上面的推导过程中,我们不难发现,GloVe在参数的训练前,就已经统计好了一个共现矩阵,而这个共现矩阵是全局的,是整个语料的,然后再基于此进行参数学习,而word2vec在参数学习的时候,是局部的,每次只在一个窗口内的学习,只利用到了该窗口内的信息,比如cbow,每次都是基于单个窗口内的上下文词预测中心词。

GloVe词分布式表示的更多相关文章

  1. [DeeplearningAI笔记]序列模型2.8 GloVe词向量

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.8 GloVe word vectors GloVe词向量 Pennington J, Socher R, Mannin ...

  2. NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)

    有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的 ...

  3. 文本情感分析(二):基于word2vec、glove和fasttext词向量的文本表示

    上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...

  4. L25词嵌入进阶GloVe模型

    词嵌入进阶 在"Word2Vec的实现"一节中,我们在小规模数据集上训练了一个 Word2Vec 词嵌入模型,并通过词向量的余弦相似度搜索近义词.虽然 Word2Vec 已经能够成 ...

  5. NLP教程(2) | GloVe及词向量的训练与评估

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  6. NLP︱词向量经验总结(功能作用、高维可视化、R语言实现、大规模语料、延伸拓展)

    R语言由于效率问题,实现自然语言处理的分析会受到一定的影响,如何提高效率以及提升词向量的精度是在当前软件环境下,比较需要解决的问题. 笔者认为还存在的问题有: 1.如何在R语言环境下,大规模语料提高运 ...

  7. DeepLearning.ai学习笔记(五)序列模型 -- week2 自然语言处理与词嵌入

    一.词汇表征 首先回顾一下之前介绍的单词表示方法,即one hot表示法. 如下图示,"Man"这个单词可以用 \(O_{5391}\) 表示,其中O表示One_hot.其他单词同 ...

  8. DLNg序列模型第二周NLP与词嵌入

    1.使用词嵌入 给了一个命名实体识别的例子,如果两句分别是“orange farmer”和“apple farmer”,由于两种都是比较常见的,那么可以判断主语为人名. 但是如果是榴莲种植员可能就无法 ...

  9. 2.keras实现-->字符级或单词级的one-hot编码 VS 词嵌入

    1. one-hot编码 # 字符集的one-hot编码 import string samples = ['zzh is a pig','he loves himself very much','p ...

随机推荐

  1. linux机器上部署多台Tomcat

    在Linux机器上部署多台Tomcat, 我部署的是Tomcat8,只需要一步,即避免端口号冲突. 在解压后的tomcat目录下,修改conf下server.xml. 修改shutdown端口: &l ...

  2. shell脚本安装nginx

    #!/bin/bash N_url="http://nginx.org/download/nginx-1.8.0.tar.gz" N_pack=`echo $N_url|awk - ...

  3. JavaScript空假值及其判断

    一.javaScript五种空值和假值 分别为undefined,null,false,"",0,这五个值的共同点是在执行if语句时都会执行false分支,执行对应的非语句的时候都 ...

  4. python爬虫之路——初识基本页面构造原理

    通过chrome浏览器的使用简单介绍网页构成 360浏览器使用右键审查元素,Chrome浏览器使用右键检查,都可查看网页代码. 网页代码有两部分:HTML文件和CSS样式.其中有<script& ...

  5. 原型模式 -- JavaScript语言的灵魂

    原型模式就是将原型对象指向创建对象的类,使这些类共享原型对象的方法与属性.JS是基于原型链实现对象之间的继承,是对属性或者方法的共享,而不是对属性和方法的复制. // 图片轮播类 var LoopIm ...

  6. 两个有序数列,求中间值 Median of Two Sorted Arrays

    原题: There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the ...

  7. FTP服务器建立windows与Linux的文件共享与读写操作

    centos7搭建vsftpd  2018-11-15 我们有时想要windows与Linux互传文件,就要用到vsftpd了.它仅仅在windows上面操作,就可以实现与Linux的通信,详情如下: ...

  8. C#MySQL增删改查

    首先在项目中添加引用 using MySql.Data.MySqlClient; 连接字符串  private string connString="server=localhost;use ...

  9. vue 正则判断

    value=value.replace(/[^\d.]/g,'').replace(/\.{2,}/g,'.').replace('.','$#$').replace(/\./g,'').replac ...

  10. 如何在 JavaScript 中更好地使用数组

    使用 Array.includes 替代 Array.indexOf “如果需要在数组中查找某个元素,请使用 Array.indexOf.” 我记得在我学习 JavaScript 的课程中有类似的这么 ...