| 第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的核心思路是构建一个霍夫曼树,每个叶节点代表一个词汇,而预测一个词汇就是沿着树走的一条路径,对应的也就是一个不断重复的二分类问题,目标函数就可以变化为: |
| | + | |
| | | | |
| | =='''应用领域'''== | | =='''应用领域'''== |