@evilking
2018-05-01T00:44:21.000000Z
字数 7227
阅读 4237
NLP
本篇介绍基于 Negative Sampling 的 CBOW和 Skip-gram模型.Negative Sampling(简称为 NEG)是 NCE(Noise Contrastive Estimation)的一个简化版本,目的是用来提高训练速度并改善所得词向量的质量.与 Hierarchical Softmax 相比,NEG 不再使用(复杂的)Huffman树,而是利用(相对简单的)随机负采样,能大幅度提高性能,因而可作为 Hierarchical Softmax 的一种替代.
在 CBOW 模型中,已知词 的上下文 ,需要预测 ,因此,对于给定的 ,词 就是一个正样本,其它词就是负样本.负样本那么多,该如何选取呢?
假定现在已经选好了一个关于 的负样本子集 .且对 ,定义
对于一个给定的正样本 ,我们希望最大化
为什么要最大化 呢?让我们先来看看 的表达式,由上面两式得:
为了下面梯度推导方便起见,将上式花括号里的内容简记为 ,即
接下来考虑 关于 的梯度,同样利用 中 和 的对称性,有
下面以样本 为例,给出基于 Negative Sampling 的 CBOW 模型中采用随机梯度上升法更新各参数的伪代码.
注意,步 7 和步 8 不能交换次序,即 要等贡献到 后才更新.
有了 Hierarchical Softmax 框架下由 CBOW 模型过渡到 Skip-gram 模型的推导经验,这里,我们任然可以这样做.首先,将优化目标函数由原来的
下面以样本 为例,给出基于 Negative Sampling 的 Skip-gram 模型中采用随机梯度上升法更新各参数的伪代码:
顾名思义,在基于 Negative Sampling 的 CBOW 和 Skip-gram 模型中,负采样是个很重要的环节,对于一个给定的词 ,如何生成 呢?
词典 中的词在语料 中出现的次数有高有低,对于那些高频词,被选为负样本的概率就应该比较大,反之,对于那些低频词,其被选中的概率就应该比较小.这就是我们对采样过程的一个大致要求,本质上就是一个带权采样的问题.
下面先用一段通俗的描述来帮助读者理解带权采样的机理.
设词典 中的每一个词 对应一个线段 ,长度为
接下来谈谈 word2vec 中的具体做法: 记 ,这里 表示词典 中第 个词,则以 为剖分节点可得到区间 上的一个非等距剖分,为其 个剖分区间.进一步引入区间 上的一个等距离剖分,剖分节点为 ,其中 ,具体如下图所示:
将内部剖分节点 投影到非等距剖分上,可建立 与区间 (或者说 ) 的映射关系
指得一提的是,word2vec 源码中为词典 中的词设置权值时,不是直接用 ,而是对其作了 次幂,其中 ,即变成了