让我们先回顾一下word2vec中的跳字模型。将跳字模型中使用softmax运算表达的条件概率10.5 全局向量的词嵌入(GloVe) - 图1#card=math&code=P%28wj%5Cmid%20w_i%29)记作![](https://g.yuque.com/gr/latex?q%7Bij%7D#card=math&code=q_%7Bij%7D),即

10.5 全局向量的词嵌入(GloVe) - 图2%7D%7B%20%5Csum%7Bk%20%5Cin%20%5Cmathcal%7BV%7D%7D%20%5Ctext%7Bexp%7D(%5Cboldsymbol%7Bu%7D_k%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i)%7D%2C%0A#card=math&code=q%7Bij%7D%3D%5Cfrac%7B%5Cexp%28%5Cboldsymbol%7Bu%7Dj%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%29%7D%7B%20%5Csum%7Bk%20%5Cin%20%5Cmathcal%7BV%7D%7D%20%5Ctext%7Bexp%7D%28%5Cboldsymbol%7Bu%7D_k%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%29%7D%2C%0A)

其中10.5 全局向量的词嵌入(GloVe) - 图310.5 全局向量的词嵌入(GloVe) - 图4分别是索引为10.5 全局向量的词嵌入(GloVe) - 图5的词10.5 全局向量的词嵌入(GloVe) - 图6作为中心词和背景词时的向量表示,10.5 全局向量的词嵌入(GloVe) - 图7为词典索引集。

对于词10.5 全局向量的词嵌入(GloVe) - 图8,它在数据集中可能多次出现。我们将每一次以它作为中心词的所有背景词全部汇总并保留重复元素,记作多重集(multiset)10.5 全局向量的词嵌入(GloVe) - 图9。一个元素在多重集中的个数称为该元素的重数(multiplicity)。举例来说,假设词10.5 全局向量的词嵌入(GloVe) - 图10在数据集中出现2次:文本序列中以这2个10.5 全局向量的词嵌入(GloVe) - 图11作为中心词的背景窗口分别包含背景词索引10.5 全局向量的词嵌入(GloVe) - 图1210.5 全局向量的词嵌入(GloVe) - 图13。那么多重集10.5 全局向量的词嵌入(GloVe) - 图14,其中元素1的重数为2,元素2的重数为4,元素3和5的重数均为1。将多重集10.5 全局向量的词嵌入(GloVe) - 图15中元素10.5 全局向量的词嵌入(GloVe) - 图16的重数记作10.5 全局向量的词嵌入(GloVe) - 图17:它表示了整个数据集中所有以10.5 全局向量的词嵌入(GloVe) - 图18为中心词的背景窗口中词10.5 全局向量的词嵌入(GloVe) - 图19的个数。那么,跳字模型的损失函数还可以用另一种方式表达:

10.5 全局向量的词嵌入(GloVe) - 图20

我们将数据集中所有以词10.5 全局向量的词嵌入(GloVe) - 图21为中心词的背景词的数量之和10.5 全局向量的词嵌入(GloVe) - 图22记为10.5 全局向量的词嵌入(GloVe) - 图23,并将以10.5 全局向量的词嵌入(GloVe) - 图24为中心词生成背景词10.5 全局向量的词嵌入(GloVe) - 图25的条件概率10.5 全局向量的词嵌入(GloVe) - 图26记作10.5 全局向量的词嵌入(GloVe) - 图27。我们可以进一步改写跳字模型的损失函数为

10.5 全局向量的词嵌入(GloVe) - 图28

上式中,10.5 全局向量的词嵌入(GloVe) - 图29计算的是以10.5 全局向量的词嵌入(GloVe) - 图30为中心词的背景词条件概率分布10.5 全局向量的词嵌入(GloVe) - 图31和模型预测的条件概率分布10.5 全局向量的词嵌入(GloVe) - 图32的交叉熵,且损失函数使用所有以词10.5 全局向量的词嵌入(GloVe) - 图33为中心词的背景词的数量之和来加权。最小化上式中的损失函数会令预测的条件概率分布尽可能接近真实的条件概率分布。

然而,作为常用损失函数的一种,交叉熵损失函数有时并不是好的选择。一方面,正如我们在10.2节(近似训练)中所提到的,令模型预测10.5 全局向量的词嵌入(GloVe) - 图34成为合法概率分布的代价是它在分母中基于整个词典的累加项。这很容易带来过大的计算开销。另一方面,词典中往往有大量生僻词,它们在数据集中出现的次数极少。而有关大量生僻词的条件概率分布在交叉熵损失函数中的最终预测往往并不准确。

