聊天机器人-概述

目录

1.      前言
2.      机器人
3.      聊天机器人
4.      分类
5.      好的聊天机器人应该具备的特点
6.      基于模板的聊天机器人
7.      检索式聊天机器人
8.      生成式聊天机器人
9.      参考文献


前言

         网上的资料太乱了,参考着网上的文章写了这篇关于聊天机器人的概述文章,文章的很多内容并非原创。

机器人

机器人(Robot)是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编排的程序,也可以根据以人工智能技术制定的原则纲领行动。它的任务是协助或取代人类工作的工作,例如生产业、建筑业,或是危险的工作。

聊天机器人(Chatbot)

聊天机器人(Chatbot)是经由对话或文字进行交谈的计算机程序。能够模拟人类对话,通过图灵测试。

聊天机器人可用于实用的目的,如客户服务或资讯获取。有些聊天机器人会搭载自然语言处理系统,但大多简单的系统只会撷取输入的关键字,再从数据库中找寻最合适的应答句。目前,聊天机器人是虚拟助理(如Google智能助理)的一部分,可以与许多组织的应用程序,网站以及即时消息平台(Facebook Messenger)连接。非助理应用程序包括娱乐目的的聊天室,研究和特定产品促销,社交机器人。

分类

封闭领域和开放领域

从使用场景上看,聊天机器人分为封闭领域聊天机器人开放领域聊天机器人

1.png

开放领域的聊天机器人比较难实现,因为用户不一定有明确的目标或意图。像Twitter和微信QQ这样的社交媒体网站上的对话通常是开放领域的,他们可以谈论任何方向的任何话题。无数的话题和生成合理的Response所需要的知识规模,使得开放领域的聊天机器人实现相当困难。开放领域的聊天机器人也称为无目标驱动的聊天机器人。

2.png

封闭领域的聊天机器人指的是聊天机器人有明确的服务目标或者服务对象,比如客服机器人,儿童教育机器人、类似Viv的提供天气订票订餐等各种服务的服务机器人等。这种类型的聊天机器人比较容易实现,可能的输入和输出的空间是有限的,因为系统试图实现一个非常特定的目标。技术支持或购物助理是封闭领域问题的例子。这些系统不需要谈论政治,只需要尽可能有效地完成具体任务。当然,用户仍然可以在任何他们想要的地方进行对话,但系统并不需要处理所有这些情况,用户也不期望这样做。封闭领域的聊天机器人也被称为目标驱动机器人。

基于模板、检索和生成式模型

从实现方法上看,聊天机器人可以基于模板检索模型生成式模型

基于模板或者说基于规则的聊天机器人,需要准备好一个对话模板库(问句模板和应答模板对),对用户输入的句子,找到匹配的问句模板,然后按照对应的应答模板生成应答。

检索模型所使用的回复通常是预先存储且知道的数据,输入一段上下文内容,和一个可能作为回复的候选答案;模型的输出是对这个候选答案打分。寻找最合适的回复内容的过程:先对一堆候选答案进行打分及排序,最后选出分值最高的那个作为回复。

