Word2Vec
Word2Vec是词嵌入领域的里程碑工作,它让词向量能够捕获语义关系,为现代NLP奠定了基础。理解Word2Vec是掌握词嵌入技术的起点。
学习难度:入门·阅读时间:约10分钟
Word2Vec概述
历史背景
2013年,Google的Mikolov等人提出了Word2Vec:
- 之前的词表示方法(如TF-IDF)无法捕获语义
- Word2Vec让相似词有相似的向量
- 引发了词嵌入研究的热潮
核心思想
分布式假设:
"出现在相似上下文中的词具有相似的含义"
两个模型架构
- CBOW:根据上下文预测目标词
- Skip-gram:根据目标词预测上下文
CBOW模型
模型结构
Continuous Bag of Words:
- 输入:上下文词的one-hot编码
- 词嵌入层:将one-hot映射为词向量
- 平均:对上下文词向量取平均
- 输出层:预测目标词的概率分布
示例
句子:"我 喜欢 学习 AI"
- 上下文:["我", "学习", "AI"]
- 目标词:"喜欢"
- 模型根据上下文预测"喜欢"
特点
- ✅ 训练速度快
- ✅ 对小数据集效果好
- ❌ 忽略上下文顺序
Skip-gram模型
模型结构
Skip-gram与CBOW相反:
- 输入:目标词的one-hot编码
- 词嵌入层:获取目标词的词向量
- 输出层:预测每个上下文位置的概率分布
示例
句子:"我 喜欢 学习 AI"
- 目标词:"喜欢"
- 预测上下文:["我", "学习", "AI"]
特点
- ✅ 对罕见词效果更好
- ✅ 能学习更细粒度的语义
- ❌ 训练时间较长
CBOW vs Skip-gram
| 特性 | CBOW | Skip-gram |
|---|---|---|
| 训练速度 | 快 | 慢 |
| 罕见词 | 一般 | 好 |
| 小数据集 | 好 | 一般 |
| 大数据集 | 一般 | 好 |
优化技术
计算瓶颈
原始softmax输出层计算成本高:
P(w|c) = exp(v_w · v_c) / Σ exp(v_i · v_c)
分母需要对词汇表中所有词求和,计算量大。
层次Softmax
- 使用哈夫曼树组织词汇表
- 将计算复杂度从O(V)降到O(log V)
负采样(Negative Sampling)
更流行的优化方法:
- 只更新正样本和少量负样本
- 将多分类问题转化为二分类
- 极大降低计算成本
负采样公式
最大化:log σ(v_w · v_c) + Σ log σ(-v_neg · v_c)
词向量特性
语义相似性
相似的词在向量空间中距离近:
- 相似度通常用余弦相似度衡量
- "猫"和"狗"的向量比"猫"和"汽车"更近
类比关系
词向量支持向量运算表达关系:
国王 - 男人 + 女人 ≈ 王后
北京 - 中国 + 法国 ≈ 巴黎
可视化
通过降维可视化词向量:
- 语义相关的词聚类在一起
- 可以发现词之间的关系结构
应用场景
下游NLP任务
- 文本分类:用词向量表示文本
- 命名实体识别:作为特征输入
- 情感分析:捕获语义信息
- 机器翻译:跨语言词向量
推荐系统
- Item2Vec:将物品序列视为句子
- 学习物品的向量表示
- 用于相似物品推荐
局限性
- 无法处理多义词(一个词一个向量)
- 不考虑上下文(静态嵌入)
- 后续被上下文嵌入(BERT等)超越