词类比公式与窗口分类推导
分类: 词向量与表示学习 · 难度: 中级 · 关联讲座: L03
词类比公式与窗口分类推导
词类比(Word Analogy)是评估词向量质量的经典内在评估方法,而窗口分类(Window Classification)则是将词向量应用于 NER 等序列标注任务的基础技术。本文推导词类比的数学公式——如何通过向量运算实现”man:woman = king:?”的语义推理,以及窗口分类如何将上下文词向量拼接为分类器输入。
词类比
📐 词类比公式完整推导
变量定义:
- xa = 词 a 的词向量(如 “man”)
- xb = 词 b 的词向量(如 “woman”)
- xc = 词 c 的词向量(如 “king”)
- d = 目标词(如 “queen”)的向量索引
- ∥⋅∥ = L2 范数(向量的欧几里得长度)
推导过程:
第 1 步:语义关系 = 向量差。“man → woman” 这个关系可以用 xb−xa 表示。训练良好的词向量满足 xb−xa≈xd−xc,即”性别关系”在向量空间中是一个稳定的偏移方向。
第 2 步:目标向量估计。将关系迁移到 xc,估计 d 的向量应当接近:
x^d=xb−xa+xc
第 3 步:在词汇表中搜索最近邻。直接用欧几里得距离不够稳定(向量长度不一致),改用余弦相似度:
cos(x^d,xi)=∥x^d∥⋅∥xi∥x^dTxi
第 4 步:当所有 xi 均已归一化(∥xi∥=1)时,分母中 ∥xi∥ 可省略:
d=argmaxi∥xb−xa+xc∥(xb−xa+xc)Txi
即对查询向量归一化后,直接做点积排名即可。
直觉:词向量空间是”语义坐标系”。不同词对之间的关系对应方向,语义相似 = 方向相同。
🔢 数值计算示例
设定(2维简化版):
| 词 | 向量 |
|---|
| man (xa) | [1.0, 0.0] |
| woman (xb) | [0.0, 1.0] |
| king (xc) | [0.9, 0.2] |
| queen (待找) | [?, ?] |
计算:
- 计算偏移向量:x^d=xb−xa+xc=[0,1]−[1,0]+[0.9,0.2]=[−0.1, 1.2]
- 归一化:∥x^d∥=0.01+1.44=1.45≈1.204,归一化后 ≈[−0.083, 0.997]
- 若词汇表中 queen 的向量为 [0.05,0.99](已归一化),则点积 ≈−0.083×0.05+0.997×0.99≈0.983,得分最高
结果:queen 得分最接近查询向量,被正确检索出。
💡 为什么这样做?
词向量空间的核心假设是:语义关系 = 方向向量。“性别关系”、“国家-首都关系”、“时态关系”等都对应向量空间中特定的方向。词类比本质上是:沿着已知关系的方向,在新的起点出发,找落脚点。
类比日常:你知道”北京在中国的东部”这个方向,再加上”法国”,就能猜到”巴黎在法国的中部偏北”——同样的逻辑。
⚠️ 常见误区
- 误区:直接用欧几里得距离找最近邻更直观 → 正确:词向量的模长不统一,高频词向量往往更长;余弦相似度对方向更敏感,与训练目标更一致
- 误区:分子分母的 ∥xb−xa+xc∥ 可以省略 → 正确:当比较不同查询时需要归一化;若只是对同一查询排名,分子的归一化不影响 argmax 结果,但规范写法应保留
- 误区:词类比评估 = 词相似度评估 → 正确:两者测量不同维度,类比测结构关系,相似度测语义距离
窗口分类
📐 窗口分类输入构造与决策函数推导
变量定义:
- d = 词向量维度(如 d=300)
- w = 窗口半径(如 w=2,则窗口大小为 2w+1=5)
- xt∈Rd = 位置 t 的词向量
- xwindow∈R(2w+1)d = 窗口拼接向量
- W∈RC×(2w+1)d = 分类权重矩阵(C 为类别数)
推导过程:
第 1 步:拼接(concatenate)操作。对位置 t,取上下文窗口内所有词向量,按顺序拼接(不是求和、不是平均):
xwindow=xt−wxt−w+1⋮xt⋮xt+w∈R(2w+1)d
数学上等价于:xwindow=[xt−wT, xt−w+1T, …, xtT, …, xt+wT]T
第 2 步:线性分类决策函数:
y^=W⋅xwindow+b∈RC
其中 W∈RC×(2w+1)d,每一行对应一个类别的权重。
第 3 步:对二分类(是/否 LOCATION),输出层用 sigmoid:
p(LOC∣x)=σ(y^)=1+e−y^1
形状检查:W 是 (C)×((2w+1)d),xwindow 是 ((2w+1)d),乘积是 (C),加偏置 (C),形状一致。
🔢 数值计算示例
设定:d=3,窗口大小 =3(w=1),判断中心词是否为 LOCATION
句子:“in Paris are”,中心词 = “Paris”
| 词 | 向量(d=3) |
|---|
| “in” (xt−1) | [0.2,0.1,0.5] |
| “Paris” (xt) | [0.8,0.9,0.3] |
| “are” (xt+1) | [0.1,0.3,0.2] |
计算:
- 拼接:xwindow=[0.2,0.1,0.5, 0.8,0.9,0.3, 0.1,0.3,0.2]T∈R9
- 设 W∈R1×9(二分类)= [0.1,0.2,−0.1,0.5,0.4,0.3,0.0,0.1,0.2],b=0.1
- y^=W⋅xwindow+b=0.02+0.02−0.05+0.40+0.36+0.09+0+0.03+0.04+0.1=1.01
- p=σ(1.01)≈0.733(73.3% 概率是 LOCATION)
💡 为什么这样做?
窗口分类的核心问题是:孤立地看一个词,无法判断它是不是命名实体。“Washington” 可以是人名也可以是地名,但”President Washington visited”和”Washington D.C. is”语境完全不同。
拼接上下文词向量,等于把”这个词周围的语境”打包成一个大向量,让分类器同时看到局部上下文。这是 NLP 中最基础的上下文特征提取思路。
⚠️ 常见误区
- 误区:窗口越大越好 → 正确:窗口是超参,太大引入噪声,太小上下文不足;NER 任务通常 w=2 已足够
- 误区:拼接 = 求和(或平均) → 正确:拼接保留了位置信息(哪个词在哪个位置),而求和/平均会丢失顺序信息
- 误区:每个词的向量是 one-hot → 正确:这里的 xt 已经是词嵌入(低维稠密向量),不是稀疏的 one-hot 编码