4、词向量的评估与应用:类比推理、相似度计算、下游任务迁移
词向量训练好了,怎么知道它好不好?
这个问题,我当年刚入行时也困惑过。花了几天几夜训练出来的词向量,总不能靠「感觉」来判断吧?
其实,评估词向量有三个主流维度:类比推理、相似度计算和下游任务迁移。这三个维度,说白了就是从不同角度拷问你的词向量——你到底学到了什么?
4.1 类比推理:国王 - 男人 + 女人 = 女王?
词向量最神奇的特性,就是能进行类比推理。你想想看,如果词向量真的学到了语义关系,那么「国王」减去「男人」加上「女人」,应该等于「女王」。
这个操作在向量空间里就是简单的加减法:
vec("女王") ≈ vec("国王") - vec("男人") + vec("女人")
我个人习惯用 GloVe 或 Word2Vec 预训练好的词向量来做这个测试。比如经典的「首都-国家」关系:
# 伪代码示例
analogy("巴黎", "法国", "伦敦") → 应该输出 "英国"
analogy("东京", "日本", "北京") → 应该输出 "中国"
我在项目中遇到过一件有意思的事。有一次用中文语料训练词向量,跑「医生-男人+女人」这个类比,结果出来的不是「护士」,而是「女医生」。嗯,这说明语料里性别偏见已经被学进去了。所以,类比推理不仅能评估词向量质量,还能帮你发现数据中的偏见。
评估指标:通常用 准确率(Accuracy) 来衡量。比如在 Google Analogy Test Set 上,好的词向量能达到 70%-80% 的准确率。
避坑指南:我曾经用一个小语料跑类比推理,结果准确率只有 20%。后来发现是语料里「国家-首都」这种关系出现的次数太少。词向量本质上是个统计模型,关系出现的频率直接决定了类比推理的效果。
4.2 相似度计算:两个词到底有多像?
类比推理测的是词向量的「关系理解」,而相似度计算测的是「语义距离」。
最常用的方法是 余弦相似度(Cosine Similarity)。两个词向量的夹角越小,说明它们越相似。
import numpy as np
def cosine_similarity(vec_a, vec_b):
dot_product = np.dot(vec_a, vec_b)
norm_a = np.linalg.norm(vec_a)
norm_b = np.linalg.norm(vec_b)
return dot_product / (norm_a * norm_b)
# 示例
sim = cosine_similarity(vec("猫"), vec("狗"))
print(f"猫和狗的相似度: {sim:.4f}") # 通常输出 0.7-0.8
你想想看,如果「猫」和「狗」的相似度只有 0.2,那这个词向量基本废了。因为它们都是宠物、哺乳动物,语义上肯定接近。
评估相似度时,我们会用人工标注的数据集,比如 WordSim-353 或 SimLex-999。这些数据集里,每个词对都有人类打的相似度分数(1-10)。我们计算词向量的余弦相似度,然后和人类打分做 Spearman 相关系数。
| 词对 | 人类评分 | 余弦相似度 |
|---|---|---|
| 汽车 - 轿车 | 9.2 | 0.85 |
| 汽车 - 飞机 | 5.8 | 0.52 |
| 汽车 - 苹果 | 1.2 | 0.08 |
注意:余弦相似度对向量维度敏感。维度越高,相似度分布越集中。我建议在评估时,同时看 Top-K 准确率和 Spearman 相关系数,两个指标互相印证。
4.3 下游任务迁移:实战才是硬道理
类比推理和相似度计算都是「开卷考试」。真正检验词向量实力的,是下游任务。
什么叫下游任务?就是把你训练好的词向量,当作特征输入到其他 NLP 模型里。比如:
- 文本分类:用词向量初始化 Embedding 层,然后训练分类器
- 命名实体识别(NER):词向量 + CRF 或 BiLSTM
- 情感分析:词向量作为输入特征
- 机器翻译:词向量作为编码器的输入
我记得有一次做中文情感分析项目。用随机初始化的 Embedding,准确率只有 82%。换成预训练的 Word2Vec 词向量后,准确率直接跳到 89%。这就是词向量的价值——它把在大规模语料中学到的语义知识,迁移到了你的小任务上。
评估下游任务时,常用的做法是:
- 固定词向量:训练时冻结 Embedding 层,只更新下游模型参数
- 微调词向量:把词向量作为可训练参数,一起优化
- 对比实验:用随机初始化 vs 预训练词向量,看提升幅度
核心观点:一个好的词向量,应该能在多个下游任务上带来稳定的提升。如果只在某个任务上表现好,换个任务就拉胯,那说明词向量可能过拟合了训练语料的特定分布。
4.4 三种评估方式的对比
这三种评估方式,各有侧重。我整理了一个对比表,方便你理解:
| 评估方式 | 测什么 | 优点 | 缺点 |
|---|---|---|---|
| 类比推理 | 语义关系(如国家-首都) | 直观、可解释性强 | 依赖人工构建的测试集 |
| 相似度计算 | 语义距离 | 计算简单、有标准数据集 | 无法反映复杂语义关系 |
| 下游任务迁移 | 实际应用效果 | 最贴近真实场景 | 计算成本高、结果受下游模型影响 |
我个人建议,三个维度都要做。类比推理和相似度计算帮你快速筛选词向量,下游任务帮你做最终决策。
实战建议:如果你时间有限,优先做下游任务迁移。因为最终你的词向量是要用在具体任务上的。类比推理和相似度计算更像是「体检报告」,告诉你词向量有没有大毛病。
4.5 从词向量到预训练模型的启示
讲到这里,你可能已经发现了——词向量的评估方法,其实为后来的预训练模型(比如 BERT)铺了路。
BERT 为什么强?因为它把「类比推理」和「相似度计算」直接融入了预训练目标。MLM(掩码语言模型)任务本质上就是在做类比推理——根据上下文预测被遮住的词。而 NSP(下一句预测)任务,就是在做句子级别的相似度计算。
所以,词向量的评估方法,不仅是检验工具,更是设计思路的源泉。你想想看,如果你能设计出一个评估指标,让模型在训练时就朝着这个方向优化,那效果肯定比事后评估要好。
嗯,这部分内容就到这里。下一章我们会正式进入 ELMo 和 GPT 的时代,看看动态词向量是怎么解决静态词向量「一词多义」的痛点。到时候你会发现,我们今天讲的这些评估方法,依然在发挥作用。