赞
踩
一、理解负采样之前,需要先回顾一下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的函数图像来判断)。
以上内容参照深度学习进阶 (豆瓣),根据个人理解整理而成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。