课程向:深度学习与人类语言处理 ——李宏毅,2020 (P33)

Chatbot:Controllable Response Generation

李宏毅老师2020新课深度学习与人类语言处理课程主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
视频链接地址:
https://www.bilibili.com/video/BV1RE411g7rQ
图片均截自课程PPT、且已得到李宏毅老师的许可:)

考虑到部分英文术语的不易理解性,因此笔记尽可能在标题后加中文辅助理解,虽然这样看起来会乱一些,但更好读者理解,以及文章内部较少使用英文术语或者即使用英文也会加中文注释,望见谅



前言

在上一篇P32中,我们学习到了来自“暗黑大陆的模型”——GPT-3,从GPT-3的目标、实验结果、瑕疵到其中有趣的BUG

而在本篇P33中,我们将学习聊天机器人中的对话控制的挑战、设定、解决方法和下一步的研究重点等。

I Chatbot

在Chatbot 聊天机器人(开放域对话系统)领域其实还是有很多研究问题,但本篇将只学习该领域中一个主题:Controllable Response Generation,聊天机器人中的对话控制。

1.1 Challenge 挑战

虽然说Chatbot是一个非常有挑战性的问题,要机器和人聊天。但其实从模型角度看来,Chatbot不过是seq2seq模型而已。

理想上很容易,实际上做起来是非常有挑战性的,同一句话对不同人讲,每个人的回复可能都是不一样的,每个人都有不同的人设。

1.1.1 one to many 一对多问题

在这里插入图片描述
举例来说,“你要如何贡献社会”,有为青年:“我要好好学习”,恶魔猫男:“你对社会贡献的定义是什么”。所以同样一句输入,都应该是有对不同对象的多种回复。在我们收集一堆对话来训练Chatbot时,也就会遇到同样一句输入可能会对应到好几个输出,这也是在训练对话机器人上非常常见的问题。这也就是一对多问题,其实在TTS 语音合成中也是有这样的问题的,输入一段文字,输出声音,但在不同人念出文字其声音也是不一样的,所以同一段文字对应不同的声音。

那同样的输入对应不同的输出,这样会对训练造成什么样的影响呢?在此,举两个问题。

1.1.2 Problem 问题

在这里插入图片描述
第一个问题是训练好的Chatbot是可以对每个问题给出一个合理的答复,但是当你和Chatbot讲多了,就会发现Chatbot会自相矛盾、前言不搭后语。真实例子如上图,在询问Chatbot时不同问法的“你住哪里?”,聊天机器人回复了好几种不同的地名。

也就是说通过大量人类对话训练出的Chatbot其实并不是真正的聊天机器人,它根本就不是在对话,而是在类似接话造句。

扫描二维码关注公众号,回复: 11838390 查看本文章

第二个问题是训练好的Chatbot还可能出现大概率均回复非常简短、非常无聊的回复,Chatbot最喜欢的回复就是“I don’t know”,其可能的原因是对于同一个输入,有那么种不同的回复,在各类不同回复中可能都有“I don’t know””。所以学习回复“I don’t know”在seq2seq的训练中几率可能是最高的,虽然这是一个合理的答复,但这不是我们想要的。

1.2 condition 设定

在这里插入图片描述

所以,我们期待我们在训练Chatbot中给它一个人设,在众多可能的回复中挑选一个合理的答复。举例来说,可以给Chatbot模型一个Persona,人设;或者是可以期待设定Chatbot一个什么样的情绪,该生气的回答还是开心的回答。其实情绪是人与人沟通一个重要的手段之一,当Chatbot真的融入人们生活中,让Chatbot有情绪也许更能帮助人类沟通。;或者是可不可以让Chatbot模仿一类人说话。

上述这些期待其实已被实现了,举例来说,18年的Emotional Chatting Machine论文中,可以做到有情绪的回复,可以选择回复时的情绪。模仿名人讲话也是可能的,如17年的Characters,可以做各种不同名人的chatbot。

那要怎么做到让我们来控制Chatbot的输出呢?以下会讲三个方法:

1.3 Approach 方法

1.3.1 Directly Fine-tune 元学习MAML

在这里插入图片描述
第一个方法是最直觉的,假设我们可以收集到某一种人设的对话。把我们想要给聊天机器人设定的人设对话收集起来,然后拿这些对话来微调Chatbot。当然,为何不从头直接训练某一人设的Chatbot呢?因为训练Chatbot往往需要大量的资料,因此微调的方式更实际可行。

