词向量-Word2Vec编码
Word2Vec
一、为什么需要 Word2Vec
在学习 One-Hot 编码之后,一个非常明显的问题是:
不同词之间没有任何语义关系。
在 One-Hot 表示中:
- “手机”和“电脑”之间的相似度是 0
- “老师”和“学生”之间的相似度也是 0
这种表示方式无法反映词语之间的真实关系,这在实际 NLP 任务中几乎是不可接受的。
Word2Vec 正是在这样的背景下提出的,它试图解决一个核心问题:
如何让计算机通过上下文,自动学习词语之间的语义关系?
二、Word2Vec 的基本思想
Word2Vec 的核心思想可以概括为一句话:
出现在相似上下文中的词,往往具有相似的语义。
基于这一假设,Word2Vec 不再人为规定词的表示方式,而是通过大量文本,让模型在训练过程中自动学习每个词对应的向量。
与 One-Hot 不同,Word2Vec 生成的是:
- 低维
- 稠密
- 可表达语义关系
的词向量。
三、CBOW 与 Skip-Gram 的区别
Word2Vec 中主要包含两种训练模型:
1. CBOW(Continuous Bag of Words)
CBOW 的目标是:
根据上下文词,预测中心词
也就是说,模型通过观察一个词周围出现了哪些词,来学习这个中心词的表示。
特点:
- 训练速度快
- 适合大规模数据
- 对高频词效果较好
2. Skip-Gram
Skip-Gram 的目标是:
根据中心词,预测上下文词
模型通过一个词,去预测它周围可能出现的词。
特点:
- 对低频词更友好
- 训练相对较慢
- 语义表达能力更强
在实践中,两者都是 Word2Vec 的有效实现方式。
四、使用 Python 训练 Word2Vec 词向量
在学习过程中,我使用 gensim 库完成了一个简单的 Word2Vec 训练实验。
1. 示例语料
sentences = [
["我", "喜欢", "学习", "NLP"],
["NLP", "是", "人工智能", "的重要", "方向"],
["我", "正在", "学习", "词向量"]
]
2. 训练 Word2Vec 模型
from gensim.models import Word2Vec
model = Word2Vec(
sentences=sentences,
vector_size=50,
window=3,
min_count=1,
sg=1 # sg=1 表示使用 Skip-Gram
)
3. 查看词向量与相似词
vector = model.wv["学习"]
print("词向量维度:", vector.shape)
similar_words = model.wv.most_similar("学习")
print("相似词:", similar_words)
通过实验可以看到,模型会根据上下文学习到词语之间的相似关系。
五、Word2Vec 相比 One-Hot 的提升
通过实践对比,可以清楚地看到 Word2Vec 的优势:
- 向量维度大幅降低
- 向量不再稀疏
- 可以计算词语之间的相似度
- 语义信息被编码进向量空间
这使得 Word2Vec 成为了现代 NLP 中非常重要的基础工具。
六、Word2Vec 的局限性
尽管 Word2Vec 有明显优势,但它仍然存在不足:
- 无法很好处理未登录词
- 每个词只有一个固定向量,无法体现多义性
- 对拼写变化不敏感
这些问题,为后续方法的发展留下了空间。
七、小结
Word2Vec 是从“人工指定表示”走向“自动学习表示”的关键一步。
它让词向量真正具备了语义表达能力,为后续更复杂的 NLP 模型打下了坚实基础。

浙公网安备 33010602011771号