实现word2vec 的方法包括skip gram 和 continuous bag of words(CBOW)模型
skip gram模型
这是skip gram模型,中间dx1的向量就是单词的representation ,Vx1的向量是对所有单词出现在某个单词的语境中的可能性,其中的第o行是,表示U这个矩阵的第o行和相乘的结果,要通过softmax归一化才能是概率值。然后这从上到下这3个VX1的向量应该是一样的,因为matrix只有一个,所以可能是画错了。
训练方式是从语料库中取window,只更新window内出现的作为正例,负例则在语料库中随机取两个词作为负例。也就是说,并不是每次都取一整个VXd的矩阵,只需要取其中的一行,比如,当center word为deep时,window中出现了learning这个单词,那么只需要取V×d中对应learning的这一行,这样只得到对应learning这一个单词的score。事实上如果真的去算softmax,你还是需要对所有的单词都算一遍score的,也就是说在每个window你都需要算一个dx1乘以V×d的矩阵乘法。但是这样非常浪费,因为对于一个center word,绝大多数单词并不会出现在他的outside word里面,如果可以只从语料库中随机选取一小部分作为负例,把出现的作为正例,能减少很多计算量。这就是skip gram的内在含义,就是说它并不是真的去算softmax,所以真正的loss函数其实是这样的:第二项是从语料库中随机选取5-10个单词作为负例。另外,不会遍历完整个语料库再进行梯度更新,一般是一个window更新一次或者几个window更新一次