【转载】负采样算法

任何采样算法都应该保证频次越高的样本越容易被采样出来。基本的思路是对于长度为1的线段,根据词语的词频将其公平地分配给每一个词语:html

image.png

counter就是w的词频。算法

因而咱们将该线段公平地分配了:数组

image.png

接下来咱们只要生成一个0-1之间的随机数,看看落到哪一个区间,就能采样到该区间对应的单词了,很公平。spa

但怎么根据小数找区间呢?速度慢可不行。htm

word2vec用的是一种查表的方式,将上述线段标上M个“刻度”,刻度之间的间隔是相等的,即1/M:blog

image.png

接着咱们就不生成0-1之间的随机数了,咱们生成0-M之间的整数,去这个刻度尺上一查就能抽中一个单词了。get

在word2vec中,该“刻度尺”对应着table数组。在具体实现时,不是直接用counter(w),而是对词频取了α次幂,通常去α=3/4=0.75,即:it

image.png

这个幂其实是一种“平滑”策略,可以让低频词多一些出场机会,高频词贡献一些出场机会,劫富济贫。table

原文:word2vec原理推导与代码分析原理



MARSGGBO原创




2019-1-1