词向量——从 Word2vec 到 GloVe 的演进之路|Word Embeddings: The Evolution from Word2vec to GloVe

bolin
发布于 2026-01-02 / 3 阅读
0
0

词向量——从 Word2vec 到 GloVe 的演进之路|Word Embeddings: The Evolution from Word2vec to GloVe

第一节:机器如何“理解”语义?

在深度学习统治自然语言处理(NLP)之前,计算机看待单词的方式非常简单:每一个词都被视为一个孤立的符号。通常我们使用 One-hot 编码,即给每个词一个极长的向量,其中只有一个位置是 1,其余全是 0。

但这种方法有一个致命的缺陷:它无法表达词与词之间的关系。在 One-hot 空间里,“麦当劳”和“汉堡”的向量是正交的,计算机无法从这些数字中感知到它们在语义上的关联。

1.1 分布式语义假设 (Distributional Semantics)

我们如何定义一个词的含义?现代 NLP 的基石是分布式语义假设:一个词的含义是由它周围经常出现的词决定的。

“You shall know a word by the company it keeps.” —— J.R. Firth (1957)

如果“银行”这个词经常出现在“资金”、“贷款”、“账户”周围,那么这些词汇的集合就定义了“银行”。

1.2 词向量空间与线性直觉

Word2vec 的出现彻底改变了这一点。它不再使用稀疏的 One-hot 编码,而是将每个词映射到一个低维、稠密的连续向量空间中(通常是 50 到 300 维)。

在这个空间里,语义相近的词在几何距离上更接近。更神奇的是,这个空间具备线性代数运算的特性

074DD410-316B-4C47-8666-7BE170BA512E.png

如图 1 所示,通过简单的向量加减法,计算机竟然能够捕捉到“性别”或者“地理位置”这种高级语义维度。例如:

  • Vector(King) - Vector(Man) + Vector(Woman) = Vector(Queen)

  • Vector(Australia) - Vector(Beer) + Vector(Russia) = Vector(Vodka)

这种通过向量方向和距离来表达语义的方式,正是我们接下来要拆解的 Word2vec 算法的核心魔力。

1.3 Word2vec 的基本思想

Word2vec 并不是一个单一的模型,而是一系列算法的组合。其核心逻辑在于:

  1. 随机初始化:为每个词分配一个随机的向量。

  2. 迭代语料库:遍历整个文本流中的每一个位置。

  3. 预测上下文:利用当前词的向量来预测它周围可能出现的词。

  4. 学习与更新:如果预测不准,就通过优化算法调整向量,使得预测结果越来越接近真实情况。

426C6567-956E-4BA1-B5D3-EE7D952DD0F7.png

第二节:词向量从条件概率到目标函数

Word2vec 的核心是一个极简的预测任务:给定一段文本,我们利用中心词(Center word)去预测它周围出现的词(Outside words)。这个模型被称为 Skip-gram

F052A9FE-C497-49C4-A2A0-15D838D8C342.png

2.1 概率模型:Softmax 的应用

假设我们有一个中心词 c 和一个它周围的词 o。我们的目标是计算在一个给定的中心词条件下,某个特定词作为其外部词出现的概率 P(o|c)

为了实现这一点,我们为每个词 $w$ 维护两个向量:

  • v_w:当 w 是中心词时的向量。

  • u_w:当 w 是外部词时的向量。

637BD06F-2C2B-4CB9-AF88-8BC52F00518F.png

计算公式如下:

F2C3525E-737A-4E49-B91C-A48715F950E3.png

这里的逻辑非常直观:

  1. 点积(Dot Product) u_o^T  v_c 衡量了两个向量的相似度。点积越大,概率越高。

  2. 指数函数 exp 确保所有结果为正数。

  3. 分母的求和 则是为了归一化,使得整个词表的所有词概率之和为 1(这就是标准的 Softmax 函数)。

2.2 目标函数:我们要最小化什么?

在训练过程中,我们希望模型对实际出现的词预测概率越高越好。数学上,我们通过最小化负对数似然(Negative Log Likelihood)来实现:

词向量 —— 从 WordNet 到 Word2Vec 的演进(图17).png

