2.7 负采样(Negative Sampling)
Last updated
Last updated
算法要做的是构造一个新的监督学习问题:给定一对单词,比如orange和juice,去预测这是否是一对上下文词-目标词(context-target)
在这个例子中orange和juice就是个正样本,用1作为标记,orange和king就是个负样本,标为0。要做的就是采样得到一个上下文词和一个目标词,中间列叫做词(word)。然后:
生成一个正样本,先抽取一个context,在一定词距内比如说正负10个词距内选一个target,生成这个表的第一行,即orange– juice -1的过程
生成一个负样本,用相同的context,再在字典中随机选一个词,如king、book、the、of,标记为0。因为如果随机选一个词,它很可能跟orange没关联
如果从字典中随机选到的词,正好出现在了词距内,比如说在上下文词orange正负10个词之内,也没关系,如of被标记为0,即使of的确出现在orange词的前面
接下来将构造一个监督学习问题,学习算法输入,即输入这对词(编号7),要去预测目标的标签(编号8),即预测输出
如何选取:
小数据集的话,从5到20,数据集越小就越大
如果数据集很大,就选的小一点。对于更大的数据集就从2到5
学习从映射到的监督学习模型:
编号2是新的输入,编号3是要预测的值。记号表示context,记号表示可能的target,表示0和1,即是否是一对context-target。要做的是定义一个逻辑回归模型,给定输入的,对的条件下,的概率,即:
如果输入词是orange,即词6257,要做的就是输入one-hot向量,和相乘获得嵌入向量,最后得到10,000个可能的逻辑回归分类问题,其中一个(编号4)将会是用来判断目标词是否是juice的分类器,其他的词比如下面的某个分类器(编号5)是用来预测king是否是目标词
选取了context orange之后,如何选取负样本:
通过单词出现的频率进行采样:导致一些类似a、the、of等词的频率较高
均匀随机地抽取负样本:没有很好的代表性
(推荐):
negative sampling中某个固定的正样本对应个负样本,即模型总共包含了个binary classification。对比之前10000个输出单元的softmax分类,negative sampling转化为个二分类问题,每次迭代并不是训练10000个,而仅训练其中个,计算量要小很多,大大提高了模型运算速度
这种方法就叫做负采样(Negative Sampling): 选择一个正样本,随机采样个负样本
这种方法处于上面两种极端采样方法之间,即不用频率分布,也不用均匀分布,而采用的是对词频的除以词频整体的和进行采样的。其中,是语料库中观察到的某个词的词频