系列目录:
要不,和机器聊聊?– 小谈Bot系统
Seq2Seq Chatbot 聊天机器人:基于Torch的一个Demo搭建 手札
深度学习(BOT方向) 学习笔记(1) Sequence2Sequence 学习
深度学习(BOT方向) 学习笔记(2) RNN Encoder-Decoder 及 LSTM 学习
深度学习(BOT方向) 番外1 Seq2Seq的变种VHRED MrRNN

本文首发与实验室公众号的文章,此处为镜像版,文章引用了较多的参考资料,如有侵权请联系,同时请关注实验室公众号,并且查看原版文章。

同时如果需要转载,请保留此链接:http://blog.csdn.net/mebiuw/article/details/53391353,同时注明来自新浪微博:@MebiuW

前言

一直以来,人工智能都被人们视作来自未来的科技,在很早以前,好莱坞大片已经为我们展现了一个个来自未来的机器人,他们不仅有着人类难以企及的计算能力,还有着人类的“思维”。相信很多人都看过《终结者》这一系列的电影,终结者讲述了经过核毁灭的地球,被一个叫做“天网”的电脑统治,人类几乎被消灭殆尽,剩下的人类在约翰康纳的领导下与天网英勇作战,在快要取得胜利的时候, “天网”为了改变这一切,制造了时光逆转装置,多次派出了终结者型的机器人回到过去试图阻止约翰康纳的出生、成长。相信终结者引起了不少人的担心,担心有一天人类世界也会真的和电影里面一样,被我们亲手制造的机器人所毁灭。人们所担忧的,主要是在于人工智能的发展是否会让机器产生足够的智力、并且超脱于人类的控制,如果这样的人工智能出现了,或许真的会是人类生存的最大威胁。

回到现实当中,虽然人工智能在几次起起落落后又再次掀起了一股热潮,但是即便像Alpha Go那样的顶尖AI产品,和电影中的“天网”相比,都显得无比的“智力低下”,所以至少看得到文章的我们,都不用担心这个问题的。
我们今天所要讨论的话题隶属于AI,是其一个分支,即Chatbot 聊天机器人,在下问将简称“bot”。聊天机器人是一个用来模拟人类对话、聊天、或者完成一些特定任务的程序。聊天机器人可以是一个能够和你侃侃而谈的朋友,可以是一个帮你解决一些困惑的导师,是一个帮你处理个人事务的小秘,总之,Bot可能会成为信息时代的下一个科技增长点,在今天的文章中,我们将聊一聊关于Bot的那些事儿。

背景

在语言发明之前的,我们的祖先通过肢体动作和喊叫来和同伴交流,肢体动作和喊叫是大部分动物与生俱来的交流方式,这种方式最为简单,但限制也是最大的,单纯靠这两种交流方式是无法支撑一个人类社会的发展的。随后,人类发明了语言,极大的提高了交流的效率和信息交流的能力,奠定了人类社会/文明发展的基础。随着人类文明的不断发展,人们也一直努力的改进我们的交互方式,于是人类发明了电话和手机,这样使得人们可以无拘无束的同任何地方的人们聊天,人类发明了诸如QQ、微信、Whatsapp在内的即时通讯工具,使得我们不仅可以通过语音进行沟通,还可以使用文字、图像、视频等形式进行交流。到了现在,我们可以梳理下人类交流的发展路径,就是不断的在改进交互的效率、并且降低各种外在约束。

