Word2Vec中负采样的理解-非原创
Word2Vec:
word2vec的一个精髓是把语言模型的那一套softmax加速方法也给顺便优化了,用一个看似开脑洞的“负采样”方法来代替传统的层级softmax和NCE做法。而这个名字高大上的“负采样”到底是什么呢?
负采样:
我们知道对于训练语言模型来说,softmax层非常难算,毕竟你要预测的是当前位置是哪个词,那么这个类别数就等同于词典规模,因此动辄几万几十万的类别数,算softmax函数当然很费力啦。
但是,如果我们的目标不在于训练一个精准的语言模型,而只是为了训练得到语言模型的副产物-词向量,那么其实只需要用这里隐含的一个计算代价更小的“子任务”就好啦。想一想,给你10000张写有数字的卡片,让你找出其中的最大值,是不是特别费力?但是如果把里面的最大值事先抽出来,跟五张随机抽取的卡片混到一起,让你选出其中的最大值,是不是就容易多啦?
负采样就是这个思想,即不直接让模型从整个词表找最可能的词了,而是直接给定这个词(即正例)和几个随机采样的噪声词(即采样出来的负例),只要模型能从这里面找出正确的词就认为完成目标啦。所以这个想法对应的目标函数即:
然后即最大化正例的似然,最小化负例的似然。(没理解。)
这种负采样的思想被成功的应用在了BERT模型中,只不过粒度从词变成了句子。