网络知识 娱乐 【任务型对话】任务型对话中的自然语言生成

【任务型对话】任务型对话中的自然语言生成

任务型对话系统框架

任务型对话中,一般包含ASR、语义理解、多轮状态追踪、会话策略、自然语言生成(NLG)模块,那么任务型对话中都有哪些生成的方法呢?

基于模板

因为任务型对话中,生成任务有两个作用,1. 向用户传递信息,例如搜索到的机票信息(inform_槽位)等,提供给用户选择。2. 进行用户问询,主要是ontology中定义好的字段,比如常见的订票场景中的出发地、目的地(request_槽位)等。

因此,可以事先针对传递信息、用户问询的槽位,设计好模板,然后实际应用时,将其中的槽位使用对应的值替换即可。例如:

  • Confirm ( name = Hinton , area = center),
  • 模板=确认下您定的酒店是#hotel#,地点是#area#吗?
  • 填充值=确认下您定的酒店是希尔顿,地点是城中心吗?

这个方法,就是需要将所有问询Action和槽位做组合,并且槽位之间可能也有组合,会有可能:

  • 某些情况未覆盖,会导致生成回复出错。
  • 模板拼接各种值,会带来不通顺,导致用户不理解,或者出现语义错误。
  • 如果做了一个领域,迁移到其他领域,还要从头开始写模板。

因此,最近也有一些结合语言模型的能力,来将原始的策略输出生成自然语言,例如这种格式:Confirm ( name = Hinton , area = center)

利用语言模型生成

2020Few-shot Natural Language Generation for Task-Oriented Dialog 代码:https://github.com/pengbaolin/ SC-GPT

出发点是用当前流行的预训练方法去提高生成回复的质量。但是任务导向型的对话往往特别依赖具体的领域,领域之间的差别会导致生成回复之间也会存在巨大的差异。所以需要引入特定的领域信息,文章提出一种few shot方案,只需要少量领域数据微调,具体步骤为

  • 预训练1:首先在大规模的无标注文本上预训练。这一步和GPT-2一致,
  • 预训练2:为了让生成的文本更贴近任务导向型对话的要求,模型还进一步在标注的数据集上预训练。这里的数据来自Schema-Guided Dialogcorpus, MultiWOZ corpus, Frame corpus和Facebook Multilingual Dialog Corpus,这些都是人工标注好的人物对话型数据集,来自各个领域,共计约400K个样本。
  • 微调:最后,只需要在特定领域的少样本数据集下微调即可。

其中关键就是如何将dialog Act编码,其实可以看到她的方式很简单粗暴,直接dialog act作为一个句子输入到模型,作为prompt,然后指导后续的句子生成。

另外,预训练阶段2其实也挺重要的,保证了模型能够学习到对话语料,在做具备一定通用对话的能力,在做领域迁移的时候不会太差。

从上图可以看到,整体训练的数据量还是很小的。

最后看指标,以及生成的case,还是挺靠谱的,整体方法在任务型对话的NLG任务上,应该是够用了(闲聊估计是不太够),本人也在业务中实践也是比较靠谱。

中文GPT模型:预训练一阶段目前已经有中文的gpt2模型,预训练2阶段可能需要中文的对话数据集,目前百度千言开放了一些对话数据集,可以在预训练阶段2用到。微调领域生成一些应该就可以。

https://github.com/Morizeyao/GPT2-Chinese:12层的decoder。

https://github.com/imcaspar/gpt2-ml

Reference

  • Schema-Guided Natural Language Generation
  • TOD-BERT: Pre-trained Natural Language Understanding for Task-Oriented Dialogue
  • A Survey on Dialogue Systems: Recent Advances and New Frontiers