Word2Vec#
Word2Vec 是 Google 于 2013 年提出的词向量训练方法,将词语映射为稠密的低维向量,使语义相近的词在向量空间中距离也相近。
1. 是什么#
Word2Vec 是一种**词嵌入(Word Embedding)**方法,核心思想是「一个词的含义由它周围的词决定」(分布式假设)。
核心特点:
- 稠密向量:每个词用 100-300 维的浮点向量表示,而非 one-hot 的高维稀疏向量
- 语义相似性:语义相近的词,向量余弦相似度高(如「国王」与「王后」)
- 向量运算:支持语义类比,如
king - man + woman ≈ queen
两种架构:
| 架构 | 输入 | 输出 | 特点 |
|---|---|---|---|
| CBOW | 上下文词 | 中心词 | 训练快,适合大语料 |
| Skip-gram | 中心词 | 上下文词 | 效果好,适合小语料 |
graph LR
subgraph CBOW
A1[the] --> B1[?]
A2[cat] --> B1
A3[on] --> B1
A4[mat] --> B1
B1 --> C1[sat]
end
subgraph Skip-gram
D1[sat] --> E1[the]
D1 --> E2[cat]
D1 --> E3[on]
D1 --> E4[mat]
end
2. 怎么使用#
使用预训练模型#
from gensim.models import KeyedVectors
# 加载预训练词向量(如 Google News 300维)
model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
# 获取词向量
vector = model['king'] # 300 维向量
# 计算相似度
similarity = model.similarity('king', 'queen') # 0.65
# 找最相似的词
similar_words = model.most_similar('python', topn=5)
# 语义类比:king - man + woman = ?
result = model.most_similar(positive=['king', 'woman'], negative=['man'], topn=1)
# [('queen', 0.71)]
常见预训练模型#
| 模型 | 维度 | 词数 | 来源 |
|---|---|---|---|
| Google News | 300 | 300 万 | 新闻语料 |
| GloVe | 50-300 | 40 万 | Wikipedia + Gigaword |
| fastText | 300 | 200 万 | Common Crawl |
| 腾讯中文 | 200 | 800 万 | 中文语料 |
3. 怎么训练#
使用 Gensim 训练#
from gensim.models import Word2Vec
# 准备语料:分词后的句子列表
sentences = [
['我', '喜欢', '机器', '学习'],
['深度', '学习', '很', '有趣'],
['自然', '语言', '处理', '是', 'NLP'],
# ... 更多句子
]
# 训练模型
model = Word2Vec(
sentences,
vector_size=100, # 向量维度
window=5, # 上下文窗口大小
min_count=1, # 最小词频
sg=1, # 0=CBOW, 1=Skip-gram
workers=4, # 并行线程数
epochs=10, # 训练轮数
)
# 保存与加载
model.save('word2vec.model')
model = Word2Vec.load('word2vec.model')
# 使用
vector = model.wv['机器']
similar = model.wv.most_similar('学习')
关键参数#
| 参数 | 说明 | 建议值 |
|---|---|---|
vector_size |
向量维度 | 100-300 |
window |
上下文窗口 | 5-10 |
min_count |
最小词频过滤 | 5-10 |
sg |
0=CBOW, 1=Skip-gram | 小语料用 1 |
negative |
负采样数量 | 5-20 |
epochs |
训练轮数 | 5-20 |
训练技巧#
- 语料量:至少百万级句子,语料越大效果越好
- 分词质量:中文需先用 jieba 等分词
- 窗口大小:小窗口捕捉语法关系,大窗口捕捉语义关系
- 负采样:比 Hierarchical Softmax 更快更常用
延伸#
- GloVe:结合全局词频统计与局部上下文
- fastText:支持子词(subword),可处理未登录词
- ELMo / BERT:上下文相关的动态词向量,解决一词多义