【NLP】word2vec负采样

一、理解负采样之前,需要先回顾一下word2vec的训练流程:

1.初始化一个embedding权重矩阵W1(N*D)→2.根据输入单词直接挑出W1矩阵中对应的行向量→3.相加并求平均得一个向量(1*D)→4.和W2矩阵(D*N)相乘得最终预测置信度(1*N)→5.经过softmax得概率(注:N为词典大小,D为词向量维度)。

二、为什么要负采样?

为了解决计算量过大的问题。由于softmax计算分母要求和,在上文【word2vec的训练流程】的第4步时,每预测一个单词,都要进行一次计算,可以看出计算量和词典大小有关(W2矩阵为D“*N),计算量太大啦!

三、负采样是什么?

既然计算量大的事件起因是softmax,解决办法显而易见:把它干掉!用sigmoid函数进行二分类来代替多分类。

具体做法是在上文【word2vec的训练流程】的第4步,每预测一个词时,不和W2矩阵全部相乘,而是选择所要预测的那个词对应的向量(此为正例)+几个其余的词对应的向量(此为负例)。(这里如果不懂需要再抠抠word2vec训练流程的细节)

四、那么,负例如何选择?

依据语料库中对词语频率的统计,让高频单词容易被抽到,稀有单词不容易被抽到,因为稀有单词很难遇到,处理好高频单词才比较重要。

小细节:为了防止低频单词完全被遗忘,可以将各个概率乘以小于1的次方,这样大概率能稍微一点,小概率能稍微大一点(可以根据指数小于1的函数图像来判断)。

以上内容参照深度学习进阶 (豆瓣),根据个人理解整理而成。

你可能感兴趣的:(自然语言处理,word2vec,机器学习)