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