1. 词向量简介

在自然语言处理(NLP)中,我们希望计算机能像人类一样理解文本。但要实现这一点,首先需要让计算机将文字转化为它能处理和理解的形式。

本文将介绍如何通过 词向量(Word Embeddings) 实现这一目标。我们会讲解什么是词向量,以及它为什么重要。同时,还会介绍两种主流的词向量生成方法:CBOW 和 Skip-Gram。

2. 什么是词向量?

词向量是词语的数值化表示方式,类似于 RGB 表示颜色的方式。

最基础的表示方法是 One-Hot 编码。它将每个词用一个向量表示,向量长度等于词汇表中词的数量。所有值为 0,只有一个位置为 1,代表该词。

举个例子:

句子:"the pink horse is eating"

该句有 5 个词,因此每个词用长度为 5 的向量表示:

$$ \text{the} \rightarrow \begin{bmatrix} 1 \ 0 \ 0 \ 0 \ 0 \end{bmatrix}, \quad \text{pink} \rightarrow \begin{bmatrix} 0 \ 1 \ 0 \ 0 \ 0 \end{bmatrix}, \quad \text{horse} \rightarrow \begin{bmatrix} 0 \ 0 \ 1 \ 0 \ 0 \end{bmatrix}, \quad \text{is} \rightarrow \begin{bmatrix} 0 \ 0 \ 0 \ 1 \ 0 \end{bmatrix}, \quad \text{eating} \rightarrow \begin{bmatrix} 0 \ 0 \ 0 \ 0 \ 1 \end{bmatrix} $$

这种方式的问题在于:

✅ 词汇表越大,向量维度越高,容易导致 维度灾难(Curse of Dimensionality)
✅ 词汇增减会影响所有词的表示
❌ 最致命的是:不包含语义信息,词之间没有任何关系表达

为了解决这个问题,我们需要一种能捕捉语义和句法信息的词向量表示方式。Word2Vec 就是其中一种广泛应用的技术。

Word2Vec 中的两个核心算法是:

  • CBOW(Continuous Bag of Words)
  • Skip-Gram

它们都基于上下文(context)来学习词向量。简单来说,如果一组词总是出现在相同的上下文中,它们的词向量会趋于接近。

上下文窗口(Context Window)示例:

假设窗口大小为 2,对于句子:

"the pink horse is eating"

我们构造的词对如下:

当前词 上下文词对
the (the, pink), (the, horse)
pink (pink, the), (pink, horse), (pink, is)
horse (horse, the), (horse, pink), (horse, is), (horse, eating)
is (is, pink), (is, horse), (is, eating)
eating (eating, horse), (eating, is)

3. Skip-Gram 模型

Skip-Gram 的核心思想是:给定一个目标词,预测其上下文词。

以 "horse" 为例,我们希望模型能通过输入 "horse",预测出 "the", "pink", "is", "eating"。

具体流程如下:

  1. 使用 One-Hot 编码表示输入词(如 "horse")
  2. 输入神经网络模型
  3. 输出层预测上下文词的概率分布

模型结构如下图所示:

Baeldung word embeddings 1

模型参数说明:

  • 输入层大小:1xV(V 是词汇表大小)
  • 隐藏层大小:1xE(E 是词向量维度)
  • 输出层大小:1xV

模型训练完成后,权重矩阵 W(大小 VxE)即可用于生成词向量。如果训练得当,相似词的向量在空间中会更接近。

4. CBOW 模型

CBOW 的核心思想与 Skip-Gram 相反:给定上下文词,预测目标词。

继续以 "horse" 为例,输入是上下文词 "the", "pink", "is", "eating",输出是目标词 "horse"。

模型结构如下图所示:

Baeldung word embeddings 2

具体流程如下:

  1. 输入多个上下文词的 One-Hot 向量
  2. 分别通过权重矩阵 W 得到隐藏层表示
  3. 对这些隐藏层进行平均
  4. 输入输出层,预测目标词

训练完成后,同样使用权重矩阵 W 生成词向量。

5. CBOW vs Skip-Gram:如何选择?

根据 Mikolov 等人在 Word2Vec 原始论文 中的结论:

比较维度 CBOW Skip-Gram
训练速度 ✅ 更快 ❌ 更慢
小数据集表现 ❌ 一般 ✅ 更好
稀有词表现 ❌ 一般 ✅ 更好
常见词表现 ✅ 更好 ❌ 一般

选择建议:

优先选 Skip-Gram:如果你的数据量小,或者需要较好表示稀有词
优先选 CBOW:如果你追求训练效率,且稀有词不是关键因素

6. 小结

本文介绍了词向量的基本概念和作用,以及两种主流的词向量生成方法:CBOW 和 Skip-Gram。

总结如下:

  • One-Hot 编码虽然简单,但无法表达语义信息
  • Word2Vec 通过上下文学习词向量,能有效捕捉语义和句法信息
  • Skip-Gram 更适合小数据集和稀有词建模
  • CBOW 更快,适合大数据集和常见词建模

选择哪种模型,取决于你的具体任务需求。理解它们的差异,有助于你在实际项目中做出更合适的技术选型。


原始标题:Word Embeddings: CBOW vs Skip-Gram