1、NLG的定义及应用场景
NLG是指,生产出任何新文本。被用于以下场景:
1. 机器翻译
2. 摘要
3. 对话(任务型、闲聊型、问答型)
4. 创意写作:写故事,写诗
5. 生成式,相比于抽取式
6. 图像描述
2、语言模型
2.1 LM
语言建模(Language Modeling)是指,在给定词语的情况下,预测下一个词的概率,用公式表示为:
而语言模型(Language Model)是只一种系统,用以预测上述概率的分布。
2.2 RNN-LM
如果用RNN网络来预测上述概率,那么这个语音模型就称为RNN-LM。
2.3 Conditional LM
如果出了已出现的词,我们还知道其他的输入条件,那么我们就可以进行条件语言建模(ConditionalLanguageModel),用公式表示为
这种建模方法在很多应用中都有用到:
- 机器翻译:
x
是源句子,y
是目标句子 - 摘要生成:
x
是输入文本,y
是摘要文本 - 对话:
x
是历史聊天记录,y
是下一句话
2.4 泛RNN语言模型的训练
一般模型有两部分组成:编码器(RNN)和解码器(RNN)。
有一种训练方式,是将真正的生成句子输入解码器中,而不是解码器生成的句子。这种训练方式是Teacher Forcing
以NeuralMachineTranslation为例:
3、解码算法
语言模型训练好之后,我们会通过解码算法来生成文本。
这里会介绍两种解码算法,贪心解码(Greedy Decoding)算法和簇搜索(Beam Search)算法
3.1 贪心解码算法
一种比较简单的算法,就是在每一步中预测最有可能的那个词. 这个词会被作为下一次预测时的输入。
上述过程是重复进行的,直到预测出结束符<END>
或者生成的词个数已经达到设定的最大值。
整个过程如下图所示:
GreedyDecoding算法的缺点在于,由于没有backtracking
回溯过程,即每一次的最好并不是全局的最佳,所以文本生成的效果不是特别好,比如会出现不符合语法逻辑、不自然、不合理的情况。
3.2 beam search解码算法
搜索算法旨在从若干可能的句子里,一次就找出可能性比较高的句子,这个句子可能并不是最优的结果。
核心思想:在每一步解码过程中,跟踪k
个最可能的部分序列(我们称之为假设 hypotheses ),这个k
就是 束大小,beam size
生成阶段的循环过程结束时,选择概率最大的句子片段(这里的片段是因为还要考虑到生成长度,所以我们会进行一些调整)
举个例子如下图,此时k=2
蓝色的数字值是该句子的得分$score(y_i|y_1,..,y_(i-1),x)$
,通过如下公式计算得到:
每个时间步都只保留了k=2
个节点往下继续搜索。最后pie
对应的路径打分最高,最后的句子是
he hit me with a pie
从图中可以看出,不同路径预测输出结束标志符的时间点可能不一样,比如第三步时,已经有I was hit
这样一个结果还不错的句子产生了,这样一句预测完成的句子,称之为完全路径。
为了从不同长度的完全路径中挑选一个最佳答案,我们会根据生成句子的长度进行分值的归一化,
不同大小的k
对结果有什么影响呢?
如果k
越小的话,每次考虑的范围就越小,出现的问题约同贪心解码(k=1时就回退到贪心解码)
k
越大的话,每一步都需要更多假设,会造成更多计算量。
不仅如此,对NMT
来说,k
越大,BLEU
值会越小,因为即使对长度进行了归一化,但是k
越大,越偏向生成短文本。NMT的六大挑战一文中,对比了不同k
情况下的BLEU
值,
可以看到,k
越大,生成质量越差,特别是如果没有进行长度归一化,结果会更差。当然不同场景下,最优k
值也是不同的,比如Czech–English
的翻译中,k
选4最好,而English– Romanian
翻译中,k=30
会得到最好的结果。
此外,在闲聊型对话任务中,k
越大,生成的答案通用性越强(示例见下图)
当一方说,“我大多情况下都以生鲜为主,不怎么去杂货店买东西”,可以看到k
比较小的时候,回答都是比较有主题的,比如围绕饮食、健康开展的。而随着k
变大,回复也变得含含糊糊,不会答错但是也没那么相关,有一点答非所问。
3.3 基于采样的解码算法
因为beam seach
中每次要进行k
个hypothese
,所以可能不会那么efficient
.这就推进了基于采样的解码算法诞生。
3.3.1 PureSampling
每一个时间步 下,从分布 中随机选一个作为下一个词.和贪心解码算法一样,也是每次只选一个词,但是随机的而不是选概率最大。
3.3.2 Top-n Sampling
每一个时间步 下,从分布 中,按照概率选取 个,再从中随机选一个。
可以看到当
时就是贪心,当
时就是pure sample
越大,生成的文本更具有多样性,当然也更加危险,因为不知道会出来什么玩意儿。
越小,生成的文本更加具有通用性,虽然可能有点跑偏,但是生成的文本比较安全,不会出错。
3.3.3 不是解码算法的 Softmax temperature
在beam search
和sampling
的解码算法中,我们都是根据概率大小进行选择的。在softmax
过程中,我们还会做一点变化,引入了一个温度参数
越大, 分布就会越平滑,词表中每个词被选中的概率就会比较平均,所以生成的结果越具有多样性。
越小, 分布就会越尖锐,词表中每个词被选中的概率就会不平均,总有一些词选不到,而另外一些词总被选到,所以生成的结果越比较常见。
3.4 解码算法总结
贪心解码算法非常简单,但是效果也不好
束搜索效果比较好,但是也会出现回答太普通,太短等问题。
采样方法则是结果更具有多样性