10.5.1 GloVe模型

鉴于此,作为在word2vec之后提出的词嵌入模型,GloVe模型采用了平方损失,并基于该损失对跳字模型做了3点改动 [1]:

  1. 使用非概率分布的变量10.5 全局向量的词嵌入(GloVe) - 图3510.5 全局向量的词嵌入(GloVe) - 图36#card=math&code=q%27%7Bij%7D%3D%5Cexp%28%5Cboldsymbol%7Bu%7D_j%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%29),并对它们取对数。因此,平方损失项是![](https://g.yuque.com/gr/latex?%5Cleft(%5Clog%5C%2Cp%7Bij%7D%20-%20%5Clog%5C%2Cq’%7Bij%7D%5Cright)%5E2%20%3D%20%5Cleft(%5Cboldsymbol%7Bu%7D_j%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%20-%20%5Clog%5C%2Cx%7Bij%7D%5Cright)%5E2#card=math&code=%5Cleft%28%5Clog%5C%2Cp%27%7Bij%7D%20-%20%5Clog%5C%2Cq%27%7Bij%7D%5Cright%29%5E2%20%3D%20%5Cleft%28%5Cboldsymbol%7Bu%7Dj%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%20-%20%5Clog%5C%2Cx%7Bij%7D%5Cright%29%5E2)。
  2. 为每个词10.5 全局向量的词嵌入(GloVe) - 图37增加两个为标量的模型参数:中心词偏差项10.5 全局向量的词嵌入(GloVe) - 图38和背景词偏差项10.5 全局向量的词嵌入(GloVe) - 图39
  3. 将每个损失项的权重替换成函数10.5 全局向量的词嵌入(GloVe) - 图40#card=math&code=h%28x_%7Bij%7D%29)。权重函数10.5 全局向量的词嵌入(GloVe) - 图41#card=math&code=h%28x%29)是值域在10.5 全局向量的词嵌入(GloVe) - 图42的单调递增函数。

如此一来,GloVe模型的目标是最小化损失函数

10.5 全局向量的词嵌入(GloVe) - 图43%20%5Cleft(%5Cboldsymbol%7Bu%7Dj%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%20%2B%20b_i%20%2B%20c_j%20-%20%5Clog%5C%2Cx%7Bij%7D%5Cright)%5E2.%0A#card=math&code=%5Csum%7Bi%5Cin%5Cmathcal%7BV%7D%7D%20%5Csum%7Bj%5Cin%5Cmathcal%7BV%7D%7D%20h%28x%7Bij%7D%29%20%5Cleft%28%5Cboldsymbol%7Bu%7D_j%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%20%2B%20b_i%20%2B%20c_j%20-%20%5Clog%5C%2Cx%7Bij%7D%5Cright%29%5E2.%0A)

其中权重函数10.5 全局向量的词嵌入(GloVe) - 图44#card=math&code=h%28x%29)的一个建议选择是:当10.5 全局向量的词嵌入(GloVe) - 图45时(如10.5 全局向量的词嵌入(GloVe) - 图46),令10.5 全局向量的词嵌入(GloVe) - 图47%20%3D%20(x%2Fc)%5E%5Calpha#card=math&code=h%28x%29%20%3D%20%28x%2Fc%29%5E%5Calpha)(如10.5 全局向量的词嵌入(GloVe) - 图48),反之令10.5 全局向量的词嵌入(GloVe) - 图49%20%3D%201#card=math&code=h%28x%29%20%3D%201)。因为10.5 全局向量的词嵌入(GloVe) - 图50%3D0#card=math&code=h%280%29%3D0),所以对于10.5 全局向量的词嵌入(GloVe) - 图51的平方损失项可以直接忽略。当使用小批量随机梯度下降来训练时,每个时间步我们随机采样小批量非零10.5 全局向量的词嵌入(GloVe) - 图52,然后计算梯度来迭代模型参数。这些非零10.5 全局向量的词嵌入(GloVe) - 图53是预先基于整个数据集计算得到的,包含了数据集的全局统计信息。因此,GloVe模型的命名取“全局向量”(Global Vectors)之意。