到了现在,很多人在想,人类下一步的交互方式的改进会是什么?未来是什么样子的我们不得而知,但是现在人类的下一步交互方式,或许就是人与机器的交流。在计算机/机器发展的初期,受限于机器自身的性能和人工智能的发展,机器本身不能同人做交流,机器只是单纯的接受人类的指令,然后执行特定的任务,将结果返回给人,仅此而已。随着机器性能的大幅提升、人工智能的不断研究,以及大数据的爆发,人们发现可以利用这些提升设计出基于机器的聊天系统(即Bot),提升交流的效率。仔细观察业界的动态,会发现Facebook、Google等厂商都在最近的发布会上,将Bot列入了战略级的发展线路当中,或许这真的是人类交互发展的下一个方向。
虽然Bot在近来才成为业界广泛关注的焦点,但其实Bot的相关研究从很早以前就开始了,并且Bot早已经进入了我们的互联网生活当中了,只是很多人没有注意到罢了。首先,需要承认的是,虽然现在技术进步了不少,但是其能力依旧有限,现有的Bot系统并不能真的表现的和一个人一样,其依然存在很多不足。一般来说,我们可以将Bot分为 面向开放领域的Bot和 任务导向的Bot,面向开放领域的Bot就是说能和人类随便的聊,而任务导向的就是面向一些特定的垂直领域,主要是完成一些特定领域的任务。其中,面向开放领域的Bot的表现还相对不够好,而面向特定领域的任务导向机器人已经达到了一个“不错”的水平。

现有的Bot产品

之前说到了Bot其实已经发展很久了,并且已经在特定领域取得了喜人的进步,那么现在就为大家介绍一下现在一些比较出名的Bot产品。

Apple Siri

首先需要介绍的就是目前最著名的Bot之一,Apple Siri。Siri是苹果公司在其产品iPhone4S,iPad 3及以上版本手机和Mac上应用的一项智能语音控制功能。Siri可以令机器变身为一台智能化机器人,利用Siri用户可以通过手机读短信、介绍餐厅、询问天气、语音设置闹钟等。Siri可以支持自然语言输入,并且可以调用系统自带的天气预报、日程安排、搜索资料等应用,还能够不断学习新的声音和语调,提供对话式的应答。
虽然大家对Siri的评价很一般,但是Siri毕竟是一个诞生较早的,面向大众用户的个人助理型Bot,伴随着iPhone iPad 以及 Mac的销售,或许这可以说是最为普遍的移动Bot吧?

Microsoft Cortana / 小冰


Cortana(小娜)是由微软发布的一个和Siri类似的个人助理型Bot,搭载在所有Windows 10 设备之上(其他平台也有对应APP可以下载),它能够充分的了解用户的习惯和偏好,帮助用户进行日程的安排,以及部分的问题回答等任务。

而小娜的妹妹小冰则是一个开放领域的虚拟伴侣型机器人,他的角色和Cortana Siri不同,小娜的主要工作就是陪用户闲聊,不作为一个个人助理的角色存在。“微软小冰”集合了中国近7亿网民多年来积累的、全部公开的文献记录,凭借微软在大数据、自然语义分析、机器学习和深度神经网络方面的技术积累,精炼为几千万条真实而有趣的语料库(此后每天净增0.7%),通过理解对话的语境与语义,实现了超越简单人机问答的自然交互。
小黄鸡

小黄鸡,一个闻名于人人的聊天机器人,在人人或者其它平台上,只要发布状态或者聊天的时候at一下小黄鸡,小黄鸡就会和你进行生动有趣的对话。
Bot平台简介(任务导向型)
ChatbotsChina对当前的一些Bot系统结构做了一个很好的梳理,这里引用他的一些内容,为大家介绍一下现在一些任务导向性的Bot是怎么做成的。

首先,相信大家都用过中国移动联通电信的那种短信营业厅或者微信营业厅吧,其中一大功能就是回复一些特定的符号,从而实现一些人特定任务的工作。这种十分Naïve的方式,其实也勉强算是一种任务导向型的Bot吧~~~

其次,就是像美国Api.ai(已被Google收购)所提供的bot创建平台了,这种类型的Bot的工作方式是识别用户的一个意图(任务是做什么),然后再完成相应的任务。在这个类型的bot当中,每个意图通常就只是包含一轮对话,开发者通过提前制定好相应的模板(提问、回复、动作,实体)等,就可以实现相应的任务了。