426C6567-956E-4BA1-B5D3-EE7D952DD0F7.png

这个 J(theta) 就是我们的代价函数(Cost Function)。模型的目标非常简单:通过不断调整向量 u 和 v,让这个代价函数降到最低。

2.3 训练的挑战:Softmax 太慢了

虽然上面的公式在数学上很完美,但在工程实现上却有一个巨大的坑。

06D7C68C-AFE2-4EF6-99FB-9E6642211691.png

注意看分母。如果我们的词表有 100 万个词,模型每一步更新都要计算 100 万次点积。这在计算上极其昂贵,也是为什么我们需要在后续章节中引入“负采样(Negative Sampling)”的原因。

第三节:模型优化

为了最小化我们在上一节定义的代价函数 J(theta),我们需要一种系统的方法来更新模型参数(即所有的词向量)。在深度学习中,最常用的工具就是梯度下降。

3.1 梯度下降

梯度下降的直觉非常简单:将代价函数想象成一个山谷,我们的目标是找到山谷的最低点。

EAEFB14F-B433-42C3-B349-60FD28E5F74D.png

在数学上,我们通过计算代价函数对参数 theta 的梯度来确定“下山”的方向。更新公式如下:

2C126120-10D8-4BD1-B6D5-EC1BE1775BCF.png

其中 alpha 被称为学习率(Learning Rate)步长,它决定了我们每一步迈出的距离。如果 alpha 太大,我们可能会越过最低点;如果太小,收敛速度会慢得令人绝望。

3.2 现实的难题:全量梯度下降的瓶颈

虽然上述算法在理论上可行,但在处理 NLP 任务时会遇到一个巨大的问题。我们的代价函数 J(theta) 是语料库中所有窗口的函数。

B4C6A5BA-C2EC-40E3-ADA3-D776CACEE357.png

如果你的语料库有数亿个单词,那么在更新一次词向量之前,你需要遍历整个语料库来计算梯度。这在工程上是不可接受的。

3.3 解决方案:随机梯度下降 (SGD)

为了解决计算速度问题,我们引入了随机梯度下降 (Stochastic Gradient Descent, SGD)

  • 核心思想:不再等待遍历完整个语料库,而是每看到一个窗口(或一小批窗口 Mini-batch),就立即计算梯度并更新一次词向量。

  • 算法逻辑

    1. 随机采样一个窗口(window)。

    2. 计算该窗口下的梯度。

    3. 立即更新参数 theta。

    4. 回到第一步重复执行。

通过这种方式,我们可以在极短的时间内进行成千上万次的参数微调。尽管单次更新的方向可能由于随机性而略有偏差,但从宏观上看,它依然能高效地带领模型走向“山谷”的最低点。

第四节:负采样 (Negative Sampling)

在标准的 Word2vec 模型中,每一步更新都需要对整个词表的概率进行归一化,这在工程上几乎不可行。Mikolov 等人在 2013 年提出的 负采样(Negative Sampling) 方案,将一个复杂的“多分类”问题转化为了简单的“二分类”问题。

4.1 核心逻辑:从“预测”到“辨析”

负采样的思路非常巧妙:

  • 正样本:给定一个中心词,尝试最大化其周围真实出现的外部词(Real outside word)的概率。

  • 负样本:随机抽取 K 个词作为“噪声词”(Random words),并尝试最小化这些词在当前中心词周围出现的概率。

这意味着,模型不再问“下一个词是 100 万个词中的哪一个?”,而是问“这个词是真实存在的,还是我随机抽取的噪声?”。

4.2 数学实现:Sigmoid 函数的引入

为了处理这个二分类问题,我们放弃了昂贵的 Softmax,改用 Sigmoid 函数

FA922956-85E4-4DB8-A6F2-BEAA2B2CC80C.png

如图 8 所示,我们的目标函数变为最小化两个对数概率之和:

  1. 左项:最大化真实观测到的对(Center-Outside)的概率。

  2. 右项:最大化那些“噪声词”不出现的概率。

4.3 采样策略:为什么是 3/4 次方?

