微软小冰智能聊天是如何实现的?
虽然知道小冰的智能回复背后,应该是微软庞大的数据库。
但作为大二的学生,对这方面不是很了解,期待能得到答复。谢谢。
9 个回答
谢邀。
微软亚洲研究院副院长周明博士本月在清华大学的演讲——自然语言聊天、问答和对话,刚好可以回答这个问题。演讲中,周明博士与大家分享了微软小冰背后的人机对话机理。
周明博士,微软亚洲研究院副院长、国际计算语言学协会(ACL)候任主席、中国计算机学会理事、中文信息技术专委会主任、术语工作委员会主任、中国中文信息学会常务理事、哈尔滨工业大学、天津大学、南开大学、山东大学等多所学校博士导师。
————这里是正式回答的分割线————
微软小冰就是在模拟人跟电脑的对话。电脑接收文字、图像或者语音,识别其中的内容,然后给予适当的回复。我们团队在微软做自然语言人机对话方面的研究,并提供了小冰的关键自然语言处理技术。下面我将介绍一下人机对话机理,希望对大家有所帮助,也希望大家一起加入到人机对话的创新过程中,把人机对话做的更好。
人机对话有三个层次,一个是聊天,一个是问答,还有一个是对话,即面向某一特定任务的对话。比如,我要买东西时,一进门,售货员会打招呼说,“你好!”,我回复“你好”。接着她会问“你想看看什么?”,我说“我想买两包方便面”。她问“什么牌子的呢?这个三块钱一包,这个五块钱一包”,我说“那要三块钱一包的吧。”她说“那好,你用支付宝还是微信付款呢?”我说“微信”。她说“好,这就是你买的东西”。可以注意到,在我们每天都会产生的这些对话中实际上包含了三个最基本的人类智力的活动:
- 第一个,聊天。聊天一般没有太多实质性的内容,主要是拉近人与人之间的关系;
- 第二个,问答。比如“你买什么东西”,“这个方便面多少钱一包”,这是提问,它的目的是提供信息;
- 第三个,面向特定意图的对话。比如售货员知道我的意图是买方便面,开始围绕这个意图跟我进行了有目的的对话。最终我完成支付行为,售货员把方便面放到我手上。
这三个技能是我们在研究人机对话当中最重要的三个技能。
最近几年,深度神经网络逐渐取代了传统的统计机器学习,成为主流的研究方向。现在,自然语言技术已全部转向深度学习网络,我们的对话系统也都用到了深度学习网络,所以先向大家介绍一下深度学习网络(内容略,详情见文末微信链接)。
再来介绍一下刚才所说的三种对话的功能。第一个,聊天是怎么做的,这样的人机对话是怎样形成的?其实一般有两种办法。
一种很简单,就是将网上的论坛、微博或是网站里出现过的对话句子抽取出来,当成训练语料库。当来了一个句子时,系统会从语料库里找到一个跟这个句子最相像的句子,而这个句子对应的答复就可以直接输出作为电脑的回复。虽然看起来这个方法简单粗暴,但有时候还是挺有效的。
然而有的时候,系统找到的句子可能对应了很多回复,它不知道哪个回复最适合当前的输入语句。所以这里就要有一个匹配的过程,就是怎么判断输入语句跟语料库里的回复在语义上是相关的或者是一致的。这里就有了很多度量的方法,给大家介绍其中的两种。
第一种,如下图,q代表当前输入的语句,r代表目前的一个回复,想看q和r是否相关或者一致,要给它一个分数。如果有多个选择时,首先要把所有的东西排下去,输出最佳的分数,即实际上是对整个句子进行编码,对问题、回复进行编码。编码的方式可以用循环神经网络,也可以用卷积神经网络,也可以用最简单的就是每个维度取平均值,最后算一下这两个向量之间的距离。
第二个方法也比较简单,就是把问题和回答的每个词都算一个距离,这样就形成了一个相似度的矩阵,通过卷积得到矩阵变换的信息,然后再取最大池化层,矩阵的维度就越来越小,最后可能就做到一个结点上。这个可以有多种变换,那么最后就会有一组结点,所有的结点其实都代表了这两个字符串之间的距离,再通过多层感知就可以算出句子。
然而这些方法都有一个问题,就是短字符串匹配的时候太依赖于自己的信息了。而我们日常说话时往往是有背景、有常识的,我们说的每句话都有一个主题词表。比如我来到了清华三食堂,那这个背后的主题词可以说吃饭、早饭、中饭、晚饭、价钱、饭卡等,这些词都是跟它相关的主题词,匹配的时候要体现出这些主题词。
怎么体现呢?首先找出输入语句的N个主题词,然后再找出可以回复的那些句子的主题词,用主题词来增强匹配的过程。这也是通过神经网络来算两个词串,再加上主题词增义的相似度。
具体算法实际上是通过Attention model(注意力模型)计算每个主题词跟当前这句话的匹配强度,所有主题词根据强度不同进行加权以体现当前背景主题词的强度,然后再和原句匹配在一起,来算相似度。
另外,我们也可以把主题词当成所谓的Knowledge base(知识图谱),通过主题词限定当前的输入应该有哪些信息可以输出,哪些信息不要输出,哪些信息应该补足,哪些信息可以直接使用等等。实际上在具体实现时可以看到一个句子有三种表示方法,两个句子之间每个句子都有三种表示方法,用两两表示方法计算距离,最后就会得到一个矢量,再通过多层感知得到一个数值,来表征这两个输入串的距离。所以,这两个输入串不是赤裸裸地直接去匹配,而是用周围知识所代表的主题词来增强。
以上是基于搜索的一种回复方法,我们也可以用生成模型,其实生成模型走的也是神经网络的路线。输入一个句子,然后通过循环神经网络进行编码,再通过解码的过程输出每个词。当机器翻译的时候是跨语言的输出,由原文输出译文,而在古诗里是第一句生成第二句,在这里就是输入一个用户的问题得到一个系统的回复。
这就是一个生成的过程,可以看到图中下部是进行一个句子的编码,用这个编码指导每一个词的输出,在输出时既考虑原始句子的编码,也考虑前面的词输出什么样的词以及前面的隐状态是什么,最后传递输出,直到输出词尾。
实际上,输出时不能一而贯之所有的词都等价对待。有的词权重比较高,这就由Attention model来体现输出某一类词时,哪个源端词对它的影响力最大,要体现在输出的概率方面。
用传统的RNN以及注意力模型就可以做问题输入,系统回复。但是它也有很多问题,比如它的回答太枯燥不丰富,那怎么办?
我们要用到外部知识来丰富回答。我们可以用主题词增义。原始的句子可以用Attention model输出每个位置的词,然后再增强跟这个句子有关的主题词,把主题词编码,也做一种Attention model来预测输出。一个词的输出除了来自源端的信息之外,还受到了主题词的制约,最后输出的概率是这两个输出预测结果的概率之和,选择一个最优的来输出。
刚才说的是单轮的,现在说多轮怎么回答,因为人在说话的时候是考虑上下文的,不是只看当前的一句话,多轮的信息都要考虑进去。所以要把整个对话(session)考虑进去,对session进行编码,用session来预测输出的回复。
在计算的时候,我们有几个这样的模型。刚才是基于搜索的方式,还可以用多层感知的方式来模拟多轮对话。对每一个之前出现的句子进行编码,每个编码都可以通过一个句子的编码体现整个句子的信息,再通过Attention model跟目标连接,最后预测的时候就是通过基于句子的Attention model来预测。大家可以理解为我们在回复的时候既要看到前面哪一句话重要,还要看到那一句话里哪个词重要,所以是一个双层的Attention model。
以上是关于聊天的介绍,还有问答和对话。
问答就是用户有问题,系统要理解这个问题,然后利用系统所有的资源来回答这个问题。资源可能是FAQ、文档、表格、知识图谱等等,哪一个回答出来了,就说明哪一个是答案,如果有多个资源都可以回答问题,那我们选取那个最有可能的来进行输出。
简单说一下所谓Knowledge base(知识图谱)有两条路走,一条是对用户的问题进行语义理解,一般用Semantic Parsing(语义分析),语义分析有很多种,比如有用CCG、DCS,也有用机器翻译来做的。它得到了一个句子的逻辑表示,根据逻辑表示再到知识库里去查,查到这个结点是什么,关系是什么等,通过这种方式,自然而然就查到了。
还有一种办法就是最近几年流行的信息检索方法。比如,一个问题“where was Barack Obama born ?”这句话里出现的了一个实体——Obama,假设这个知识库是完备的,那么系统就会判断答案一定是跟Obama关联的某个结点,这样就可以到知识库里以Obama为半径,把跟它有关的词全部挖出来,然后系统要算相似度,相似度算的时候有一种办法,是把这个知识图谱的某一个知识单元用自然语言表征出来,也可以用词嵌入做一个多维向量表示。这时候做一个Ranker跟当前的问题算一个距离,距离近的就是它的答案。我们也将这些技术运用在了微软小冰里,比如小冰回答问题,跟你聊天等等。
————这里是回答结束的分割线————
以上回答摘选自周明博士的演讲,了解完整演讲内容,请移步: 讲堂|周明:自然语言对话引擎
感谢大家的阅读。
本账号为微软亚洲研究院的官方知乎账号。本账号立足于计算机领域,特别是人工智能相关的前沿研究,旨在为人工智能的相关研究提供范例,从专业的角度促进公众对人工智能的理解,并为研究人员提供讨论和参与的开放平台,从而共建计算机领域的未来。
微软亚洲研究院的每一位专家都是我们的智囊团,你在这个账号可以阅读到来自计算机科学领域各个不同方向的专家们的见解。请大家不要吝惜手里的“邀请”,让我们在分享中共同进步。
也欢迎大家关注我们的微博和微信账号,了解更多我们研究。
http://weixin.qq.com/r/PUliejrEzWeyrX4Z9xwv (二维码自动识别)
刚好做过一个类似的产品,虽然没有那么高大上,但一些核心技术原理应该也参考意义,说一下做的思路。
类似小冰这样的产品说简单也简单,说复杂也复杂。单纯从外面看你会觉得小冰与去年人人网上流行的小黄鸡类似,但在技术实现上有本质的差异。
此类应用的大致流程都是:用户输入一段话(不一定只是单词)->后端语义引擎对用户输入的语句进行语义解析->推断用户最可能的意图->调用对应的知识库、应用、计算引擎->返回结果给用户。
1、最初级的实现方法:关键词匹配
建一个关键词词库,对用户输入的语句进行关键词匹配,然后调用对应的知识库。
此种方式入门门槛很低,基本上是个程序员都能实现,例如现在微信公众平台的智能回复、诸多网站的敏感词过滤就是此类。
但此种方式存在诸多问题,例如:
a、由于是关键词匹配,如果用户输入的语句中出现多个关键词,此时由于涉及关键词权重(与知识库的关键词对比)等等问题,此时关键词匹配的方法就不擅长了
b、不存在对用户输入语句语义的理解,导致会出现答非所问的现象。当然在产品上对回答不上的问题就采用卖萌的方式来规避掉。
c、基本上无自学习能力,规则只能完全由人工维护,且规则基本是固定死的。
d、性能、扩展性较差。还是上面的一句话中包含多个关键词的例子,采用普通程序语言来做关键词匹配,性能奇差。即便采用一些文本处理的算法来做(例如Double-array trie tree),也很难满足大规模场景需求。
2、稍微高级点的实现方法:基于搜索引擎、文本挖掘、自然语言处理(NLP)等技术来实现
相对于1的关键词匹配,此种实现方法要解决的核心的问题可以大致理解为:根据一段短文本(例如用户问的一句话)的语义,推测出用户最可能的意图,然后从海量知识库内容中找出相似度最高的结果。
具体技术实现就不细说了。举一个很粗糙的例子来简单说一下此种实现方法处理的思路(不严谨,只是为了说明思路)。
假如用户问:北京后天的温度是多少度?
如果采用纯搜索引擎的思路(基于文本挖掘、NLP的思路不尽相同,但可参考此思路),此时实际流程上分成几步处理:
1、对输入语句分词,得到北京、后天、温度3个关键词。分词时候利用了预先建好的行业词库,“北京”符合预先建好的城市库、“后天”符合日期库、“温度”符合气象库
2、将上述分词结果与规则库按照一定算法做匹配,得出匹配度最高的规则。假定在规则库中有一条天气的规则:城市库+日期库+气象库,从而大致可以推测用户可能想问某个地方某天的天气。
3、对语义做具体解析,知道城市是北京,日期是后天,要获取的知识是天气预报
4、调用第三方的天气接口,例如中国天气网-专业天气预报、气象服务门户 的数据
5、将结果返回给用户
以上例子其实很粗糙,实际上还有诸多问题没提到:语义上下文、语义规则的优先级等等。
例如用户上一句问:北京后天的温度是多少度?下一句问:后天的空气质量呢?这里实际上还涉及语义上下文、用户历史喜好数据等等诸多问题。
此种处理方法存在的最大问题:规则库还主要依赖于人工的建立,虽然有一定的学习能力,但自我学习能力还是较弱。可以借助一些训练算法来完善规则,但效果并不是很好。而这也是目前流行的深度挖掘技术所擅长的。
3、当下时髦且高级的玩法:基于深度挖掘、大数据技术来实现
这是cornata、google now等后端的支撑技术,至于小冰,感觉应该是以2为主+部分领域知识的深度挖掘。
你要说只能聊天怎么做,大家都能说说的。但要说微软的这个怎么做的,你得问做这块的童鞋。
我说说我的猜测吧。
首先智能这东西吧,我理解现在主要是三个层次,一是规则类,二是机器学习类,三是理论推导类。
规则
规则的特点是简单好用,但需要人工干预太多,人肉能创建的规则也有限。
打个比方吧,你可以创建无数个这样的规则:
如果(问题是你好),那么回答(你好)
如果(问题包含吃饭,并且问题的长度小于6),那么回答(我爱美丽,但我更是个吃货)
……
把这些规则保存到数据库里,剩下不在规则里的问题直接用一些乱七八糟的话蒙混过关就完事了。
像对话机器人的话,规则是必须有的,而且应该大部分答案都需要规则的参与。
机器学习
现在主流的方法了,小冰一定是用机器学习的了。
机器学习说简单也很简单,说复杂也复杂,本质上就是从事物抽取出特征,在根据以往数据的特征去预测未来数据的特征。从数学的角度来说,历史数据甲乙丙得丁,甲乙戊得丁,甲乙辛得丁,那么得到的模型就是甲乙得丁,跟第三个特征无关。开发者要尝试无数种生成特征的方式,以找到有效特征,在通过历史特征计算出每个特征的权重。
但我觉得问答机器人的回答本身很难用机器学习,因为即使你的准确率达到95%,生成的语句仍然缺乏基本的人类逻辑。
但机器学习一定是用在上面了,像基础的分词,词性标注,主干分析等等都需要机器学习,而对于规则的整理很可能也用到各种机器学习的方法。我猜测可能使用机器学习的方法对问题分类,但最终整理的答案内容还是人肉生成的。
理论推导
这方面现在应该主要还是理论阶段,理论和实践还不够完善,离小冰这样的实际产品还差很远。
最高票答案列举了三种常见的技术思路但是完全没有正面回答题主的问题,有那么点强答的味道。别的我不管,小冰怎么实现的?
转一篇清华大学教授江铭虎的独家专访稿节选。
微软的“小冰”机器人,百度的“小度”机器人以及谷歌的alphago都有一个共同的特点,就是随着AI技术的飞速发展,机器人可以挑战人类了。
微软的“小冰”机器人是以情感语料为基础的中文人机对话社交平台,通过“小冰”机器人建立情感连接,其人机每次对话持续的轮数达近百次,给用户留下深刻的印象。
对话系统不仅限于语义上的加工,还包括大数据知识搜索和深度学习,其中大规模情感语料起了关键的作用。它回答问题的机理与人类不同,“小冰”机器人拥有海量的实体知识库,将情感语料充分融于其中,其运行过程是:通过情感语料对大数据进行再加工,在后端形成部分感性的知识库,通过人机对话,对人类所表达的情感语料进行侦测,跟踪并判断人类情感变化,再与知识库进行匹配,从而实现类似的情感对话。
因此“小冰”机器人并非通过学习形成记忆,而是通过大规模情感语料和大数据知识搜索对文字、语音、图像等数据采用深度学习处理后的反馈结果。
回答完毕。
补充点其他类似AI:
百度的“小度”机器人可以挑战人类的最强大脑,小度运用了深度学习技术,通过数据建模,构造出拥有百亿个参数的深度神经网络,在大规模GPU并行化平台进行统计训练得出的学习结果,但“小度”机器人并不具备人类的思考能力。
同样的,谷歌的alphago机器人,并非通过思考来完成下围棋的过程,而是对大量棋谱数据,经过复杂的深度学习计算的结果。
总之,这三种AI均是建立在深度学习的技术基石之上,通过对海量数据的分析学习最终得到相应反馈并输出。本质上是共通的,但学习的内容不同,采用的算法不同,导致表现的形式不同。
呵呵
幾千萬的研發和推廣費用
騰訊一個通知就讓你打水漂
eric事先不和wechat打好招呼也不和wechat探討好販賣用戶隱私实现智能聊天了吗?我刚聊过,第五代了,还是只会胡言乱语
却每天与中国国民畅聊,深入了解中国民心国情
细思极恐
我这只指微信上的那个小冰公众号来说,这个估计连图灵测试都通过不了,聊了一会儿就没啥兴趣了,其他的机器人到没试过,不过如果没特意针对无意义文字这种情况制定指令的话,估计也容易出现强答的情况。
看得出来现在的聊天机器人还只是通过关键词的统计分析加上一些特定语境下的回复来实现的,并不是真正意义上理解了自然语言。
推荐看一看吴军博士的《数学之美》吧,里面对自然语言处理这方面有一段非常浅显但精妙的数学解释,先是介绍隐含马尔可夫模型,然后说明通过鲍勃-韦尔奇算法能不依靠人工贴标签来训练马尔可夫链,最后归于概率。
你看完这本书后应该就有个初步的了解了,还想深入的话,欢迎迈入机器学习这个巨坑(≖‿≖)✧
无非就是庞大的数据库支持罢了,提取问题的关键字然后对比数据库,真正的能自助思考的人工智能还早着呢!