正如上图,这个类型的系统,首先读取用户的输入,然后从中之别用户的意图和实体类型,然后根据预定的模板,进行相应的动作,最终完成用户的意图。
除了上面介绍的常见bot平台工作原理以外,还有一些更加Bigger的Bot的系统,比如Viv(原Siri团队部分人离职后开发的)的Bot平台,和Wit.ai。在这里主要介绍下Viv,Viv在今年5月份上给了大家一个基本的展示。其基本思想,我直接引用原文【2】的内容了,大家直接看就好(详细内容大家请看文章末尾的第二个链接):

###########以下内容为原ChatbotsChina原文

Viv中主要包含了两种对象:概念对象(Concept Object)和动作对象(Action
Object),其中概念对象指的就是实体,而动作对象就是执行的动作。以概念和动作对象为结点,Viv构建了规模庞大的有向网络图。概念结点到动作结点的边表示此动作以此概念为输入参数,而动作结点到概念结点的边表示此动作的输出中包含了此概念。如果两个概念结点存在扩展(“is
a”)或者属性(“has
a”)关系,那么它们之间也会存在有向边。随着开发者不断把新的概念和动作对象加入到Viv系统,这个网络图会逐渐延伸,越来越大。借助于Viv的动态演化认知架构系统(Dynamically
Evolving Cognitive Architecture System,简称DECAS),Viv能做的事会随着网络图的增大而指数增长。
DECAS的核心,是如何串联起不同的动作来达成目标。放在之前提到的概念和动作组成的网络图里面说,其实就是找意图中概念结点到意图中目标结点的各种连通路径。(虽然Viv没有具体说,但目标结点应该也是一种概念结点。)Viv把一条路径称为一个计划(Plan)。计划中使用到的动作可以跨应用,可以来自于不同开发者设定的动作。
图中给出了达成跑鞋推荐目标的两个计划,其中计划1串联了transform_occupation_to_price和rec_shoes_based_on_price这两个动作,而计划2则是串联了transform_occupation_to_type和rec_shoes_based_on_type这两个动作。开发者可以为每个计划设定一个价值函数,DECAS则只需要选择价值最高的topN计划具体执行即可。当然,DECAS可能做得更复杂,比如依据用户反馈实时调整计划。

Bot 技术介绍(开放领域的对话模型)

前面介绍了一些针对特定任务领域的Bot的实现平台技术,那么现在介绍一些面向开放领域的Bot技术。或者严格来说,是Bot里有关如何产生对话的一些技术,这些技术更多的被用来开放领域的Bot里面,所以这一节的内容和之前介绍一些平台系统会有一些区别。
基于开放领域的人机对话,一直都是NLP研究的一个重要话题,一般来说实现人机对话有基于规则的,基于模板的,这两者多用在之前介绍的面向特定任务领域的Bot当中,而在开放领域当中,这种基于特定规则或者模板的方式明显是行不通的,因为聊天的内容不限于特定领域当中,无论规则还是模板都不可能做到足够的覆盖。所以,在开放领域的Bot 对话模型当中,多采用data-driven 的方式,即基于足够大的语料,来进行对话的生成,换句话说,基于data-driven的bot,首先需要设计好bot的模型,喂入足够多的语料进行处理或训练,而在使用中bot的回复内容则就是模型和这些语料共同决定的。这种方式的bot系统,主要难点在于如何设计对话模型、如何收集到足够多足够好足够广的语料。
Data-Driven的对话模型,可以被粗略的细分为“检索式”(Retrieval-Based)的,或者是“生成式”(Generation-Based)的。其中,基于检索式的对话模型系统,通常是收集一些<问题,答案>(或者理解为<上文,回答))的对,当用户输入一句话后,根据这句话生成一个query,检索我们语料库中的所有<问题,答案>,然后选出一个系统认为最可能的问题答案对,返回其答案,这个答案也就是bot对用户问题的回答。而生成式的模型,则采取了另外一种方案,生成式的模型通常是根据用户的问题和现有的知识库,直接生成对话结果(注意这个结果是参照了语料库,不是直接从语料库中提取),生成式的模型比起检索式来说更为复杂一些,现在也多采用基于RNNs的模型来实现。

