人工智能正在崛起!虽然机器还不至于在遥远的将来反抗本身的创造者——人类,但做为一个飞速发展的趋势,信息技术领域对基于机器的预测和决策等应用已经愈来愈广泛。围绕 AI 的炒做无处不在:无人驾驶汽车、智能图像处理(例如 Prisma),还有通讯领域的各类新颖应用,例如对话式 AI,即聊天机器人(Chatbot)。node
聊天机器人这个行业正在飞速扩展,但相关技术依然还很年幼。对话式机器人的应用目前依然比较虚幻,有些相似于文字模式的老派游戏“I smell a Wumpus”,但目前该技术已经逐渐发展成为一个重要的商务工具。聊天机器人提供了一种更加简单友好的全新接口,很是适合用于浏览信息和接收服务。IT 专家以及包括 Google、微软、Facebook 在内的行业巨头均认为该技术会在将来扮演重要的角色。git
为了发挥对话式人工智能工具(或者若是你嫌名字太长,也可将其称之为“聊天机器人”)的巨大潜力,咱们必须首先掌握一些基础信息并理解其相应的技术栈。本文将探讨可用于从事相关开发的各种技术,各类技术间的类似与不一样之处,以及各自的优劣。github
但在开始进一步介绍以前,首先来深刻了解一下聊天机器人以及它们的技术拓扑。算法
面对不一样的业务任务,目前已经有各类各样的聊天机器人,从广告宣传到团队构建不一而足,但这些机器人一般都有一些共通的核心功能。数据库
业务事务一般离不开专业的组织性协助,但不是全部人都有足够的预算请秘书来处理各类基本任务。好在聊天机器人能够提供帮助。经过妥善的编程,它们能够追踪咱们的工做安排计划,针对即将进行的活动发出提醒。此类机器人比较实用,由于基于功能来看很是简单,而且可使用各类很是快速的通讯平台,例如用消息系统做为本身的接口。npm
聊天机器人还有可能从事更复杂的任务,例如表明企业与真实客户创建联系。哪怕对人类员工来讲,客户支持工做流程大部分都是可预测而且能够实现脚本化的,所以很容易以机器人的方式实现。此时可经过典型的机器人行为算法接受用户查询,解析并得到相关信息,在数据库中找出相似案例,而后经过预设答案作出回应。编程
经过机器人为开发者团队提供支持,这种作法目前极为流行,而缘由有不少。这种机器人可与开发环境无缝融合,借此持续关注并审视软件工程师有关软件质量等目标的不一样需求。然而这类机器人只能解决各类很是具体的任务,所以这种状况下并不须要用到极为复杂的商用机器人。这类机器人一般以某种很是简单的“记分员”为主,此外还包括有感知的聊天机器人,它们能够为开发服务器提供必要的支撑,并针对信息的提交、简单的工做安排建立报表。后端
出版商类型的机器人能够天天不断收集各类感兴趣的信息。不少大型新闻机构(WSJ、NYT)以及技术类媒体(TechCrunch、MIT Technology Review)都会经过诸如 Facebook Messenger 等重要平台,以简要文字信息这种便利的方式分享内容。这种机器人背后的原理很简单:从用户处收集订阅信息,安排相关新闻的交付操做,而后处理与用户有关的其余请求(例如退订、更改所订阅的话题、随意浏览等)。api
娱乐机器人目前不怎么常见,而且用途较为特殊:例如经过对话风格的工做流程管理赛事 / 电影 / 戏剧门票的预订工做。一些机器人还能够经过文字消息为娱乐网站提供全面的沉浸式体验。例如 Fandango Facebook Bot 可供用户观看新电影的预告片,阅读影评,查找附近的电影院。很棒吧!服务器
另外还有一种很是流行,而且应用范围正在飞速增加的机器人:旅游辅助机器人。经过使用这种面向客户的聊天机器人,能够帮助用户完成一些本来很繁琐的任务,例如选择最佳出行方式,借此将一些本来很是冗繁的流程转变为聊天应用中轻松随意的对话。旅游机器人不只能够获取并确认预订信息,并且能够针对重要时间向用户发出通知,例如开始办票了、开始登机了、航班状态有变化了,此外还能从客户处收集各类有价值的反馈。
虽然不管怎么说,聊天机器人也只是程序,只不过按照设计能够经过传统的对话方式,用文字形式(聊天平台)与人类用户进行交流。它会等待用户说些什么,而后按照程序安排做答。所以目前的聊天机器人,其本质都是一种很简单的算法:接受并理解输入的内容,提供相关回应做为输出结果。
然而实际上聊天机器人远比上文说的复杂,由于它们能够掌控上下文情境的力量,这个情境多是局部的(例如只适用于一次对话)或者全局的(例如可在屡次对话中续存,并能涵盖语言语境以外的领域,如预订披萨的机器人能够处理用户的最新订单、位置、时区等信息)。虽然前一种作法一般可使用 Cookie、会话等临时记忆实现,但后者须要将信息存储在数据库内,或经过 API 的方式访问其余内部服务获取。
在介绍了上下文情境的概念后,还须要简要说起 Web 应用程序相关的一些术语(例如 Cookie、会话、数据库),这样才能组成一个完整的聊天机器人。聊天机器人须要与 Web 应用共享不少信息,而 Web 应用主要负责提供在线浏览的网页(一样须要接收请求并作出响应,因此会共用数据库等标准工具)。所以严格来讲,聊天机器人也是一种 Web 应用。
因此说,对于各种信息和服务来讲,聊天机器人实际上也是一种新类型的接口。这种接口很紧凑,能够轻松地访问,而且很是简单。借此你的服务也能够从本来的居所(你的网站)进一步扩展至各类平台,无需向用户宣传或营销便可随时访问(之前的机制为:用户在聊天信息中看到广告,点击连接访问广告网页,而后订购产品;如今的机制变成了:用户在聊天信息中看到广告,直接经过对话订购产品)。
聊天机器人的内部原理看似简单,但实际上并不那么容易实现。
机器人首先必须理解用户说了什么。实现方法有不少:能够对用户输入内容进行模式匹配,或使用天然语言处理(NLP)技术对用户意图进行分类。前者很是简单直观,但随着所输入内容的范围和规模逐渐扩大,维护难度会大幅增长。后者可经过机器学习技术解读所输入的内容,可是实现难度较大(至少在不使用已经应用相关技术的平台前提下会很难)。为了对各类可能的意图进行分类,并从各类可能中肯定特定输入的实际目的,必须准备一系列样本。
好在有不少平台已经实现了这样的逻辑,咱们不须要再考虑这些问题,能够直接使用它们提供的服务。然而咱们依然须要熟悉主要的 NLP 分类及其本质:
实体(Entity) 是指人类谈话(口头或书面)中,天然语言所包含的文字组合,与标准化解析后所表明的用户隐含意图之间的一种特殊映射关系。这有些相似于提取的变量,例如 DateTime 若是指定为“圣诞节”,那么可能就意味着“2017 年 12 月 25 日”。
意图(Intent), 与实体大相径庭,是一种将用户的消息映射为相关机器人操做(预测工做流)的常规特征。例如,“今每天气如何”这句话可按照全文直接映射至“weather_inquery”意图,而非映射至其余内容。
操做(Action) 是指机器人能够执行并做为相关意图响应结果的步骤。一般这多是传统的函数,并可能经过可选参数从调用方得到更详细的信息(上下文情境)。
取决于具体平台,上下文情境可能多种多样,在具体形式或拓扑方面并无什么严格的规定。但情境主要体现为键 / 值映射的形式,能够持续追踪实体的最新含义,并区分不一样短语所包含的含义 / 意图之间的差别。
虽然已经说过,聊天机器人其实是由某种类型的 Web 接口组成,但还要注意,这其实是一种人工智能应用,所以天然会涉及到分类学方法。
在介绍过机器人用来理解语言的方法后,一块儿来看看忽略具体类型和响应方式的状况下,各类机器人的拓扑。
首先能够根据操做范围(是否严格限定于某一闭合域,如天气机器人或披萨机器人,或进行各类类型的通用对话),以及为了响应用户输入所要进行的计算方式(是否会直接检索预约义的响应内容,仍是根据输入的信息生成对应的响应结果),将对话式 AI 划分为不一样类型。
不管何种方式,对于检索形式的响应,最重要的一点在于要严格区分静态和动态响应。前者是最简单的,有些相似于直接套用现成的模板,输入的每一个信息都有对应的答案。后者则更像一种知识库,能够根据相关性得分返回一系列可能的响应结果。
对于适用于某种闭合域的聊天机器人,只须要解决围绕有限的几个问题所展开的交流便可,例如预订酒店 / 餐厅 / 航班,购买披萨,买鞋等。很明显,此时输入的内容也是有限的,对于一个负责定够披萨的机器人,彻底无需考虑用户可能谈到的政治、心理学或哲学问题。
开放领域的机器人主要侧重于与用户自身的对话,然而并不须要彻底理解用户说的每一个字,无需检索实体和意图,也不须要追踪上下文情境。这种机器人只须要努力模拟现实生活中的对话,其主要目的在于娱乐用户,或解答相似 FAQ 那样的通用问题。
了解了这些基础知识后,能够开始考虑构建一个了。不过开始以前还须要决定本身打算使用的平台或工具。
若是但愿快速上手并尝试,但还没准备好由本身来写代码,建议先从 无需编程的聊天机器人生成器 着手。这类应用主要面向非技术型用户,很是简单易用。此时无需过多考虑技术细节,只须要完成一些纯粹的概念性工做便可(不过依然有必定的学习曲线)。这种方式最适合用于构建简单的机器人,但并不适合复杂的商业用途,由于这类方式最大的不足在于缺少,甚至彻底不具有天然语言处理能力(这种能力是复杂的机器人所必须的)。相似的平台有不少,例如 Chatfuel、ManyChat、Octane AI、Massively AI。
若是但愿进行更复杂的开发,则须要用到机器人框架和 AI 服务。
框架 包含了聊天机器人工做流程内各类通用功能的抽象,为了便于使用一般会打包提供。聊天机器人框架与其余软件框架(例如 Web 应用框架)相似,能够为咱们提供各类必须的工具。一般这类框架都是面向某种特定编程语言实现的。此外一些机器人框架还提供了托管式的,甚至可交互的开发环境,借此进一步简化机器人的建立过程。
AI 服务 则是另外一种独立的云端平台,一般会提供以交互式方法建立聊天机器人逻辑所需的 GUI,并具有由机器学习技术驱动的天然语言处理功能,可经过 RESTful API 通讯。
另外还有一种比较新颖的方法,能够将聊天机器人与交互式语音响应(IVR)系统直接集成到 Web 服务构建工具或框架中。例如这一领域最新的成果之一是由 Aspect 开发的 Customer Experience Platform(CXP)解决方案,该解决方案可用于构建 Web 服务。借此咱们能够轻松地建立由数据支撑的网站,并经过基于文本和语音的机器人接口提供给用户使用。有关这种方法的详细信息可参阅 这里。
正如上文所述,框架实际上是一种面向特定编程语言的库。下文将介绍三个主要的框架:适用于 Node.js 的 Botkit for node.js,适用于.NET(也适用于 Node.js,但下文将主要围绕.NET,尤为是 C#)的 Microsoft Bot Framework 及 Bot Builder SDK,以及适用于 Python 的 Rasa NLU。
首先从 Botkit 开始。按照设计,该框架能够帮助忙碌的用户快速简单地针对本身的需求构建机器人,同时无需过多深刻具体的技术细节。该框架可经过一个统一的接口发送和接收消息。这个框架最初主要用于 Slack,但如今其功能经过扩展已经能够支持链接至多种消息平台。该框架提供了直观的工做流,并以简明扼要的方式加以整理,具有翔实的文档,同时还提供了大量线上聊天机器人范例,借此用户能够快速上手,并进一步开发本身的机器人。
然而要注意,该框架不包含天然语言处理功能,不过能够经过中间件链接至现有的或自行开发的服务中实现天然语言处理。
该框架库包含大量核心功能和链接器,为多种平台提供了支持。核心功能是以事件监听器的形式实现的,如.on_message_receive、.hears 等。链接器的实现则取决于所链接的平台。
Botkit 的使用很是简单。首先须要安装 Botkit,这一工做可经过 npm 安装实现:npm install — save botkit
。随后建立一个包含代码的文件(能够参阅这里【https://github.com/howdyai/botkit/blob/master/console_bot.js 】查看最基础的控制台机器人范例),并使用 node.js 运行:node my_bot.js
。
微软十分热衷于紧跟技术发展趋势,为咱们提供了一种开发聊天机器人的全新方式。Microsoft Bot Framework 功能极为全面,并提供了简单易用的构建 SDK,其中包含两个主要组件:用于实现集成的框架 Bot Connector SDK 自己,以及最基本的机器人逻辑和 LUIS.ai,后者主要用于实现天然语言处理,让机器人感受上更像人类。
虽然 LUIS.ai 更像是一种功能而非组件,但该框架自己也可不借助该功能直接使用,而且单独使用就已经能够实现让人印象深入的效果。这套工具很是健壮,在集成方面也能够提供近乎无限的潜力(例如与 Messenger、Skype 等集成)。该开发环境为交互式开发和简单的测试提供了必要的工具,用户还可将本身开发的机器人公布出来并接受微软的审核,若是审核经过还可归入 Bot Directory(https://bots.botframework.com/ ),并被更多人使用。
虽然并不是专门为聊天机器人的构建量身打造的框架,但 Rasa NLU 也是一种很方便的后端解决方案。Botkit 和 Microsoft Bot 可链接至各类消息平台,而 Rasa NLU 更像是一种天然语言处理服务,能够在用户本地环境提供处理功能。此外 Rasa 提供了 Python 接口,可将实体提取器直接集成于使用 Python 开发的应用程序。此外该技术还可做为服务在其余框架中运行,并暴露 REST API 端点。
这些工具各自的利弊,可参阅下表。
正如上文所述,AI 服务是一种可知足天然语言处理需求的云端解决方案,借此可开发智能机器人并预测复杂的流式对话。这种服务可为预测模型的构建和训练提供所需 UI,经过机器学习技术理解语言中包含的实体。
一块儿看看这个领域的几个重量级选手。
根据官网介绍,Wit.ai 平台可让开发者轻松地构建能够经过语音或文字方式交流的应用程序。该技术最近已被 Facebook 收购,并已归入 Facebook 的 Bot API 中。
Wit.ai 可帮助用户无需考虑内部逻辑,轻松构建机器人的行为,并可经过多种语言实现可供注册的机器人操做。
Wit.ai 中,用于定义行为的关键概念叫作“故事”。举例来讲,这些故事表明着各类可能产生的对话所对应的基本骨架。一个“故事”可包含一组相关意图,而意图自己则是用户定义的实体,其中包含了未被用于定义整个流程的各种特性。
随后便可经过样本训练用于天然语言处理的机器学习模型,这是一种很好的作法。只须要告诉 Wit.ai 须要接受怎样的输入,当用户发送了相似的请求后,便可酌情作出响应。
Wit.ai 提供了一套强大的语言实体理解机制。此外还有一个很棒的功能,该平台能够为实体分配角色,借此可进一步促进服务器端的处理工做。
为了与服务器端交互,Wit.ai 还实现了“Bot sends”命令,并可经过与 Webhook 的集成实现自定义机器人操做,例如调用 API。
Api.ai 是另外一个能够帮咱们构建支持天然语言处理的机器人的平台。
与 Wit.ai 严重依赖意图进行预测的作法不一样,Api.ai 由两个重要概念:意图和上下文情境(Wit.ai 也有上下文情境,但用途有所差别)。“意图”充当了桥梁的做用,可将用户的请求与对应的操做链接在一块儿;而以字符串值形式呈现的“上下文情境”则可用于区分请求以及存在各类细微误差的意图。
Api.ai 与 Wit.ai 的基本工做流也有所差别。当 Api.ai 接到用户请求后,首先会将其与意图相匹配(若是没有找到匹配的意图,则直接使用默认意图),随后调用相应的操做。意图的匹配过程能够经过上下文情境列表加以限制,借此确保始终具有可匹配的意图(匹配能够产生或删除上下文情境),借此建立出相似于包含不一样状态应用程序的工做流。
与 Wit.ai 相似,Api.ai 也能够提取意图。更重要的是,该平台自带一个 Slot-filling 系统的实现(Slot-filling 系统是一种方法,可用于从用户处请求信息,并将其与已获取实体进行关联并继续向用户索取缺失的实体,借此从用户提供的信息中提取实体)。
服务器端逻辑一样包含 Webhook,而 Api.ai 基本上是在调用各类服务并得到响应。这里有个重点须要注意,服务器端代码能够修改上下文情境,所以会影响预测流的结果。
LUIS 差很少算是 AI 服务领域的一个新选手,由微软在 2016 年 Microsoft Build 大会上发布。
与竞争对手相似,LUIS 提供了实体识别和训练系统,能够经过具有层次结构的实体区分细分的含义(有些相似 Wit.ai 中的“角色”)。
LUIS 须要经过意图预测所要执行的操做,并使用了与 Api.ai 相同的逻辑。
训练过程一样是经过 UI 进行的,所以用户能够用灵活的方式加以训练。用户请求日志能够帮助用户方便地作出解释并对解释进行纠正,借此进一步训练模型。
LUIS 一样具有操做履行能力,可收集所需意图和上下文情境,进而执行一系列连锁操做。该平台目前仍是测试版,仅可用于简单的测试。此外该平台还有另外一个测试版功能值得咱们注意,能够经过专门设计的对话支持帮助咱们对相关请求进行整理,并对各类问题进行分组,借此经过机器人为用户提供更简洁的对话。
IBM Watson 是一种认知云服务,可实现包括天然语言处理、语音识别、情绪分析、对话在内的各类功能。可能有人还记得(或者已经忘了)IBM Watson 曾做为一种具有认知能力的超级计算机系统,在电视问答节目 Jeopardy 中打败过人类。是否纳闷它们之间有没有什么关系?没错,是有一些关系,IBM 将那台超级计算机的强大能力带到了云端,创造出一个能够帮助咱们完成各类任务的庞大平台。
然而该平台的不足之处在于,整个平台提供了太多功能,可能会让用户疑惑,进而须要花费大量时间来决定本身到底该用哪些功能。而就算肯定了要使用的功能,随后可能也须要投入大量资源,才能顺利开始使用。
此外该服务还很是贵(每一个 API 调用约 2 美分),所以可能并不适合初学者。但对于有着普遍而且明确用例的企业环境,IBM Watson 依然是一种不错的解决方案。
这些工具的一些重要信息汇总以下表所示:
聊天机器人正在飞速崛起并依然在不断完善,更加贴近最终用户,能与更多现有技术集成。经过深刻理解其本质、功能以及运行原理,能够帮助咱们开发更有效的机器人,借此改善产品的营销、广告宣传以及总体消费者体验。
目前咱们能够经过多种平台建立聊天机器人,这让人激动,但同时也会让人感受畏缩,但每种平台都是针对不一样用例设计的,在机器人开发过程当中包含了不一样的角色。随着深度学习技术的进一步发展,咱们也一样期待对话式 AI 在不肯的将来也能利用这种技术,向着经过图灵测试的最终目标迈出更大的步伐。
阅读英文原文:
A Comparative Analysis of ChatBots APIs
https://medium.com/activewizards-machine-learning-company/a-comparative-analysis-of-chatbots-apis-f9d240263e1d