导语
PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提供了不同的神经网络模型供大家学习和使用。本周推文目录如下:
周三:【词向量】Hsigmoid加速词向量训练
周四:【词向量】 噪声对比估计加速词向量训练
周五:【RNN】使用RNN语言模型生成文本
词向量用一个实向量表示词语,向量的每个维都表示文本的某种潜在语法或语义特征,是深度学习应用于自然语言处理领域最成功的概念和成果之一。广义的,词向量也可以应用于普通离散特征。词向量的学习通常都是一个无监督的学习过程,因此,可以充分利用海量的无标记数据以捕获特征之间的关系,也可以有效地解决特征稀疏、标签数据缺失、数据噪声等问题。然而,在常见词向量学习方法中,模型最后一层往往会遇到一个超大规模的分类问题,是计算性能的瓶颈。
在词向量任务中,我们向大家展示如何使用Hierarchical-Sigmoid 和噪声对比估计(Noise Contrastive Estimation,NCE)来加速词向量的学习。
02
噪声对比估计加速词向量训练
|1. 为什么需要噪声对比估计
语言模型是许多自然语言处理任务的基础,也是获得词向量表示的一种有效方法。神经概率语言模型(Neural Probabilistic Language Model, NPLM)刻画了词语序列 ω1,...,ωT 属于某个固定语言的概率 P(ωT1) :
为了降低建模和求解的难度,通常会引入一定条件独立假设:词语wtwt的概率只受之前n−1n−1个词语的影响,于是有:
从式(1)中看到,可以通过建模条件概率 P(ωt|wt−n−1,...,ωt−1) 进而计算整个序列 ω1,...,ωT 的概率。于是,我们可以将语言模型求解的任务简单地概括为:
给定词语序列的向量表示 h ,称之为上下文(context),模型预测下一个目标词语 ω 的概率。
在n-gram 语言模型中,上下文取固定的 n−1 个词,RNN 语言模型可以处理任意长度的上下文。
给定上下文 h,NPLM 学习一个分值函数(scoring function)sθ(ω,h),s 刻画了上下文 h 向量和所有可能的下一个词的向量表示 ω′ 之间的相似度,再通过在全词表空间对打分函数 s 的取值进行归一化(除以归一化因子 Z),得到目标词 ω 的概率分布,其中:θ 是可学习参数,这一过程用式(2)表示,也就是Softmax函数的计算过程。
极大似然估计(MLE,Maximum Likelihood Estimation)是求解概率(2)最常用的学习准则。然而,不论是估计概率 Phθ(ω) 还是计算似然(likelihood)的梯度时,都要计算归一化因子Z。Z 的计算随着词典大小线性增长,当训练大规模语言模型时,例如,当词典增长到百万级别甚至更大,训练时间将变得十分漫长,因此,我们需要其它可能的学习准则,他的求解过程从计算上应该更加轻便可解。
上一篇介绍了使用Hsigmoid加速词向量训练 ,这里我们介绍另一种基于采样的提高语言模型训练速度的方法:使用噪声对比估计(Noise-contrastive estimation, NCE)[1]
|2. 什么是噪声对比估计
噪声对比估计是一种基于采样思想的概率密度估计准则,用于估计/拟合:概率函数由非归一化的分值函数和归一化因子两部分构成,这样一类特殊的概率函数[1] 。噪声对比估计通过构造下面这样一个辅助问题避免在全词典空间计算归一化因子 Z ,从而降低计算代价:
给定上下文 h 和任意已知的噪声分布 Pn ,学习一个二类分类器来拟合:目标 ω 来自真实分布 Pθ (D=1) 还是噪声分布 Pn(D=0)的概率。假设来自噪声分布的负类样本的数量 k 倍于目标样本,于是有:
我们直接用Sigmoid函数来刻画式(33)这样一个二分类概率:
有了上面的问题设置便可以基于二分类来进行极大似然估计:增大正样本的概率同时降低负样本的概率[2,3],也就是最小化下面这样一个损失函数:
式(5)便是基于噪声对比估计而定义的NCE损失函数,至此,我们还剩下两个问题: 1. 式(5)中的 sθ(w,h) 是什么? - 在神经网络的实现中,sθ(h,ω) 是未归一化的分值。 - NCE cost 层的可学习参数 W 是一个 |V|×d 维度的矩阵,|V| 是词典大小,d 是上下文向量h的维度; - 训练时下一个词的真实类别 t 是正类,从指定的噪声分布中采样 k 个负类样本它们的类别分别记作: ; - 抽取 W 中第 行(共计 k+1 行)分别与 h 计算分值 sθ(w,h) ,再通过(5)式计算最终的损失; 2. 噪声分布如何选择? - 实践中,可以任意选择合适的噪声分布(噪声分布暗含着一定的先验)。 - 最常用选择有:使用基于全词典之上的unigram分布(词频统计),无偏的均匀分布。 - 在PaddlePaddle中用户如果用户未指定噪声分布,默认采用均匀分布。
使用NCE准确训练时,最后一层的计算代价只与负采样数目线性相关,当负采样数目逐渐增大时,NCE 估计准则会收敛到极大似然估计。因此,在使用NCE准则训练时,可以通过控制负采样数目来控制对归一化的概率分布近似的质量。
|3.实验数据
|4. 网络结构
在 5-gram 神经概率语言模型详细网络结构见图1:
图1. 5-gram 网络配置结构
模型主要分为如下几个部分构成:
|5. 训练
在命令行窗口运行命令python train.py可以直接开启训练任务。
程序第一次运行会检测用户缓存文件夹中是否包含 ptb 数据集,如果未包含,则自动下载。
运行过程中,每10个 batch 会打印模型训练在训练集上的代价值
每个 pass 结束后,会计算测试数据集上的损失,并同时会保存最新的模型快照。
在模型文件network_conf.py中 NCE 调用代码如下:
NCE 层的一些重要参数解释如下:
|6. 预测
(1)在命令行运行 :
python infer.py\
--model_path"models/XX" \
--batch_size1\
--use_gpufalse\
--trainer_count1
参数含义如下:
model_path:指定训练好的模型所在的路径。必选。
batch_size:一次预测并行的样本数目。可选,默认值为1。
use_gpu:是否使用 GPU 进行预测。可选,默认值为False。
trainer_count: 预测使用的线程数目。可选,默认为1。注意:预测使用的线程数目必选大于一次预测并行的样本数目。
(3)预测的输出格式如下:
0.6734 their may want to move
每一行是一条预测结果,内部以“t”分隔,共计3列: - 第一列:下一个词的概率。 - 第二列:模型预测的下一个词。 - 第三列:输入的 n 个词语,内部以空格分隔。
【参考文献】
Gutmann M, Hyvärinen A. Noise-contrastive estimation: A new estimation principle for unnormalized statistical models[C]//Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. 2010: 297-304.
Mnih A, Kavukcuoglu K. Learning word embeddings efficiently with noise-contrastive estimation[C]//Advances in neural information processing systems. 2013: 2265-2273.
Mnih A, Teh Y W. A Fast and Simple Algorithm for Training Neural Probabilistic Language Models[J]. Computer Science, 2012:1751-1758.
end
*原创贴,版权所有,未经许可,禁止转载
*值班小Paddle:wangp
*欢迎在留言区分享您的观点
领取专属 10元无门槛券
私享最新 技术干货