1030 字
5 分钟
GloVe:全局共现与加权最小二乘

全局共现与局部预测之间#

Word2Vec 在局部窗口上做预测,训练快,但没有直接利用整个语料的全局统计;共现矩阵与 SVD 利用全局统计,却要显式构造并分解 V×VV \times V 的矩阵。

GloVe(Global Vectors)试图结合两者:用全局共现统计构造训练目标,用类似预测模型的最小二乘方式学习词向量。它不直接做 SVD,而是让词向量的点积去拟合共现次数的对数。

从共现概率的比值出发#

设 CijC_{ij} 是词 jj 出现在词 ii 上下文中的次数(可按距离加权),Ci=∑jCijC_i = \sum_j C_{ij},共现概率为

Pij=P(j∣i)=CijCiP_{ij} = P(j \mid i) = \frac{C_{ij}}{C_i}

单独看 PijP_{ij} 受词频影响很大,但两个共现概率的比值可以过滤掉这种影响。以经典的“冰”和“蒸汽”为例:

上下文词 kkP(k∣ice)P(k \mid \text{ice})P(k∣steam)P(k \mid \text{steam})比值
solid1.9×10−41.9 \times 10^{-4}2.2×10−52.2 \times 10^{-5}8.9
gas6.6×10−56.6 \times 10^{-5}7.8×10−47.8 \times 10^{-4}0.085
water3.0×10−33.0 \times 10^{-3}2.2×10−32.2 \times 10^{-3}1.36
fashion1.7×10−51.7 \times 10^{-5}1.8×10−51.8 \times 10^{-5}0.96

“solid”在 ice 附近更常见,“gas”在 steam 附近更常见,而“water”和“fashion”对两者没有区分度。比值接近 1 表示该上下文词与两个中心词都无关或都相关;比值远离 1 表示它能区分两者。GloVe 希望词向量能重现这种比值结构。

设词 ii 的中心词向量为 ui\mathbf{u}_i,上下文词向量为 vj\mathbf{v}_j,则这个结构可以写成

F(ui,uk,vj)≈PijPkjF(\mathbf{u}_i, \mathbf{u}_k, \mathbf{v}_j) \approx \frac{P_{ij}}{P_{kj}}

把 FF 取为向量差与点积的组合,经过对称化推导,可以得到

uiTvj+bi+cj≈log⁡Cij\mathbf{u}_i^T \mathbf{v}_j + b_i + c_j \approx \log C_{ij}

其中:

  • bib_i:吸收 log⁡Ci\log C_i;
  • cjc_j:保证交换 i,ji,j 时形式对称。

这个式子说明:两个词向量的点积(加偏置)应当拟合它们共现次数的对数。

加权最小二乘目标#

把上面的近似写成平方损失,并对所有共现对求和:

J=∑i=1V∑j=1Vf(Cij)(uiTvj+bi+cj−log⁡Cij)2J = \sum_{i=1}^{V} \sum_{j=1}^{V} f(C_{ij}) \left( \mathbf{u}_i^T \mathbf{v}_j + b_i + c_j - \log C_{ij} \right)^2

权重函数 f(Cij)f(C_{ij}) 用来处理不同频率的共现对:

f(x)={(x/xmax⁡)α,x<xmax⁡1,x≥xmax⁡f(x) = \begin{cases} (x / x_{\max})^\alpha, & x < x_{\max} \\ 1, & x \ge x_{\max} \end{cases}

典型取值为 α=0.75\alpha = 0.75,xmax⁡=100x_{\max} = 100。

  • Cij=0C_{ij}=0 时 f(0)=0f(0)=0,未共现的词对不参与损失;
  • 低频共现对统计噪声大,权重相应较小;
  • 高频共现对权重截断为 1,防止“的”“the”这类词对主导训练。

α=0.75\alpha = 0.75 在“不过度信任低频统计”和“不让高频词对淹没训练”之间折中。

训练与词向量#

GloVe 用 AdaGrad 对上述目标做随机梯度下降。由于共现矩阵对称,词 ii 作为中心词和上下文词的向量在理论上应当一致,但随机初始化和训练过程会让它们不同。常见做法是取两者之和:

ei=ui+vi\mathbf{e}_i = \mathbf{u}_i + \mathbf{v}_i

作为最终词向量。偏置项只用于拟合,训练完成后丢弃。

与 word2vec、SVD 的关系#

方面SVDword2vecGloVe
统计来源全局共现矩阵局部窗口预测全局共现矩阵
训练方式矩阵分解随机梯度下降加权最小二乘
目标低秩近似上下文似然拟合 log⁡Cij\log C_{ij}
计算特点需构造完整矩阵可流式采样需构造完整矩阵

GloVe 可以看作“带加权的最小二乘矩阵分解”,也可以看作一种隐式的共现统计模型。它与 word2vec 在多数任务上效果接近:word2vec 的局部窗口对稀有词更友好,GloVe 的全局统计在词类比等任务上略占优势。

局限#

  • 需要先统计全局共现矩阵,内存开销随 V2V^2 增长,构造成本高;
  • 新词加入后,严格来说需要更新共现统计并重新训练;
  • 仍然是静态词向量,无法区分多义词;
  • 词表外的词没有表示,需要依靠子词方法(见 子词分词)。

相关阅读#

GloVe:全局共现与加权最小二乘
https://biscuit0613.github.io/posts/nlp/06-03-glove/
作者
Biscuit
发布于
2026-10-20
许可协议
CC BY-NC-SA 4.0
词向量基础:从 one-hot 到共现矩阵与 SVD
Word2Vec:Skip-gram、CBOW 与负采样