生成模型不依赖于任何预选定义好的响应。经典的生成模型是基于机器翻译技术的, 只不过不是将一种语言翻译成另一种语言, 而是将问句“翻译”成回答(response 。生成模型可以创新出崭新的未知的的回复内容,不需要预先存储和定义的数据,比检索模型更加灵活多变,更加智能。

模型的比较:

基于检索的模型,“回答集”是人工编写的答案,几乎不会有语法错误,但是无法处理没有见过的问题,即数据库中没有的问题, 同时无法追溯上文中的实体信息,例如上文中提到的人名、地名。

基于生成式模型的约束条件少,过于多变的模型会导致回复中出现一些语法错误和语义无关的内容。生成模型需要海量的训练数据,且难以优化。

工业界:

目前工业用的较多的还是基于检索模型或者以生成模型作为补充的两者结合。谷歌的Smart  Reply 就是一个例子。阿里小蜜结合检索模型和生成模型各自的优势提出了一种新的融合模型,  首先采用检索模型从QA知识库中找出候选答案集合,然后利用带注意力的Seq2Seq模型对候选答案进行排序,如果第一候选的得分超过某个阈值,则作为最终答案输出,否则利用生成模型生成答案。

此外也有很多聊天机器人是基于模板的。基于人工模板的聊天机器人的优点是精准,缺点是需要大量人工工作,而且可扩展性差,需要一个场景一个场景去扩展。应该说目前市场上各种类似于Siri的对话机器人中都大量使用了人工模板的技术,主要是其精准性是其他方法还无法比拟的。

总结:3.png

好的聊天机器人应该具备的特点

         一般而言,一个优秀的开放领域聊天机器人应该具备如下特点:

首先,针对用户的回答或者聊天内容,机器人产生的应答句应该和用户的问句语义一致并逻辑正确,如果聊天机器人答非所问或者不知所云,亦或老是回答说“对不起,我不理解您的意思”,对于聊天机器人来说无疑是毁灭性的用户体验。

其次,聊天机器人的回答应该是语法正确的。这个看似是基本要求,但是对于采用生成式对话技术的机器人来说其实要保证这一点是有一定困难的,因为机器人的回答是一个字一个字生成的,如何保证这种生成的若干个字是句法正确的其实并不容易做得那么完美。

再次,聊天机器人的应答应该是有趣的、多样性的而非沉闷无聊的。尽管有些应答看上去语义上没有什么问题,但是目前技术训练出的聊天机器人很容易产生“安全回答”的问题,就是说,不论用户输入什么句子,聊天机器人总是回答“好啊”、“是吗”等诸如此类看上去语义说得过去,但是这给人很无聊的感觉。

还有,聊天机器人应该给人“个性表达一致”的感觉。因为人们和聊天机器人交流,从内心习惯还是将沟通对象想象成一个人,而一个人应该有相对一致的个性特征,如果用户连续问两次“你多大了”,而聊天机器人分别给出不同的岁数,那么会给人交流对象精神分裂的印象,这即是典型的个性表达不一致。而好的聊天机器人应该对外体现出各种基本背景信息以及爱好、语言风格等方面一致的回答。

基于模板(规则)的聊天机器人

先来看两个模板的实例:

4.png

5.png

一句交互对话的模板由<Q,A>数据对构成,其中Q代表输入模板,A代表聊天机器人应该回答什么话,A可能不会是模板,而是就是应答的一句话,也可能是带着标签的模板,但是Q往往采用模板,因为这样覆盖率高,当然Q也完全可以是不带模板通配符的完整的一句话,但是一般而言模板居多,否则要穷举所有可能用户的问话基本不可能,通过加入*或者?这种通配符,可以用一个模板匹配更多的用户输入。当然,模板可以做得更复杂一些,按照复杂度不同,可能有下面几种类型的模板。

最简单的模板可能是这样的:

 Q:你贵姓?

 A:人家贵性女;

就是完整一句话作为一个模板。稍微复杂些的模板长这样:

 Q:*喜欢*电影*是什么*

 A:我最喜欢的电影当然是《断背山》了,啥时候咱俩一起去看,帅哥~

这样,无论用户问的是下面哪句话,都能蹦出基情满满的回答:

  User A: 你能告我最喜欢的电影是什么吗?

  UserB:你最近喜欢的好电影是什么啊

很明显,这样能够一个模板匹配多种输入的情况。如果再复杂一些,可以是带实体类别标签的模板:

Q:<PersonName>的生日是<Date>吗?

A:哥,我不敢认识<PersonName>.Value啊。

这样的模板等于把一些常见的实体变量抽象出来,否则带经常变化的人名地名日期等的句子模板是没法做的。如果有了上面的模板,就可以这么应答:

UserA:孙杨的生日是1232号吗?

聊天系统先上实体识别模块,把上面这句话转换成:

<PersonName>的生日是<Date>吗?

而且记住实体变量的值:<PersonName>.Value=孙杨;<Date>.Value=1232

这样发现对话模板库里面有一个匹配上的模板,于是就可以根据Q对应的A内容,把变量值填充进去,可以回答:

“哥,我不敢认识孙杨啊。”

因为这种类型的模板带实体变量的识别和值替换,所以看智能一点。

当模板很多的时候遍历匹配法的效率会十分低下的,因此需要一个高效地匹配算法,可参考这篇博客:https://blog.csdn.net/malefactor/article/details/52166235

现成的基于模板的框架是AIML,具体使用请看我的下一篇博客(http://212.129.138.180:8000/show-24.html)。

 

检索式聊天机器人

上次的文章(http://212.129.138.180:8000/show-22.html)我们介绍的Chatterbot框架就是基于检索式的聊天机器人。

6.png

在基于检索模式的聊天机器人中,我们常需要计算问句与FAQ中的问题集合的相似度,有如下方法:

1)最长公共子序列。该方法思路较为简单,直接使用最长公共子序列算法,设字符串A长度为L1,字符创B长度为L2,它们的最长公共子序列为lcs,那么这两个字符串的相似度的度量为sim=2*lcs/(L1+L2)

2)向量相似度计算。这种方法思路同样较为简单,将两个字符串进行分词转换成空间中的向量点,计算两个文本的余弦相似度或欧氏距离即可。

3)编辑距离。编辑距离是两个字串之间,由一个转成另一个所需的最少编辑操作次数。

