国王减男人加女人等于王后是词向量最经典的案例,展现了词语间的语义关系可以用向量运算表示。这篇讲清楚这个类比怎么来的、GloVe和Word2Vec怎么捕获词与词的关系、为什么向量加减能做语义推理以及这种类比有什么局限。你会学到词向量的语义空间概念和评估方法。适合学NLP和词嵌入的同学理解词向量为什么能做语义推理。

学习提示

需要学习Word Analogy 国王-男人+女人=王后 评估与 GloVe 关系捕获能力,将搜索能力集成为应用系统,需要Agent和API开发能力。本篇涵盖LangChain/RAG/Agent、API集成、向量数据库,帮助你构建AI应用系统能力。

目录
  1. 可视化演示
  2. AI 应用场景
  3. Python 演示
  4. 常见误区
  5. 面试题

可视化演示

状态—

国王减男人加女人等于王后是词向量最经典的案例,展现了词语间的语义关系可以用向量运算表示。这篇讲清楚这个类比怎么来的、GloVe和Word2Vec怎么捕获词与词的关系、为什么向量加减能做语义推理以及这种类比有什么局限。你会...

词向量语义空间

想象你正在绘制一张魔法地图。每学会一个词,你就把它写成一个坐标写到地图上:"苹果"和"香蕉"挤在"水果"集市旁边,"会议"和"日程"都落在"办公室"街区。地图上的坐标看似是一串随机的数字,但它们的相对位置编码了词语之间的亲疏远近。

在计算机眼中,这些坐标就是词向量——每个词对应一个几十到几百维的实数向量。这套做法的底气来自一个著名的观察:语义相似的词,出现在相似上下文里,语言学家把它叫作"分布假说"。比如"国王"附近总出现"王冠""统治","王后"附近也常出现"王冠""王室",所以它们的坐标自然靠拢。

实际操作中,这些向量并不是人手工指定的,而是模型根据大量文本自动"磨"出来的。一个词的初始坐标是随机的,模型反复读句子:看到"国王"和"王冠"经常同框,就把它们的坐标拉近一点;看到"国王"和"洗碗机"从不碰面,就把它们推远一点。经过亿万次调整,一张平整的语言地图就成型了。维度通常取 100 到 300,其实人类无法直接想象高维空间,但数学上,距离、方向、夹角都能算。

于是,语言从一串词变成了一张可以量度的地图。有了坐标,就能做坐标算术——下面我们要玩的"国王−男人+女人"游戏,本质上就是在地图上画箭头。

类比推理原理

再回到魔法地图。你发现"国王"和"男人"之间有一条彩色箭头,方向代表"从男人到国王"的语义变化——男性变成君主;同时,"女人"和"王后"之间也有一条箭头,方向和长度都差不多。"两个箭头平行且等长",就把两种关系连接了起来。

这就是词向量最著名的性质:语义关系被编码成方向。当两个词对共享同一关系,它们在向量空间中的位移向量也几乎相同。于是我们可以把箭头从"男人"位置拾起,平移到"女人"身上,箭头末端就落在"王后"附近。形式化地写出来,就是文章标题那条公式:

这条公式的意思是:用"国王"坐标减去"男人"坐标,得到"男性→君主"的方向箭头;再把这个箭头加到"女人"坐标上,就能逼近"王后"的坐标。

v⃗王后≈v⃗国王−v⃗男人+v⃗女人\vec{v}_{\text{王后}} \approx \vec{v}_{\text{国王}} - \vec{v}_{\text{男人}} + \vec{v}_{\text{女人}}
  1. 取回国王向量从词表中取出词"国王"对应的向量,它是地图上的一个坐标点。
    v⃗国王\vec{v}_{\text{国王}}
  2. 计算关系箭头用国王向量减去男人向量,得到"男性→君主"这个语义变化的方向。
    v⃗国王−v⃗男人\vec{v}_{\text{国王}} - \vec{v}_{\text{男人}}
  3. 平移到女人将上面得到的方向向量加到女人向量上,算出目标位置。
    v⃗国王−v⃗男人+v⃗女人\vec{v}_{\text{国王}} - \vec{v}_{\text{男人}} + \vec{v}_{\text{女人}}
  4. 寻找最近邻居在词表的所有向量中,找出与目标向量最接近的那个词,它往往就是"王后"。 原来"国王减男人加女人"不是魔法,而是地图上最简单的箭头平移。要让箭头整齐划一,还得靠词向量模型——它们负责把"类比关系"磨成方向一致的样子。
    arg⁡max⁡wcos⁡(v⃗w,v⃗目标)\arg\max_{w} \cos(\vec{v}_w, \vec{v}_{\text{目标}})

