CS224n-lecture15-NLG
LMs and Decoding Algorithm
前面学过了 greedy decoding 和 beam search decoding,使用不同的k的影响是什么样的?
- 较小的k,类似于greedy decoding,容易生成不符合语法,不自然,无意义,不正确的句子
- 较大的k意味着有更多的hypotheses可选
- 增大k能缓解上述的部分问题
- 更大的k意味着对算力要求更高
- 对神经机器翻译任务来说,更大的k会导致更低的BLEU分数,因为更大的k生成了过短的翻译,即使已经加了score normalization
- 对开放性问题,比如闲聊机器人,更大的k会让输出的回答变得generic(正确但普遍、平庸、乏味、答非所问)
有一种叫sampling-based decoding,不像beam search需要同时跟踪多个假设,耗费几倍的计算,而是和greedy decoding一样,只计算一条hypothesis,但是却更有随机性,不像greedy decoding每次选argmax导致生成的句子很不好。
还有一个技巧可以应用于sampling-based decoding是给softmax升温,使得概率分布更均匀平滑(在知识蒸馏里很常用),但是这对greedy decoding和beam search decoding都没有用,因为二者一个是选argmax,一个是选top-k max,使分布更均匀并不会改变大小次序。
总结:
NLG tasks and neural approaches to them
文本摘要
分为单文档摘要和多文档摘要(多个描述同一事件的文档),还有句子简化即使用更简单的方式表达句子原意(可用于儿童教育)
主要有两个策略,一个是抽取式摘要,另一个是生成式摘要
文本摘要的一种评价指标:ROUGE
神经网络摘要有一种copy机制,让模型生成Pgen去决定何时去copy原文,何时自己去生成,这是一种hybrid模型,综合了抽取与生成摘要的方法
但它有很大的缺点:
- copy得太多了!
- 摘要模型变成了一个完全的抄写模型
- 不擅于总体上的内容选择,特别是文档较长时
- 没有总体上的选取内容的策略
一种改进方法 bottom-up 摘要,先决定哪些词被包含哪些词不被包含,总体上选择内容,之后再在选择的词句上进行摘要
对话
对话任务主要分为两种:任务型导向对话和社交对话
在神经网络对话模型前,主要的方法是人为预先准备好回答的模板或者从一堆回答语料里检索出一条最贴切的作为输出答案,自从2015年起,很多论文开始使用seq2seq来构建开放性对话系统。但是seq2seq有非常多的问题
为了解决“不相关的回答”的问题,不同于之前seq2seq使用的是极大似然估计,改为最大化互信息,即在给定语境S的条件下,输出的回答T要比原本模型作为LM直接输出的T时增加的概率最大化
为了解决普遍、无意义、乏味的回答,解决的方法有:提高罕见词的权重,使用sampling decoding而不是beam search,使用检索再修正的模型而不是从零开始生成回答的模型等
为了解决重复的问题,方法有:在beam search时出现重复n-grams时直接截断,更复杂的方法是训练一个能防止模型多次关注相同单词
为了解决“不连续一致的人设”的问题,可以训练一个能编码对话方的画像为embedding的seq2seq模型,或用更好的数据集
讲故事
有一种简单的看图说故事的方法,先使用COCO数据集学习一个从图片到其对应的描述句子的映射得到embedding,再使用目标风格的语料去学一个LM模型,再训练使用它解码之前的embedding得到原始的文本,组合两个模型到一起
NLG evaluation
整体上的自动评估的metrics都不够好,需要定义多个不同的足够明确精细的自动评估指标才行