对话机器人很多,像Siri,小冰,度秘,Allo都能在你有空的时候跟你贫贫嘴,不过随着厂家和用户意识到凭空做出一个高度通用的对话机器人是非常不现实的,对话机器人的姿态也发生细微的变化——厂家们试图从某些垂直领域开始入手深根,并且从纯聊天功能发展到这个对话机器人能为用户完成什么指定的任务功能。一下子为“只说不做” 的对话机器人找到了一个新的场景。
不过,这个全新升级的对话机器人,重心移向代替人决策,并帮用户完成任务。
它如何听懂用户想做什么事情?如何做到聊天过程中都不能达到的Human like leaering?
然后它如何知道第三方App能完成哪些任务,需要点击哪里,然后才能与用户想做的事情对接?
当它的重心变成了为用户完成任务时,它的核心技术要求是什么?
……
这些只有具备多年实战经验才会有的答案,我们邀请到了蓦然认知创始人戴帅湘,他家的小蓦机器人旨在对话过程中获取和“揣摩”意图,最终实现人类决策,帮助任务执行。戴帅湘,前百度主任架构师,曾长期担任百度Query理解方向负责人,是自然语言理解方面的技术专家,曾荣获第一个也是迄今为止唯一一个以NLP技术为核心的百度最高奖。2010年提出“Query改写模型”给百度搜索引擎技术带来了跨时代的飞跃,使得搜索相关性和广告收入均大幅提升。该模型比学术界同类模型《Query Rewriting Using Monolingual Statistical Machine Translation》的提出还要早将近1年。此模型迄今为止仍广泛应用于百度所有搜索产品线。申请了自然语言处理,语义搜索,自动问题求解等领域内20多项专利技术。
对话模型中的One-shot Learning和RL(增强学习)。
One-shot Learning的目的是要从少量样本中进行训练,以解决对话系统的“冷启动”问题;
RL是一种无监督的学习,它通过试错的方式来进行学习。针对冷启动后的对话模型,RL可以帮助系统在和用户的实际交互中不断增强对话模型中优势策略,削弱负面策略的影响。实际表现是用户会觉得系统越来越人性化,或者说个性化。
上述这两种学习方法更接近生物体,或者说人的学习方式,所以我更愿意称之为“Human-like Learning”。在对话中,这两者一个处于流程的最前端,一个处于流程的最后端;一个让模型可以冷启动,一个让模型可以实时优化,两者相得益彰。当然,在自然语言理解中,One-shot Learning还可以用在更多地方,比如语义分析这种需要“表示学习”的任务;任务决策这种典型的“多任务学习”场景;还有就是对话场景可移植性问题的处理上,这个地方有点类似大家常听到的“迁移学习”。
其实这里面涉及很多复杂的技术,分不同的层次,也包含不同的学科,如语言学,认知科学,逻辑学,自然语言处理,机器学习等,是多种类关键技术融合交汇的过程。我们暂且可以称之为自然语言理解。
如果把人脑看做一台机器,那么自然语言就是一种适合这种机器识别和运算的语义表示,自然语言通过字构成词,词又构成句子,句子进一步构成复杂的篇章,其体现的是一种由简单组合成复杂,由有限组合成无限的一个过程。
组合性提供了一种生成新东西的能力,但是其并不保证生成出来的都是好的东西,而因果性则正好提供了这一保证。
所以自然语言理解的核心是要在语言的某个层次上对组合性,以及因果性进行建模。用更通俗的话说,前者对应的是语义的表示,后者则是说的知识推理。
语音机器人代替人决策,实现了自动化。这件事有两个难点:一是听懂用户想做什么事情,他说“科比得分最高比赛”的时候,知道他说的是篮球、是视频、是81分,然后才能通过无形的手替人操作。
这其实就是我上面提到的语义理解,我暂时不能透露具体细节,因为这部分是我们一个重要的创新之一,肯定不是业界和学术界公开的东西,所以暂时还不能说,但我可以从另外一个侧面说一下基本的思路。
One-shot Learning只是一个概念,一种抽象的思想,甚至还不是一个通用的学习框架。对于语义理解来说,其肯定不是一个如图像识别或者语音识别一样典型的模式识别问题,或者说端到端的问题。语义理解是一个推理相关的问题,要通俗地说其更接近下棋这一类问题。这类问题,显然无法直接通过一个端到端的框架来进行训练和学习,而是首先需要针对问题本身进行建模,然后在这个基础上再寻求合适的学习方法。
举个很容易理解的例子,我们人学写字,只要学习写少量的字,然后再看到一个新的字的时候就能基本顺利地写出来,究其原因可以认为是我们针对写字这个过程做了某种近似的抽象和建模:就是把写字当成是有限的特定笔画+特定的空间排列的一个过程。当我们看到一个从未见过的字的时候,我们就尝试用这种抽象的方法去“构造”一个这样的字,然后边对照边调整,最后写出一个最像这个字的字出来。这里面也体现了我上面说的组合性和因果性,只是因果性可能更多地是一种统计关系。
所以这类问题最关键的地方就是要针对问题本身去建模,把问题抽象出来,逼近问题本质,不可能有一个现成的通用的框架来搞定。
接着上面问题:二是知道第三方app都可以完成哪些任务,需要点击哪里,然后才能与用户想做的事(语义理解)进行对接。
【这个问题看起来完全误解了我们的工作,我们根本不关注一个app是如何操作的,实际上也无需和具体app对接。】
再回到问题本质这个思想上来,现在的APP的操作是基于鼠标,键盘,触摸屏的输入方式来设计的,不管APP做得多么友好或者简洁,其都受限于这几种机械的输入方式,简单地说,现在的APP不过是这几种输入方式的一个组合操作。为什么要把语义理解和这种低级的操作方式对应起来呢?完全没有必要这么做!对话是一种全新的交互方式,也只有对话的交互方式才是最接近人与人之间的交互方式,当然也是人与机器最自然的交互方式。
脱离技术细节层面,我们要完成某个任务或者做某个决策,这个过程本身和输入方式无关,它就是一个任务流,可能有一些关键节点,不同的人都需要遵守,但更多的是其实没什么规律,每个人都要自己不同的个性化处理过程。比如“买飞机票”的过程:有人会去网上买,有人会打电话买,有人会去柜台买;有人很固执,只要满足其所有既定条件下的机票;有人犹豫不决,不停地对比,边询问边考虑;更多的人是有一个基本优化目标,比如价格要尽量低,或者说时间要尽可能快,然后根据当前航班情况选择一个自认为最好的。
我们要做就是在人完成一个任务的抽象层面,用一种最自然的方式来辅助人决策,以尽快推进任务的执行,这其中最合适的方式显然就是人与人之间的对话方式。其瞄准的是人完成某个具体任务的场景,用对话的方式来推进整个任务的快速进行,并在恰当的时候调用可能的第三方接口,比如展现特定信息,下单等,以使得整个任务朝着某个目标优化下去,比如获得最符合当前用户个性化的订单。这是典型的AI思路,所涉及的技术也是上面所说的各种复杂技术的融合。
当一个语音机器人的重心变成了帮用户决策,调动第三方应用来快速响应,它会变成一个重对接技术和资源的事情。
【这个问题是不是问我们需要对接很多服务,所以在服务对接的运营上会比较重?】
我们的确需要对接诸多服务,以在具体的任务场景中灵活地恰当地调用某种服务来辅助决策。
但和问题中的理解完全相反,我们可以针对网络上不同的服务接口,全自动地构建语义分析和服务对接程序(抛开具体商业谈判不谈,这里只从技术上考虑,毕竟网络上使用越广泛的服务就越是免费的),这也正是我们另外一个优势所在。除了我们的语义分析方法可以快速地从一个场景迁移到另外一个场景外,我们针对不同的服务,可以完全自动地构建起对应的对接程序。更直白地说就是针对一个特定服务的接口,我们会让我们的系统自动“写”一段程序来处理这个服务下人和服务之间的对接过程,也就是针对这个服务接口的对话流程。从程序编写的角度看,就是我们设计了一个可以生成特定程序的程序,来代替本来可能需要程序员手工编写的工作。
基于我们设计的模型的通用性,理论上,只要我们持续深入下去,我们就可以做到全场景对话,甚至多语言对话。但是从当前用户的接受程度,相关产品的成熟度,还有商业模式上看,我们更倾向于在车载和家居环境中突破。也就是说纯语音对话的方式现在还只是一种非主流手段,只有当人双手被占用的情况下,这种方式才会变得有用和有效。但是,随着语言理解和对话技术的快速发展,这一情况正在变得越来越普及,有望在数年后成为一种主流的人机交互方式。
读者提问
首先要说明的是我个人觉得小冰根本没有什么复杂的技术,虽然可能用了深度学习,用了句子生成方法。但其核心还是通过大量聊天语料(问答对)训练一个新问题在当前上下文下最“相关“的一个已有问题,从技术上其更近似于检索的方式,只是选用不同的模型对上下文的描述能力可能不同,效果也有所差异。但总体上,这种对话和“语言理解”无关,也就说和推理没有半点关系,还只是一种纯统计上的相似度计算而已。所以要问的或许应该是:游戏中的NPC可否像真正的游戏玩家一样和电脑前面的游戏玩家进行自然对话。
其实特定的某个游戏是一个非常细分的场景,我个人觉得这这种受限场景下,人机对话可以做得更接近于人与人之间的对话,但是需要考虑的是游戏中角色很多,不同角色的设置也不同,需要真正比较通用且能快速实现个性化的对话模型,而且这种模型的冷启动也需要针对不同角色有所差别。
还是和问题本身相关,如果把问题看做是一个模式识别问题,输入和输出都很明确,而且也能够获取到大量的训练样本(包括用人工可以大量标注的方式),此类问题一般适合用端到端的方法来解决,深度学习是一个很好的选择。NLP中的序列标注,统计机器翻译都可用此类方法。如果问题本身就是一个目标并不能明确地用具体标签描述,而是需要根据其所处的环境,做出一系列明确的动作,比如规划问题,任务决策问题等,这类问题暂时还不适合用深度学习来处理,需要深度学习和逻辑相结合。
关于“传统NLP方法”这个说法,我个人有不同的看法。对于NLP技术来说,其研究的是逼近语言现象本质的方法,或者说针对语言建模的方法,最早大家是从逻辑的角度来研究,然后加入了统计和机器学习,语言问题是个足够大的问题,这些不同流派揭示的只是语言问题的不同侧面而已。如果从应用的角度来看,当然合适的方法是要考虑语言问题的各个侧面,融合逻辑,知识和统计的力量才能获得有效的进步。很多所谓采用NLP技术的产品大都把眼光停留在文本分类,词汇标注,甚至分词这样的单点任务上,其实离理解NLP技术的作用还差得很远。
随着终端的多样化,设备的逐渐微型化,这是个必然的趋势,我无法给出一个具体的时间预测,但我相信这一天肯定不会太远,移动时代的到来就已经开始肢解搜索了。当前的搜索引擎不久后将会蜕化成“交互式搜索”后面的一个并不那么重要的服务,就像分类目录式搜索被现在的搜索引擎取代一样。
难点还在于自然语言理解,更具体一点说就是机器如何去“理解”人类语言。机器至少要理解人的意图,并且能支持推理,推理本身必须也是一种计算,然后才能谈对话,谈交互,否则都是无源之水无本之木。
教育是一个很大行业呀,这方面我不专业,所以只能随便说说。
从我们交互与决策引擎的角度来看的话,机器辅助教育可能是一个很有意思的点,让机器人帮助完成教育过程中的一些机器更擅长的环节,比如改卷,不厌其烦地讲解基本演算方法,理科类的答疑等。
技术上我个人比较关注自动问题求解,自动证明,因为这个和我们的技术也密切相关,但是这些AI方法和教育产品具体如何结合,比如辅助答疑,参与考试等,这方面我们还没有仔细考虑过,但是应该是一个非常有趣的方向。
情感分析现在还是个分类问题,应该考虑更高级的特性,比如句法,甚至语义,而不应该停留在词汇级这样低级的特征上,换句话说分词这样和粒度相关的基础特征不应该对高层的NLP应用有直接的影响,否则从系统扩展性来说就很致命。我觉得如果想要在更高级的层面释放NLP的威力,就不应该在分词这样的环节上纠结,分词的效果应该对模型最终的效果影响越小越好,甚至于说不依赖于分词。