- 话不多说我就直接开始总结啦
- 提前感谢所有的批评指正~
Few-shot Natural Language Generation for Task-Oriented Dialog
论文主要内容(包含创新点以及不足)
-
对话系统主要分为任务型对话和闲聊型对话。本文主要聚焦于任务型对话。一个典型的任务型对话使用的时pipeline的结构,每一轮对话都使用一个4步的过程进行处理,分别是:
-
NLU:自然语言理解,得到用户的意图和槽及槽值等信息
-
DST:对话状态追踪,将NLU得到的信息格式化为DST的输入,DST保持当前对话框的状态
-
DPL:对话策略学习,DST的输出传递到DPL,将基于外部资源(数据库)检索得到的事实或实体生成对话行为。
-
NLG,自然语言生成,将DPL的对话动作当作NLG的输入。生成自然语言的系统响应。
本文主要研究NLG,对话行为A被定义为意图和(槽,槽值)对的组合,NLP的目标是将A翻译成自然语言的响应x=[x1,x2,…,xT]
-
-
现有的自然语言生成方法可大致归为两大类:
- 基于模板的方法,领域内专家制定模板,系统填槽,包含语义信息,但不够流畅自然,并且泛化能力差
- 基于统计语言模型如神经网络,例如SC-LSTM,但是需要大量的已标注语料进行训练,且当对话框的行为可能组合的数量增长时,会带来严重的可伸缩性问题。
-
为了解决现实情况中已标注数据少的问题,设计了SC-GPT模型,它是一个多层Transformer神经语言模型,分三步训练:
-
大量的普通文本进行预训练,继承了GPT-2体系结构做主干模型。GPT-2是一个自回归语言模型,由12-24层的masked多头自注意力Transformer构成
-
对大量任务型对话已标记的数据进行连续的训练,以获得控制生成的能力(GPT-2控制生成能力不足),规模大小为40万,输入如下所示
-
使用非常有限的域标签对目标域进行微调
-
-
SC-GPT优点:
-
灵活性,SC-GPT在一个unseen的token序列上操作,因此不能采用固定的向量表示,因此具有灵活性
-
可控性,GPT-2没有任何指引,生成的句子不想SC-GPT一样包含意图和槽值对
-
普遍性,SC-GPT比SC-LSTM更易泛化,这是因为其在海量的普通文本和已标注的对话数据集上进行了训练
-
-
为了模拟小样本学习情况,开发了一个新的基准数据集FEWSHOTWOZ
- 重新审视了NLG的基准,之前的数据集有大量的已标注数据,对一个新的领域去得到这样规模的数据成本是很昂贵的;且训练数据和测试数据间去自由化的对话行为很少,给泛化带来了困难
- FEWSHOTWOZ,更好的反映了实际应用程序的复杂性,包含更多的领域(7个,比现有NLG数据集都大);训练数据少,目的主要是评估小样本的学习能力
- 收集方法,重新组织来自RNNLG和MultiWOZ数据集的数据样本来构建,并做了一些处理。
-
实验
- 实验是用PyTorch写的(正好可以去学一下)
- 评估方法用了两种,一种是自动评估,通过BLEU分数和ERR(the slot error rate);一种是人类评估,找人对生成的响应的信息性(包含的信息)和自然性(生成的对话是否自然)进行打分
- 基线,用了三个强基线,分别是SC-LSTM , GPT-2和HDSA
- 在FEWSHOTWOZ数据集中,SC-GPT在自动评估和人类评估效果都是最好的;在MultiWOZ数据集中,SC-GPT也都是最好的,这里GPT-2效果和SC-GPT差不多,是因为MultiWOZ数据集足够大,用GPT-2微调效果也很好。
- 还针对MultiWOZ数据集的数据比例大小做了实验,SC-GPT效果依旧是最好的。
-
未来改进:
- 设计一个机制产生更多的人际反应,提高用户体验
- 将这种预训练的思想推广到任务型对话的四个模块中,进行端到端的训练。因为4个模块是按照顺序来的,所以可以将其输入输出作为segment,与训练一个segment-level的自回归模型。
学到的点
- 可以在已有的预训练模型的基础上针对某一模块继续进行预训练,这样就算已标注数据不多,也能在小样本的情况下对该模块的不同领域更好的泛化。
论文的贡献
- 构建了一个在小样本环境下的针对NLG任务的baseline,FEWSHOTWOZ。该数据集包含七个领域,在微调时每个领域只用了50条数据。
- 提出了SC-GPT,在原始GPT-2的基础上又用面向任务的标注了的对话语料进行了预训练。该模型在小样本情况下进行微调能产生很好的效果。
- 在MultiWOZ数据集上,SC-GPT的BLEU提高了4哥百分点,在FEWSHOTWOZ,SC-GPT也优于SC-LSTM,GPT-2和HDSA这三个强基线。
备注
- SC-GPT模型结构