4、词向量的评估与应用:类比推理、相似度计算、下游任务迁移

词向量训练好了,怎么知道它好不好?

这个问题,我当年刚入行时也困惑过。花了几天几夜训练出来的词向量,总不能靠「感觉」来判断吧?

其实,评估词向量有三个主流维度:类比推理相似度计算下游任务迁移。这三个维度,说白了就是从不同角度拷问你的词向量——你到底学到了什么?

4.1 类比推理:国王 - 男人 + 女人 = 女王?

词向量最神奇的特性,就是能进行类比推理。你想想看,如果词向量真的学到了语义关系,那么「国王」减去「男人」加上「女人」,应该等于「女王」。

这个操作在向量空间里就是简单的加减法:

vec("女王") ≈ vec("国王") - vec("男人") + vec("女人")

我个人习惯用 GloVeWord2Vec 预训练好的词向量来做这个测试。比如经典的「首都-国家」关系:

# 伪代码示例
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-353SimLex-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%。这就是词向量的价值——它把在大规模语料中学到的语义知识,迁移到了你的小任务上

评估下游任务时,常用的做法是:

  1. 固定词向量:训练时冻结 Embedding 层,只更新下游模型参数
  2. 微调词向量:把词向量作为可训练参数,一起优化
  3. 对比实验:用随机初始化 vs 预训练词向量,看提升幅度

核心观点:一个好的词向量,应该能在多个下游任务上带来稳定的提升。如果只在某个任务上表现好,换个任务就拉胯,那说明词向量可能过拟合了训练语料的特定分布。

4.4 三种评估方式的对比

这三种评估方式,各有侧重。我整理了一个对比表,方便你理解:

评估方式 测什么 优点 缺点
类比推理 语义关系(如国家-首都) 直观、可解释性强 依赖人工构建的测试集
相似度计算 语义距离 计算简单、有标准数据集 无法反映复杂语义关系
下游任务迁移 实际应用效果 最贴近真实场景 计算成本高、结果受下游模型影响

我个人建议,三个维度都要做。类比推理和相似度计算帮你快速筛选词向量,下游任务帮你做最终决策。

实战建议:如果你时间有限,优先做下游任务迁移。因为最终你的词向量是要用在具体任务上的。类比推理和相似度计算更像是「体检报告」,告诉你词向量有没有大毛病。

4.5 从词向量到预训练模型的启示

讲到这里,你可能已经发现了——词向量的评估方法,其实为后来的预训练模型(比如 BERT)铺了路。

BERT 为什么强?因为它把「类比推理」和「相似度计算」直接融入了预训练目标。MLM(掩码语言模型)任务本质上就是在做类比推理——根据上下文预测被遮住的词。而 NSP(下一句预测)任务,就是在做句子级别的相似度计算。

所以,词向量的评估方法,不仅是检验工具,更是设计思路的源泉。你想想看,如果你能设计出一个评估指标,让模型在训练时就朝着这个方向优化,那效果肯定比事后评估要好。

嗯,这部分内容就到这里。下一章我们会正式进入 ELMoGPT 的时代,看看动态词向量是怎么解决静态词向量「一词多义」的痛点。到时候你会发现,我们今天讲的这些评估方法,依然在发挥作用。