GloVe 目标函数推导

分类: 词向量与表示学习 · 难度: 中级 · 关联讲座: L02

GloVe 目标函数推导

GloVe(Global Vectors for Word Representation)是另一种词向量训练方法,与 Word2Vec 的局部窗口 SGD 不同,GloVe 直接对全局共现统计建模。本文从 SVD 的局限出发,推导 GloVe 目标函数的设计动机,并通过共现比率的例子展示其核心洞察。


1. 目标函数的推导动机

📐 GloVe 目标函数的推导动机

从 SVD 到 GloVe 的思路链

第 1 步:构建词-词共现矩阵 XRV×VX \in \mathbb{R}^{V \times V}XijX_{ij} = 词 ii 在词 jj 的上下文中出现的次数。

第 2 步:SVD 分解 X=UΣVTX = U \Sigma V^T,取前 dd 列得到词向量。问题:XX 极大(V500KV \approx 500K),SVD 不可行;且共现矩阵中高频词(如 “the”)的影响过大。

第 3 步:GloVe 的洞察——点积 wiTw~jw_i^T \tilde{w}_j 应该逼近 logXij\log X_{ij}(对数共现): wiTw~jlogXijw_i^T \tilde{w}_j \approx \log X_{ij}

为什么对数?因为共现次数跨越多个数量级(cat-the 共现 1000 次,cat-galaxy 共现 0 次),对数压缩这个差异。

第 4 步:加入偏置项 + 加权函数,构造最终目标: J=i,j=1Vf(Xij)(wiTw~j+bi+b~jlogXij)2J = \sum_{i,j=1}^{V} f(X_{ij}) (w_i^T \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij})^2

其中 f(x)={(x/xmax)αx<xmax1xxmaxf(x) = \begin{cases} (x/x_{max})^\alpha & x < x_{max} \\ 1 & x \ge x_{max} \end{cases}α=0.75\alpha=0.75,限制高频词权重不超过 1)。

GloVe 的优势:只需遍历共现矩阵的非零元素,远小于全词汇表迭代;同时利用了全局统计而非局部窗口。

2. 共现比率的洞察

🔢 GloVe 共现比率的洞察

P(kw)=P(k|w) = kk 在词 ww 上下文中出现的概率:

kkP(kice)P(k \mid \text{ice})P(ksteam)P(k \mid \text{steam})比率 P(kice)/P(ksteam)P(k \mid \text{ice}) / P(k \mid \text{steam})
solid>> 1
gas<< 1
water≈ 1
fashion≈ 1

洞察:比率 P(kw1)/P(kw2)P(k|w_1)/P(k|w_2) 比单独的概率更能区分词义相关性。GloVe 的词向量点积就在拟合这个比率关系(通过对数转换变为差)。

3. 常见误区

⚠️ 常见误区

  1. 误区:GloVe 和 Word2Vec 是完全不同的方法 → 正确:从信息论角度,两者都在隐式分解某种形式的词-词共现矩阵(PPMI 矩阵)。Word2Vec 做局部窗口的 SGD,GloVe 做全局共现的加权最小二乘。
  2. 误区Xij=0X_{ij} = 0 的词对直接忽略即可 → 正确:GloVe 用 f(0)=0f(0) = 0 自然处理(权重为 0),但需注意这意味着大量词对的信息被丢弃——稀疏数据是 GloVe 的挑战之一。