L02: Word Vectors

Week 1 · Thu Jan 08 2026 08:00:00 GMT+0800 (中国标准时间)

进度: 0/22 (0%)
下载 PDF
/ 0
100%
正在加载 PDF...

L02: Word Vectors

Slides

中英交替版(推荐)

L02 双语 (PDF)

英文原版

L02 EN (PDF)

中文翻译版

L02 ZH (PDF)

核心知识点

1. 词义表示(How do we represent the meaning of a word?)

Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6
  • 传统方法:WordNet(同义词集 + 上位词关系)
    • 问题:缺乏细微差别、缺少新词、主观性强、无法计算相似度
  • 离散符号表示:one-hot 向量
    • 向量维度 = 词汇表大小(如 500,000+)
    • 问题:任意两个词的 one-hot 向量正交,无法表示相似性
  • 解决方案:学习将相似性编码到向量本身

💡 为什么 one-hot 向量不够用?

想象你有 500,000 个词,每个词都是一个 500,000 维向量,只有一个位置是 1,其余全是 0。

问:catkitten 有多相似?

  • One-hot cat = [0, 0, …, 1, …, 0]
  • One-hot kitten = [0, 0, …, 0, …, 1, 0]
  • 余弦相似度 = 0(完全正交)

catcar 有多相似?同样是 0。

One-hot 编码的世界里,所有词都一样陌生——这对任何需要”理解词义”的任务都是灾难性的。

分布式表示(稠密向量)的解决方案:让相似上下文的词有相似向量,catkitten 的向量点积应该很大,catchair 的点积应该很小。

⚠️ 常见误区

  1. 误区:词向量 = one-hot 向量 → 正确:词向量特指学到的稠密低维表示(如 300 维),one-hot 是符号表示不是”向量表示”语境下的词向量。
  2. 误区:WordNet 可以替代词向量 → 正确:WordNet 是人工构建的,无法捕捉细微语义差别(good vs great vs excellent 的差异),且无法用于数值计算。

2. 分布语义学(Distributional Semantics)

Slide 7 Slide 8 Slide 9 Slide 10
  • 核心思想:一个词的含义由频繁出现在其附近的词决定
    • J. R. Firth (1957): “You shall know a word by the company it keeps”
  • 上下文(context):固定大小窗口内的邻近词
  • 词向量(word vectors)= 词嵌入(word embeddings)= 分布式表示(distributed representation)
  • 稠密向量(如 d=300d=300)表示每个词,使得相似上下文中的词有相似向量
  • 相似度度量:向量点积(dot product)uTv=iuiviu^T v = \sum_i u_i v_i

📐 分布假说的数学表达

核心思想:“一个词的含义由其上下文决定”——这如何转化为可计算的目标?

步骤 1:定义”上下文”为以目标词为中心、半径 mm 的窗口:

context(wt)={wtm,,wt1,wt+1,,wt+m}\text{context}(w_t) = \{w_{t-m}, \ldots, w_{t-1}, w_{t+1}, \ldots, w_{t+m}\}

步骤 2:如果词向量能够预测上下文词,说明向量已经编码了”上下文分布”(即词的含义):

好的词向量给定中心词,能准确预测上下文词\text{好的词向量} \Leftrightarrow \text{给定中心词,能准确预测上下文词}

步骤 3:将”预测能力”定义为目标函数——最大化在所有位置 tt 上,给定中心词预测上下文词的联合概率:

maximizet=1Tmjmj0P(wt+jwt;θ)\text{maximize} \quad \prod_{t=1}^{T} \prod_{\substack{-m \le j \le m \\ j \neq 0}} P(w_{t+j} | w_t; \theta)

取负对数(最小化形式):

minimizeJ(θ)=1Tt=1Tmjmj0logP(wt+jwt;θ)\text{minimize} \quad J(\theta) = -\frac{1}{T} \sum_{t=1}^{T} \sum_{\substack{-m \le j \le m \\ j \neq 0}} \log P(w_{t+j} | w_t; \theta)

这就是 Word2Vec 的目标函数!分布假说 → 可微分的损失函数,一步完成。

