共计 1732 个字符,预计需要花费 5 分钟才能阅读完成。
传统词表示的局限性
在自然语言处理早期,我们常用 one-hot 编码表示单词。比如有个包含 5 个单词的词典 [“ 苹果 ”,” 香蕉 ”,” 电脑 ”,” 手机 ”,” 笔记本 ”],那么:

- “ 苹果 ” 表示为 [1,0,0,0,0]
- “ 香蕉 ” 表示为 [0,1,0,0,0]
这种方法有两个致命缺点:
- 维度灾难:词典有多大,向量就有多长,百万级词典就需要百万维向量
- 无法表达语义:所有词向量都是相互正交的,无法体现 ” 苹果 ” 和 ” 香蕉 ” 都是水果这种语义关系
Word2Vec 核心思想
Word2Vec 的创新在于提出 ” 相似的词出现在相似的上下文中 ” 的分布式假设。它通过神经网络学习,将单词映射到低维稠密向量空间(通常 50-300 维),在这个空间里:
- 语义相似的词距离更近
- 向量之间可以进行数学运算(比如 ” 国王 - 男 + 女≈女王 ”)
两种模型架构
- CBOW(Continuous Bag-of-Words)
- 根据上下文预测当前词
- 训练速度快,适合小型数据集
-
对高频词效果更好
-
Skip-gram
- 根据当前词预测上下文
- 适合大型语料
- 能更好处理低频词
实战:用 gensim 训练 Word2Vec
下面我们用中文维基百科语料演示完整流程:
import jieba
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
# 1. 数据预处理
def preprocess(text_file):
with open('corpus.txt', 'w', encoding='utf-8') as fw:
with open(text_file, encoding='utf-8') as fr:
for line in fr:
# 分词并去除标点
words = [w for w in jieba.cut(line.strip()) if w.isalnum()]
if words: # 过滤空行
fw.write(''.join(words) +'\n')
# 2. 训练模型
sentences = LineSentence('corpus.txt') # 按行读取语料
model = Word2Vec(
sentences=sentences,
vector_size=100, # 向量维度
window=5, # 上下文窗口
min_count=5, # 忽略低频词
workers=4, # 并行线程
sg=1, # 1=skip-gram, 0=CBOW
hs=0, # 0= 负采样, 1= 层次 softmax
negative=5, # 负采样数
epochs=5 # 迭代次数
)
# 3. 保存模型
model.save('word2vec.model')
效果验证与应用
训练完成后可以这样使用:
# 加载模型
model = Word2Vec.load('word2vec.model')
# 找相似词
print(model.wv.most_similar('人工智能', topn=5))
# 输出: [('机器学习',0.89), ('深度学习',0.85), ('AI',0.83),...]
# 词语类比
print(model.wv.most_similar(positive=['国王', '女'],
negative=['男'],
topn=1))
# 可能输出: [('女王',0.78)]
关键参数调优建议
- 向量维度:
- 小型语料 (100MB 以下):50-100 维
- 中型语料 (1GB 左右):100-200 维
-
大型语料:200-300 维
-
窗口大小:
- 通用领域:5-10
-
专业术语:可缩小到 2 -3
-
训练技巧:
- 使用 jieba 等分词工具时,建议关闭新词发现
- 大数据集优先选用 Skip-gram+ 负采样
- 小数据集可尝试 CBOW+ 层次 Softmax
常见问题排查
Q:模型输出的相似词不合理怎么办?
A:检查语料质量,清洗重复 / 无关内容;增加 min_count 过滤低频噪声
Q:训练速度太慢?
A:减小 vector_size 或 window;使用负采样而非层次 Softmax
Q:如何评估模型好坏?
A:除了人工检查相似词,可用词类比任务准确率作为客观指标
进阶方向
掌握了基础 Word2Vec 后,可以继续探索:
- 动态词向量(ELMo、BERT)
- 加入词性、句法特征
- 领域自适应(在医疗 / 金融等专业语料上微调)
希望这篇指南能帮助你快速上手词嵌入技术,为后续的文本分类、推荐系统等任务打好基础!
正文完
发表至: 未分类
近三天内
