全局共现与局部预测之间#
Word2Vec 在局部窗口上做预测,训练快,但没有直接利用整个语料的全局统计;共现矩阵与 SVD 利用全局统计,却要显式构造并分解 V×V 的矩阵。
GloVe(Global Vectors)试图结合两者:用全局共现统计构造训练目标,用类似预测模型的最小二乘方式学习词向量。它不直接做 SVD,而是让词向量的点积去拟合共现次数的对数。
从共现概率的比值出发#
设 Cij 是词 j 出现在词 i 上下文中的次数(可按距离加权),Ci=∑jCij,共现概率为
Pij=P(j∣i)=CiCij单独看 Pij 受词频影响很大,但两个共现概率的比值可以过滤掉这种影响。以经典的“冰”和“蒸汽”为例:
| 上下文词 k | P(k∣ice) | P(k∣steam) | 比值 |
|---|
| solid | 1.9×10−4 | 2.2×10−5 | 8.9 |
| gas | 6.6×10−5 | 7.8×10−4 | 0.085 |
| water | 3.0×10−3 | 2.2×10−3 | 1.36 |
| fashion | 1.7×10−5 | 1.8×10−5 | 0.96 |
“solid”在 ice 附近更常见,“gas”在 steam 附近更常见,而“water”和“fashion”对两者没有区分度。比值接近 1 表示该上下文词与两个中心词都无关或都相关;比值远离 1 表示它能区分两者。GloVe 希望词向量能重现这种比值结构。
设词 i 的中心词向量为 ui,上下文词向量为 vj,则这个结构可以写成
F(ui,uk,vj)≈PkjPij把 F 取为向量差与点积的组合,经过对称化推导,可以得到
uiTvj+bi+cj≈logCij其中:
- bi:吸收 logCi;
- cj:保证交换 i,j 时形式对称。
这个式子说明:两个词向量的点积(加偏置)应当拟合它们共现次数的对数。
加权最小二乘目标#
把上面的近似写成平方损失,并对所有共现对求和:
J=i=1∑Vj=1∑Vf(Cij)(uiTvj+bi+cj−logCij)2权重函数 f(Cij) 用来处理不同频率的共现对:
f(x)={(x/xmax)α,1,x<xmaxx≥xmax典型取值为 α=0.75,xmax=100。
- Cij=0 时 f(0)=0,未共现的词对不参与损失;
- 低频共现对统计噪声大,权重相应较小;
- 高频共现对权重截断为 1,防止“的”“the”这类词对主导训练。
α=0.75 在“不过度信任低频统计”和“不让高频词对淹没训练”之间折中。
训练与词向量#
GloVe 用 AdaGrad 对上述目标做随机梯度下降。由于共现矩阵对称,词 i 作为中心词和上下文词的向量在理论上应当一致,但随机初始化和训练过程会让它们不同。常见做法是取两者之和:
ei=ui+vi作为最终词向量。偏置项只用于拟合,训练完成后丢弃。
与 word2vec、SVD 的关系#
| 方面 | SVD | word2vec | GloVe |
|---|
| 统计来源 | 全局共现矩阵 | 局部窗口预测 | 全局共现矩阵 |
| 训练方式 | 矩阵分解 | 随机梯度下降 | 加权最小二乘 |
| 目标 | 低秩近似 | 上下文似然 | 拟合 logCij |
| 计算特点 | 需构造完整矩阵 | 可流式采样 | 需构造完整矩阵 |
GloVe 可以看作“带加权的最小二乘矩阵分解”,也可以看作一种隐式的共现统计模型。它与 word2vec 在多数任务上效果接近:word2vec 的局部窗口对稀有词更友好,GloVe 的全局统计在词类比等任务上略占优势。
- 需要先统计全局共现矩阵,内存开销随 V2 增长,构造成本高;
- 新词加入后,严格来说需要更新共现统计并重新训练;
- 仍然是静态词向量,无法区分多义词;
- 词表外的词没有表示,需要依靠子词方法(见 子词分词)。