词向量-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 模型打下了坚实基础。

posted @ 2025-11-10 14:08  元始天尊123  阅读(7)  评论(0)    收藏  举报