基于Skip-gram的Word2Vec词向量训练算法
字数 1397 2025-11-13 04:16:58
基于Skip-gram的Word2Vec词向量训练算法
题目描述
Skip-gram是Word2Vec的一种经典词向量训练算法,其核心思想是通过中心词预测上下文词来学习词向量。例如在句子"The quick brown fox jumps"中,若以"brown"为中心词(窗口大小=2),则需要预测上下文["quick", "fox"]。该算法通过神经网络将词汇映射为低维稠密向量,使得语义相似的词在向量空间中位置接近。
解题过程详解
-
数据预处理
- 构建词汇表:统计文本中所有单词的频率,保留超过设定阈值的单词,为每个词分配唯一编号
- 建立映射字典:创建词到编号(word2index)和编号到词(index2word)的双向映射
- 二次采样:根据词频计算每个词的丢弃概率\(P(w_i)=1-\sqrt{\frac{t}{f(w_i)}}\)(t为阈值,通常取10^-5),避免高频词主导训练
-
训练样本生成
- 设置滑动窗口:定义窗口大小m(通常取5-10),对每个中心词选取前后各m个词作为上下文
- 生成正样本:例如对于序列[我,爱,自然,语言,处理]:
- 中心词"自然"(位置2) → 上下文["爱", "语言", "处理"](窗口=2)
- 得到训练对(自然,爱), (自然,语言), (自然,处理)
-
网络结构设计
- 输入层:one-hot编码向量,维度为词汇表大小V
- 隐藏层:无激活函数的全连接层,维度即词向量维度d(通常50-300维)
- 输出层:维度为V的全连接层接Softmax,计算每个词作为上下文词的概率
-
负采样优化
- 解决Softmax计算瓶颈:将多分类问题转为二分类
- 对每个正样本(中心词w, 上下文c),采样k个负样本(通常k=5-25):
- 从噪声分布\(P(w)\propto f(w)^{3/4}\)中采样k个非上下文词
- 生成训练样本:(w,c,label=1) 和 (w,n_i,label=0)(i=1..k)
- 使用sigmoid交叉熵损失:\(L=-\log\sigma(v_c\cdot v_w)-\sum_{i=1}^k\log\sigma(-v_{n_i}\cdot v_w)\)
-
参数更新过程
- 初始化词向量矩阵W(输入层到隐藏层)和上下文向量矩阵W'(隐藏层到输出层)
- 前向传播:
\(h = W^T x\)(x为中心词的one-hot向量)
\(u_c = W'^T h\)(计算上下文词c的得分)
\(p(c|w)=\sigma(u_c)\)(sigmoid概率) - 反向传播:通过梯度下降更新W和W'中对应非零项的向量
-
训练技巧
- 动态窗口:每次训练时随机取1~m作为实际窗口大小,增加上下文多样性
- 自适应学习率:采用AdaGrad等优化器调整参数更新步长
- 多线程训练:采用Hierarchical Softmax或负采样加速计算
-
结果获取
- 最终使用输入词向量矩阵W作为词向量查找表
- 通过余弦相似度计算词向量间相似度:\(\text{similarity}=\frac{v_a\cdot v_b}{\|v_a\|\|v_b\|}\)
- 可进行词汇类比任务验证:如v(国王)-v(男)+v(女)≈v(女王)
算法特点
- 在大型语料上可有效学习语义和语法规律
- 通过负采样将计算复杂度从O(V)降至O(k)
- 生成的词向量具有线性平移特性,适合作为下游任务的输入特征