2.7 负采样(Negative Sampling)

算法要做的是构造一个新的监督学习问题:给定一对单词,比如orangejuice,去预测这是否是一对上下文词-目标词(context-target

在这个例子中orangejuice就是个正样本,用1作为标记,orangeking就是个负样本,标为0。要做的就是采样得到一个上下文词和一个目标词,中间列叫做词(word)。然后:

  • 生成一个正样本,先抽取一个context,在一定词距内比如说正负10个词距内选一个target,生成这个表的第一行,即orange– juice -1的过程

  • 生成一个负样本,用相同的context,再在字典中随机选一个词,如king、book、the、of,标记为0。因为如果随机选一个词,它很可能跟orange没关联

如果从字典中随机选到的词,正好出现在了词距内,比如说在上下文词orange正负10个词之内,也没关系,如of被标记为0,即使of的确出现在orange词的前面

接下来将构造一个监督学习问题,学习算法输入xx,即输入这对词(编号7),要去预测目标的标签(编号8),即预测输出yy

如何选取KK

  • 小数据集的话,KK从5到20,数据集越小KK就越大

  • 如果数据集很大,KK就选的小一点。对于更大的数据集KK就从2到5

学习从xx映射到yy的监督学习模型:

编号2是新的输入xx,编号3是要预测的值yy。记号cc表示context,记号tt表示可能的target,yy表示0和1,即是否是一对context-target。要做的是定义一个逻辑回归模型,给定输入的cctt对的条件下,y=1y=1的概率,即:

P(y=1|c,t)=σ(θtTec)P\left( y = 1 \middle| c,t \right) = \sigma(\theta_{t}^{T}e_{c})

如果输入词是orange,即词6257,要做的就是输入one-hot向量,和EE相乘获得嵌入向量e6257e_{6257},最后得到10,000个可能的逻辑回归分类问题,其中一个(编号4)将会是用来判断目标词是否是juice的分类器,其他的词比如下面的某个分类器(编号5)是用来预测king是否是目标词

negative sampling中某个固定的正样本对应kk个负样本,即模型总共包含了k+1k+1binary classification。对比之前10000个输出单元的softmax分类,negative sampling转化为k+1k+1个二分类问题,每次迭代并不是训练10000个,而仅训练其中k+1k+1个,计算量要小很多,大大提高了模型运算速度

这种方法就叫做负采样(Negative Sampling): 选择一个正样本,随机采样kk个负样本

选取了context orange之后,如何选取负样本:

  • 通过单词出现的频率进行采样:导致一些类似a、the、of等词的频率较高

  • 均匀随机地抽取负样本:没有很好的代表性

(推荐)

P(wi)=f(wi)34j=110,000f(wj)34P(w_{i}) = \frac{f( w_{i})^{\frac{3}{4}}}{\sum_{j = 1}^{10,000}{f( w_{j} )^{\frac{3}{4}}}}

这种方法处于上面两种极端采样方法之间,即不用频率分布,也不用均匀分布,而采用的是对词频的34\frac{3}{4}除以词频34\frac{3}{4}整体的和进行采样的。其中,f(wj)f(w_j)是语料库中观察到的某个词的词频

Last updated