Word2Vec 训练:5 行代码出词向量
Word2Vec Training: 5 Lines to Embeddings
词频/共现都是统计思路,Word2Vec 是语义思路 — 它能把小米和华为映射到相近的向量空间(因为它们总出现在相似的语境里)。
核心思想:一个词的意思,由它周围的词决定(Distributional Hypothesis)。
1. 准备语料 + 分词
import jieba
import pandas as pd
from gensim.models import Word2Vec
df = pd.read_csv('comments.csv')
sentences = []
for text in df['content']:
words = jieba.lcut(text.strip())
if len(words) > 3:
sentences.append(words)
print(f'训练句子数: {len(sentences)}')
# 训练句子数: 49872
2. 训练 Word2Vec
model = Word2Vec(
sentences,
vector_size=100,
window=5,
min_count=5,
workers=4,
epochs=10,
sg=0 # 0=CBOW, 1=Skip-gram
)
model.save('word2vec.model')
print('模型已保存')
CBOW vs Skip-gram:CBOW 用上下文猜中心词(快),Skip-gram 用中心词猜上下文(准,大语料首选)。小语料用 CBOW,大语料用 Skip-gram。
3. 找相似词
similar = model.wv.most_similar('小米', topn=10)
for word, score in similar:
print(f'{word:8s} 相似度={score:.4f}')
# 华为 相似度=0.8231
# 国产 相似度=0.7842
# 旗舰 相似度=0.7521
Word2Vec 训练完毕,下一节我们用它做更骚的操作 — 类比推理和聚类。