文章

08 GloVe 词向量(GloVe Word Vectors)

08 GloVe 词向量(GloVe Word Vectors)

这一节在讲什么

  这一节讲另一种经典词向量算法:GloVe

  它和 Word2Vec 的不同点在于:

它更直接利用“词与词共现次数”这个全局统计信息。

GloVe 的直觉

  设:

\[X_{ij}\]

  表示单词 $i$ 和单词 $j$ 在语料中彼此接近时的共现次数。

  如果两个词经常出现在相近位置,说明它们有更强关系。

  所以 GloVe 想做的是:

直接让词向量去拟合这些共现统计。

课程里的目标函数

  GloVe 的优化目标写成:

\[\min \sum_{i=1}^{V} \sum_{j=1}^{V} f(X_{ij})\left(\theta_i^T e_j + b_i + b'_j - \log X_{ij}\right)^2\]

  这个式子看起来长,但意思并不复杂。

  它在说:

  • 用词向量内积 $\theta_i^T e_j$
  • 再加一些偏置项
  • 去逼近 $\log X_{ij}$

  也就是让“向量关系”能解释“共现频率”。

为什么取对数

  因为共现次数 $X_{ij}$ 的范围通常非常大。

  • 高频词对可能出现很多很多次
  • 低频词对可能只出现几次

  取:

\[\log X_{ij}\]

  可以把尺度压缩得更稳定。

为什么还要乘权重函数 $f(X_{ij})$

  因为直接使用所有共现计数会有两个问题:

  1. $X_{ij}=0$ 时,$\log 0$ 没定义
  2. 高频词如 theofis 会支配训练

  所以 GloVe 加一个权重函数:

\[f(X_{ij})\]

  它的作用是:

  • 对出现 0 次或极少次的词对降低影响
  • 对超高频词对也别给过大权重

一个有趣的点:参数是对称的

  GloVe 里:

  • $\theta_i$
  • $e_j$

  角色是比较对称的。

  因此课程里提到,训练完后常见做法是把两套向量取平均,得到最终词向量:

\[e_w^{(\mathrm{final})} = \frac{e_w + \theta_w}{2}\]

课程还强调了一个重要思想

  虽然我们一开始会把某些维度想象成:

  • Gender
  • Royal
  • Age
  • Food

  但真实训练出来的词向量维度往往不具备这么直观的单维解释。

  因为只要存在可逆线性变换 $A$,就有:

\[(A\theta_i)^T (A^{-T}e_j) = \theta_i^T e_j\]

  这意味着:

词向量坐标轴可以旋转、拉伸、混合,但它表达的关系仍然成立。

  所以不要强求“第 17 维一定表示性别”。

  真正重要的是整体几何结构,而不是某一维的名字。

小白怎么理解 GloVe 和 Word2Vec 的差别

  可以粗略理解成:

  • Word2Vec 更像通过“预测任务”间接学关系
  • GloVe 更像直接拿“共现统计表”来拟合关系

  一个偏预测式,一个偏统计式。

这一节最该记住的公式

共现计数

\[X_{ij}\]

GloVe 目标函数

\[\min \sum_{i=1}^{V} \sum_{j=1}^{V} f(X_{ij})\left(\theta_i^T e_j + b_i + b'_j - \log X_{ij}\right)^2\]

最终向量常见写法

\[e_w^{(\mathrm{final})} = \frac{e_w + \theta_w}{2}\]

线性变换不改变内积结构

\[(A\theta_i)^T (A^{-T}e_j) = \theta_i^T e_j\]

这一节最该记住的要点

要点 1:GloVe 直接利用全局共现统计

  这是它与 Word2Vec 的主要区别。

要点 2:核心目标是让向量关系拟合 $\log X_{ij}$

  所以它本质是一个加权最小二乘问题。

要点 3:权重函数 $f(X_{ij})$ 很关键

  它处理零计数和高频词压制问题。

要点 4:词向量各维度不一定可直接解释

  重要的是整体几何结构,而不是单轴语义。

这一节一句话总结

  GloVe 的核心,是直接用词对共现次数构造一个加权回归目标,让词向量的内积结构去拟合词与词在大语料中的统计关系。

本文由作者按照 CC BY 4.0 进行授权