Word2Vec
Word2Vec有两种形式,一种是Skip-gram,另一种是CBOW。
- Skip-gram:已知中心词 \(w_c\),预测上下文词 \(w_o\)
- CBOW:已知上下文词 \(C=\{w_{c−m},…,w_{c−1},w_{c+1},…,w_{c+m}\}\),预测中心词 \(w_c\)
1. Softmax 损失函数
公式:
\[L_{word2vec} = -\frac{1}{|B|} \sum_{(w_i, C_i) \in B} \log \frac{\exp(w_i \cdot C_i)}{\sum_{j \in V} \exp(w_i \cdot C_j)} \]含义
- 目标:最大化中心词 \(w_i\) 和上下文词 \(C_i\) 的相似性,同时最小化中心词 \(w_i\) 与其他非上下文词的相似性。
- 问题:每次计算梯度时,都需要遍历整个词汇表 \(V\),计算所有词的概率。这在大规模语料中计算量非常大,效率较低。
2. 负采样(Negative Sampling,NEG)
为了解决 Softmax 的计算问题,Word2Vec 引入了负采样(NEG)方法,通过对部分负样本进行优化,避免计算整个词汇表 \(V\)。
公式:
\[L_{word2vec} = \frac{1}{|B|} \sum_{(w_i, C_i) \in B} \left[ \log(1 + \exp(-w_i \cdot C_i)) + \sum_{j \in S_i} \log(1 + \exp(w_i \cdot C_j)) \right] \]含义
- 正样本:使用 \(w_i\) 和 \(C_i\)(即真实的上下文词)。
- 负样本:从词汇表中随机采样一部分非上下文词(集合 \(S_i\))作为负样本。
- 目的:让中心词 \(w_i\) 和真实上下文 \(C_i\) 的相似性最大化,同时最小化 \(w_i\) 与负样本的相似性。
- 效率提升:负采样只需要计算一小部分负样本,大幅减少了计算复杂度。
- \(B\):代表一个Batch,其中一条样本(\(w_i\), \(c_i\))由一个中心词 \(w_i\) 和其上下文 \(C_i\) 组成
优点
- 显著降低了计算复杂度,特别是当词汇表很大时。
- 性能通常足够好,尤其是在实际应用中。