Word2Vec关系捕获

想象一位新手制图师,他的工作方法很特别:他走进一座小镇,站在某个词上,然后猜测前后左右街坊邻居住着谁。每猜一次就修正一点自己脚下的坐标,这位制图师就是 Word2Vec。

Word2Vec 有两条训练路线。Skip-gram 用中心词预测周围的上下文词;CBOW 反其道而行之,用上下文词预测中心词。训练时,模型在每个位置滑动窗口,收集"国王旁边出现过王冠"这样的样本,然后反复调整向量,让共现的词对得分更高。它的核心概率模型是一个 softmax:

这个公式在回答一个问题:给定中心词 $w_I$,它周围出现某个上下文词 $w_O$ 的概率有多大?点积越大,说明两个词向量越"合拍"。

P(wO∣wI)=exp⁡(vwO⊤vwI)∑w=1Vexp⁡(vw⊤vwI)P(w_O | w_I) = \frac{\exp(\mathbf{v}_{w_O}^{\top} \mathbf{v}_{w_I})}{\sum_{w=1}^{V} \exp(\mathbf{v}_{w}^{\top} \mathbf{v}_{w_I})}
  1. 点积算相似两个词向量的点积衡量它们有多合拍,值越大越可能共现。
    vwO⊤vwI\mathbf{v}_{w_O}^{\top} \mathbf{v}_{w_I}
  2. 指数变正数用指数函数把点积变成非负得分,方便转成概率。
    exp⁡(vwO⊤vwI)\exp(\mathbf{v}_{w_O}^{\top} \mathbf{v}_{w_I})
  3. 分母全词表求和对所有词求和,把得分归一化成 0 到 1 之间的概率。
    ∑w=1Vexp⁡(vw⊤vwI)\sum_{w=1}^{V} \exp(\mathbf{v}_{w}^{\top} \mathbf{v}_{w_I})
  4. 整体比值分子除以分母,得到给定中心词时上下文词出现的估计概率。 Word2Vec 这位制图师从不看完整张地图,他只关心附近的小街区。好处是计算高效;缺点是他可能忽略远方的相似关系。但实验证明,他用局部拼图也能搭出完整的"语义方向"来。
    exp⁡(vwO⊤vwI)∑w=1Vexp⁡(vw⊤vwI)\frac{\exp(\mathbf{v}_{w_O}^{\top} \mathbf{v}_{w_I})}{\sum_{w=1}^{V} \exp(\mathbf{v}_{w}^{\top} \mathbf{v}_{w_I})}

GloVe关系捕获

另一位制图师 GloVe 则是"编年史学家"。他不走街串巷,而是搬来一摞厚厚的统计年鉴,上面记录着所有词对在整座城市中一起出现的次数。他打算从这张全局共现表里,反推出地图上每个词的坐标。

GloVe 的目标很直接:让两个词向量的点积,约等于它们共现次数的对数。为什么取对数?因为真实文本里词对出现次数跨几个数量级,取对数才平滑。共现越多,两个词应当离得越近;同时,它还引入了一个巧妙的观察——共现概率的比值能更好地编码"关系方向"。训练时最小化加权平方误差:

其中 $X_{ij}$ 是词 $j$ 出现在词 $i$ 上下文中的次数,$f$ 是给不同频次词对加权的函数。模型要让"点积+偏差"去拟合"共现次数取对数"。

J=∑i,jf(Xij)(wi⊤w~j+bi+b~j−log⁡Xij)2J = \sum_{i,j} f(X_{ij}) \left( \mathbf{w}_i^{\top} \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j - \log X_{ij} \right)^2
  1. 模型预测项左边是模型对词对关系的预测,把两个向量挤在一起,再加偏差。
    wi⊤w~j+bi+b~j\mathbf{w}_i^{\top} \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j
  2. 对数目标值右边是共现次数取对数后的真实观测,作为要逼近的靶子。
    log⁡Xij\log X_{ij}
  3. 残差平方预测与真实值相减再平方,让误差始终为正值,越小越好。
    (wi⊤w~j+bi+b~j−log⁡Xij)2\left( \mathbf{w}_i^{\top} \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j - \log X_{ij} \right)^2
  4. 频率加权$f(X_{ij})$ 给低频词对适当降权,避免海量噪音干扰训练。 就这样,编年史学家用全局统计把语义关系刻进坐标。他和 Word2Vec 制图师其实殊途同归——都留下了一张能支持"国王−男人+女人≈王后"的地图。
    f(Xij)f(X_{ij})