检索式的模型

基于检索式的对话模型,其原理十分的简单。简单说,就是当用户说了一句话之后,系统需要从语料库(<问题,答案>)当中找出最为相似的一个返回就可以了。一般来说,检索式的系统,最常用的就是直接衡量用户问句和系统语料库中问题(或答案)的语句相似度(或相关性),并且根据这个相似度进行排序。


其具体的技术,可以采用编辑距离进行衡量,可以采用关键词相同数量进行衡量,也可以基于Word Embedding 相似性进行衡量(如LDA,Word2Vec(sen2vec,doc2vec))。在实际的应用中,我们可以借用像Lucene或者Solar在内的系统进行实现。
基于检索式的对话模型可以说其优点是比较直接,并且回答的语句质量也相对更好(这里指代意义)。但是其最大的问题在于,这个对话模型的智商,主要由“语料库”来决定,语料库有多大多全,直接影响到了回答的能力,如果语料库中没有近似的语料,将无法提供正确的对话结果。

生成式模型

基于生成式的对话模型,最常见的做法是,将它看做是一个Sequence2Sequence的语言模型。那Sequence2Sequence又是什么呢?网上有很多关于Seq2Seq的解释,但是从我的角度来说,我愿意把Seq2Seq看作是:
从一个Sequence做某些工作映射到(to)另外一个Sequence的任务,即泛指一些Sequence到Sequence的映射问题,Sequence在这里可以理解为一个字符串序列,当我们在给定一个字符串序列后,希望得到与之对应的另一个字符串序列(如 翻译后的、如语义上对应的)时
具体结合实际应用来说,如下的连个任务都可以看做是Seq2Seq的任务“
1、SMT翻译任务(源语言的语句 -> 目标语言的语句)
2、对话任务(上下文语句->应答语句)

正如上图,在对话任务当中,我们可以把用户的输入看作是一个源Sequence,然后经过系统的转化,生成另外一个Sequence,将这Sequence作为Bot的回答。
在实际的实现过程当中,我们通常用以RNN Encoder-Decoder为基础的深度学习框架去解决这一类Sequence2Sequence问题(包含对话、翻译等)。RNN Encoder-Decoder 的主要流程是将输入的源Sequence编码到一个中间的context当中,这个context是一个特定长度的编码(可以理解为一个向量),然后再通过这个context还原成一个输出的目标Sequence。
如果用人的思维来看,就是我们先看到一句话(源Sequence),将其读一遍(Encoder-输入),然后在我们大脑当中就记住了这个源Sequence,并且存在大脑的某一个位置上,形成我们自己的记忆(对应Context),然后我们再经过思考(Decoder),将这个大脑里的东西转变成输出,然后写下来(输出)。
那么我们大脑读入的过程叫做Encoder,即将输入的东西变成我们自己的记忆,放在大脑当中,而这个记忆可以叫做Context,然后我们再根据这个Context,转化成答案写下来,这个写的过程叫做Decoder。其实就是编码-存储-解码的过程。

而对应的,大脑怎么读入(Encoder怎么工作)有一个特定的方式,怎么记忆(Context)有一种特定的形式,怎么转变成答案(Decoder怎么工作)又有一种特定的工作方式。一般来说,Encoder和Decoder的实现,都是基于RNN及RNN的变种,如LSTM。
RNNs,即循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用。 RNNs通常用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。这种神经网络结构在很多领域取得了不俗的成绩,但是由于其网络结构的问题,使得其在面对序列问题或者和时间密切相关的问题时,表现不佳。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。