📚 已收录至 拓展阅读知识库

🔢 点积相似度的计算

设定:两个 3 维词向量:

  • vcat=[0.8,0.3,0.1]v_{\text{cat}} = [0.8, 0.3, -0.1]
  • vdog=[0.7,0.4,0.2]v_{\text{dog}} = [0.7, 0.4, -0.2]
  • vcar=[0.2,0.1,0.9]v_{\text{car}} = [-0.2, 0.1, 0.9]

余弦相似度(归一化点积):

cos(cat,dog)=vcatTvdogvcatvdog\cos(\text{cat}, \text{dog}) = \frac{v_{\text{cat}}^T v_{\text{dog}}}{\|v_{\text{cat}}\| \cdot \|v_{\text{dog}}\|}

计算:

  1. vcatTvdog=0.8×0.7+0.3×0.4+(0.1)×(0.2)=0.56+0.12+0.02=0.70v_{\text{cat}}^T v_{\text{dog}} = 0.8 \times 0.7 + 0.3 \times 0.4 + (-0.1) \times (-0.2) = 0.56 + 0.12 + 0.02 = 0.70
  2. vcat=0.64+0.09+0.01=0.740.860\|v_{\text{cat}}\| = \sqrt{0.64 + 0.09 + 0.01} = \sqrt{0.74} \approx 0.860
  3. vdog=0.49+0.16+0.04=0.690.831\|v_{\text{dog}}\| = \sqrt{0.49 + 0.16 + 0.04} = \sqrt{0.69} \approx 0.831
  4. cos(cat,dog)=0.70/(0.860×0.831)0.977\cos(\text{cat}, \text{dog}) = 0.70 / (0.860 \times 0.831) \approx \mathbf{0.977}(高相似度)

cos(cat,car)=(0.16+0.030.09)/()0.26\cos(\text{cat}, \text{car}) = (-0.16 + 0.03 - 0.09) / (\ldots) \approx \mathbf{-0.26}(低/负相似度)

结论:cat 和 dog 向量相近,cat 和 car 向量方向相反。

⚠️ 常见误区

  1. 误区:窗口越大越好 → 正确:大窗口捕捉主题相似性(bank + money),小窗口捕捉句法相似性(run + running)。不同任务最优窗口大小不同。
  2. 误区:点积 = 余弦相似度 → 正确:余弦相似度是归一化的点积。如果词向量的模长不一样,直接比较点积是不公平的。Word2Vec 通常用点积(不归一化),评估时才用余弦相似度。

3. Word2Vec 模型概览

  • 框架:学习词向量的方法(Mikolov et al., 2013)
  • Skip-gram 模型:给定中心词 cc,预测上下文词 oo
    • 遍历文本每个位置 tt,在窗口大小 mm 内预测
    • 每个词有两个向量vwv_w(作为中心词)和 uwu_w(作为上下文词)
  • 预测函数(softmax):
    • P(oc)=exp(uoTvc)wVexp(uwTvc)P(o|c) = \frac{\exp(u_o^T v_c)}{\sum_{w \in V} \exp(u_w^T v_c)}
    • 步骤:(1) 点积计算相似度 (2) 指数化使之为正 (3) 归一化得概率分布
  • 目标函数(负对数似然):
    • J(θ)=1Tt=1Tmjmj0logP(wt+jwt;θ)J(\theta) = -\frac{1}{T} \sum_{t=1}^{T} \sum_{\substack{-m \le j \le m \\ j \neq 0}} \log P(w_{t+j} | w_t; \theta)
  • 参数 θR2dV\theta \in \mathbb{R}^{2dV}dd 维向量 ×\times VV 个词 ×\times 2(中心词 + 上下文词)

📐 Softmax 预测函数的由来

目标:给定中心词 cc,如何建模上下文词 oo 出现的概率 P(oc)P(o|c)

第 1 步:相似度度量

用点积衡量中心词向量 vcv_c 和上下文词向量 uou_o 的相似度:

