详解GloVe词向量模型
词向量的表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。
word2vector中的skip-gram模型是利用类似于自动编码的器网络以中心词的one-hot表示作为输入来预测这个中心词环境中某一个词的one-hot表示,即先将中心词one-hot表示编码然后解码成环境中某个词的one-hot表示(多分类模型,损失函数用交叉熵)。CBOW是反过来的,分别用环境中的每一个词去预测中心词。尽管word2vector在学习词与词间的关系上有了大进步,但是它有很明显的缺点:只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息。鉴于此,斯坦福的GloVe诞生了,它的全称是global vector,很明显它是要改进word2vector,成功利用语料库的全局信息。
1. 共现概率
什么是共现?
单词iii出现在单词jjj的环境中(论文给的环境是以jjj为中心的左右10个单词区间)叫共现。
什么是共现矩阵?
单词对共现次数的统计表。我们可以通过大量的语料文本来构建一个共现统计矩阵。
例如,有语料如下:
I like deep learning.
I like NLP.
I enjoy flying.
我以窗半径为1来指定上下文环境,则共现矩阵就应该是[2]:
取x01x_{01}x01解释:它表示likelikelike出现在III的环境(IlikeI likeIlike区间)中的次数(在整个语料库中的总计次数),此处应当为2次,故第一行第二列应当填2。还应当发现,这个共现矩阵它是对称阵,因为likelikelike出现在III的环境中,那么必然III也会出现在likelikelike的环境中,所以x10x_{10}x10=2。
共现矩阵它有以下3个特点:
·统计的是单词对在给定环境中的共现次数;所以它在一定程度上能表达词间的关系。
·共现频次计数是针对整个语料库而不是一句或一段文档,具有全局统计特征。
·共现矩阵它是对称的。
共现矩阵的生成步骤:
· 首先构建一个空矩阵,大小为V×VV ×VV×V,即词汇表×词汇表,值全为0。矩阵中的元素坐标记为(i,j)(i,j)(i,j)。
· 确定一个滑动窗口的大小(例如取半径为m)
· 从语料库的第一个单词开始,以1的步长滑动该窗口,因为是按照语料库的顺序开始的,所以中心词为到达的那个单词即iii。
· 上下文环境是指在滑动窗口中并在中心单词iii两边的单词(这里应有2m-1个jjj)。
· 若窗口左右无单词,一般出现在语料库的首尾,则空着,不需要统计。
· 在窗口内,统计上下文环境中单词jjj出现的次数,并将该值累计到(i,j)(i,j)(i,j)位置上。
· 不断滑动窗口进行统计即可得到共现矩阵。
什么是叫共现概率?
我们定义 XXX为共现矩阵,共现矩阵的元素xijx_{ij}xij为词jjj出现在词iii环境的次数,令xi=∑kxikx_i=\sum_kx_{ik}xi=∑kxik为任意词出现在iii的环境的次数(即共现矩阵行和),那么,Pij=P(j∣i)=xijxiP_{ij}=P(j|i)={x_{ij}\over x_{i}}Pij=P(j∣i)=xixij
为词jjj出现在词iii环境中的概率(这里以频率表概率),这一概率被称为词iii和词jjj的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。注意:在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。
2. 共现概率比
接下来阐述为啥作者要提共现概率和共现概率比这一概念。下面是论文中给的一组数据:
先看一下第一行数据,以iceiceice为中心词的环境中出现solidsolidsolid固体的概率是大于gas、fashiongas、fashiongas、fashion的而且是小于waterwaterwater的,这是很合理的,对吧!因为有iceiceice的句子中出现solid、watersolid、watersolid、water的概率确实应当比gas、fashiongas、fashiongas、fashion大才对,实验数据也说明的确是如此。同理可以解释第二行数据。我们来重点考虑第三行数据:共现概率比。我们把共现概率进行一比,我们发现:
1.看第三行第一列:当iceiceice的语境下共现solidsolidsolid的概率应该很大,当streamstreamstream的语境下共现solidsolidsolid的概率应当很小,那么比值就>1。
2.看第三行第二列:当iceiceice的语境下共现gasgasgas的概率应该很小,当streamstreamstream的语境下共现gasgasgas的概率应当很大,那么比值就<1。
3.看第三行第三列:当iceiceice的语境下共现waterwaterwater的概率应该很大,当streamstreamstream的语境下共现waterwaterwater的概率也应当很大,那么比值就近似=1。
4.看第三行第四列:当iceiceice的语境下共现fashionfashionfashion的概率应该很小,当streamstreamstream的语境下共现fashionfashionfashion的概率也应当很小,那么比值也是近似=1。
因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想,如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想)。如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。
3. 设计词向量函数
想要表达共现概率比,这里涉及到的有三个词即i,j,ki,j,ki,j,k,它们对应的词向量我用vi、vj、v~kv_i、v_j、\widetilde{v}_kvi、vj、vk表示,那么我们需要找到一个映射fff,使得f(vi,vj,v~k)=PikPjkf(v_i,v_j,\widetilde{v}_k)={P_{ik}\over P_{jk}}f(vi,vj,vk)=PjkPik (1)。前面我说过,任意两个词的共现概率可以用语料库事先统计计算得到,那这里的给定三个词,是不是也可以确定共现概率比啊。这个比值可以作为标签,我们可以设计一个模型通过训练的方式让映射值逼近这个确定的共现概率比。很明显这是个回归问题,我们可以用均方误差作为losslossloss。明显地,设计这个函数或者这个模型当然有很多途径,我们来看看作者是怎么设计的。
我们可以发现公式(1)等号右侧结果是个标量,左边是个关于向量的函数,如何将函数变成标量。于是作者这么设计:f((vi−vj)Tv~k)=PikPjkf((v_i-v_j)^T\widetilde{v}_k)={P_{ik}\over P_{jk}}f((vi−vj)Tvk)=PjkPik (2)即向量做差再点积再映射到目标。再次强调,这只是一种设计,它可能不是那么严谨,合理就行。于是乎:
于是,glove模型的学习策略就是通过将词对儿的词向量经过内积操作和平移变换去趋于词对儿共现次数的对数值,这是一个回归问题。于是作者这样设计损失函数:J=∑i=1N∑j=1Nf(xij)(viTv~j+bi+bj−log(xij))2J=\sum_{i=1}^{N}\sum_{j=1}^{N}f(x_{ij})(v_i^T\widetilde{v}_j+b_i+b_j-log(x_{ij}))^2J=i=1∑Nj=1∑Nf(xij)(viTvj+bi+bj−log(xij))2
这里用的是误差平方和作为损失值,其中N表示语料库词典单词数。它这里在误差平方前给了一个权重函数f(xij)f(x_{ij})f(xij),这个权重是用来控制不同大小的共现次数(xijx_{ij}xij)对结果的影响的。作者是这么设计这个权重函数的:
也就是说词对儿共现次数越多的它有更大的权重将被惩罚得更厉害些,次数少的有更小的权重,这样就可以使得不常共现的词对儿对结果的贡献不会太小,而不会过分偏向于常共现的词对儿。此外,当xijx_{ij}xij=0时,加入了这个权重函数此时该训练样本的损失直接为0,从而避免了log(xij)log(x_{ij})log(xij)为无穷小导致损失值无穷大的问题。
4. GloVe模型算法
最后,关于glove模型算法,大致是这样的:从共现矩阵中随机采集一批非零词对作为一个mini-batch的训练数据;随机初始化这些训练数据的词向量以及随机初始化两个偏置;然后进行内积和平移操作并与log(xij)log(x_{ij})log(xij)计算损失值,计算梯度值;然后反向传播更新词向量和两个偏置;循环以上过程直到结束条件。论文中还提到一个词最终的glove词向量用的是训练后的两个词向量之和,关于这一点论文中有解释,如果感兴趣的话最好阅读一下原论文。
reference:
[1] 来b站搞学习
[2] https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1184/lectures/midterm-review.pdf
[3] GloVe论文
[4] glove开源代码
详解GloVe词向量模型相关推荐
- Glove词向量模型笔记
GloVe模型采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息. 任意词的中心词向量和背景词向量在GloVe模型中是等价的.原因在于Glove模型提出了词频共现矩阵的概念. 但 ...
- GloVe 词向量模型
GloVe is an unsupervised learning algorithm for obtaining vector representations for words. GloVe: G ...
- 机器阅读理解笔记之glove词向量与attentive readerimpatient reader和bi-DAF
glove词向量模型 词向量的表示可以分成两类: 基于统计方法 共现矩阵.svd 基于语言模型 神经网络语言模型,word2vector,glove,elmo word2vector中的skip-g ...
- NLP【05】pytorch实现glove词向量(附代码详解)
上一篇:NLP[04]tensorflow 实现Wordvec(附代码详解) 下一篇:NLP[06]RCNN原理及文本分类实战(附代码详解) 完整代码下载:https://github.com/ttj ...
- 【自然语言处理】Word2Vec 词向量模型详解 + Python代码实战
文章目录 一.词向量引入 二.词向量模型 三.训练数据构建 四.不同模型对比 4.1 CBOW 4.2 Skip-gram 模型 4.3 CBOW 和 Skip-gram 对比 五.词向量训练过程 5 ...
- PaperWeekly 第53期 | 更别致的词向量模型:Simpler GloVe - Part 2
作者丨苏剑林 学校丨中山大学硕士生 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言 本文作者在更别致的词向量模型:Simpler GloVe - Part 1一文中提出了一个新的类似 G ...
- 2.8 GloVe词向量-深度学习第五课《序列模型》-Stanford吴恩达教授
Glove 词向量 (GloVe Word Vectors) 你已经了解了几个计算词嵌入的算法,另一个在NLP社区有着一定势头的算法是GloVe算法,这个算法并不如Word2Vec或是Skip-Gra ...
- 更别致的词向量模型(一):simpler glove
如果问我哪个是最方便.最好用的词向量模型,我觉得应该是word2vec,但如果问我哪个是最漂亮的词向量模型,我不知道,我觉得各个模型总有一些不足的地方.且不说试验效果好不好(这不过是评测指标的问题), ...
- PaperWeekly 第52期 | 更别致的词向量模型:Simpler GloVe - Part 1
作者丨苏剑林 学校丨中山大学硕士生 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言 如果问我哪个是最方便.最好用的词向量模型,我觉得应该是 word2vec,但如果问我哪个是最漂亮的词向 ...
最新文章
- 在linux 下配置firewalld
- 3天html自学教程,html自学教程(八)html5基础
- js 层 分页显示选择用户名
- 07 | 卷积神经网络:给你的模型一双可以看到世界的眼睛
- 用SecureCRT在windows和CentOS间上传下载文件
- 「分块系列」数列分块入门6 解题报告
- js 求数组中最小值
- 【免费分享】全新DHPST分销系统/YEP分销/云主机分销系统源码
- H5页面使用js生成二维码
- wp/wordpress 自定义模板调用函数
- 爬取华为手机数据(六)
- Excel 中根据一列查询其他列中的值
- matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
- NFT - 2022年科技圈新宠
- 51单片机生日快乐歌c语言,51单片机实现生日快乐歌
- Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载
- 如何在visual studio下编译zxing cpp,以及zxing c++的使用
- Ubuntu16.04安装与彻底卸载docker(亲测有效)
- 关于linux下raid的设备文件和格式化
- VS2019 C1083 无法打开包括文件: “QSqlDatabase”