语义推理实现

现在地图有了,怎么"用"呢?就好像你站在"国王"地铁站想找"王后"站:先看一眼地图上"男人"→"国王"的箭头方向,然后把这个方向套在"女人"站上,再找终点站的名字。

工程上实现类比推理分三步:查坐标、算位移、找最近邻。首先取回国王、男人、女人三个词的向量;其次计算目标向量 $\vec{t}=\vec{v}_{国王}-\vec{v}_{男人}+\vec{v}_{女人}$;最后在整个词表里搜索与 $\vec{t}$ 最近的向量,排除输入词本身后,排第一的往往是"王后"。

度量"最近"最常用的是余弦相似度:两个向量方向越一致,值越接近 1。

余弦相似度只看方向、不看长度,相当于只比较两个箭头的朝向是否一致,非常适合语义比较。

cos⁡(a,b)=a⋅b∥a∥∥b∥\cos(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|}
  1. 点积分子两个向量逐项相乘再求和,捕获"同向程度"。
    a⋅b\mathbf{a} \cdot \mathbf{b}
  2. 模长分母每个向量的长度相乘,用来把结果标准化,抵消长度差异。
    ∥a∥∥b∥\|\mathbf{a}\| \|\mathbf{b}\|
  3. 余弦比值得到范围在 $[-1,1]$ 的相似度,越接近 1 表示方向越一致。 实际计算时,通常先把所有向量归一化,再用矩阵乘法一次性点积排序。这一步你会查到不止一个候选词——这说明地图上相邻的词只是语义相似,而不总是逻辑等价。
    a⋅b∥a∥∥b∥\frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|}

评估方法指标

地图画得好不好,不能光看热闹。要验收一张语言地图,常见的办法就是出考卷:考"类比推理题"。比如"国王 对 王后,就像 男人 对 ____?"正确答案是"女人"。

所谓类比数据集,就是收集成千上万道这样的四段式题。题目分两大类:语义类比(国家-首都、城市-所在州)和句法类比(动词时态、形容词比较级)。模型每次做一次向量运算,从词表里找最近邻,答对了就记一分。最核心的报告指标是准确率:

准确率就是所有类比题中答对的比例。它直观地告诉我们:这张地图上的箭头到底有多靠谱。

Accuracy=正确回答的类比数题目总数\text{Accuracy} = \frac{\text{正确回答的类比数}}{\text{题目总数}}
  1. 分子统计正确数模型预测出的最近邻恰好等于标准答案的题目数量。
    正确回答的类比数\text{正确回答的类比数}
  2. 分母统计题目总数测试集中所有四段式类比题的数量。
    题目总数\text{题目总数}
  3. 计算比率正确数除以总数,得到 0 到 1 之间的准确率。 报告时还要区分语义和句法两个分数,因为某些模型句法强但语义弱。经典的"国王−男人+女人"题,正是这套考试里最出名的那道送分题——但也只是送分题而已,后面还藏着地图的盲区。
    正确回答的类比数题目总数\frac{\text{正确回答的类比数}}{\text{题目总数}}

类比局限性

再好的地图也有盲区。比如"bank"这座城市有两个市中心:一个在河岸,一个是银行。制图师很为难——一个坐标点只能站一个位置,到底放哪里?这就是多义词给词向量出的难题。

多义词是头号软肋:每个词只有一个向量,模型不得不把多个含义"平均"进同一个坐标,推理时方向就被冲淡了。第二号问题是频率偏差:低频词在语料里露脸太少,坐标学得摇摇晃晃,类比自然不稳定。还有一类更严重的问题——地图会复刻现实里的偏见:如果"护士"总在"女性"附近出现,模型做"医生→男人,护士→?"就可能答出"女人"。这不是逻辑推理,而是语料的统计惯性。

此外,并非所有关系都是可平移的箭头。"迟到"到"早退"这种反义关系、"喜欢"到"被喜欢"这种主被动关系,都很难用简单的向量加减表示。研究者后来发现,只有一部分词法关系和语义关系能稳定地编码成线性方向。

所以"国王−男人+女人=王后"只是语言地图上一条最整齐的航线,不是全部版图。用词向量做下游任务时,要时刻记得:地图有老城区、有盲点、也有被歪曲的比例尺。

AI 应用场景

语义检索与召回

阶段:检索召回 / 语义匹配

解决的问题:传统搜索引擎按字面匹配,搜"男士跑步鞋"看不到"透气运动鞋",因为字符不同。词向量的方向运算能把用户 query 附近语义相近的商品全部召回,提升召回率。

