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:上下文相关的动态词向量,解决一词多义