返回首页

嵌入

嵌入(Embedding),这是一种寻找词和词之间相似性的 NLP 技术,它把词汇各个维度上的特征用数值向量进行表示,利用这些维度上特征的相似程度,就可以判断出哪些词和哪些词语义更加接近。

1 约 2 分钟 · 2745 字 AI

嵌入(Embedding)学习总结

一、核心定义

嵌入(Embedding) 是一种把"词"转成"向量"的 NLP 技术,让模型能通过向量之间的距离判断词与词的语义相似度。

文本嵌入 = 文本向量化,两者是同一回事。


二、为什么需要嵌入?

分词器只能把文本变成词元 ID(一堆冰冷的编号),ID 本身没有任何语义

词语 词元 ID
1001
喜欢 1002
小猫 2001
小狗 2002

要让模型"理解"词义,就需要给每个词元再附加一组多维向量——这就是嵌入要做的事。


三、嵌入矩阵长什么样

每一代表一个隐含的语义方向(实际有几百到几千维,下面用 4 维举例):

维度 隐含语义 "小猫"取值
第 1 维 是否动物 0.72
第 2 维 可爱度 0.35
第 3 维 体型 0.11
第 4 维 家养 vs 野外 0.80

嵌入后:

词语 嵌入向量
小猫 [0.72, 0.35, 0.11, 0.80]
小狗 [0.70, 0.38, 0.14, 0.78]
喜欢 [0.10, 0.93, 0.21, 0.11]

→ "小猫"和"小狗"的向量非常接近,模型自然就把它们当作相似概念。


四、嵌入带来的 4 个好处

  1. 语义相似性:相似词向量在空间中靠近
  2. 上下文学习:嵌入可在训练中更新
  3. 数学可运算:支持加减(如 国王 - 男 + 女 ≈ 王后
  4. 可微分:能输入神经网络参与梯度计算

五、Word2Vec

2013 年由 Google 的 Tomas Mikolov 团队提出,把词转成固定长度向量,让大规模训练成为可能。

它有两种训练方式,互为反向

比较项 CBOW Skip-Gram
训练目标 用上下文预测中心词 用中心词预测上下文
输入 多个上下文词 一个中心词
输出 一个中心词 多个上下文词
训练速度
稀有词表现 一般 更好
语义表达能力 较弱 更强
适合场景 高频词、短窗口、追求效率 稀有词、多义词、大语料

举例句子:我 喜欢 吃 苹果

  • CBOW:输入「我、吃」 → 预测「喜欢」
  • Skip-Gram:输入「喜欢」 → 预测「我、吃」

代码中通过参数切换:

  • sg=0 → CBOW
  • sg=1 → Skip-Gram

六、代码实践

训练:train_word2vec.py

from gensim.models import Word2Vec

sentences = [
    ["i", "love", "deep", "learning"],
    ["i", "love", "nlp"],
    ["deep", "learning", "is", "fun"],
    ["nlp", "is", "a", "part", "of", "ai"],
    ["word2vec", "is", "a", "powerful", "embedding"]
]

model = Word2Vec(
    sentences,
    vector_size=100,   # 向量维度
    window=2,          # 上下文窗口大小
    min_count=1,       # 词频阈值
    sg=1               # 1 = Skip-Gram,0 = CBOW
)

model.save("word2vec.model")
print("模型训练完成并已保存。")

测试:test_word2vec.py

from gensim.models import Word2Vec

model = Word2Vec.load("word2vec.model")

print("词向量(nlp):")
print(model.wv["nlp"])

print("\n与 'nlp' 最相似的词:")
print(model.wv.most_similar("nlp", topn=3))

print("\n'deep' 和 'learning' 的相似度:")
print(model.wv.similarity("deep", "learning"))

七、一句话总结

词元(Token)让模型能"读"文字,嵌入(Embedding)让模型能"懂"文字。 Word2Vec 是嵌入技术的开山之作,CBOW 和 Skip-Gram 是它的两种训练方向。


-EOF-