一、 核心思想:分布式表示假设(Distributional Hypothesis)
要理解这个假设,得先搞懂它解决了什么问题 ------在 Word2Vec 出现前,NLP 里词的表示是 One-Hot Encoding(独热编码),这个方法有两个致命缺陷:
- 维度爆炸:如果词表有 10 万个词,每个词就是一个 10 万维的向量,只有对应位置是 1,其余全是 0。这种向量太稀疏,计算成本极高。
- 无语义关联:独热向量之间的内积为 0,模型完全学不到词与词的关系。比如"苹果"和"香蕉"的向量没有任何相似性,模型不知道它们都是水果。
而 分布式表示假设 就是为了破解这个困境,它的核心一句话就能说透:
"A word is characterized by the company it keeps."
(词的含义,由它周围的词决定)
举个例子:
- 句子 1:我爱吃 红苹果
- 句子 2:他爱吃 黄香蕉
- 句子 3:猫爱吃 小鱼干
"苹果""香蕉""鱼干"的上下文都有"爱吃",所以它们的词向量会比较接近;而"苹果"和"手机"的上下文完全不同(比如"苹果手机"的上下文是"买""用"),词向量就会相差很远。
Word2Vec 做的事,就是把每个词映射成一个低维、稠密的实数向量(比如 100 维) ,这个向量就叫词嵌入(Word Embedding),向量的维度可以自己设定。向量之间的距离(比如余弦相似度)就代表了词的语义相似度------这是它最核心的价值。
二、 两种实现范式:Skip-gram & CBOW
Word2Vec 本质是一个浅层神经网络 ,两种范式的区别,就是训练任务的输入输出反过来了 。我们用同一个简单句子举例:【我 爱 吃 苹果】,设定窗口大小=2(即每个词的上下文是左右各 2 个词,边界不足则补全)。
1. CBOW(Continuous Bag-of-Words,连续词袋模型)
- 核心逻辑 :用上下文词的向量,预测中心词
- 输入:中心词的上下文词向量。比如中心词是"吃",上下文就是"我、爱、苹果" → 把这 3 个词的向量做平均,作为模型输入。
- 输出:中心词的概率分布 → 模型输出一个和词表大小一样的向量,通过 Softmax 归一化后,概率最高的位置就是预测的中心词。
- 训练目标:让预测的中心词概率尽可能接近真实值(用交叉熵损失函数)。
- 特点 :
- 训练速度快:上下文词的信息被"平均",计算量小。
- 对低频词更友好:低频词的上下文样本少,但平均后能减少噪声。
2. Skip-gram(跳字模型)
- 核心逻辑 :用中心词的向量,预测它的上下文词
- 输入:中心词的向量。比如中心词是"吃",输入就是"吃"的词向量。
- 输出:上下文词的概率分布 → 模型输出多个概率分布(对应上下文的每个位置),预测哪些词会出现在中心词周围。
- 训练目标:让预测的上下文词概率尽可能接近真实值。
- 特点 :
- 训练速度慢:要预测多个上下文词,计算量比 CBOW 大。
- 对高频词 和生僻词的表示更精准:不会像 CBOW 那样"平均"掉上下文的细节,能学到更细的语义差异。比如能区分"苹果(水果)"和"苹果(手机)"的不同上下文。
两者核心对比表
| 维度 | CBOW | Skip-gram |
|---|---|---|
| 任务逻辑 | 上下文 → 中心词 | 中心词 → 上下文 |
| 训练速度 | 快 | 慢 |
| 适用场景 | 低频词多、小数据集 | 高频词多、大数据集 |
| 语义表示效果 | 中等 | 更优(尤其是多义词) |
三、 优缺点分析 & 典型应用场景
1. 优点
- 轻量高效:模型只有一个输入层、一个隐藏层、一个输出层,训练速度快,即使是百万级词表也能快速训练。
- 语义关联性强 :生成的词向量支持语义推理 ,经典例子就是向量计算:
国王 - 男人 + 女人 = 女王,向量空间中这个等式成立。 - 迁移性好:可以在大规模通用语料上预训练,然后将词向量迁移到下游任务(比如文本分类、情感分析),作为初始词嵌入,大幅提升下游任务效果。
2. 缺点
- 静态词向量 :一个词只有一个固定向量,无法处理多义词。比如"苹果"在"吃苹果"和"苹果手机"里的向量是一样的,模型无法区分语义。
- 依赖窗口大小:窗口太小会漏掉长距离上下文,窗口太大会引入噪声,且窗口大小是固定的,无法自适应不同词的上下文范围。
- 忽略语序:CBOW 是"词袋模型",上下文词的顺序不影响输入(比如"我 爱 吃"和"吃 爱 我"的输入是一样的),这不符合语言的时序逻辑。
- 对生僻词/未登录词(OOV)处理差:训练语料里没出现过的词,无法生成词向量。
3. 典型应用场景
- 下游 NLP 任务的预训练词嵌入:这是最核心的用途。比如在做文本分类、命名实体识别、机器翻译时,先用 Word2Vec 预训练词向量,再喂给 RNN/LSTM 等模型,比随机初始化词向量效果好得多。
- 词相似度计算 & 同义词检索:比如搜索引擎里,输入"汽车",能推荐"轿车""车辆"等近义词。
- 类比推理 & 语义聚类:比如教育领域的词汇分类(把"苹果、香蕉"归为水果类),或者知识图谱的实体关系挖掘。
- 简单的文本相似度计算:比如比较两个句子的相似度,可以把句子里的词向量平均,再计算余弦相似度。