最后更新于
最后更新于
摒弃Hierarchical Softmax结构, 原因:
我们的训练样本里的中心词是一个很生僻的词, 就要在树结构中探索较深
为了简化模型, 使用Negative Sampling来代替Hierarchical Softmax模型结构
对于中心词, 总计个上下文词, 即为. 由于是语料中存在的上下文关系, 令与为一个正样本. 然后在字典中采样, 得到个和不同的词作为中心词, 这在语料中是不存在的(或者说极大概率是不存在的), 因此将采样到的每个中心词和作为一个负样本.
最后的输出层就演变成了若干个并行的二元逻辑回归层, 其数量与字典中词的数量相同. 每个词对应一个二元逻辑回归层, 有着自己独立的参数.
通过对这一个正样本和个负样本的二元逻辑回归, 更新这个词的逻辑回归参数和每个词的词向量.
Negative Sampling需要采样个负样本. 如果词汇表为, 其大小为, 将长度为1的线段分成份, 每份对应词汇表里的一个词, 每个词对应的线段长度是不一样的, 高频词对应的线段长, 低频词对应线段短. 最简单的计算每个词对应的线段的长度的方法为:
在word2vec论文中使用的函数为:
论文中采用的采样方法具体为: 将长度为1的线段等分成份, 远大于, 这样每个词对应的线段都被划分成若干个更小的线段, 而份中的每一份都会落在某个词对应的线段上. 采样时, 只需要采样出这个位置中的个位置, 对应的线段所属的词就是我们要采样出的负样本单词. 论文中.
示例图如下:
对应的对数似然函数为:
过程
梯度收敛则停止迭代, 否则继续循环上一步
过程
梯度收敛则停止迭代, 否则继续循环上一步
将正例的中心词定义为, 因此就有样本. 最大似然法, 最大化下式:
采用梯度上升法, 每次使用一个样本进行参数更新. 这里我们需要更新的参数为正样本对应的词向量, 以及输出层中对应的二元逻辑回归神经元.
首先是的梯度:
同样求出的梯度:
输入: 训练语料样本, 单侧窗口长度, 负采样的个数
输出: 每个词的词向量, 每个词对应的逻辑回归参数
随机初始化所有的模型参数, 所有词向量
对于每个训练正样本, 负采样出个负样本中心词
对于训练集中的每一个样本, 进行梯度上升:
中间变量
, 计算:
对于中包含的每一个词对应的词向量进行相同的更新:
输入: 训练语料样本, 单侧窗口长度, 负采样的个数
输出: 每个词的词向量, 每个词对应的逻辑回归参数
随机初始化所有的模型参数, 所有词向量
对于每个训练正样本, 负采样出个负样本中心词
对于训练集中的每一个样本, 进行梯度上升:
, 即对上下文中的每个词:
中间变量
, 计算:
对于中包含的每一个词对应的词向量进行相同的更新: