词向量
词向量(Word Embedding)将词映射到低维稠密向量空间,能够捕捉词之间的语义关系,是现代NLP的基石。
01Word2Vec
Word2Vec由Mikolov等人于2013年提出,通过神经网络学习词的向量表示,是词向量技术的里程碑。
Word2Vec原理
Word2Vec的核心思想是"分布假设":具有相似上下文的词具有相似的含义。通过预测词本身或上下文来学习词向量。
分布式表示 vs One-Hot
- One-Hot:正交、稀疏、高维,无法表达相似性
- 分布式表示:稠密、低维、语义相似词距离近
CBOW与Skip-gram
CBOW(Continuous Bag-of-Words)
通过上下文预测中心词
输入:[wt-2, wt-1, wt+1, wt+2] → 输出:wt
适合小型数据集,效果通常更好
Skip-gram
通过中心词预测上下文
输入:wt → 输出:[wt-2, wt-1, wt+1, wt+2]
适合大型语料库,对稀有词效果好
Word2Vec的神奇特性
- 语义类比:vec("king") - vec("man") + vec("woman") ≈ vec("queen")
- 相似词聚类:同义词、反义词自然聚在一起
- 线性结构:词向量可以进行代数运算
02GloVe
GloVe(Global Vectors)结合了全局矩阵分解和局部上下文窗口的优点,是另一种重要的词向量方法。
GloVe原理
GloVe基于词共现矩阵,通过无监督学习获取词的向量表示。核心思想是:词向量的点积应该与共现概率的对数成正比。
共现矩阵
统计词i在词j上下文中出现的次数 Xij,构建共现矩阵。
目标函数
J = Σ f(Xij)(wiTw̃j + bi + b̃j - log Xij)²
wi 是词向量,w̃j 是上下文向量,b是偏置,f是权重函数
GloVe训练
权重函数 f(x)
避免过频词主导,同时保留稀有词的信息:
f(x) = (x/xmax)α if x < xmax, else 1
通常 xmax = 100, α = 0.75
Word2Vec vs GloVe
- Word2Vec:只用局部上下文,更关注词的共现模式
- GloVe:利用全局共现统计信息,收敛更快
- 两者在很多任务上表现相当,实际选择可根据数据特点决定
03FastText
FastText由Facebook提出,通过子词(subword)信息增强词向量,对罕见词和未登录词效果好。
FastText原理
FastText将每个词表示为字符N-gram的集合,然后对所有N-gram的向量求和得到词向量。
示例:词 "where" with N=3
字符级trigram:<wh, whe, her, ere, re>
加上词边界:<where>
词向量 = sum(所有trigram的向量)
使用场景
FastText的优点
- 处理未登录词:OOV词可以由子词组合表示
- 捕捉词缀信息:英语的-ing、-ed等词缀信息
- 多语言适用:特别适合形态丰富的语言(德语、土耳其语等)
- 训练快速:使用层次Softmax加速
词向量方法对比
| 方法 | 特点 | 适用场景 |
|---|---|---|
| Word2Vec | 快速、简单 | 通用场景 |
| GloVe | 全局统计 | 语义任务 |
| FastText | 子词信息 | 形态丰富语言、OOV |