深入理解【词嵌入】:从 Word2Vec 到 GloVe·FastText·BERT——让机器读懂语言的第一步
词嵌入(Word Embedding)是自然语言处理的基石——它把离散的词语变成连续的向量,让机器第一次"理解"了语言的意义。2013 年,Mikolov 等人提出 Word2Vec,用简单的神经网络从海量文本中学习词向量,震惊了整个 NLP 社区:向量空间中 king - man + woman ≈ queen,语义关系竟然可以用算术运算表达!2014 年,Stanford 的 Pennington 等人提出 GloVe,利用全局共现统计矩阵分解,从另一个角度学习词向量。2017 年,Facebook 的 Bojanowski 等人提出 FastText,引入字符级 n-gram 子词嵌入,解决了 OOV(Out-of-Vocabulary)问题和形态学理解。但静态嵌入有一个根本缺陷:一词一向量——“bank"不管是"河岸"还是"银行”,永远是同一个向量。2018 年,ELMo 和 BERT 的出现彻底改变了格局——上下文相关的动态嵌入让同一个词在不同语境中拥有不同的向量表示。从 Word2Vec 到 BERT,词嵌入的演进就是 NLP 从"查字典"到"读上下文"的进化史。今天,我们从 Word2Vec、GloVe/FastText 到动态嵌入,彻底理解词嵌入的原理、演进与选择。
📑 文章目录
⚡ 一、Word2Vec:词嵌入的开山之作

1.1 分布式假设:词嵌入的理论基础
词嵌入的理论基础是分布式假设(Distributional Hypothesis):上下文相似的词,语义也相似。1957 年,Firth 说出了那句名言:“You shall know a word by the company it keeps”(通过一个词的伙伴来认识它)。“猫"和"狗"都经常出现在"宠物”“可爱”"喂食"附近,所以它们语义相似;"猫"和"汽车"的上下文几乎没有交集,所以它们语义不相关。
在 Word2Vec 之前,NLP 用 One-Hot 编码表示词语——每个词是一个 V 维向量(V 是词表大小),只有一个位置是 1,其余都是 0。“猫”=[0,0,1,0,…,0],“狗”=[0,1,0,0,…,0]。One-Hot 有三个致命缺陷:维度灾难(V 可能是 10 万+,向量巨大)、语义鸿沟(任意两个词的内积都是 0,无法表达语义关系)、稀疏性(几乎全是 0,浪费存储和计算)。
Word2Vec 的核心贡献:把稀疏的高维 One-Hot 向量映射到稠密的低维连续向量空间(通常 100-300 维),让语义相似的词在向量空间中距离很近。
1.2 两种架构:CBOW 与 Skip-gram
Word2Vec 有两种训练架构:
CBOW(Continuous Bag-of-Words)——从上下文预测中心词。给定上下文窗口(如前后各 2 个词),预测中间的词。例如,给定"the cat ___ on the mat",预测空格处的"sat"。CBOW 把上下文词的向量求平均,然后通过一个线性层预测中心词。
Skip-gram——从中心词预测上下文。给定中心词,预测它周围的上下文词。例如,给定"sat",预测"the"“cat”“on”“the”。Skip-gram 对每个上下文词单独训练,因此对低频词效果更好——因为每个上下文词都是独立的训练样本。
CBOW vs Skip-gram 的选择:数据量大、追求速度 → CBOW(上下文平均后一次预测,训练快);数据量小、追求精度 → Skip-gram(每个上下文词单独训练,低频词学得更好)。
1.3 负采样:让训练速度提升 10000 倍
Word2Vec 原始的 Softmax 输出层需要计算所有 V 个词的概率——V 可能是 10 万+,每步训练都要算 10 万次,太慢了。Mikolov 提出了两种优化:
层次 Softmax(Hierarchical Softmax)——用哈夫曼树把 Softmax 的复杂度从 O(V) 降到 O(log V)。但实现复杂,现在很少用。
负采样(Negative Sampling)——核心思想:不计算所有词的概率,只区分正样本(真实上下文词)和 K 个负样本(随机采样的非上下文词)。训练目标从多分类变成二分类:"这个词是不是中心词的上下文?"负采样把每步训练的复杂度从 O(V) 降到 O(K),K 通常取 5-20,训练速度提升 10000 倍以上。
负采样的采样策略:按词频的 3/4 次方采样——高频词被采样的概率被压低(“the”"a"等停用词不需要太多负样本),低频词被采样的概率被提高(“量子”"纠缠"等罕见词需要更多关注)。这个简单的策略显著提升了训练效果。
1.4 词向量的神奇性质
Word2Vec 训练出的词向量有一个令人惊叹的性质:语义关系可以用向量算术表达。
最经典的例子:king - man + woman ≈ queen。这个等式的含义:从"国王"向量中减去"男性"维度,加上"女性"维度,得到"女王"。类似地:
- 巴黎 - 法国 + 中国 ≈ 北京(首都-国家关系)
- walked - walk + swim ≈ swam(时态关系)
- bigger - big + cold ≈ colder(比较级关系)
这些性质不是被显式编程的——它们是从海量文本中自然涌现的。Word2Vec 从未被告知"king 是男性的",但它通过观察"king"和"man"共享的上下文模式,自动学到了性别维度。
🌐 二、GloVe 与 FastText:全局视角与微观结构