但其实用少量人设的数据进行微调很容易过拟合,训练效果并不好。因此,有一个可能的研究方向,用近年来非常受到重视的meta learning,我们可以通过好的初始化参数通过人设A、B、C的少量对话就可以成功微调参数。一个可行的方法就是使用MAML,有兴趣的可以参照其论文仔细研究。

1.3.2 Condition 条件控制

在这里插入图片描述
第二种方法是通过设定条件,来操控输出。在收集到很多的对话后,如果直接使用seq2seq方式训练,Chatbot会很难训练,如上图,同一个输入不同的输出。而在设定条件后,我们也会把收集的对话的特性也标注出来,如积极、消极,便在训练和测试时给出对话特性使得对话从一对多变成一对一。
在这里插入图片描述
像这样的研究,最早的经典的便是16年的Persona-based model。Persona收集的是Twitter的数据,是知道每一句话是谁说的。所以在训练一个seq2seq模型的时候,假设我们的输出是Rob说的,除了希望seq2seq输出跟对话里的回复越接近越好以外,还会给Decoder现在这句话是谁说的。

那怎么把Rob变成一个Decoder的输入呢?在Persona中是将每一个Twitter上的人都用一个向量来表示的。
在这里插入图片描述
其实通过条件限制Chatbot的输出的方式还有很著名的一种方法,CTRL,但其实CTRL是希望得到一种可控制的语言模型。通过CTRL文中作者收集非常大量的文章,在一般的语言模型中我们都是根据已有token预测下一个token,但在CTRL里我们还会在句首加control code,也就是所在领域。如上图的,Books或网址url。

在这些通过条件控制聊天的回复模型中,一个比较知名的数据集叫PERSONA-CHAT,根据人设回复。

那怎么解这种条件控制的聊天呢?
在这里插入图片描述
有这样一种解法,TransferTransfo,方法简单粗暴,把人设直接当作输入就结束了。还有最新的方法,PPLM:Plug & Play Language Models,有兴趣的同学可以自行阅读文献了解。

1.3.3 Monologues 独白

在这里插入图片描述
在上面讲的两种方法中,我们都需要收集一定的对话,且有一定的人物设定才能做到人设回复。但在第三种方法中假设我们只有某个角色的独白,而没有该角色和其他人的对话,那我们该怎么通过独白来实现该角色人设的回复呢?

在此有三种做法:

  1. Rank:将不再直接产生回复,而是从已有角色中的独白选择回复
  2. Multiply:用独白训练语言模型,接下来用语言模型来影响seq2seq模型,比如在beam-search中不只参考模型算出来的几率,也参考语言模型算出来的几率。
  3. Pseudo Data:训练一个反向的Chatbot,根据回复得到输入那种。我们可以把独白作为回复得到该回复的对应输入。

在这里插入图片描述
还有这样的做法,利用独白训练一个Auto-encoder,输入一段独白要输出一模一样的独白。同时也要通过对话训练一个Chatbot,不过decoder和Auto-encoder参数共享。
在这里插入图片描述
还有利用独白训练一个二分类器,判断一句话是否是独白中的。然后在seq2seq模型中利用RL或GAN强化学习的方法来骗过这个分类器,希望分类器得到是独白的概率更大。实际在做的时候,还是有一些额外的限制的,如更新参数量越少越好,或者用另外一个seq2seq模型去评估生成的句子概率是否足够高。

1.4 Next Step 下一步研究重点

在这里插入图片描述
其实如果仅仅使得聊天机器人回复某一种类型的对话也是远远不够的,比如

我说:“我的老板总是让我去做一些苦活”
聊天机器人(积极):“哦,那还不错啊”

这样的对话虽然聊天机器人的情感是积极的,但是对于我们来说简直是嘲讽,因此,在这种控制回复中下一步的研究方向是希望聊天机器人能够回复一些能让对话者的情绪变得积极,也就是说聊天机器人本身说什么不重要,而是对话者的回复更重要。

操控chatbot去操控人的回复,让人的生活变得更好。


至此,有关开放域对话系统(聊天机器人)中的对话控制部分结束,我们学到了聊天机器人中的对话控制的挑战、设定、解决方法和下一步的研究重点等。

猜你喜欢

转载自blog.csdn.net/qq_44574333/article/details/108592905