更改

添加803字节 、 2025年6月6日 (五) 14:53
小
无编辑摘要
第85行: 第85行:  
'''投影层:'''
 
'''投影层:'''
   −
输入向量与嵌入矩阵 <math>W \in \mathbb{R}^{V \times d}</math> 相乘,得到词向量 <math>h</math>:
+
输入向量与嵌入矩阵 <math>W \in \mathbb{R}^{V \times d}</math> 相乘,得到词向量 <math>\mathbf{h}</math>:
 
<math>\mathbf{h} = W^\top \mathbf{v}</math>
 
<math>\mathbf{h} = W^\top \mathbf{v}</math>
   第117行: 第117行:  
'''负采样(Negative Sampling):'''
 
'''负采样(Negative Sampling):'''
   −
负采样的核心思想在于将原始问题转换成一个二分类问题,让模型只区分正样本和负样本,例如在Skip-gram中,对于一个中心词 <math>w_t</math> 和一个正样本上下文词 <math>w_o</math>,原始的模型目标是最大化它们的联合概率:<math>p(w_o \mid w_t)</math>。而负采样
+
负采样的核心思想在于将原始问题转换成一个二分类问题,让模型只区分正样本和负样本,例如在Skip-gram中,对于一个中心词 <math>w_t</math> 和一个正确的上下文词 <math>w_o</math>,正确的上下文词被称为正样本。同时人为给出错误的上下文文本 <math>w'_{o_i}</math>,也就是负样本。负样本的采样一般按照词频<math>U</math>的<math>3/4</math>次方作为采样概率,即:
−
其中,\sigma是sigmoid函数,同时最小化负样本的出现概率:
+
<math>
 +
P(w'_{o_i}) \propto U(w'_{o_i})^0.75
 +
</math>
 +
负采样目的在于最小化负样本与中心词一起出现的概率,同时最大化正样本与中心词一起出现的概率,将softmax替换为sigmoid函数,得到新的损失函数:
    +
<math>
 +
\mathcal{L}_{Skip-gram} = log\sigma(\mathbf{v}^\top_{w_o} \mathbf{v}_{w_t}) + \sum^{k}_{i=1}log\sigma(-\mathbf{v}^\top_{w'_{o_i}} \mathbf{v}_{w_t})
 +
</math>
   −
合并起来就是新的目标函数:
+
其中,<math>\sigma</math> 是sigmoid函数,<math>k</math> 为负样本个数。同样,该方法也能应用在CBOW模型中,只是负样本变成了中心词:
−
 
+
<math>
−
 
+
\mathcal{L}_{CBOW} = log\sigma(\mathbf{v}^\top_{w_t} \mathbf{h}) + \sum^{k}_{i=1}log\sigma(-\mathbf{v}^\top_{w'_{o_i}} \mathbf{h})
−
这样一来,计算的代价下降了许多。
+
</math>
−
 
+
不过在实际应用中大多数时候使用Skip-gram,因此负采样在CBOW中的应用很少。
    
'''层次 Softmax(Hierarchical Softmax):'''
 
'''层次 Softmax(Hierarchical Softmax):'''
    
层次softmax的核心思路是构建一个霍夫曼树,每个叶节点代表一个词汇,而预测一个词汇就是沿着树走的一条路径,对应的也就是一个不断重复的二分类问题,目标函数就可以变化为:
 
层次softmax的核心思路是构建一个霍夫曼树,每个叶节点代表一个词汇,而预测一个词汇就是沿着树走的一条路径,对应的也就是一个不断重复的二分类问题,目标函数就可以变化为:
 +
    
=='''应用领域'''==
 
=='''应用领域'''==
130

个编辑