score(o,c)=uoTvc=i=1duo,ivc,i\text{score}(o, c) = u_o^T v_c = \sum_{i=1}^{d} u_{o,i} \cdot v_{c,i}

点积越大,两个词在向量空间中越”接近”,越可能共现。

第 2 步:指数化(使所有分数为正)

原始点积可以是负数,不能直接当概率。用指数函数 exp()\exp(\cdot) 映射到正数域:

exp(uoTvc)>0uo,vc\exp(u_o^T v_c) > 0 \quad \forall\, u_o, v_c

这保证了大的相似度 → 大的正数,小的(负的)相似度 → 接近 0 的正数。

第 3 步:归一化(使概率和为 1)

除以所有词的指数和,得到合法的概率分布:

P(oc)=exp(uoTvc)wVexp(uwTvc)P(o|c) = \frac{\exp(u_o^T v_c)}{\sum_{w \in V} \exp(u_w^T v_c)}

为什么用指数而不是其他函数?

指数函数有特殊性质:exp(a+b)=exp(a)exp(b)\exp(a+b) = \exp(a)\exp(b),使得 softmax 的梯度形式特别简洁(见推导块 2)。此外,softmax 是最大熵原理下的唯一解——在所有满足均值约束的分布中,softmax 分布的信息熵最大。

Slide 14
Slide 14 — Softmax 预测函数

📚 已收录至 拓展阅读知识库

📐 对 vcv_c 求梯度的完整推导

目标:计算 vclogP(oc)\frac{\partial}{\partial v_c} \log P(o|c)

第 1 步:展开对数

logP(oc)=uoTvclogwVexp(uwTvc)\log P(o|c) = u_o^T v_c - \log \sum_{w \in V} \exp(u_w^T v_c)

第 2 步:分别求导

第一项的导数(直接):

vc(uoTvc)=uo\frac{\partial}{\partial v_c}(u_o^T v_c) = u_o

第二项使用链式法则——令 S=wVexp(uwTvc)S = \sum_{w \in V} \exp(u_w^T v_c)

vclogS=1SSvc=1SxVexp(uxTvc)ux\frac{\partial}{\partial v_c} \log S = \frac{1}{S} \cdot \frac{\partial S}{\partial v_c} = \frac{1}{S} \sum_{x \in V} \exp(u_x^T v_c) \cdot u_x

第 3 步:化简

=xVexp(uxTvc)Sux=xVP(xc)ux= \sum_{x \in V} \frac{\exp(u_x^T v_c)}{S} \cdot u_x = \sum_{x \in V} P(x|c) \cdot u_x

第 4 步:合并结果

vclogP(oc)=uoxVP(xc)ux\frac{\partial}{\partial v_c} \log P(o|c) = u_o - \sum_{x \in V} P(x|c) u_x

直觉:梯度 = 观察到的上下文向量 uou_o期望的上下文向量 E[ux]\mathbb{E}[u_x]。这是在”推动 vcv_c 靠近实际观察到的上下文词,远离平均的上下文词”。

Slide 15
Slide 15 — 梯度推导过程

📚 已收录至 拓展阅读知识库

🔢 数值计算:3 个词的 Skip-gram

设定:词表 V={cat,dog,fish}V = \{\text{cat}, \text{dog}, \text{fish}\},嵌入维度 d=2d = 2

中心词向量 vv上下文向量 uu
cat[0.5,0.3][0.5, 0.3][0.2,0.8][0.2, 0.8]
dog[0.4,0.6][0.4, 0.6][0.7,0.1][0.7, 0.1]
fish[0.1,0.9][0.1, 0.9][0.3,0.5][0.3, 0.5]

任务:计算 P(dogcat)P(\text{dog} \mid \text{cat})(中心词是 cat,预测上下文词 dog)

Step 1:计算点积 uwTvcatu_w^T v_\text{cat} 对所有词:

ucatTvcat=0.2×0.5+0.8×0.3=0.34u_\text{cat}^T v_\text{cat} = 0.2 \times 0.5 + 0.8 \times 0.3 = 0.34

