从api.ai工作原理来看构建简单场景chatbot的一般方法

  chatbot无疑是当前非常火的一个研究领域和产品方向,简单地可以分为两类,开放域bot和封闭域bot,开放域bot倾向于解决所有的事情,而封闭域bot倾向于解决某一个细分领域中的事情,旨在用AI技术提高效率,提高生产力。现阶段的开放域bot我个人感觉更像是多个常用封闭域bot的叠加,当用户发起一个请求,系统会判断出属于哪个细分领域,然后转到相应的程序中去执行并给出反馈,顺着这个逻辑来看,研究简单场景下的chatbot是个重要的基础工作,这类研究或者产品的质量直接决定了复杂场景或者开放域bot的质量。当然逗乐型的bot并不属于本文讨论的范围。

物联网

  图片来自paper The Dialog State Tracking Challenge Series- A Review

  chatbot是场交互革命,也是一个多技术融合的平台。上图给出了构建一个chatbot需要具备的组件,简单地说chatbot = NLU(Natural Language Understanding) + NLG(Natural Language Generation).(本文只关注NLP相关的技术,对语音识别并无讨论)

  对于封闭域的chatbot,NLU的工作就是DST(Dialog State Tracker),用户给出输入之后,系统可以给出下面的形式作为state:

  Act(Slot=Value)

  Act表示用户行为的类型,比如请求、查询、打招呼等等;Slot表示用户输入中包含的某种Act下的Entity,比如查询酒店的位置、价格这些实体;Value是指Slot中Entity对应的值,比如位置在北边,价格在500-800之间等等。每一句话中可能包括多个Act-Slot-Value对,chatbot需要做的事情就是准确地识别出Act,并且抽取出相应的Slot和Value。

  紧接着是NLG的部分,前几天在PaperWeekly第二期中分享了三篇paper,其中两篇正是研究基于DST的NLG问题。

  本文首先从api.ai这家企业提供的服务说起,通过研究其提供的封闭域bot构建技术,来提炼构建简单场景chatbot的一般方法,为构建复杂场景或者找出现有chatbot存在的技术问题和面临的技术难点打下基础。

  api.ai

  api.ai公司介绍

  Api.ai provides developers and companies with the advanced tools they need to build conversational user interfaces for apps and hardware devices.

  这家公司是一家典型的B2D公司,提供了一些工具帮助开发者轻松地开发一款bot,并且可以轻松地发布到各种message平台上。商业模式也非常简单,免费用户有一定次数的调用权限,需要大量调用的话,则付费购买,不同的权限有不同的价格,该公司也提供高级定制化服务。

  api.ai公司成立于2010年(数据来自 CrunchBase ),其早期业务不清楚,但可以从提供的服务中推断出早期攒了大量的用户数据,而且涉及的领域非常多,比如:

物联网

  每个领域都有一个知识库,如果你要开发某个常用领域内的chatbot,那么这个知识库将会非常有用。

  重要概念和工作原理

  重要概念

  1、Agents。这个是一个对外接口,与其他应用程序或你的app进行整合的部分。如下图:

物联网

  2、Entities。这里的实体和引言中提到的Slot类似,是指某个特定领域内的实体,是一类东西的抽象概括,比如HotelName这一实体,对应着很多的酒店名字,凯宾斯基、如家等等。有Entity,就一定有value,chatbot中重要的一步正是从user input中抽取出对应预先设定好entity的value,是一个典型的Named Entity Recognition任务。

  这里经典的NER任务是识别出user input中的person、time、place等等几个基本元素,api.ai将这些常见的entity定义为system级的,即默认提供了训练好的识别器,当然不仅仅限于这几类基本的;而特定领域知识库的重要作用也正是在于识别该领域内的entity。除了system level的NER之外,需要developer自定义一些entity,比如菜名,而且要给定具体的菜名和相似的表达作为samples进行训练。

  3、Intents。这个相当于是从user input到chatbot执行某个action之间的一个映射关系,用户输入一句话之后,chatbot就可以理解其意图,是在打招呼,还是查询,还是做些别的事情。这部分api.ai提供了训练器,但是需要developer定义一些标注好的examples,标注的形式如下: