基于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"]。该算法通过神经网络将词汇映射为低维稠密向量,使得语义相似的词在向量空间中位置接近。

解题过程详解

  1. 数据预处理

    • 构建词汇表:统计文本中所有单词的频率,保留超过设定阈值的单词,为每个词分配唯一编号
    • 建立映射字典:创建词到编号(word2index)和编号到词(index2word)的双向映射
    • 二次采样:根据词频计算每个词的丢弃概率\(P(w_i)=1-\sqrt{\frac{t}{f(w_i)}}\)(t为阈值,通常取10^-5),避免高频词主导训练
  2. 训练样本生成

    • 设置滑动窗口:定义窗口大小m(通常取5-10),对每个中心词选取前后各m个词作为上下文
    • 生成正样本:例如对于序列[我,爱,自然,语言,处理]:
      • 中心词"自然"(位置2) → 上下文["爱", "语言", "处理"](窗口=2)
      • 得到训练对(自然,爱), (自然,语言), (自然,处理)
  3. 网络结构设计

    • 输入层:one-hot编码向量,维度为词汇表大小V
    • 隐藏层:无激活函数的全连接层,维度即词向量维度d(通常50-300维)
    • 输出层:维度为V的全连接层接Softmax,计算每个词作为上下文词的概率
  4. 负采样优化

    • 解决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)\)
  5. 参数更新过程

    • 初始化词向量矩阵W(输入层到隐藏层)和上下文向量矩阵W'(隐藏层到输出层)
    • 前向传播:
      \(h = W^T x\)(x为中心词的one-hot向量)
      \(u_c = W'^T h\)(计算上下文词c的得分)
      \(p(c|w)=\sigma(u_c)\)(sigmoid概率)
    • 反向传播:通过梯度下降更新W和W'中对应非零项的向量
  6. 训练技巧

    • 动态窗口:每次训练时随机取1~m作为实际窗口大小,增加上下文多样性
    • 自适应学习率:采用AdaGrad等优化器调整参数更新步长
    • 多线程训练:采用Hierarchical Softmax或负采样加速计算
  7. 结果获取

    • 最终使用输入词向量矩阵W作为词向量查找表
    • 通过余弦相似度计算词向量间相似度:\(\text{similarity}=\frac{v_a\cdot v_b}{\|v_a\|\|v_b\|}\)
    • 可进行词汇类比任务验证:如v(国王)-v(男)+v(女)≈v(女王)

算法特点

  • 在大型语料上可有效学习语义和语法规律
  • 通过负采样将计算复杂度从O(V)降至O(k)
  • 生成的词向量具有线性平移特性,适合作为下游任务的输入特征
基于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) 生成的词向量具有线性平移特性,适合作为下游任务的输入特征