我们应该如何抽取那些负样本(噪声词)呢?如果完全随机,频率极高的词(如 "the", "a")会一直被抽到。为了平衡,Word2vec 使用了一个经过微调的概率分布:

22F28D2B-3CAF-400D-A8AD-894899917A9A.png

这里的 3/4 次方 是一个经验值。它能稍微增加低频词被抽中的频率,确保模型不会只盯着那些常见的虚词,而是能够更全面地学习整个词表的语义空间。

第五节:共现矩阵与 GloVe

除了 Word2vec 这种每次只看一个局部窗口的迭代方法,NLP 领域还有一类长久存在的方法:基于共现矩阵(Co-occurrence Matrix)

5.1 传统的共现向量 (Co-occurrence Vectors)

最直接的想法是:如果两个词经常出现在一起,它们就应该有相似的含义。我们可以构建一个巨大的矩阵,记录每个词在语料库中与其他词共同出现的次数。

AF3B136F-8E90-4F91-AB9C-314F768998ED.png

这种方法虽然利用了全局统计信息(即看到了整个语料库的全貌),但它面临着严重的工程挑战:

  • 维度灾难:词表有多大,向量就有多长。

  • 高维稀疏:存储开销巨大且包含大量噪声。

  • 解决方法:通常使用奇异值分解(SVD)将这些高维向量压缩到较低的维度(如 25-1000 维),从而提取出稠密的语义特征。

5.2 桥接两大流派:GloVe 模型

Word2vec 擅长捕捉复杂的语义模式(如类比推理),但它忽略了语料库的全局统计规律;而 SVD 捕捉了全局信息,但在捕捉语义关联上表现稍逊。

GloVe (Global Vectors) 应运而生,它的目标是将这两者的优点结合起来。

F052A9FE-C497-49C4-A2A0-15D838D8C342.png

GloVe 的核心洞察在于:共现概率的比率(Ratio)比单纯的概率更能体现词与词之间的微妙关系。

5.3 为什么 GloVe 更高效?

GloVe 的目标函数本质上是在做一种特殊的“带权重的最小二乘回归”:

F79ABE1D-45DD-4E2C-A864-5636CC2BBBD2.png

  • 它直接拟合词与词共现次数的对数值。

  • 它使用权重函数 f(Xij) 来平衡:既不让高频词(如 "the")主导损失函数,也不让罕见词产生过多噪声。

  • 最终结果:GloVe 既拥有 Word2vec 那种神奇的线性类比能力(King - Man + Woman = Queen),又能在训练时更充分地利用语料库的全局信息。

第六节:我们如何衡量词向量的好坏?

即便模型在数学上收敛了,我们依然需要评估生成的词向量在实际应用中的质量。在 NLP 领域,评估通常分为两个维度:内部评估外部评估

6.1 内部评估 (Intrinsic Evaluation)

内部评估侧重于考察词向量在特定语义任务(如类比或相关性)上的表现。

  • 词比喻任务 (Word Vector Analogies):

    这是最著名的评估方法。我们考察向量空间是否满足 a:b :: c:d 的关系。074DD410-316B-4C47-8666-7BE170BA512E.png

  • 语义相关度评分:

    将词向量计算出的余弦相似度与人类专家的主观评分(如 WordSim353 数据集)进行对比。如果两者的相关性越高,说明模型越符合人类的直觉。

6.2 外部评估 (Extrinsic Evaluation)

外部评估则是将词向量作为预训练特征,投入到具体的下游 NLP 任务中,例如:

  • 命名实体识别 (NER):识别文本中的人名、地名。

  • 情感分析 (Sentiment Analysis):判断评论的正负面倾向。

如果换上这套词向量后,下游任务的准确率提升了,那么这套词向量就是成功的。

6.3 词向量的局限性

尽管 Word2vec 和 GloVe 极大地推动了 NLP 的发展,但它们也存在明显的局限:

  1. 一词多义 (Polysemy):在静态词向量中,“Bank”无论是代表“银行”还是“河岸”,都共享同一个向量。

  2. 词序缺失:由于基于窗口或共现,模型往往忽略了句子中长距离的逻辑依赖。

637BD06F-2C2B-4CB9-AF88-8BC52F00518F.png


评论