求词向量的两类主要方法:
Glove
设有共现矩阵 X X X,其中 X i j X_{i j} Xij表示词 j j j在词 i i i的上下文中出现的频次。令 X i = Σ k X i k X_{i}=\Sigma_{k} X_{i k} Xi=ΣkXik表示所有在词 i i i的上下文中出现过的词的总次数,则词 j j j在词 i i i的上下文中出现的概率为: P i j = P ( w j ∣ w i ) = X i j X i P_{i j}=P\left(w_{j} | w_{i}\right)=\frac{X_{i j}}{X_{i}} Pij=P(wj∣wi)=XiXij
tips:生成共现矩阵需要遍历整个语料库,尽管这是一笔昂贵的计算,但好在它只需要做一次。
在skip-gram模型中使用的是softmax来计算词 j j j在词 i i i的上下文中出现的概率:
Q i j = exp ( u ⃗ j T v ⃗ i ) ∑ w = 1 W exp ( u ⃗ w T v ⃗ i ) Q_{i j}=\frac{\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)}{\sum_{w=1}^{W} \exp \left(\vec{u}_{w}^{T} \vec{v}_{i}\right)} Qij=∑w=1Wexp(uwTvi)exp(ujTvi)
训练的全局交叉熵可以由如下公式计算得到:
J = − ∑ i ∈ corpus ∑ j ∈ context ( i ) log Q i j J=-\sum_{i \in \text {corpus}} \sum_{ j \in \text {context}(i)} \log Q_{i j} J=−i∈corpus∑j∈context(i)∑logQij
把共现矩阵中的概率 P i j P_{i j} Pij 作为实际的标签,那么优化的过程可以转换为 Q i j Q_{i j} Qij 不断逼近 P i j P_{i j} Pij 的过程:
J = − ∑ i ∈ corpus ∑ j ∈ context ( i ) log ∣ Q i j P i j ∣ J=-\sum_{i \in \text {corpus}} \sum_{ j \in \text {context}(i)} \log |\frac{Q_{i j}}{P_{i j}}| J=−i∈corpus∑j∈context(i)∑log∣PijQij∣
这一过程可以用最小二乘目标函数来表示:
J = − ∑ i ∈ corpus ∑ j ∈ context ( i ) ( log Q i j − log P i j ) 2 J=-\sum_{i \in \text {corpus}} \sum_{ j \in \text {context}(i)} (\log Q_{i j} - \log P_{i j}) ^2 J=−i∈corpus∑j∈context(i)∑(logQij−logPij)2
由于在语料库中词 i i i和词 j j j同时出现的情况可能会多次出现,因此可以将相同的 i i i、 j j j对归到一块来计算总Loss:
J = ∑ i = 1 W ∑ j = 1 W X i ( log Q i j − log P i j ) 2 J =\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i} (\log Q_{i j} - \log P_{i j}) ^2 J=i=1∑Wj=1∑WXi(logQij−logPij)2
使用softmax的一个明显缺陷就是,概率分布 Q Q Q需要归一化,也就意味着需要在整个词汇表中做昂贵的加法计算。为了避免繁重的计算,可以不做归一化,令 P ^ i j = X i j \hat{P}_{i j}=X_{i j} P^ij=Xij, Q ^ i j = exp ( u ⃗ j T v ⃗ i ) \hat{Q}_{i j}=\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right) Q^ij=exp(ujTvi),则有:
J ^ = ∑ i = 1 W ∑ j = 1 W X i ( log P ^ i j − log Q ^ i j ) 2 = ∑ i = 1 W ∑ j = 1 W X i ( u ⃗ j T v ⃗ i − log X i j ) 2 \hat{J}=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\log \hat{P}_{i j}-\log \hat{Q}_{i j}\right)^{2} \\ =\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} J^=i=1∑Wj=1∑WXi(logP^ij−logQ^ij)2=i=1∑Wj=1∑WXi(ujTvi−logXij)2
通常还采用一个权重函数 f ( x ) = x 3 / 4 f(x)=x ^ {3 / 4} f(x)=x3/4来进一步优化权重 X i X{i} Xi,因为词频 X i j X{i j} Xij过高时,权重不应该过分地增大。
为什么是 3/4?下面的一些例子可能让你有一些直观的了解:
i s : 0. 9 3 / 4 = 0.92 is: 0.9 ^ {3 / 4}=0.92 is:0.93/4=0.92
C o n s t i t u t i o n : 0.0 9 3 / 4 = 0.16 Constitution: 0.09 ^ {3 / 4}=0.16 Constitution:0.093/4=0.16
B o m b a s t i c : 0.0 1 3 / 4 = 0.032 Bombastic: 0.01 ^ {3 / 4}=0.032 Bombastic:0.013/4=0.032
“Bombastic”现在被抽样的概率是之前的三倍,而“is”只比之前的才提高了一点点。