Word2Vec通过上下文学习将词映射为低维稠密向量,使语义相似词向量相近、支持线性类比,并可直接用于机器学习;中文需高质量分词、统一格式,小数据宜用预训练向量,领域任务可增量训练。

Word2Vec 是将词语转化为稠密向量(即词向量)的经典方法,它让语义相近的词在向量空间中距离更近,从而支撑下游任务如文本分类、相似度计算、推荐等。核心不在于“训练模型”,而在于理解词向量如何承载语义,以及怎样用对工具、选对参数、避开常见坑。
词向量为什么有用?
传统 one-hot 表示下,“猫”和“狗”是完全正交的向量,无法体现它们都是宠物、都会叫、都长毛等共性。Word2Vec 通过大量文本上下文学习,把每个词映射到一个低维实数向量(如100维),使得:
- 语义相似的词(如“国王”与“女王”、“巴黎”与“法国”)向量夹角小、余弦相似度高
- 存在可迁移的线性关系,比如 vec(“女王”) ≈ vec(“国王”) − vec(“男人”) + vec(“女人”)
- 能直接用于机器学习模型输入(替代稀疏的词袋或TF-IDF)
用 Gensim 快速上手 Word2Vec
Gensim 是最常用、最稳定的 Python 实现。安装后只需几行代码即可训练:
from gensim.models import Word2Vec from gensim.utils import simple_preprocess假设 sentences 是分好词的列表,例如 [['我', '喜欢', '猫'], ['她', '养', '狗']]
sentences = [simple_preprocess(line) for line in open('corpus.txt', encoding='utf-8')]
立即学习“Python免费学习笔记(深入)”;
model = Word2Vec( sentences=sentences, vector_size=100, # 向量维度 window=5, # 上下文窗口大小 min_count=1, # 忽略出现少于该次数的词 workers=4, # 并行线程数 sg=1 # 1=Skip-gram, 0=CBOW(通常 Skip-gram 对低频词更鲁棒) )
训练完成后可直接查词向量、找相似词:
-
model.wv['猫']→ 获取“猫”的100维向量 -
model.wv.most_similar('人工智能', topn=5)→ 返回语义最接近的5个词 -
model.wv.similarity('北京', '上海')→ 计算两词余弦相似度
中文处理的关键细节
Word2Vec 本身不区分语言,但中文需额外注意分词质量——它直接影响语义建模效果:
- 别用空格切分中文,必须先分词(推荐
jieba或pkuseg) - 停用词可保留(Word2Vec 能自动弱化高频无意义词),但明显噪声(如乱码、广告词)应清洗
- 专有名词(如“iPhone14”、“深度学习”)建议合并为单个token,否则会被拆散失义
- 繁体/简体、全角/半角、英文大小写需统一,否则“Python”和“python”会被视为两个词
不是所有场景都该从头训练
小数据+短周期项目,直接加载预训练中文词向量往往更稳更快:
- Chinese-Word-Vectors 提供多种语料(百度百科、维基、微博)训练的开源词向量
- 加载方式:
model = KeyedVectors.load_word2vec_format('sgns.weibo.bigram', binary=False, encoding='utf-8') - 若领域特殊(如医疗、法律),可在预训练向量基础上用领域语料做增量训练(
model.train(..., total_examples=..., epochs=...))