udogTvcat=0.7×0.5+0.1×0.3=0.38u_\text{dog}^T v_\text{cat} = 0.7 \times 0.5 + 0.1 \times 0.3 = 0.38

ufishTvcat=0.3×0.5+0.5×0.3=0.30u_\text{fish}^T v_\text{cat} = 0.3 \times 0.5 + 0.5 \times 0.3 = 0.30

Step 2:指数化:

exp(0.34)=1.405,exp(0.38)=1.462,exp(0.30)=1.350\exp(0.34) = 1.405, \quad \exp(0.38) = 1.462, \quad \exp(0.30) = 1.350

Step 3:归一化:

sum=1.405+1.462+1.350=4.217\text{sum} = 1.405 + 1.462 + 1.350 = 4.217

P(dogcat)=1.4624.217=0.347P(\text{dog}|\text{cat}) = \frac{1.462}{4.217} = 0.347

验证P(catcat)+P(dogcat)+P(fishcat)=0.333+0.347+0.320=1.000P(\text{cat}|\text{cat}) + P(\text{dog}|\text{cat}) + P(\text{fish}|\text{cat}) = 0.333 + 0.347 + 0.320 = 1.000

观察:dog 的概率最高(0.347),因为 udogu_\text{dog}vcatv_\text{cat} 的点积最大。训练的目标就是让共现频率高的词对有更大的点积。

Slide 16
Slide 16 — Skip-gram 计算示例
Slide 17
Slide 17 — 梯度更新过程

💡 Skip-gram 为什么能学到词义?

把 Skip-gram 的训练想象成一个预测游戏

  1. 给你一个中心词 “bank”
  2. 你要猜它周围会出现什么词
  3. 如果 “bank” 经常和 “money”, “deposit”, “account” 一起出现
  4. 模型就会让 vbankv_\text{bank}umoneyu_\text{money}, udepositu_\text{deposit} 的点积变大

关键洞察:如果 “bank” 和 “financial” 周围出现的词很相似(都跟钱有关),那么它们的 vv 向量也会被推到相近的位置——因为它们需要对相同的上下文词产生高概率

这就是 “You shall know a word by the company it keeps” 的数学实现。

Slide 18
Slide 18

⚠️ 常见误区

  1. 误区:每个词只有一个向量正确:每个词有两个向量——vwv_w(作为中心词时)和 uwu_w(作为上下文词时)。参数空间是 θR2dV\theta \in \mathbb{R}^{2dV},不是 RdV\mathbb{R}^{dV}
  2. 误区:Softmax 的分母只是 normalization trick正确:分母 wexp(uwTvc)\sum_w \exp(u_w^T v_c) 实际上是配分函数 ZZ,它使得全概率和为 1。这正是训练代价昂贵的来源——每次计算都要遍历整个词表 VVV|V| 可达 10 万+)。
  3. 误区:梯度 uoP(xc)uxu_o - \sum P(x|c)u_x 只更新 vcv_c正确:还需要计算对 uou_o 的梯度(类似推导),同时更新两组向量。
Slide 19
Slide 19

4. Word2Vec 目标函数梯度推导

  • vcv_c 求偏导:vclogP(oc)=uoxVP(xc)ux\frac{\partial}{\partial v_c} \log P(o|c) = u_o - \sum_{x \in V} P(x|c) u_x
    • 直觉:观察到的上下文向量 - 期望的上下文向量
  • uou_o 求偏导的类似推导
  • 参数更新:沿负梯度方向更新所有向量

📐 对 uou_o 求梯度的完整推导

目标:计算 uologP(oc)\frac{\partial}{\partial u_o} \log P(o|c)

第 1 步:展开对数

logP(oc)=uoTvclogwVexp(uwTvc)\log P(o|c) = u_o^T v_c - \log \sum_{w \in V} \exp(u_w^T v_c)

第 2 步:对 uou_o 求导

第一项:uo(uoTvc)=vc\frac{\partial}{\partial u_o}(u_o^T v_c) = v_c

第二项:在求和 wVexp(uwTvc)\sum_{w \in V} \exp(u_w^T v_c) 中,只有 w=ow = o 这一项包含 uou_o