需要强调的是,如果词10.5 全局向量的词嵌入(GloVe) - 图54出现在词10.5 全局向量的词嵌入(GloVe) - 图55的背景窗口里,那么词10.5 全局向量的词嵌入(GloVe) - 图56也会出现在词10.5 全局向量的词嵌入(GloVe) - 图57的背景窗口里。也就是说,10.5 全局向量的词嵌入(GloVe) - 图58。不同于word2vec中拟合的是非对称的条件概率10.5 全局向量的词嵌入(GloVe) - 图59,GloVe模型拟合的是对称的10.5 全局向量的词嵌入(GloVe) - 图60。因此,任意词的中心词向量和背景词向量在GloVe模型中是等价的。但由于初始化值的不同,同一个词最终学习到的两组词向量可能不同。当学习得到所有词向量以后,GloVe模型使用中心词向量与背景词向量之和作为该词的最终词向量。

10.5.2 从条件概率比值理解GloVe模型

我们还可以从另外一个角度来理解GloVe模型。沿用本节前面的符号,10.5 全局向量的词嵌入(GloVe) - 图61#card=math&code=P%28wj%20%5Cmid%20w_i%29)表示数据集中以10.5 全局向量的词嵌入(GloVe) - 图62为中心词生成背景词10.5 全局向量的词嵌入(GloVe) - 图63的条件概率,并记作![](https://g.yuque.com/gr/latex?p%7Bij%7D#card=math&code=p_%7Bij%7D)。作为源于某大型语料库的真实例子,以下列举了两组分别以“ice”(冰)和“steam”(蒸汽)为中心词的条件概率以及它们之间的比值 [1]:

10.5 全局向量的词嵌入(GloVe) - 图64= “solid” “gas” “water” “fashion”
10.5 全局向量的词嵌入(GloVe) - 图65 “ice” 10.5 全局向量的词嵌入(GloVe) - 图66#card=math&code=%29) 0.00019 0.000066 0.003 0.000017
10.5 全局向量的词嵌入(GloVe) - 图67 “steam” 10.5 全局向量的词嵌入(GloVe) - 图68#card=math&code=%29) 0.000022 0.00078 0.0022 0.000018
10.5 全局向量的词嵌入(GloVe) - 图69 8.9 0.085 1.36 0.96

我们可以观察到以下现象。

  • 对于与“ice”相关而与“steam”不相关的词10.5 全局向量的词嵌入(GloVe) - 图70,如10.5 全局向量的词嵌入(GloVe) - 图71“solid”(固体),我们期望条件概率比值较大,如上表最后一行中的值8.9;
  • 对于与“ice”不相关而与“steam”相关的词10.5 全局向量的词嵌入(GloVe) - 图72,如10.5 全局向量的词嵌入(GloVe) - 图73“gas”(气体),我们期望条件概率比值较小,如上表最后一行中的值0.085;
  • 对于与“ice”和“steam”都相关的词10.5 全局向量的词嵌入(GloVe) - 图74,如10.5 全局向量的词嵌入(GloVe) - 图75“water”(水),我们期望条件概率比值接近1,如上表最后一行中的值1.36;
  • 对于与“ice”和“steam”都不相关的词10.5 全局向量的词嵌入(GloVe) - 图76,如10.5 全局向量的词嵌入(GloVe) - 图77“fashion”(时尚),我们期望条件概率比值接近1,如上表最后一行中的值0.96。

由此可见,条件概率比值能比较直观地表达词与词之间的关系。我们可以构造一个词向量函数使它能有效拟合条件概率比值。我们知道,任意一个这样的比值需要3个词10.5 全局向量的词嵌入(GloVe) - 图7810.5 全局向量的词嵌入(GloVe) - 图7910.5 全局向量的词嵌入(GloVe) - 图80。以10.5 全局向量的词嵌入(GloVe) - 图81作为中心词的条件概率比值为10.5 全局向量的词嵌入(GloVe) - 图82。我们可以找一个函数,它使用词向量来拟合这个条件概率比值

10.5 全局向量的词嵌入(GloVe) - 图83%20%5Capprox%20%5Cfrac%7Bp%7Bij%7D%7D%7Bp%7Bik%7D%7D.%0A#card=math&code=f%28%5Cboldsymbol%7Bu%7Dj%2C%20%5Cboldsymbol%7Bu%7D_k%2C%20%7B%5Cboldsymbol%7Bv%7D%7D_i%29%20%5Capprox%20%5Cfrac%7Bp%7Bij%7D%7D%7Bp_%7Bik%7D%7D.%0A)

