问题

计算机处理文本,需要把词转成数字。

One-Hot 编码:每个词一个独热向量(词汇表多大,向量就多长,只有一位是 1)。

问题:

  • 维度灾难(词汇表几万,向量就几万维);
  • 无法表达词之间的关系——"猫"和"狗"的独热向量之间的距离,与"猫"和"汽车"一样远。

分布式假设

语言学的一个基本假设:一个词的含义,由它周围的词决定("You shall know a word by the company it keeps")。

Word2Vec(2013)基于这个思想,把词映射到低维稠密向量(通常 100–300 维),使得语义相近的词,向量也相近。

两种训练方式

CBOW(Continuous Bag of Words)

用上下文预测中心词。

适合小数据集,训练快。

Skip-gram

用中心词预测上下文。

在大数据集上效果更好,对低频词更友好。

为什么能学到语义关系

模型学的是"哪些词会出现在相似的上下文中"。

"猫"和"狗"常出现在相似语境(宠物、喂食、可爱……),因此它们的向量会相近。

著名的例子:

vector("国王") - vector("男人") + vector("女人") ≈ vector("王后")

这说明词向量空间中,某些语义关系被编码成了方向——性别、时态、国家与首都等关系,都可以在向量空间中用加减法近似表示。

注意:这个性质并非被显式设计出来的,而是训练的副产品。它有其限度,不应过度解读。

训练技巧

原始的 Word2Vec 有一个工程问题:输出层的 softmax 需要归一化整个词汇表(几万到几十万),计算极其昂贵。

优化方法:

  • 负采样(Negative Sampling):不计算全部词汇的概率,只让模型区分"真实的上下文词"和"随机采样的负例词"。把多分类变成了二分类;
  • 层次 Softmax(Hierarchical Softmax):用霍夫曼树组织词汇表,把归一化拆成一系列二分类。

这两项优化让 Word2Vec 能在大规模语料上高效训练。

局限

一、一词多义(Polysemy)无法处理。

"苹果"既指水果,也指公司。Word2Vec 给每个词一个固定的向量,无法区分上下文中的不同含义。

二、无法处理未登录词(OOV)。

训练时没见过的词,没有对应向量。

后来的 ELMo、BERT 等上下文相关的表示解决了这些问题——同一个词在不同语境下有不同的向量表示。

今天的地位

Word2Vec 的直接应用已经不多(被上下文相关的表示取代),但它的核心思想——用稠密向量表示语义,并通过上下文学习——是现代 NLP 的基础。

嵌入(Embedding)技术也广泛应用于推荐系统、图学习、检索等领域。

说明:本文为 NLP 基础的知识整理。