uologwVexp(uwTvc)=exp(uoTvc)wVexp(uwTvc)vc=P(oc)vc\frac{\partial}{\partial u_o} \log \sum_{w \in V} \exp(u_w^T v_c) = \frac{\exp(u_o^T v_c)}{\sum_{w \in V} \exp(u_w^T v_c)} \cdot v_c = P(o|c) \cdot v_c

第 3 步:合并

uologP(oc)=vcP(oc)vc=(1P(oc))vc\frac{\partial}{\partial u_o} \log P(o|c) = v_c - P(o|c) \cdot v_c = (1 - P(o|c)) \cdot v_c

直觉:如果模型已经给 oo 很高的概率(P(oc)1P(o|c) \approx 1),梯度接近零——不需要更新。如果概率很低,梯度接近 vcv_c——把 uou_o 推向 vcv_c 的方向。

Slide 20
Slide 20

📚 已收录至 拓展阅读知识库

5. 优化基础:梯度下降

Slide 26 Slide 27 Slide 28 Slide 29
  • 目标:最小化 J(θ)J(\theta)
  • 梯度下降:计算 J(θ)J(\theta) 的梯度,沿负梯度方向迈小步
  • 随机梯度下降(SGD):每次用小批量(mini-batch)采样近似梯度
    • 更新规则:θnew=θoldαθJ(θ)\theta^{new} = \theta^{old} - \alpha \nabla_\theta J(\theta)
  • 实际中:对全部词汇做 softmax 归一化代价太大 \to 负采样(Negative Sampling)
    • 只更新真实上下文词和少量随机”负样本”
    • 目标函数:J(θ)=logσ(uoTvc)+k=1KEjP(w)[logσ(ujTvc)]J(\theta) = \log \sigma(u_o^T v_c) + \sum_{k=1}^{K} \mathbb{E}_{j \sim P(w)} [\log \sigma(-u_j^T v_c)]

🔢 SGD 更新一步示例

设定:词汇表 V={the, cat, sat, on, mat}V = \{\text{the, cat, sat, on, mat}\}d=2d = 2,学习率 α=0.1\alpha = 0.1

中心词 “cat”,真实上下文词 “sat”,负样本 “the”(K=1K=1):

  • vcat=[0.5,0.3]v_{\text{cat}} = [0.5, 0.3]usat=[0.4,0.6]u_{\text{sat}} = [0.4, 0.6]uthe=[0.2,0.1]u_{\text{the}} = [-0.2, 0.1]

计算损失的梯度

  1. spos=usatTvcat=0.4×0.5+0.6×0.3=0.38s_{pos} = u_{\text{sat}}^T v_{\text{cat}} = 0.4 \times 0.5 + 0.6 \times 0.3 = 0.38

  2. sneg=utheTvcat=0.2×0.5+0.1×0.3=0.07s_{neg} = u_{\text{the}}^T v_{\text{cat}} = -0.2 \times 0.5 + 0.1 \times 0.3 = -0.07

  3. Jvcat=(1σ(0.38))usat(σ(0.07))uthe\frac{\partial J}{\partial v_{\text{cat}}} = -(1 - \sigma(0.38)) u_{\text{sat}} - (- \sigma(-0.07)) u_{\text{the}} =(10.594)[0.4,0.6](0.517)[0.2,0.1]= -(1-0.594)[0.4, 0.6] - (-0.517)[-0.2, 0.1] [0.163,0.244]+[0.103,0.052]\approx [-0.163, -0.244] + [0.103, -0.052] =[0.060,0.296]= [-0.060, -0.296]

  4. 更新:vcatnew=[0.5,0.3]0.1×[0.060,0.296]=[0.506,0.330]v_{\text{cat}}^{new} = [0.5, 0.3] - 0.1 \times [-0.060, -0.296] = [0.506, 0.330]

观察vcatv_{\text{cat}}usatu_{\text{sat}} 方向移动,远离 utheu_{\text{the}}

