浅谈NLP中条件语言模型(Conditioned Language Models)的生成和评估
作者:陈俊华
前言: 条件语言模型( Conditioned LM ,下文均用此词条表示条件语言模型)是在基于一般的语言模型 s~P(x) ( P 为关于词库中单词的概率分布)上,进一步产生的条件概率分布,即 s~P(Y|X) ,其中 X 为 Y 的上下文。众所周知一篇优美的文章在其句子的连贯性以及句子与句子之间的相互呼应上肯定注入了作者许多的想法和情感。本文以CMU CS 11-747(Neural Networks for NLP )课程中 Conditioned Generation 一节为主讲章节,第一部分介绍了如何利用 Conditioned LM 生成句子。比较了几种不同的生成方法及其优劣;第二部分介绍了模型的优化,主要叙述了一种名为 Ensembling 的模型集成方法;第三部分则是对于各种模型好坏的评估方法,主要包含了 BLEU,METEOR 等方法;最后一部分介绍了 Conditioned LM 的应用场景,如由结构化数据(Structured Data)、输入序列+标签(Input+Label)、图片(Image)等生成句子。
一、公式化与建模化(Formulation and Modeling )
首先来回顾一下 LM 中一般计算一条句子可能性的公式:
图1-1 Calculating the Probability of a Sentence
在 Conditioned LM 中,在Context处多了一项 X ,表示已经生成的上一条句子。
图1-2 Conditional Language Models
在上几周的本知乎专栏中已经讲解了 RNN+LSTM 模型,最初的语言模型就是利用 LSTM 进行句子生成,这里不再赘述。
图1-3
对于 Conditioned LM ,NLP中有一套非常经典的框架,即 Encoder-Decoder 框架:
图1-4
如果你阅读过专栏前几期的关于LSTM的介绍,那么理解 Encoder-Decoder 框架也就相当轻松了,简要来说, Encoder 层使用第一个 LSTM 将输入序列转换成一个向量表示,在 Decoder 层利用第二个 LSTM 对向量进行解析并生成对应的翻译序列。这也是机器翻译领域常用的经典框架。
二、生成句子的方法(Methods of Generation)
在图1-2中,我们粗略说明了如何生成一条句子的方式,即利用已经成的单词和已经生成的上一条句子来预测下一个应该生成的单词。这部分我们讲详细说明该公式的不同用法(即我们已经通过大规模预料得到了 P(Y|X) , X 这里可以是句子,也可以是单词序列):
1.采样法(Ancesreal Sampling):
图2-1 Ancesreal Sampling
这里可以由我们进行自由输入,在没有生成句子终止符(这里设定终止符为 </s> )之前,在上述概率分布中随机采样一个单词作为输出。该方法优点在于不会冷落一些单词,做到大范围的覆盖;缺点就是可能会生成一些并不连贯或者与上文语义不连贯的句子。
2.贪心法(Greedy Search):
图2-2 Greedy Search
贪心法每次生成的都是是P概率最大的那个单词,保证了语句通顺,同时带来的问题就是容易产生一些相对出现频繁的单词或者简易词。
3.光束搜索(Beam Search):
图2-3 Beam Search
比起贪心法只取一个使P概率最大的单词, Beam Search 每生成一个单词,都会随之产生一个代价值,这个代价值一旦超过了设定的阈值,那么就终止这条候选语句的产生。从图2-3可以看到,当最终生成终止符时,保留2个候选语句,此时再根据上下文来最终决定应该选择哪一条语句作为输出。
三、模型集成(Model Ensembling)
在前2个部分中,我们都是在已经默认 P(Y|X) 已经给定的情况下进行讨论的,但是, Conditioned LM 最重要的部分也就是词语的概率分布表示,每一个模型都有优劣,那么能否将不同模型的优点都抽取出来进行融合集成呢?答案是肯定的。下图表示了 LSTM1 和 LSTM2 的分别预测值,集成后得到最终的预测值。
图3-1 Models Ensembling
集成的方法大致分为以下几种方法:
1.线性插值法(Linear Interpolation):
图3-2 Linear Interpolation
上图可以看到,每个模型我们都赋予了一个概率值,如果不考虑模型的重要程度,我们可以认为模型的取值概率为一个均匀分布(即进行M个模型的融合,那么取到每个模型的概率即为1/M)。上式可以看成对于一个单词的生成概率,是由M个模型共同决定的,也是加权平均的一种变形。
2.对数线性插值法(Log-linear Interpolation ):
图3-3 Log-linear Interpolation
上式和图3-2中的式子非常相似,不同的是将一个单词的概率对数化了,并将m的概率值变为一个插值系数函数 ,通常也设定为均匀分布函数。
观察,3-2和3-3,你也许会考虑一个问题,什么时候 应该用线性?什么时候用对数线性?其实,正是因为概率对数化,导致了一个模型如果模拟效果不好,那么在对数模型中,由于对数概率加法变化为概率乘法,导致整体的计算值将不可利用,而在线性模型中,即使一个模型的效果不好,由于加法的存在并不影响其他模型对于整体集成效果的作用。因此上述2个方法也就可以类比为逻辑与和逻辑或的关系。当你需要忽略不好的模型时,可选择线性模型,当你需要所有模型的共同作用时,可选择对数线性模型。
模型集成带了的其中一个问题就是参数数量的爆炸增长,一个方法是参数均化 (Parameter Averaging) ,对所有的参数值取平均,免去复杂的更新过程。但这种效果带来的问题就是模型的精度会有所偏差,于是便有了模型压缩的想法。
3.集成精炼(Ensemble Distillation ):
Ensemble Distillation 的主要思想就是用一个简单的网络代替一个大型的复杂网络,做到丢失最少的精度。训练目标就是2个网络的交叉熵 (2个网络的相似度)最小以及小型网络的负对数似然 (小型网络的模拟效果)最小:
因此目标函数约定为:
,其中:
图3-4 Ensemble Distillation
是输入序列;
是输出序列;
是真实的输出序列;
是小型网络的概率分布;
是大型网络的概率分布。(以上资料参考CSDN博客
Sequence-Level Knowledge Distillation
)
4.堆叠(Stacking):
如果2种模型时非常迥异的,不同模型的参数间没有相似关系,那么进行集成的时候是否应该进行与上面不同的操作呢? Stacking 讲述了在异质模型间的相互集成。
Stacking 先从初始数据集训练出初级学习器,然后”生成”一个新数据集用于训练次级学习器,在这个新数据集中,初级学习期的输出被当做样例输入特征,而初始样本的标记仍被当做样例标记。Stacking的算法图如下:( Stacking 算法参考自《机器学习》-周志华)
输入:训练集
{
};初级学习算法
;次级学习算法
过程:
四、模型评估(Evaluation)
课程中主要对现在机器翻译中2种常用的评估方法做了介绍:
1.BLEU:
用于分析候选译文和参考译文中n元组共同出现的程度。
BLEU
则按下式计算对应语句中语料库层面上的重合精度:
图4-1 重合精度
其中k标示了可能存在的
n-grams
序号 容易看出
是一个精确度度量,在语句较短时表现更好 。所以我们再引入一个惩罚因子
BP(Brevity Penalty)
:
图4-2 惩罚因子
其中 表示候选译文 的长度, 表示参考译文 的有效长度(当存在多个参考译文时,选取和 最接近的长度) 本质上, BLEU 是一个 n-grams 精确度的加权几何平均,按照下式计算:
图4-3 BLEU精度
n一般去1,2,3,4。而
一般对所有n取常值,即1/n。
2.METEOR:METEOR
测度基于单精度的加权调和平均数和单字召回率,其目的是解决一些 BLEU 标准中固有的缺陷, METEOR 也包括其他指标没有发现一些其他功能,如同义词匹配等。计算METEOR需要预先给定一组校准 (alignment)m ,而这一校准基于 WordNet 的同义词库,通过最小化对应语句中连续有序的块 (chunks)ch 来得出 则 METEOR 计算为对应最佳候选译文和参考译文之间的准确率和召回率的调和平均:
图4-4 METEOR精度
(有关 BLEU 以及 METEOR 的详细讲解请参考 【NLP】机器翻译常用评价标准 (BLEU & METEOR) ,笔者上文叙述也均参考此博客)。
五、模型应用
Conditioned LM 可应用与结构化数据输出 (From Structured Data) ;输入标记转化 (From Input + Labels) ;图片叙述 (From Images) 等。常见的还有语音识别 (Speech Recognition) ,机器翻译 (Machine Translation) ,文档总结 (Summarization) 。
转载请注明来自36大数据(36dsj.com): 36大数据 » 浅谈NLP中条件语言模型(Conditioned Language Models)的生成和评估