图是一个典型的RNN网络结构,受限于篇幅限制,这里就不做详细的解释了,仅仅放出一个RNN按照时刻将网络展开后的示意图:

在标准的RNN当中,存在一些长时记忆问题,也就是说当句子太长了以后,会出现句子生成效果不好的结果,为了解决这个问题,提出了包含LSTM、GRU在内的一系列RNN变种,其基本的结构和最原始的RNN一样,但是变的更加复杂了一些。同样受限于篇幅限制,这里无法做一个详细解释,希望有一个详细了解的可以查看参考中的【3】链接。

(LSTM)
生成式的模型看起来十分的炫酷,但是其存在上手难度大,训练要求高,发展尚不成熟(主要表现为长句记忆、回答的东西经常无意义)等一系列问题。但是其确实会是未来bot的主要发展方向之一,虽然现在尚有不足,但是相信未来是光明的。

总结

从现在的技术发展来看,不知道像终结者那样的机器人什么时候能够出现,只知道这一切还很遥远。虽然我们暂时不用担心有一天机器人会有着和人类一样的AI,对人类造成威胁,但是我们还是需要不断的贡献每一个人的微薄力量,使得更加的智能的AI早日出现,改善我们的生活、工作、学习。Bot作为未来交互的趋势,无疑是连接人与机器的最佳方式,Bot的发展将会带给我们无限便利,在这里也希望Bot产业能够尽快突破现在的种种瓶颈,早日带给我们一个能骗过“图灵测试”的Bot吧!
当然,如果有一天,技术足够发达,我希望更多的机器人是和下图的那只一样,而不是像天网那么残酷:


现在Bot正如火如荼的发展,其涉及到的领域广而深,本文仅能从笔者小小的视角中窥探一二,文中如有错误,请多多指教。

参考资料

1、 http://mp.weixin.qq.com/s/vZMashlAiJzRZfpIX_-PAw
2、 对话交互时代的各种Bot:可控性与智能性的权衡https://zhuanlan.zhihu.com/p/22675739
3、 http://blog.csdn.net/mebiuw/article/details/52832847
4、 https://zhuanlan.zhihu.com/p/20940374
5、 Sutskever I, Vinyals O, Le Q V, et al. Sequence to Sequence Learning with Neural Networks[J]. Advances in Neural Information Processing Systems, 2014, 4:3104-3112.
6、 Shang L, Lu Z, Li H. Neural Responding Machine for Short-Text Conversation[J]. Computer Science, 2015.
7、 Vinyals O, Le Q. A Neural Conversational Model[J]. Computer Science, 2015.

本文首发与实验室公众号的文章,此处为镜像版,文章引用了较多的参考资料,如有侵权请联系,同时请关注实验室公众号,并且查看原版文章。

同时如果需要转载,请保留此链接:http://blog.csdn.net/mebiuw/article/details/53391353,同时注明来自新浪微博:@MebiuW