⚠️ 常见误区

  1. 误区:SGD 每步只更新一个词向量 → 正确:每步更新窗口内所有词的向量(2m2m 个上下文词 + 1 个中心词),以及 KK 个负样本的向量。

6. 共现矩阵与 GloVe

Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37
  • 另一条路线:基于全局共现统计
  • 构建词-词共现矩阵 XX,对其做 SVD 降维
  • GloVe(Pennington et al., 2014):结合全局统计和局部上下文窗口的优点
    • 目标函数: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(Xij)f(X_{ij}):加权函数,限制高频词对的影响
  • GloVe vs Word2Vec:本质上都在利用共现信息,只是方式不同

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

📚 已收录至 拓展阅读知识库

🔢 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 的词向量点积就在拟合这个比率关系(通过对数转换变为差)。

⚠️ 常见误区

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

7. 词向量评估

Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44
  • 内在评估(Intrinsic):词类比任务 a:b::c:?a:b :: c:?
    • 例:man:woman :: king:? \to queen
    • 公式:d=argmaxi(xbxa+xc)Txixbxa+xcd = \arg\max_i \frac{(x_b - x_a + x_c)^T x_i}{\|x_b - x_a + x_c\|}
  • 外在评估(Extrinsic):在下游任务(如 NER)上的表现
  • 词相似度评估:WordSim353 等数据集,计算余弦相似度与人类判断的相关系数

📐 词类比评估公式解析

词类比任务:“man:woman :: king:?” 的向量求解:

公式d=argmaxi{a,b,c}(vbva+vc)Tvivbva+vcd = \arg\max_{i \notin \{a,b,c\}} \frac{(v_b - v_a + v_c)^T v_i}{\|v_b - v_a + v_c\|}

步骤 1:计算”方向向量”

Δ=vwomanvman+vking\Delta = v_{\text{woman}} - v_{\text{man}} + v_{\text{king}}

语义含义:vwomanvmanv_{\text{woman}} - v_{\text{man}} 捕捉”性别差异方向”(如果词向量学得好,这个向量对 gender 概念有固定方向),加上 vkingv_{\text{king}} 后得到”king 沿着 gender 方向偏移”的结果。

步骤 2:余弦相似度搜索

d=argmaxicos(Δ,vi)=argmaxiΔTviΔvid = \arg\max_{i} \cos(\Delta, v_i) = \arg\max_i \frac{\Delta^T v_i}{\|\Delta\| \cdot \|v_i\|}

分子中的 Δ\|\Delta\| 是常数,只需比较 ΔTvivi\frac{\Delta^T v_i}{\|v_i\|}(或归一化后的点积)。

为什么排除 a,b,ca, b, c 否则 argmax\arg\max 往往会返回 cc 本身(vcv_c 最接近 vcv_c)。

🔢 内在 vs 外在评估对比

评估方式示例优点缺点
内在(词类比)“Paris:France :: Berlin:?”快速(分钟级),可独立运行不直接反映任务效果
内在(词相似度)cosim(cat, dog) vs 人类打分有标准数据集(WordSim353)主观性强(人类打分有噪声)
外在(NER 任务)用词向量的 NER F1 分数直接反映下游效果慢,受其他因素影响

WordSim353 示例

  • 人类打分 (cat, dog) = 7.79/10,模型余弦相似度 = 0.82 ✓
  • 人类打分 (car, journey) = 5.85/10,模型相似度 = 0.43 ≈ ✓
  • 两者 Spearman 相关系数越高,词向量越好

⚠️ 常见误区

  1. 误区:词类比准确率高 = 词向量质量好 → 正确:词类比任务有严重的语言偏见(主要测英语常见语义关系),非英语/小众领域效果不能反映词向量真实质量。
  2. 误区:余弦相似度越高越好 → 正确:余弦相似度的绝对值意义不大,重要的是排序是否与人类判断相关(Spearman 相关系数)。
  3. 内在评估陷阱:GloVe 在 WordSim353 上比 Word2Vec 好,但在某些下游任务(如句子分类)上 Word2Vec 更好。评估方式不同,结论可能相反。

推荐阅读

关联概念

个人笔记