| 第118行: |
第118行: |
| | '''负采样(Negative Sampling):''' | | '''负采样(Negative Sampling):''' |
| | | | |
| − | 负采样的核心思想在于将原始问题转换成一个二分类问题,让模型只区分正样本和负样本,例如在Skip-gram中,对于一个中心词 <math>w_t</math> 和一个正确的上下文词 <math>w_o</math>,正确的上下文词被称为正样本。同时人为给出错误的上下文文本 <math>w'_{o_i}</math>,也就是负样本。负样本的采样一般按照词频<math>U</math>的<math>3/4</math>次方作为采样概率,即: | + | 负采样的核心思想在于将原始问题转换成一个二分类问题,让模型只区分正样本和负样本,例如在Skip-gram中,对于一个中心词 <math>w_t</math> 和一个正确的上下文词 <math>w_o</math>,正确的上下文词被称为正样本。同时人为给出错误的上下文文本 <math>w'_{o_i}</math>,也就是负样本。负样本的采样一般按照词频 <math>U</math> 的 <math>3/4</math> 次方作为采样概率,即: |
| | | | |
| | <math> | | <math> |
| 第140行: |
第140行: |
| | '''层次 Softmax(Hierarchical Softmax):''' | | '''层次 Softmax(Hierarchical Softmax):''' |
| | | | |
| − | 层次softmax的核心思路是构建一个霍夫曼树,每个叶节点代表一个词汇,而预测一个词汇就是沿着树走的一条路径,对应的也就是一个不断重复的二分类问题,目标函数就可以变化为:
| + | 层次softmax的核心思路是根据词汇的词频构建一个霍夫曼树,每个叶节点代表一个词汇,而预测一个词汇就是沿着树走的一条路径,对应的也就是一个不断重复的二分类问题,因此每个目标词汇 <math>w_t</math> 都会被编码为一串二进制编码: |
| | + | <math>code(w_t)=(b_1, b_2, \ldots, b_L), b_i \in {0,1}</math> |
| | + | 而这条路径上的非叶子节点被记为 <math>n_1, n_2, \ldots, n_L</math>。因此,在Skip-gram中,给定中心词 <math>w_t</math> 与上下文词 <math>w_o</math> 之后,上下文词的条件概率就变成了: |
| | + | |
| | + | <math>P(w_o \mid w_t) = \prod_{i=1}^L(w_o) \sigma (|1-b_i|\mathbf{v}_{n_i}^\top\mathbf{v}_{w_t})</math> |
| | + | |
| | + | 其中<math>\mathbf{v}_{n_i}</math>是路径节点的向量,相当于原始输出矩阵<math>W'</math>。损失函数为最大化词对的出现概率: |
| | + | |
| | + | <math>\mathcal{L} = - \sum_{(w_t, w_o) \in D} \log P(w_o \mid w_t)</math> |
| | + | |
| | + | 同样,层次softmax也可以应用于CBOW中,条件概率中的目标词词向量更换为了上下文词汇的平均词向量: |
| | + | |
| | + | <math> |
| | + | P(w_t \mid \text{context}) = \prod_{i=1}^{L(w_t)} \sigma\left( [1 - b_i(w_t)] \cdot \mathbf{v}_{n_i}^\top \mathbf{h} \right) |
| | + | </math> |
| | + | |
| | + | 由此也能够得到对应的损失函数。 |
| | | | |
| | =='''应用领域'''== | | =='''应用领域'''== |