2.1 GloVe:全局共现矩阵分解
Word2Vec 利用局部上下文窗口学习词向量——每次只看中心词前后各 5 个词。但语料库中还有大量全局统计信息被忽略了——"冰"和"蒸汽"在整个语料库中的共现模式,比局部窗口能提供更丰富的语义信息。
GloVe(Global Vectors for Word Representation)由 Stanford 的 Pennington 等人于 2014 年提出,核心思想:利用全局词-词共现矩阵的统计信息学习词向量。
GloVe 的训练过程:构建共现矩阵 X——X_ij 表示词 i 和词 j 在语料库中共同出现的次数;定义目标函数——最小化 w_i · w_j + b_i + b_j - log(X_ij) 的平方误差,其中 w_i 和 w_j 是词向量,b_i 和 b_j 是偏置项;加权——共现次数少的词对权重低,共现次数多的词对权重高,权重函数 f(X_ij) = (X_ij / x_max)^0.75。
GloVe vs Word2Vec 的本质区别:Word2Vec 是隐式地利用局部上下文信息,GloVe 是显式地利用全局共现统计。实验表明,在相同数据量下,GloVe 和 Word2Vec 效果相当;但在小数据集上,GloVe 的全局信息有时更有优势。
2.2 FastText:子词嵌入解决 OOV 问题
Word2Vec 和 GloVe 有一个共同的致命缺陷:无法处理 OOV(Out-of-Vocabulary)词——训练时没见过的词,就没有向量。这在实际应用中是个大问题:新词、拼写错误、专业术语、形态丰富的语言(如德语、芬兰语)都会产生大量 OOV。
FastText 由 Facebook 的 Bojanowski 等人于 2017 年提出,核心创新:把词拆成字符级 n-gram(子词),用子词向量的和表示词向量。
例如,"apple"的 3-gram 子词为:<ap, app, ppl, ple, le>(< 和 > 是边界标记)。"apple"的向量 = v(<ap) + v(app) + v(ppl) + v(ple) + v(le>) + v(apple)(整个词本身也是一个子词)。
子词嵌入的三大优势:OOV 处理——没见过的词可以分解为子词,用子词向量求和得到近似向量;形态学理解——“unhappiness” = un + happy + ness,模型能理解前缀"un-“表示否定、后缀”-ness"表示名词;拼写容错——"appel"和"apple"共享大部分子词,向量很接近。
FastText 对形态丰富的语言效果尤其好——德语、芬兰语、土耳其语等语言通过组合词缀生成大量新词,FastText 的子词机制能自动理解这些新词的含义。
2.3 三大静态嵌入对比
| 维度 | Word2Vec | GloVe | FastText |
|---|---|---|---|
| 信息来源 | 局部上下文 | 全局共现 | 局部+子词 |
| 训练方法 | 神经网络 | 矩阵分解 | 神经网络 |
| OOV 处理 | 不支持 | 不支持 | 支持 |
| 形态学 | 无 | 无 | 有 |
| 训练速度 | 中 | 快 | 慢 |
| 词向量质量 | 好 | 好 | 最好 |
| 多语言 | 中 | 中 | 强 |
| 发表年份 | 2013 | 2014 | 2017 |
三大静态嵌入的关系:互补而非替代。Word2Vec 擅长局部语义、GloVe 擅长全局语义、FastText 擅长子词和 OOV。在实际应用中,FastText 通常是静态嵌入的首选——因为它在 Word2Vec 的基础上增加了子词能力,效果更好且支持 OOV。
🚀 三、从静态到动态:上下文嵌入的飞跃

