Chapter7-12_Controllable Chatbot

本文为李弘毅老师【Controllable Chatbot】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 7-11 Deep Learning for Question Answering (2/2)

下篇 - 7-13 Dialogue State Tracking (as Question Answering)

总目录

1 Chatbot面临的问题

什么是Chatbot这里就不多说了,顾名思义,就是聊天机器人。Chatbot是一个很难的问题,但我们其实可以先把它抽象得很简单,认为这就是一个seq2seq的问题。训练的时候,就找一大堆语料,分别是一个人说的前一句,和另一个人接的下一句,然后直接train。这样会有一个非常致命的问题,就是同一个句子,不同人说出来是不一样的,这也就导致了找来的语料当中,同样的输入,对应的输出有非常多种。比如问年龄的时候,不同年龄的人的回答必然是不一样的。

1

直接用seq2seq的方法train出来的模型产生的对话会长下面这个样子,同样的问题,换一个方式问,出来的结果就自相矛盾了。
2

除此之外,这样train出来的模型会偏向于用比较单调和无聊的句子来回答问题,比如"I don’t know"是一个高频的回答,因为这样的结果是合理的,但这并不是我们希望模型回答的。

总结一下,有两个问题:

  • 回答的结果前后矛盾
  • 回答的结果太过单调

2 控制Chatbot的输出

要控制Chatbot的输出,我们可以给Chatbot增加一些限定条件。限定条件可以是人物设定,可以是人物的情绪,也可以是某个特定的人物。
3

限定了之后,机器的回答会变成下面这样。下图的上半是限定情绪的结果,下半是限定了特定人物的结果,都是模型跑出来的真实例子。
4

那么如何训练出可以限定条件的Chatbot呢?有三种方法,下面来逐个讲述。

2.1 直接Finetune

最直接的方法就是,先用一大堆语料来预训练Chatbot,然后再找限定条件的语料来finetune。这样的问题是,我们一般没法找到大量的限定条件的语料,这会导致模型很容易过拟合。要解决这个问题的话可以参考元学习的方法,这不是本文的重点,不多做介绍。
5

2.2 输入添加控制特征

我们也可以在输入句子的结尾加一个控制输出的特征。举个例子,可以对同一个问题的不同回答进行一个分类,然后在输入的时候,把这个类别作为一个特征也输入进去。这样train出来的模型,就可以通过控制这个输入的特征来控制输出了。这样的语料数据可以是其他模型跑出来的,也可以是人标注的。A Persona-Based Neural Conversation Model就是这种方法的一个经典例子。
6
有一篇叫做CTRL: A Conditional Transformer Language Model for Controllable Generation的文章就是用的这种方法来训练一个language model。一般的language model在训练的时候,我们会找一大堆语料,然后让模型在看到给定的tokens的情况下,预测出接下来的tokens是什么。CTRL这篇文章会在句子的最前面加上这个语料的来源,来源可以是Wikipedia,可以是Books,甚至是一个网址等等。不同的来源,句子的风格是不一样的。
7
然后我们用这样训练得到的模型来进行句子的生成,发现模型竟然知道哪一年的美国总统是哪位。

8

在Chatbot的训练中,有这样给定了条件的公开数据集,比如Persona-Chat。这个就是facebook找了一堆人,然后告诉他们自己的人设是什么,然后让他们对话得到的语料库。

训练的方法也出奇地简单,直接把对人设的形容文字加到句子的开头,放进BERT去训练就可以了。TransferTransfo就是这样做的,作者在训练的时候,还会去故意打乱描述人设的句子,因为这些句子间是无序的。
9

2.3 只有独白

有些时候,我们只能拿到某个人设的个人独白,没法获取到他的对话。这个时候,我们也是可以训练一个Chatbot来模仿该人设对话的。方法有很多种,下面依此介绍

(1)从已有的独白当中选取最有可能的回复。这种方法就保证了,回复必然是该人设说过的某句话。

(2)用独白训练一个language model,然后用这个language model来影响 Chatbot的输出.

(3)用一个反向的模型来预测独白中的某句话,是需要问话人说怎样的句子才会说来的。用这种方法来制造数据。

(4)用有问有答的语料训练一个seq2seq模型,同时用独白训练一个auto encoder。然后在训练的时候,两个模型的decoder用的是同一个。这样可以保证输出与独白的风格类似。

10

(5)用Reinforce Learning或者GAN的方法,训练一个classifier来判断输出的句子和独白的风格是否相似。

11

3 展望

有时候,Chatbot说出来了一个positive的句子,但在整个对话中可能是讽刺的意思。我们下一步的目标应该是如果希望Chatbot的对话是positive的,那Chatbot的整个对话给人的感觉应该是postive的,而与Chatbot本身说的话是positive还是negative无关。
12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值