要不,和机器聊聊?-- 小谈Bot系统相关推荐

  1. 外卖分销返佣分佣程序外卖cps小程序返利系统外卖项目优惠券返利

    外卖CPS红包小程序源码分享 外卖券外卖省省外卖探探美团饿了么外卖联盟优惠券小程序系统软件开发源码 美团/饿了么外卖CPS联盟返利公众号小程序裂变核心源码 今天和大家分享下外卖CPS项目,这个其实和做 ...

  2. 外卖返利系统,外卖返利系统小程序,外卖系统,返利系统

    咕咕驴外卖返利系统,外卖返利系统小程序,外卖系统.包含淘客公众号+淘客小程序+淘客返利机器人+淘客共享APP+外卖返利小程序. 外卖返利系统|外卖返利系统小程序,外卖系统,返利系统 外卖CPS系统之小 ...

  3. 外卖返利小程序系统公众号外卖饿了么美团cps返利小程序分销系统

    外卖返利小程序系统公众号外卖饿了么美团cps返利小程序分销系统 外卖CPS红包小程序源码分享 外卖券外卖省省外卖探探美团饿了么外卖联盟优惠券小程序系统软件开发源码 美团/饿了么外卖CPS联盟返利公众号 ...

  4. 聊聊小程序的登录逻辑

    聊聊小程序的登录逻辑 一直聊的都是客户运营方面的话题,毕竟斗金客户运营系统小程序产品是依靠技术实现的,今天来聊聊大家都能感知到的小程序登录问题吧,大家可能都碰到过很多小程序刚打开就要求授权获取信息之类 ...

  5. 东方木2020浅谈win10系统还原怎么操作

    编辑:东方木影院 地点:武汉 时间:2020年2月14日 东方木2020浅谈win10系统还原怎么操作,如果电脑物理内存不足时,会导致工作效率非常的低,我们可以调整win10 32位系统虚拟内存来加快 ...

  6. android 系统升级 方法,安卓系统怎么升级 浅谈安卓系统更新升级的几种方法

    最近有网友问小编"安卓系统怎么升级?",针对该问题,笔者也在网上查找了下相关资料,不过并没有找到什么有价值的相关介绍,多数都是介绍如何自动升级.或者下载升级版包等等方法,对于一些常 ...

  7. 以下哪些属于android控件的touch事件?_聊聊 Android 的 GUI 系统

    你长得辣么好看,我想着要更详细地了解你.今天,让我们一起来聊聊 Android 的 GUI 系统. 缘起 在2019年的 Google I/O 大会上,Jetpack 团队首次为大家介绍了 Jetpa ...

  8. 聊聊 Android 的 GUI 系统

    你长得辣么好看,我想着要更详细地了解你.今天,让我们一起来聊聊 Android 的 GUI 系统. 缘起 在2019年的 Google I/O 大会上,Jetpack 团队首次为大家介绍了 Jetpa ...

  9. 浅谈 Linux 系统中的 SNMP Trap 【转】

    文章来源:浅谈 Linux 系统中的 SNMP Trap 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧. 简单网络管理协议(Simple Network ...

最新文章

  1. 机器学习数学基础:数理统计与描述性统计
  2. python通用权限管理框架图_通用权限管理设计篇_设计模式
  3. php mvc开发系列教程第三节 Controller 类实现
  4. ajax 调用后台的方法
  5. 双曲线和直线联立公式_圆锥曲线联解公式
  6. Boundary(2020多校第二场B)
  7. 如何使用悲观锁定修复乐观锁定竞争条件
  8. oracle rman备份spfile,RMAN备份恢复之SPFILE的恢复(一)
  9. M1芯片MacBook pro重装系统出现报错情况的解决方法
  10. java继承的范例_Java范例中的继承
  11. Java随笔记 - BIO Socket 编程实例
  12. Linux修改SSH端口号
  13. 2022年5月17日 点扩展函数的matlab仿真学习
  14. 共识算法-PoW(工作量证明)算法
  15. 第1章 Spring Boot史前简述
  16. 帝国站长php主动推送,帝国CMS 链接主动推送插件设置帮助
  17. 设计模式 - 漫谈软件编程背后的系统化思维
  18. 解决mini_httpd_v1.30在使用http post请求出现 socket hang up的问题
  19. 百度贴吧推广技巧:故事型营销思维
  20. 什么是IA32 及字长的理解

热门文章

  1. BERT求古诗文本相似度
  2. HTML5 canvas画圆
  3. 彬彬的 GDKOI2023 游记
  4. Federated Continual Learning with Weighted Inter-client Transfer——论文笔记
  5. 【免杀】————2、php免杀木马的思路
  6. Android 设置字体样式
  7. BBC纪录片教程列表
  8. 腾讯云~kafka伪集群搭建
  9. spring 高度解析
  10. 虽迟但到的复盘,再见了我的2022