14.5. 全局向量的词嵌入(GloVe)¶ Open the notebook in SageMaker Studio Lab
上下文窗口内的词共现可以携带丰富的语义信息。例如,在一个大型语料库中,“固体”比“气体”更有可能与“冰”共现,但“气体”一词与“蒸汽”的共现频率可能比与“冰”的共现频率更高。此外,可以预先计算此类共现的全局语料库统计数据:这可以提高训练效率。为了利用整个语料库中的统计信息进行词嵌入,让我们首先回顾 14.1.3节中的跳元模型,但是使用全局语料库统计(如共现计数)来解释它。
14.5.1. 带全局语料统计的跳元模型¶
用
其中,对于任意索引
考虑词
现在,让我们将多重集
我们用
在
(14.5.3)中,
虽然交叉熵损失函数通常用于测量概率分布之间的距离,但在这里可能不是一个好的选择。一方面,正如我们在
14.2节中提到的,规范化
14.5.2. GloVe模型¶
有鉴于此,GloVe模型基于平方损失 (Pennington et al., 2014)对跳元模型做了三个修改:
使用变量
和 而非概率分布,并取两者的对数。所以平方损失项是 。为每个词
添加两个标量模型参数:中心词偏置 和上下文词偏置 。用权重函数
替换每个损失项的权重,其中 在 的间隔内递增。
整合代码,训练GloVe是为了尽量降低以下损失函数:
对于权重函数,建议的选择是:当
应该强调的是,当词
14.5.3. 从条件概率比值理解GloVe模型¶
我们也可以从另一个角度来理解GloVe模型。使用
14.5.1节中的相同符号,设tab_glove
根据大量语料库的统计数据,列出了给定单词“ice”和“steam”的共现概率及其比值。
大型语料库中的词-词共现概率及其比值(根据 (Pennington et al., 2014)中的表1改编)
solid |
gas |
water |
fashion |
|
---|---|---|---|---|
0.00019 |
0.000066 |
0.003 |
0.000017 |
|
0.000022 |
0.00078 |
0.0022 |
0.000018 |
|
8.9 |
0.085 |
1.36 |
0.96 |
从 tab_glove
中,我们可以观察到以下几点:
对于与“ice”相关但与“steam”无关的单词
,例如 ,我们预计会有更大的共现概率比值,例如8.9。对于与“steam”相关但与“ice”无关的单词
,例如 ,我们预计较小的共现概率比值,例如0.085。对于同时与“ice”和“steam”相关的单词
,例如 ,我们预计其共现概率的比值接近1,例如1.36.对于与“ice”和“steam”都不相关的单词
,例如 ,我们预计共现概率的比值接近1,例如0.96.
由此可见,共现概率的比值能够直观地表达词与词之间的关系。因此,我们可以设计三个词向量的函数来拟合这个比值。对于共现概率
在
现在让我们选择
14.5.4. 小结¶
诸如词-词共现计数的全局语料库统计可以来解释跳元模型。
交叉熵损失可能不是衡量两种概率分布差异的好选择,特别是对于大型语料库。GloVe使用平方损失来拟合预先计算的全局语料库统计数据。
对于GloVe中的任意词,中心词向量和上下文词向量在数学上是等价的。
GloVe可以从词-词共现概率的比率来解释。
14.5.5. 练习¶
如果词
和 在同一上下文窗口中同时出现,我们如何使用它们在文本序列中的距离来重新设计计算条件概率 的方法?提示:参见GloVe论文 (Pennington et al., 2014)的第4.2节。对于任何一个词,它的中心词偏置和上下文偏置在数学上是等价的吗?为什么?