word2vec简解
目录
对word2vec做一下总结,便于自己快速复习相关概念
一、Case #
先来一个case,便于快速理解Word2vec
我们有一些text,是一个一个句子,样本的搜集过程如上。设定window size为2,target word,窗口内的单词作为context word。
把样本喂入模型进行训练,输入的时候,每一条样本先做ont-hot encoding,变成V维的向量(V是vocabulary大小),target word那一维是1,其余是0。 label中 target word的context words的地方都标为1,训练网络。
经过训练会产出两个权重矩阵,都可以作为word的vector向量。
二、Model #
word2vec 有两种模型,分别是CBOW和Skip-gram
2.1 CBOW #
cbow模型输入是context word,去预估target word。
feed forward #
中间隐层神经单元h是求avg 输出是求softmax
lossfunc
back propagate #
Update equation for hidden→output weights #
权重更新
Update equation for input→hidden weights #
2.2 Skip-gram #
loss func
三、Tricks #
不管是CBOW还是Skip-gram,在进行权重学习的时候,input->hidden中的权重矩阵W
比较容易更新,因为每次只用更新input维中激活的w。但是在学习hidden->output的权重矩阵W'
的时候,如果vocabulary很大,学习效率就低,因为需要遍历每个word。 word2vec提供两种trick来提高学习的效率
Hierarchical Softmax #
在hidden->output的过程中,用Hierarchical Softmax替换了原始的Softmax。如图用L(w2)
表示从root到w2的距离。中间的每一个非叶子节点定义为v‘
, n(w,j)表示第j个 unit on the path from root to word w
首先,我们定义w2是output word的概率为从root随着路径走到w2的概率
。
向左走的概率
向右走的概率
走到w2的概率
走到所有叶子节点的概率累加肯定为1
将左右的情况抽象化,ch 函数表示是n的左节点,那么output 的概率可以表示为
loss func
那么在hidden -> output层,我一共只需要更新 L(w)个vector,L(w)近似于log(V),实际需要更新的向量只有log(v)个,这个计算量级大大减少了
input->output这样更新
Negative Sampling #
只采样部分负例进行更新
Reference #
[1] http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/ [2] http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/ [3] word2vec Parameter Learning Explained https://arxiv.org/abs/1411.2738 Xin Rong