具体案例:某电商平台的搜索团队把用户 query 映射到词向量空间,再围绕 query 向量做最近邻搜索,结果中"男士跑鞋""运动鞋""轻便跑鞋"等语义相似的词被一并召回,搜索点击率提升了 12%。

相关角色:NLP 算法工程师、搜索推荐工程师

数据增强与实体扩展

阶段:训练数据准备

解决的问题:医疗、法律等领域标注数据稀缺,模型容易过拟合。利用词向量的方向偏移,可以找到语义相近的实体词来扩充训练集。

具体案例:在病历文本项目中,团队从"阿司匹林"向量出发,沿着"同类药物"的方向找到"布洛芬""对乙酰氨基酚"等近似实体,自动扩充了药物词典,让实体识别模型的 F1 值提升了 5 个百分点。

相关角色:数据科学家、NLP 应用工程师

词向量模型选型评测

阶段:模型评估

解决的问题:面对 Word2Vec、GloVe、FastText 等众多预训练词向量,选哪个更好?与其看宣传指标,不如直接用类比推理考卷做实测。

具体案例:某团队在搭建语义检索系统前,用公开类比数据集分别测试了三套词向量,发现某套 GloVe 在语义类比上领先、句法类比上落后,最终根据业务场景(更看重语义相似)选择了 GloVe,上线后效果验证了选择。

相关角色:算法工程师、AI 架构师

Python 演示

python49 行
import numpy as np  class AnalogySolver:    def init(self, vectors, words):        self.vectors = np.array(vectors, dtype=float)        self.words = words        self.index = {w: i for i, w in enumerate(words)}        self.norm_vecs = self.vectors / np.linalg.norm(self.vectors, axis=1, keepdims=True)     def query(self, a, b, c, topk=5):        if a not in self.index or b not in self.index or c not in self.index:            return []        va = self.vectors[self.index[a]]        vb = self.vectors[self.index[b]]        vc = self.vectors[self.index[c]]        target = vb - va + vc        target = target / (np.linalg.norm(target) + 1e-8)        scores = self.norm_vecs @ target        excludes = {a, b, c}        top_indices = np.argsort(scores)[::-1]        results = []        for idx in top_indices:            w = self.words[idx]            if w in excludes:                continue            results.append((w, round(float(scores[idx]), 3)))            if len(results) == topk:                break        return results  def main():    # 手工构造的二维词向量,仅用于演示    words = [“国王”, “男人”, “女人”, “王后”, “王子”]    vecs = [        [3.0, 3.0],        [4.0, 1.0],        [1.0, 1.0],        [0.0, 3.0],        [0.5, 4.0],    ]    solver = AnalogySolver(vecs, words)    ans = solver.query(“国王”, “男人”, “女人”, topk=3)    print(“国王 - 男人 + 女人 =>”, ans)  if name == "main":    main()

常见误区

误区国王−男人+女人=王后这么神奇,那是不是所有语义关系都能这样加减?以后做推理都不用靠逻辑了。

正解词向量只是语言统计的近似,只能捕获一部分被稳定编码的线性关系。多义词、反义、主被动等关系常常无法用箭头平移表示。类比推理本质是"方向相似",不是逻辑推理,更不能替代规则或知识图谱。

为何常见:因为最经典的例子太完美,让人忽视了背后大量失败的类比案例,产生了幸存者偏差。

误区两个词向量的欧氏距离越小,意思就一定越接近,所以比较语义差距直接用欧氏距离就行。

正解欧氏距离同时受向量长度和方向影响,而高频词的向量往往模长偏大,干扰比较。语义相似度通常使用余弦相似度,只看方向一致性。做最近邻搜索前最好先归一化。

为何常见:人脑习惯把二维空间的距离直觉直接搬到高维向量上,但高维空间的很多直觉并不成立。

误区Word2Vec 是预测模型,GloVe 是计数模型,两者原理完全相反,做出的词向量也毫不相干。

正解两者底层都依赖共现分布假设,只是获取方式不同:Word2Vec 用局部滑动窗口预测来隐式建模共现,GloVe 用全局统计矩阵显式拟合共现对数。它们输出的向量在很多任务上表现接近,差异主要来自统计口径不同。

为何常见:教科书常把"预测 vs 计数"讲成二元对立,让读者误以为这两条路线水火不容。

误区bank 既有银行又有河岸的意思,训练时模型会自动把这两个含义融合在一个向量里,推理时两者都能处理好。

