其他分享
首页 > 其他分享> > 详解GloVe词向量模型

详解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在定义的环境中(论文给的环境是以中心词为中心的左右10个单词区间)同时出现叫共现。什么是叫共现概率?
  我们定义 XXX为共现词频矩阵(共现二维矩阵),其中元素xijx_{ij}xij​为词jjj出现在词iii的环境的次数,令xi=kxikx_i=\sum_kx_{ik}xi​=∑k​xik​为任意词出现在iii的环境的次数,那么,Pij=P(ji)=xijxiP_{ij}=P(j|i)={x_{ij}\over x_{i}}Pij​=P(j∣i)=xi​xij​​
  为词jjj出现在词iii环境中的概率(这里以频率表概率),这一概率被称为词iii和词jjj的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。注意:在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。

2. 共现概率比

  接下来阐述为啥作者要提共现概率和共现概率比这种概念。下面是论文中给的一组数据:
共现概率比
  先看一下第一行数据,以iceiceice为中心词的环境中出现solidsolidsolid固体的概率是大于gasfashiongas、fashiongas、fashion的而且是小于waterwaterwater的,这是很合理的,对吧!因为有iceiceice的句子中出现solidwatersolid、watersolid、water的概率确实应当比gasfashiongas、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。
  因为作者发现用共现概率比也可以很好的体现词与词间的关联,所以glove希望设计一个与词向量相关的函数来表达共现概率比(glove思想),进而体现词间的关系。

3. 设计词向量函数

  想要表达共现概率比,这里涉及到的有三个词即i,j,ki,j,ki,j,k,它们对应的词向量我用vivjv~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​)=Pjk​Pik​​ (1)。前面我说过,任意两个词的共现概率可以用语料库事先统计计算得到,那这里的给定三个词,是不是也可以确定共现概率比啊。这个比值可以作为标签,我们可以设计一个模型通过训练的方式让映射值逼近这个确定的共现概率比。很明显这是个回归问题,我们可以用均方误差作为losslossloss。明显地,设计这个函数或者这个模型当然有很多途径,我们来看看作者是怎么设计的。
  我们可以发现公式(1)等号右侧结果是个标量,左边是个关于向量的函数,如何将函数变成标量。于是作者这么设计:f((vivj)Tv~k)=PikPjkf((v_i-v_j)^T\widetilde{v}_k)={P_{ik}\over P_{jk}}f((vi​−vj​)Tvk​)=Pjk​Pik​​ (2)即向量做差再点积再映射到目标。再次强调,这只是一种设计,它没有啥依据合理就行。于是乎:
在这里插入图片描述
  于是,glove模型的损失函数就是:
reference:
[1] 来b站搞学习
[2] GloVe论文

标签:共现,中心词,下共现,语境,iceiceice,GloVe,详解,概率,向量
来源: https://blog.csdn.net/buchidanhuang/article/details/98471741