这里函数10.5 全局向量的词嵌入(GloVe) - 图84可能的设计并不唯一,我们只需考虑一种较为合理的可能性。注意到条件概率比值是一个标量,我们可以将10.5 全局向量的词嵌入(GloVe) - 图85限制为一个标量函数:10.5 全局向量的词嵌入(GloVe) - 图86%20%3D%20f%5Cleft((%5Cboldsymbol%7Bu%7D_j%20-%20%5Cboldsymbol%7Bu%7D_k)%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright)#card=math&code=f%28%5Cboldsymbol%7Bu%7D_j%2C%20%5Cboldsymbol%7Bu%7D_k%2C%20%7B%5Cboldsymbol%7Bv%7D%7D_i%29%20%3D%20f%5Cleft%28%28%5Cboldsymbol%7Bu%7D_j%20-%20%5Cboldsymbol%7Bu%7D_k%29%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright%29)。交换索引10.5 全局向量的词嵌入(GloVe) - 图8710.5 全局向量的词嵌入(GloVe) - 图88后可以看到函数10.5 全局向量的词嵌入(GloVe) - 图89应该满足10.5 全局向量的词嵌入(GloVe) - 图90f(-x)%3D1#card=math&code=f%28x%29f%28-x%29%3D1),因此一种可能是10.5 全局向量的词嵌入(GloVe) - 图91%3D%5Cexp(x)#card=math&code=f%28x%29%3D%5Cexp%28x%29),于是

10.5 全局向量的词嵌入(GloVe) - 图92%20%3D%20%5Cfrac%7B%5Cexp%5Cleft(%5Cboldsymbol%7Bu%7Dj%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright)%7D%7B%5Cexp%5Cleft(%5Cboldsymbol%7Bu%7D_k%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright)%7D%20%5Capprox%20%5Cfrac%7Bp%7Bij%7D%7D%7Bp%7Bik%7D%7D.%0A#card=math&code=f%0A%28%5Cboldsymbol%7Bu%7D_j%2C%20%5Cboldsymbol%7Bu%7D_k%2C%20%7B%5Cboldsymbol%7Bv%7D%7D_i%29%20%3D%20%5Cfrac%7B%5Cexp%5Cleft%28%5Cboldsymbol%7Bu%7D_j%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright%29%7D%7B%5Cexp%5Cleft%28%5Cboldsymbol%7Bu%7D_k%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright%29%7D%20%5Capprox%20%5Cfrac%7Bp%7Bij%7D%7D%7Bp_%7Bik%7D%7D.%0A)

满足最右边约等号的一种可能是10.5 全局向量的词嵌入(GloVe) - 图93%20%5Capprox%20%5Calpha%20p%7Bij%7D#card=math&code=%5Cexp%5Cleft%28%5Cboldsymbol%7Bu%7D_j%5E%5Ctop%20%7B%5Cboldsymbol%7Bv%7D%7D_i%5Cright%29%20%5Capprox%20%5Calpha%20p%7Bij%7D),这里10.5 全局向量的词嵌入(GloVe) - 图94是一个常数。考虑到10.5 全局向量的词嵌入(GloVe) - 图95,取对数后10.5 全局向量的词嵌入(GloVe) - 图96。我们使用额外的偏差项来拟合10.5 全局向量的词嵌入(GloVe) - 图97,例如,中心词偏差项10.5 全局向量的词嵌入(GloVe) - 图98和背景词偏差项10.5 全局向量的词嵌入(GloVe) - 图99

10.5 全局向量的词嵌入(GloVe) - 图100.%0A#card=math&code=%5Cboldsymbol%7Bu%7Dj%5E%5Ctop%20%5Cboldsymbol%7Bv%7D_i%20%2B%20b_i%20%2B%20c_j%20%5Capprox%20%5Clog%28x%7Bij%7D%29.%0A)

对上式左右两边取平方误差并加权,我们可以得到GloVe模型的损失函数。

小结

  • 在有些情况下,交叉熵损失函数有劣势。GloVe模型采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。
  • 任意词的中心词向量和背景词向量在GloVe模型中是等价的。

参考文献

[1] Pennington, J., Socher, R., & Manning, C. (2014). Glove: Global vectors for word representation. In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP) (pp. 1532-1543).


注:本节与原书完全相同,原书传送门