word2vec中的subsampling和negative sampling

实现word2vec的skip-gram神经网络训练模型中,通过一个矩阵将输入的n维向量转化为m维向量,考虑到模型输入层和输出层的权重,会产生m*n*2个权重,一般词汇表长度n很大,name调整修正这么多权重使训练速度降低,同时需要大量的训练数据来调整权重防止过拟合,这样又增加了这个网络训练的复杂性。为了解决这个问题,Word2vec的作者又提出了三种方法:

1. 把常用的词组作为一个单词,例如new york经常只代表纽约,与new和york有完全不同的语义,所以把这两个词组合更加合理

2. subsampling:在采样过程中以一定的概率丢弃一些常见的词(猜测太常见可能只表示修饰,并没有具体含义),采样的具体做法这里不做介绍

比如单词the,一般对我们真正想表达的内容没有影响反而出现次数很多,这时我们就可以在采样中删除它 

关于降采样的保留某个单词的概率在论文中一般采用下列公式:

公式里面主要有两个参数:

z(wi):某个单词在词库中出现的概率,wi表示某个具体的单词

0.001:为参数sample的值,控制了降采样的程度,0.001为一般设置的值,sample值越小表示扔掉词的概率越大

当sample为0.001时,这个公式的图像如下:

word2vec中的subsampling和negative sampling_第1张图片

从图中我们可以总结出一些有趣的规律:

(1)当z(wi)<=0.0026时,P(wi)约等于1,我们不会扔掉这些词

(2)当z(wi)<=0.00746时,P(wi)=0.5,表示我们对于这个词公平对待

3. negative sampling:每次训练样本输入后,在反向传播时仅更新部分权重

比如原来的模型需要2*n*m个权重,现在只需要更新2*x*m个权重,一般x<

如下图所示,原来需要更新6个权重,确定负样本之后,只需更新黑色加粗所对应的4个权重

word2vec中的subsampling和negative sampling_第2张图片

那么negative samples怎么确定呢?

假设negative samples =k,则选取词库中k个出现概率最大的词

论文中写到这个概率采用下列公式计算,其中f(wi)表示这个单词在词库中出现的频次

word2vec中的subsampling和negative sampling_第3张图片

0.75这个超参数是试出来的,性能比其他参数好

 

 

 

 

 

 

 

你可能感兴趣的:(RNN)