skip-gram目的:给定一个单词,预测其它单词出现的概率。
模型基本组件:
- one-hot vector: wi,为中心节点的独热表示,大小为 1×V, V为节点个数;
- First matrix:W1,第一个矩阵,大小为 V×d,每一行表示一个节点的表示向量;
- Second matrix:W2,第二个矩阵,大小为 d×V,每一列表示一个节点的表示向量;
- Similarity vector:sc,大小为 1×V,其中元素表示两个节点的相似性,用内积来表示;
- Softmax Function:∑k=1Ve(vi,vj)e(vi,vj),可以将向量变成一个和为1的概率分布,其中 vi 表示中心词i的表示向量,大小为 1×d。
预测过程
Step1:vi=wi×W1,得到中心词i的表示向量,大小为 1×d;
Step2:sc=vi×W2,这一步可以得到中心词 i 与其它单词的相似性,值越大说明两个向量越相似;
Step3:Softmax(sc),输出每个单词出现的概率,依据概率大小进行预测。
模型训练
假设:近邻的两个单词,其表示向量应该是相似的。
将所有邻近的单词对依次作为输入进行训练,以单词 i 和单词 j 为例,其向量表示分别为 vi 和 vj,则可以通过最大化似然函数来训练模型,即最大化 P(wj∣wi),加上 log,并且最小化其负数,目标函数变为:−log(P(wj∣wi))。因为
P(wj∣wi)=∑k=1Ve(vi,vj)e(vi,vj)
所以,模型优化目标为:
min L=−log(∑k=1Ve(vi,vj)e(vi,vj))
可变形为:
min L=−[(vi,vj)−log(∑k=1Ve(vi,vj))]
上式更新策略:采用梯度下降法,分别对 vi 和 vj 求偏导,具体为:
dvidL=−[vj−∑k=1V(e(vi,vk)∑k=1V(e(vi,vk)×vk)]
设学习率为 r1,则 vi 的更新规则为:
vi=vi−r1×(−[vj−∑k=1V(e(vi,vk)∑k=1V(e(vi,vk)×vk)])
dvjdL=−[vi−vi×∑k=1Ve(vi,vk)e(vi,vj)]
设学习率为 r2,则 vj 的更新规则为:
vj=vj−r2×(−[vi−vi×∑k=1Ve(vi,vk)e(vi,vj)])
存在问题
模型训练更新 W1 和 W2 时计算量太大,特别是每一次 ∑k=1Ve(vi,vk) 这一项的计算,如果训练的样本数特别大的话,这个计算量过大。
自己的推导过程:

参考文章:
直观理解skip-gram模型
skip-gram,单词向量化算法及其数学原理