负采样
然语言处理领域中,判断两个单词是不是一对上下文词(context)与目标词(target),如果是一对,则是正样本,如果不是一对,则是负样本。采样得到一个上下文词和一个目标词,生成一个正样本(positive example),生成一个负样本(negative example),则是用与正样本相同的上下文词,再在字典中随机选择一个单词,这就是负采样(negative sampling)。
假如我们有一个句子“The dog barked at the mailman”。
target 单词 或者input word
首先我们选句子中间的一个词作为我们的输入词,例如我们选取“dog”作为input word;
skip_window
有了input word以后,我们再定义一个叫做skip_window的参数,它代表着我们从当前input word的一侧(左边或右边)选取词的数量。如果我们设置skip_window=2,那么我们最终获得窗口中的词(包括input word在内)就是[‘The’, ‘dog’,‘barked’, ‘at’]。skip_window=2代表着选取左input word左侧2个词和右侧2个词进入我们的窗口,所以整个窗口大小span=2x2=4。
nums_skip
另一个参数叫num_skips,它代表着我们从整个窗口中选取多少个不同的词作为我们的output word,当skip_window=2,num_skips=2时,我们将会得到两组(input word, output word) 形式的训练数据,即(‘dog’, ‘barked’),(‘dog’, ‘the’)。
参考
玛卡瑞纳_a63b https://www.jianshu.com/p/da235893e4a5
例子
batch nums_skip skip_window
窗口长度=2*skip_window +1
在生成样本的过程中,batch是一次生成样本的个数,nums_skip是每次从窗口中选取的数,选定一定轮数,就是batch的值。所以,batch%nums_skip==0
- 一个句子 [1,2,3,4,5,6,7,1,2,3,2],其中每个数字代表一个词。
- batch = 4 nums_skip=1 skip_window = 1
– 窗口 3 [1,2,3] 选1 [1] 或[3] 生成一个batch [2:1]
[2,3,4] … 生成一个batch 。。
…生成4个batch - batch = 4 nums_skip =2 skip_window =1
– 窗口 3 [1,2,3] 选nums_skip=2 生成两个batch [2:1],[2:3]
[2,3,4 ]选nums_skip=2 生成两个batch [3:2],[3:4]
共计4个batch