上下文窗口的词共现可以携带丰富的语义信息。
例如,在一个大型语料库中,“固体”比“气体”更有可能与“冰”共现,但“气体”一词与“蒸汽”的共现频率可能比“冰”出现的频率更高。
此外,可以预先计算此类共现的全局预料库统计数据:这可提供训练效率
为了利用整个语料库中的统计信息进行词嵌入,让我们首先的跳远模型,但是使用全局预料库统计(如共现计数)来解释它
带全局语料统计的跳元模型
用qij表示词wj的条件概率P(wj∣wi),在跳元模型中给定词wi,我们有:
qij=∑k∈Vexp(uk⊤vi)exp(uj⊤vi),
其中,对于任意索引i,j,向量vi和uj分别表示词wi作为中心词和词wj作为上下文词,且V=0,1,…,∣V∣−1是词表的索引集。
考虑词wi可能在语料库中出现多次。在整个语料库中,所有以wj为中心词的上下文词形成一个词索引的多重集Ci,该索引允许同一元素的多个实例。对于任何元素,其实例数为其重数。
举例说明,假设词wi在语料库中出现两次,并且在两个上下文窗口中以wj为中心词的上下文词索引是{k,j,m,k}和 {k,l,k,j}。
因此,多重集Ci={j,j,k,k,k,k,l,m},其中元素j,k,l,m的重数分别为2, 4, 1, 1。
现在,让我们将多重集Ci中的元素的重数表示为xij。
这是词wj(作为上下文词)和词wi(作为中心词)在整个语料库的同一上下文窗口中的全局共现计数。
使用这样的全局语料库统计,跳元模型的损失函数等价于:−∑i∈V∑j∈Vxijlogqij.
我们用xi表示上下文窗口中的所有上下文词的数量,其中wi作为它们的中心词出现,这相当于∣Ci∣。设pij为用于生成上下文词wj的条件概率xij/xi。
给定中心词wi,前公式可以重写为:−∑i∈Vxi∑j∈Vpijlogqij.其中,∑j∈Vpijlogqij计算全局语料统计中的条件分布pij和模型预测的条件分布qij的交叉熵。如上所述,这一损失也按xi加权。其中最小化损失将使预测的条件分布接近全局语料统计中的条件分布。
虽然交叉熵损失函数通常用于测量概率分布之间的距离,但在这里可能不是一个好的选择。
一方面,正如我们在近似训练中提到的,规范qij的优化存在于整个词表的求和,这在计算上可能非常昂贵。
另一方面,来自大型语料库的大量罕见事件往往被交叉熵损失摊薄,从而低估了对多的频次。
GloVe模型
有鉴于此,GloVe 模型基于平方损失 (Pennington et al., 2014) 对跳元模型做了三个修改:
使用变量 pij′=xij 和 qij=exp(uj⊤vi) 而非概率分布,并取两者的对数。所以平方损失项是logp′ij−logqij)2=(uj⊤vi−logxij)2
为每个词 wi 添加两个标量模型参数:中心词偏置 bi 和上下文词偏置 ci。
用权重函数 h(xij) 替换每个损失项的权重,其中 h(x) 在 [0,1] 的间隔内递增。
整合代码,训练 GloVe 是为了尽量降低以下损失函数:
∑i∈V∑j∈Vh(xij)(uj⊤vi+bi+cj−logxij)2.
对于权重函数,建议的选择是:
当 x<c (例如 c=100) 时,h(x)=(x/c)α (例如 α=0.75);否则 h(x)=1。在这种情况下,由于 h(0)=0,为了提高计算效率,可以省略任意 xij=0 的平方损失项。例如,当使用小批量随机梯度下降训练时,在每次迭代中,我们随机抽样一小批量非零的 xij 来计算梯度并更新模型参数。注意,这些非零的 xij 是预先计算的全局语料库统计数据;因此,该模型 GloVe 被称为全局向量。
应该强调的是,当词 wi 出现在词 wj 的上下文窗口时,词 wj 也出现在词 wi 的上下文窗口。因此,xij=xji。与拟合非对称条件概率 pij 的 word2vec 不同,GloVe 拟合对称概率 logxij。因此,在 GloVe 模型中,任意词的中心向量和上下文向量在数学上是等价的。
但在实际应用中,由于初始化值不同,同一个词经过训练后,在这两个向量中可能得到不同的值:GloVe 将它们相加作为输出向量。
从条件概率比值理解GloVe模型
我们也可以从另一个角度来理解GloVe模型。设 pij=P(wj∣wi) 为生成上下文词 wj 的条件概率,给定 wi 作为语料库中的中心词。tab_glove
根据大量语料库的统计数据,列出了给定单词 “ice” 和 “steam” 的共现概率及其比值。
大型语料库中的词-词共现概率及其比值(根据 (Pennington et al., 2014) 中的表1改编)
从 \texttt{tab_glove} 中, 我们可以观察到以下几点:
对于与 “ice” 相关但与 “steam” 无关的单词 wk,例如 wk=solid,我们预计会有更大的共现概率比值, 例如 8.9%。
对于与 “steam” 相关但与 “ice” 无关的单词 wk,例如 wk=gas,我们预计较小的共现概率比值, 例如 0.85%。
对于同时与 “ice” 和 “steam” 相关的单词 wk,例如 wk=water,我们预计其共现概率的比值接近 1, 例如 1.36。
对于与 “ice” 和 “steam” 都不相关的单词 wk,例如 wk=fashion,我们预计其共现概率的比值接近 1, 例如 0.96。
由此可见, 共现概率的比值能够直观地表达词与词之间的关系。因此, 我们可以设计三个词向量的函数来拟合这个比值。对于共现概率 pij/pik 的比值,其中 wi 是中心词, wj 和 wk 是上下文词, 我们希望使用某个函数 f 来拟合该比值:f(uj,uk,vi)≈pikpij
在 f 的许多可能的设计中, 我们只在以下几点中选择了一个合理的选择。因为共现概率的比值是标量, 所以我们要求 f 是标量函数, 例如
f(uj,uk,vi)=f((uj−uk)⊤vi)
在 (14.5.5) 中交换词索引 j 和 k, 它必须保持 f(x)f(−x)=1, 所以一种可能性是 f(x)=exp(x), 即:
f(uj,uk,vi)=exp(uk⊤vi)exp(uj⊤vi)≈pikpij
现在让我们选择 exp(uj⊤vi)≈αpij,其中α是常数。将 pij=xij/xi 代入, 取两边的对数得到
uj⊤vi≈logα+logxij−logxi
我们可以使用附加的偏置项来拟合 −logα+logxi, 如中心词偏置 bi 和上下文词偏置 cj,因此:
uj⊤vi+bi+cj∼logxij
通过对加权平方误差的度量, 得到了 (14.5.4) 的 GloVe 损失函数。
Last updated