3.1 静态嵌入的根本缺陷:一词多义
静态嵌入(Word2Vec/GloVe/FastText)有一个根本缺陷:每个词只有一个固定向量,不管上下文是什么。但自然语言充满了多义词——“bank"在"river bank"中是"河岸”,在"bank account"中是"银行";"apple"在"eat an apple"中是水果,在"Apple Inc."中是公司。
静态嵌入只能给"bank"一个向量——这个向量是"河岸"和"银行"两种语义的混合体,既不完全是"河岸"也不完全是"银行"。这就像一个词典只有一个释义——显然不够用。
3.2 ELMo:上下文相关的先驱
2018 年 2 月,Peters 等人提出 ELMo(Embeddings from Language Models),首次实现了上下文相关的词嵌入。ELMo 的架构:双向 LSTM——前向 LSTM 从左到右读句子,后向 LSTM 从右到左读句子,拼接两层 LSTM 的隐藏状态作为词向量。
ELMo 的关键创新:同一个词在不同上下文中拥有不同的向量。"river bank"中的"bank"和"bank account"中的"bank"向量不同——因为 LSTM 读取了不同的上下文信息。
ELMo 的局限:LSTM 的串行训练太慢——无法像 Transformer 那样并行训练;LSTM 的长程依赖能力有限——超过 100 步的依赖就开始衰减。
3.3 BERT:完全上下文化的革命
2018 年 10 月,Devlin 等人提出 BERT(Bidirectional Encoder Representations from Transformers),用 Transformer 编码器实现了完全上下文化的词嵌入。BERT 的出现被称为"NLP 的 ImageNet 时刻"——它在 11 项 NLP 任务上刷新了记录,彻底改变了 NLP 的格局。
BERT 的核心方法:MLM(Masked Language Model)——随机遮蔽 15% 的词,让模型预测被遮蔽的词。这迫使模型理解整个句子的上下文。NSP(Next Sentence Prediction)——判断两个句子是否相邻,让模型学习句子间的关系。
BERT vs ELMo:BERT 用 Transformer 替代了 LSTM——完全并行训练、全局注意力机制、更长的上下文依赖。BERT 的每个词向量都融合了整个句子的信息——不是像 ELMo 那样只看左右两个方向,而是通过 Self-Attention 同时看到所有词。
3.4 静态嵌入 vs 动态嵌入:怎么选?
| 维度 | 静态嵌入 | 动态嵌入 |
|---|---|---|
| 上下文 | 一词一向量 | 一词多向量 |
| 多义词 | 不支持 | 支持 |
| 推理速度 | O(1)查表 | Transformer前向 |
| 参数量 | 小(V×d) | 大(110M-340M) |
| 效果上限 | 中 | 最高 |
| 资源需求 | 低 | 高 |
选择建议:简单任务/资源有限 → 静态嵌入(文本分类、相似度计算、推荐系统特征);复杂任务/追求效果 → 动态嵌入(阅读理解、问答系统、语义角色标注)。静态嵌入并未过时——在资源受限的场景(移动端、嵌入式设备)和简单任务中,它仍然是最优选择。
词嵌入演进时间线
| 年份 | 模型 | 核心创新 |
|---|---|---|
| 2003 | NNLM | Bengio 神经网络语言模型 |
| 2013 | Word2Vec | Mikolov 高效词嵌入 CBOW/Skip-gram |
| 2014 | GloVe | Stanford 全局共现矩阵分解 |
| 2017 | FastText | Facebook 子词嵌入字符 n-gram |
| 2018 | ELMo | 双向 LSTM 上下文相关嵌入 |
| 2018 | BERT | Transformer 完全上下文化嵌入 |
一句话总结
词嵌入三大阶段:静态嵌入(Word2Vec 2013——分布式假设上下文相似的词语义相似/CBOW上下文→中心词快/Skip-gram中心词→上下文精/负采样O(V)→O(K)训练速度提升10000倍/词向量神奇性质king-man+woman≈queen语义关系用算术表达。GloVe 2014——全局共现矩阵分解利用整个语料库的统计信息而非局部窗口/目标函数最小化w_i·w_j+b_i+b_j-log(X_ij)/Word2Vec局部vs GloVe全局互补。FastText 2017——子词嵌入字符级n-gram把词拆成子词/OOV处理没见过的词分解为子词求和/形态学理解unhappiness=un+happy+ness/拼写容错共享子词向量接近。三大静态嵌入=互补而非替代FastText通常是首选)、动态嵌入(ELMo 2018——双向LSTM上下文相关同一个词不同上下文不同向量/但LSTM串行训练慢长程依赖有限。BERT 2018——Transformer编码器完全上下文化/MLM遮蔽语言模型+NSP下一句预测/并行训练全局注意力/NLP的ImageNet时刻。静态vs动态选择=简单任务资源有限→静态嵌入查表O(1)/复杂任务追求效果→动态嵌入Transformer前向)。词嵌入的演进=从"一词一向量"到"一词多向量"——从静态到动态是质的飞跃但静态嵌入并未过时在资源受限场景仍是最优选择。
参考链接:
- Efficient Estimation of Word Representations in Vector Space (Mikolov, 2013)
- GloVe: Global Vectors for Word Representation (Pennington, 2014)
- Enriching Word Vectors with Subword Information (Bojanowski, 2017)
- Deep Contextualized Word Representations (Peters, 2018)
- BERT: Pre-training of Deep Bidirectional Transformers (Devlin, 2018)
- The Illustrated Word2Vec (Jay Alammar)
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_73472828/article/details/161352595



