一***有两种模式,以及两种近似训练的方法,个人认为 CBOW 搭配 negative-sampling ,以及 SkipGram 搭配 H-softmax ,所以以下小节按这个顺序排列。
训练结束后,对于词语 ,获得其作为中心词和背景词的情况下的两组词向量 和
中心词使用 表示,背景词使用 表示。
对于词语 ,当它作为中心词 时,它的 个背景词为 ,取背景词的平均向量。则用这些背景词生成它这个中心词的概率为, 个背景词生成它的向量相乘数值 ( 个背景词生成其他词语的向量相乘数值之和),即是
令 ,则上式取log后的形式为
则求整体最大化似然估计
因为求梯度,除了对应变量外其他数值都可以视为常数,所以 , 为其余常数,求梯度时可以不影响结果,则求 的其中一个背景词 生成中心词 的梯度为,
这个式子可以进一步写作,
改进的部分主要考虑词表大小的运算。 softmax的运算考虑了背景词是词典中任何一个词的可能(该运算在分母)。
注意到 中,第二项是考虑了“给定背景词,其生成整个词表中每个词成为中心词”的情况,所以其计算复杂度为 。一种缓解的方法是只考虑词表中部分词能成为中心词的情况,例如认为最多只有 个词能成为中心词,则计算复杂度则降到 。
所以对于之前损失函数需要改变,
之前的损失函数,
之后的损失函数(同时给分母加一防止分母为0,因为采样少数后可能出现0的情况),
其中
其主要更改了中心词生成背景词的条件概率。中心词的生成变成了两个部分(背景词 和噪声词 ):
中心词和背景词同时出现, 中心词和噪声词不同时出现
其中 ,即是 sigmoid 函数,这里用于计算概率
使用指数表达方式再加上平滑后,
主要目的为使用一个词来预测它在文本序列周围的词。
对于长度为 的一句话,整体最大似然估计
给定任意 作为中心词 ,产生 作为背景词 的概率,使用softmax作为损失函数
整体改变了 Softmax 的计算方式,复杂度由 O(|V|) 下降到对应霍夫曼树的高度
判断函数:到达 路径上第 个节点,“它的左子节点” 是否等于 “到达 路径上第 个节点”
只考虑路径上的非叶子节点涉及的向量,而不再是把所有词表里的词轮流一遍。
其中 ,即是 sigmoid 函数。
举例计算
需要将 的词向量 和根节点到 路径上的非叶子节点向量一一求内积。
在下面的例子中需要向左、向右、再向左遍历。
(这里都是 相乘)
第二个节点因为判断函数为负因为其节点和做子左节点不相同。