噪声对比估计的神经语言模型

噪声对比估计的神经语言模型


GAN、skip-gram都提到或用到了NCE(Noise Contrastive Estimation),在NLP领域首次应用NCE就是这篇文章了

A fast and simple algorithm for training neural probabilistic language models

简介

以极大似然估计为目标的神经语言模型,往往受到训练时间长的困扰,Bengio为了提高速度提出对负样本进行重要度负采样又非常不稳定,这篇文章借鉴了首先应用于图像领域的NCE方法,在不损失效果的同时,极大地节省了训练时间,且结果相当稳定。

用极大似然估计需要计算目标概率对非目标概率的比值,后者需要遍历所有数据,不需要反复迭代的统计模型尚可,而对如神经网络这样需要反复迭代去拟合目标函数的模型,开销是巨大的,而NCE告诉人们,不需要遍历,直接从某个分布生成一些负例就好。

模型

语言模型

语言模型的任务就是给定上文(w1,...,wt-1),预测当前词(wt)的概率是多少,最原始的模型就是ngram,可以直接统计得到,在神经网络中,条件概率可以表示为当前词的得分,与其他词得分总和的比值,归一化的形式如下:

h表示上文,w为当前词

极大似然学习过程

直接对语言模型参数求导

右侧需要遍历所有词,开销巨大

重要度采样

修改上式右侧,以对某个分布的采样的结果为负例,得到

需要注意的是,v(xj)=exp(s(xj,h))/Q(xj),数据从分布Q采样,v相当于一个权重,计为采样在上文的得分与分布概率之比,既然是概率之比,取值区间就是0到无穷,因此这个模型极不稳定,文章的作者基本上没有取得收敛结果

噪声对比估计

其实文章提出的模型只在上面的基础上做了一点小小的改动,把概率的比改成目标概率比上总和,这样重要度的取值就在0到1之间

与极大似然相比,由于参数减少了,训练速度提升10倍以上

其他细节

负样本越多,效果越好,下面是困惑度的结果,ML表示极大似然(Maximum Mikelihood)

负采样的分布影响效果,下面是unigram采样和均匀分布采样的对比结果

用语言模型来做完形填空效果也不错,甚至超过了之前的最佳结果

用语言模型得到句子的打分,取打分最高的,这样可以同时考虑到空白处左右两侧的概率

讨论

虽然是对性能的一点小小改进,但影响巨大,改动是简单的,知道怎么改是困难的,到底好不好,用了才知道。思想已经很普遍,当只有正样本时,我们往往随机抽取样本作为负例,但将之总结成模型甚至理论,则是另一重境界。


你可能感兴趣的:(机器学习与自然语言处理)