聊天机器人的五个方面

本文主要是对这篇文章的总结——《使用深度学习打造智能聊天机器人》(见文末参考),文章主要谈了聊天机器人的以下五个方面:

 

1. 两个角度区分聊天机器人

聊天机器人的类型可以从应用目的或者技术手段的两个角度区分,按照应用目的可分为目标驱动(Goal Driven) VS 无目标驱动(Non-Goal Driven)聊天机器人,而按照技术手段可分为检索式 VS 生成式聊天机器人。

1.1 目标驱动(Goal Driven) VS 无目标驱动(Non-Goal Driven)

目标驱动(Goal Driven) VS 无目标驱动(Non-Goal Driven)聊天机器人是按照应用目的的区分。
目标驱动聊天机器人是为特定领域开发的,例如网站客服,车载助手等。
无目标驱动的就是纯粹为聊天或者娱乐聊天开发的。

1.2 检索式 VS 生成式

检索式 VS 生成式聊天机器人是按照技术手段的区分。

  • 检索式需要大量对话库来支撑,如果库很大,那么覆盖到的问题越多,可以匹配更多的用户问句。
    优点是1.回答质量高;2. 回答自然(源于真实对话库)
    缺点是1. 需要很大的对话库。
  • 生成式不像检索式做用户问题的匹配,而是采用特定手段(下面仅说到深度学习的方法)进行生成回答。
    优点是可能覆盖到用户的所有问题,
    缺点是回答可能质量不高(语法有问题,不通顺等)。

2. 好的聊天机器人特点

  1. 回复上与用户问题逻辑一致
  2. 语法正确(对当前生成式模型来说有一定困难)
  3. 回答应该幽默有趣(有的问题不能单纯回复“好呀”,“是吗”等无趣的结果)
  4. “有人性”(对于多次一样的问题“你多大了”,需要保证回答一致)而非“精神分裂”(对于背景,爱好,语言风格应该保持一致)

3. 主流技术思路

  1. 人工模板:通过人工来编写针对不同场景的模板,对问题和答案进行描述,例如Siri。优点:精准,缺点:人工工作大;可扩展性差。
  2. 检索:搜索引擎路线。需要建立对话库,根据问题在对话库进行模糊匹配。
  3. 机器翻译:与常见的不同的是,将用户问题翻译成问题回答。优点:可将统计机器翻译的成熟技术迁移应用过来。
  4. 深度学习:大多数都是在编码-解码(或者序列-序列)这一深度学习技术框架下的改进。优点:思路简单;可扩展。

个人感觉,机器翻译的问题-回答和深度学习过程中的encode-decode过程有一点像。

4. 深度学习思路的构建

4.1 encode-decode

简单来说,就是我们有数据的每条记录<问题Message,回答Response>,对问题先encode得到编码结果,即中间的编码结果encode-Message,然后再对其进行decode得到回答Response。从输入句子(问题),生成目标句子(回答)。

4.2 多轮问答的上下文问题

聊天不是一问一答,常常需要参考上下文信息。深度学习解决多轮对话的关键是将上下文信息引入encoder-decoder中,context引入到encoder中。现在大多是研究主体都是在将上下文信息在encoder端建立模型。

  • 第一种思路,将上下文信息和当前问题拼接形成长输入给encoder,但对于RNN,过长的输入效果越差。
  • 第二种思路,encoder用MLP代替原本的RNN,输出代表Context和当前问题信息的中间语义表示,传入decoder生成回答(关于Context和当前问题Message的融合策略,有两种:直接拼接传入一个MLP,另外就是分别训练两个MLP作为encoder。是因为Context虽然有关但只提供背景信息,但重要性来说Message更重要。效果上一般后者要好)。
  • 第三种思路,除了将encoder替换为MLP外,decoder的RNN对时刻t的输出生成,不仅依赖t-1时刻的隐层状态和当前输入,还显式地将Encoder的中间语义编码直接作为t时刻RNN节点的输入【这句话不太理解】,称为Context-RNN。
  • 第四种思路,层级神经网络(Hierarchical Neural Network),本质也是encoder-decoder框架(这个要看图才能明白)。不同在于encoder采用两级结构,上下文中的每个句子和Message使用Sentence RNN(竖着的结构),得到每个Context句子和当前Message的中间编码表示。第二级RNN将第一级句子RNN的中间表示结果按照上下文句子出现先后顺序序列进行编码,这级RNN称作“上下文RNN”(Context RNN)。其尾节点处隐层节点状态信息就是所有上下文Context以及当前输入Message的语义编码,将此作为Decoder的输入。

总之,DL解决多轮回话的上下文问题时思路都是在encoder阶段把上下文和当前Message同时编码,生成参考了上下文的Response。

4.3 安全回答(Safe Response)问题

经典的encoder-decoder模型构建的开放领域聊天机器人,容易出现安全回答(无论用户说什么内容,聊天机器人都用少数常见短句应答,“是嘛”“呵呵”等)。随不是错误,但用户体验不好。

【我想的一种解决思路就是过滤掉这些带有短回复的<Message, Response>样本,或者相似问题拼接,生成,相当于加噪声】

第一种思路,sequence-sequence框架解决。改变在于,从传统的最大似然法的优化目标函数(^R = arg max_R{log p(R|M)})改为最大户信息的目标函数(^R = arg max_R{(1-lambda)*log p(R|M) + lambda*log p(R|M)}),其中R和M分别代表Response和Message。
新的目标函数除了最大化从Message生成Response的概率,也加入了反向优化目标,即互信息,这个目标函数不仅要考虑哪个R出现概率更大也要考虑M和R的密切相关,从而降低常见回答的生成概率【还是得实际看看效果】。

4.4 个性信息一致性问题

对于个性化问题,爱好,年龄可能多次提问回答不同,这就是个性信息的一致性问题。经典的Sequence-to-Sequence模型训练的聊天机器人就有这样的问题,因为STS模型训练用的是单句的Message和单句的Response的映射关系,没有统一维护个性信息。此外,每个用户喜欢的聊天机器人的聊天方式可能不同,也就是说不同个性的用户可以使用与之聊天方式类似的聊天助手。

一种思路,sequence-to-sequence的结构,但是每种身份对应一种word embedding,把聊天助手的个性信息导入到解码decoder的过程中(每个t时刻,RNN除了标准的输入,也将身份个性化的word embedding信息输入,得到的生成结果就会倾向于符合身份特征的个性化信息。

总之,核心思想是把个性信息在decoder阶段加入体现出来,维护个性一致。

5. 深度学习聊天机器人的优点和改进方向

基于Encoder-DecoderDL框架的聊天机器人

5.1 优点

  1. 端到端(End-to-End)数据驱动。给定训练数据就可训练出来,省去做特征抽取等步骤。提高开发效率;
  2. 和处理的语言没有关系,扩展性好。只要有对应语言的聊天数据即可训练,也不需要做针对语言的特定优化;
  3. 数据增多提升性能(也是针对encoder-decoder的深度学习模型)。

5.2 加强

  1. 评价标准待完善。BLEU,语言模型评价标注困惑度。大部分评价是人工评价。
  2. 缺乏标准的大规模训练数据。Twitter或微博的对话评论数据采集成本高,电影字幕数据比较间接。
  3. 技术初期。用DL构建聊天机器人还处于非常初期(手段,系统效果等),进步空间大。

6. 参考

  • 使用深度学习打造智能聊天机器人  http://mp.weixin.qq.com/s?__biz=MzI3NDExNDY3Nw==&mid=2649764883&idx=1&sn=39ac0efc2c1594b84717a8a8e18dc90e&scene=0#wechat_redirect

发表评论

电子邮件地址不会被公开。 必填项已用*标注