正解单个静态向量无法同时表示多个含义,只能把语义"平均"掉,结果每个方向都不准确。这也是后来 ELMo、BERT 等上下文相关表征模型出现的原因——同一个词在不同的句子里取不同的向量。

为何常见:因为静态词向量看起来"一个词对应一个向量"很简洁,让人忘了简洁背后的信息压缩损失。

面试题

Q1. "国王 − 男人 + 女人 ≈ 王后"说明了词向量的什么性质?

单选题 · easy

  • A.向量能做语义运算← 正确答案
  • B.向量运算没有意义
  • C.向量只包含词形
  • D.向量无法存储语义

答案:A。这个经典结果说明词向量把语义关系编码成了方向,向量加减可以在语义空间中进行。B、C、D 都否定了词向量的语义表达能力,与事实不符。

Q2. Word2Vec 的 Skip-gram 模型是用什么预测什么?

单选题 · easy

  • A.中心词预测上下文← 正确答案
  • B.上下文预测中心词
  • C.中心词预测一个词
  • D.两个词互相预测

答案:A。Skip-gram 以中心词为输入,预测周围窗口内的上下文词;CBOW 恰好相反,用上下文词预测中心词。所以 A 正确,B 是 CBOW 的描述。

Q3. GloVe 损失函数中对共现次数取对数的主要目的是?

单选题 · mid

  • A.让向量长度变短
  • B.平滑词频跨度较大← 正确答案
  • C.强制向量正交化
  • D.直接得到单词概率

答案:B。真实语料里词对共现次数从几次到几百万次,跨度极大,取对数能把大数"压缩"平滑,便于模型拟合。它既不改变向量长度,也不强制正交化。

Q4. 词向量类比推理的关键步骤包含哪些?

多选题 · mid

  • A.查输入词向量← 正确答案
  • B.计算目标向量← 正确答案
  • C.搜索最近邻居← 正确答案
  • D.对文本做分词

答案:ABC。类比推理需要先取出三个输入词的向量,再计算"b−a+c"的目标向量,最后在词表中搜索最近邻。分词虽然是 NLP 常见步骤,但不是类比推理的环节。

Q5. 余弦相似度主要用来衡量两个向量的什么?

单选题 · mid

  • A.向量模长是否相等
  • B.向量坐标个数多少
  • C.向量方向是否一致← 正确答案
  • D.向量元素是否唯一

答案:C。余弦相似度计算的是两个向量之间的夹角余弦,只关心方向是否一致,与模长、维度、元素唯一性无关。语义比较看重方向,因此它是词向量最常用的相似度指标。

Q6. 词向量类比推理的局限性包括哪些?

多选题 · hard

  • A.多义词表达不准确← 正确答案
  • B.低频词表现不稳定
  • C.语料偏见会被放大
  • D.高低频词完全等价
  • E.点积近似共现对数
  • F.词向量符合高斯分布
  • G.维度选择的数值偏好
  • H.语料中不含任何噪音

答案:A。GloVe 等模型的设计目标让两个词向量的点积逼近共现次数的对数,而共现概率的比值会被分解为向量差,因此语义关系以线性方向呈现。高斯分布、维度偏好都不是原因,真实语料当然含噪音。

Q7. 在"国王−男人+女人"的推理中,最终答案是由什么决定的?

单选题 · hard

  • A.训练时的学习率
  • B.分词器的配置
  • C.词表中的最近邻← 正确答案
  • D.语料的编码格式

答案:C。推理过程先算出目标向量,再在词表中搜索与目标向量最接近的词,返回的最近邻就是答案。学习率、分词配置、编码格式都是间接因素,不直接决定答案。

Q8. 下列哪些方法能缓解词向量类比的局限性?

多选题 · hard

  • A.引入上下文动态表征← 正确答案
  • B.扩充高质量训练语料← 正确答案
  • C.主动去偏校正向量← 正确答案
  • D.去掉所有高频词汇

答案:ABC。上下文相关模型(如 ELMo/BERT)可为多义词分配不同向量;更丰富的语料能改善低频词;去偏技术可减少性别等偏见。D 的做法会破坏词表结构,适得其反。

Q9. 类比推理搜索最近邻时,为什么要排除输入词本身?

单选题 · easy

  • A.防止直接返回输入词← 正确答案
  • B.因为输入词没有向量
  • C.为了缩短整个词表
  • D.这样得分能变大

答案:A。如果不排除"国王""男人""女人",模型很可能直接返回输入词当作答案,推理就失去了意义。输入词显然有向量,排除也不是为了缩短词表或改变得分。