4CNN计算文本相似度。

 

生成式聊天机器人

目前对于开放领域生成式聊天机器人技术而言,多数技术采用了Encoder-Decoder框架。Encoder-Decoder框架可以看作是一种文本处理领域的研究模式,应用场景异常广泛,不仅仅可以用在对话机器人领域,还可以应用在机器翻译、文本摘要、句法分析等各种场合。下图是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示:

7.jpg

Encoder-Decoder框架可以如此直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对<X,Y>,我们的目标是给定输入句子X,期待通过Encoder-Decoder框架来生成目标句子YXY可以是同一种语言,也可以是两种不同的语言。而XY分别由各自的单词序列构成:

8.jpg

Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非线性变换转化为中间语义表示C

9.jpg

对于解码器Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息来生成i时刻要生成的单词yi:

10.jpg

每个yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y

对于聊天机器人来说,完全可以使用上述的Encoder-Decoder框架来解决技术问题。具体而言,对应的<X,Y>中,X指的是用户输入语句,一般称作Message,而Y一般指的是聊天机器人的应答语句,一般称作Response。其含义是当用户输入Message后,经过Encoder-Decoder框架计算,首先由EncoderMessage进行语义编码,形成中间语义表示CDecoder根据中间语义表示C生成了聊天机器人的应答Response。这样,用户反复输入不同的Message,聊天机器人每次都形成新的应答Response,形成了一个实际的对话系统。

在实际实现聊天系统的时候,一般EncoderDecoder都采用RNN模型,RNN模型对于文本这种线性序列来说是最常用的深度学习模型,RNN的改进模型LSTM以及GRU模型也是经常使用的模型,对于句子比较长的情形,LSTMGRU模型效果要明显优于RNN模型。尽管如此,当句子长度超过30以后,LSTM模型的效果会急剧下降,一般此时会引入Attention模型,这是一种体现输出Y和输入X句子单词之间对齐概率的神经网络模型,对于长句子来说能够明显提升系统效果。

参考文献

[1]百度百科.机器人.

 https://baike.baidu.com/item/%E6%9C%BA%E5%99%A8%E4%BA%BA/888?fr=aladdin.

[2]简书:zerowl.浅谈聊天机器人. https://www.jianshu.com/p/1d871e36826d. 2017-12-26

[3]CSDN博客:lovive.用深度学习构造聊天机器人简介.

https://blog.csdn.net/gzmfxy/article/details/78726372. 2017-12-05

[4]刘升平.聊天机器人的构建方法:基于模板,检索和深度学习.MDCC2016

[5]CSDN博客:张俊林博客.聊天机器人中对话模板的高效匹配方法.

https://blog.csdn.net/malefactor/article/details/52166235. 2016-08-11

[6]CSDN博客:m0_37565948.聊天机器人—简介(一).

https://blog.csdn.net/m0_37565948/article/details/81582585. 2018-08-11

 

 


首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于