Passage.AI如何构建智能对话接口

2019 年 11 月 28 日

Passage.AI如何构建智能对话接口

本文要点

  • 创建用户和机器人之间交互的思维导图。

  • 构建交互工作流,使其更具对话性和个性化。

  • 自然语言理解(NLU,Natural Language Understanding)支持用户以自然语言交流。

  • 用户要传递信息,或是执行某个任务时,可能需要多轮交互。

  • 只需构建和设计机器人一次,就可以将其部署到多个平台。


近些年,智能音箱和对话设备的应用日渐普及。当前,有超过 6600 万的美国成年人拥有智能音箱。也就是说,有近四分之一的美国人正在与设备对话。尽管此类智能设备已惠及芸芸众生,但其巨大潜力刚崭露头角。


Passage AI 公司考量及此,推出了支持企业构建智能会话应用和技能的平台。


本文将提纲挈领地介绍实现对话 AI 的底层支撑技术。


为对话设备开发企业级技能,主要涉及三个层面:


  1. 交互流(Interaction Flow)。交互流定义并构建用户交互,以实现用户设定的目标,或是实现答疑解惑。

  2. 自然语言理解(NLU,Natural Language Understanding)。NLU支持机器人(bot)理解自然语言,并以自然语言作出响应。NLU包括意图分类、语义槽填充(slot filling)、语义搜索、自动问答、情感理解和响应生成等。

  3. 部署(Deployment)。一旦在接口中定义、构建并添加了NLU,就可将接口加入到各种会话渠道中,包括Google HomeMicrosoft CortanaAmazon Echo等对话设备,还包括Facebook MessengerAndroid Business MessagingSlack等消息应用,乃至集成在网站中的弹出式会话终端。


一、交互流


交互流是用户与机器人(即会话界面)间交互的思维导图。我们发现,预先设计交互流,非常有助于其实际构建。这需要我们在设计时做出更宽泛的考量,不仅考虑称为“基本逻辑”(happy path)的设定交互(也就是希望用户发起的交互),而且需补全基本逻辑之外的交互。下图给出一个示例交互流。其中,我们不仅设计了基本逻辑,还额外设计了更复杂的交互流。



图 1:左图为基本逻辑流,右图给出了更复杂的交互流。


下面列出我们在设计对话交互流中获得的主要经验:


使交互流更具对话性和个性化。智能对话机器人不应像个机器人那样。在配置上,机器人应可从列表中随机选择会话,而非重复同样的消息。另一个做法是在对话界面中引入一些个性化。人们是与对话界面闲聊或交谈。因此在一开始不要只会说“嗨,我能为您提供什么帮助?”。而应使其更具个性,诸如“王先生,您好,周末快乐。今天我能为您做什么?”



图 2:使交互流更具对话性和个性化。


掌握语境(context)。机器人需生成的响应,不仅取决于用户的历史消息,还取决于具体的语境。语境包括许多内容,例如:机器人与用户之间的历史对话;平台的模态(Modality),是基于语音的,还是基于文本的;用户对产品的知识或经验,是小白用户,还是重度用户;以及用户在整个对话流程中所处的位置。



图 3:使用语境生成机器人响应。


合理地处理错误实例。对话接口不可能完全了解我们的世界,因此难免会犯一些错误。下面给出一些小技巧,可最小化错误发生的几率,甚至是消除错误:


  1. 尽可能从已有的用户对话历史中获取信息。

  2. 机器人如果需要进一步信息,以提问确认方式提出。

  3. 以合理方式告知用户,机器人并未理解你的意思。


对话工作流的构建单元


完成交互定义后,下一步就是构建对话工作流。其中包括使用意图、变量、WebHook 等抽象调用 API;使用决策树排除故障;以及使用知识库实现问答。


意图(Intent)。意图获取用户信息的底层含义,它是所有对话接口的基本构建单元。意图可包括用于执行具体动作的关键字、变量和 WebHook。关键字是用户用于表达意图的各种短语。构成意图的各种关键字,以及已标记的真实用户消息,将构成分类意图的训练数据(详细说明,参见本文第二节“自然语言处理”)。对于客户服务而言,我们可以定义“跟踪订单”的意图,与"客户服务代理"进行对话。


变量(Variable)。变量定义了对话接口需从用户获取的输入,用于执行意图。例如,为了跟踪一个网购订单,我们需要从用户处获取订单 ID。 一旦确定了意图,并获得了所需的变量,就可执行特定操作。这时,我们可以给出一个 Webhook 执行 API 调用,获取订单的状态。


决策树(Decision Tree)。许多用例需要做故障排除,给出特定决策,并对用户的各种信息提供方式做出响应。决策树提供了一种解决此类问题的好方法。定义决策树和控制流的方式,是工作流定义的重要组成单元。


知识库(Knowledge Base)。在客户服务实例中,对话代理需要解答客户提出的问题。知识库提供了一种根据输入常见问题(FAQ)给出正确解答的方法。


二、自然语言处理(NLP)


本节介绍对话 AI 的各构建模块,包括意图分类、语义槽填充、语义搜索和机器阅读理解等。在深入介绍这些构建模块之前,我们先给出对深度学习和嵌入的基本介绍。


深度学习(Deep Learning)。传统的机器学习中,大量时间都被用于手工调整特征。例如,某个词是否为停用词、是属于国家特征还是位置特征。由学习得到的模型或函数,将组合各个特征给出响应预测。典型的经典机器学习技术包括逻辑斯蒂回归(LR)梯度提升决策树(GBDT)等。有别于此,深度学习不需要手工调整特征。它将原始输入表示为向量,模型将学习该向量元素间的各种相互作用情况,调整权重,并给出预测响应。


深度学习已成功地应用于各种自然语言处理(NLP)任务,包括文本分类、信息抽取、语言翻译等。NLP 深度学习应用中使用的两个关键技术,分别是嵌入(Embedding),以及长短时记忆网络(LSTM,Long-Short Term Memory Network)等循环神经网络(RNN,Recurrent Neural Network)。


嵌入。嵌入将句子转化为向量,它是所有 NLP 深度学习应用的第一步。现有四种嵌入技术:


  1. 非语境词嵌入(non-contextual word embedding);

  2. 语境词嵌入(contextual word embedding);

  3. 句子嵌入(sentence embedding);

  4. 子词嵌入(subword embedding)。


广为使用的非语境词嵌入技术包括GloVeWord2Vec。Word2Vec 是谷歌最早在 2013 年提出的词嵌入技术,是第一种被广泛使用的此类技术。其核心理念是将相似词映射为高维空间中的相似向量,使向量间具有很高的相似度(相似度可通过点积或余弦相似度衡量)。



图 4:谷歌研究人员在开发 Word2Vec 中附带给出了一个很有意义的发现,即该技术支持类比运算(analogy)。例如,“King”的词向量减去“Man”的词向量,再加上“Woman”的词向量,所得到的词向量与“Queen”的词向量具有很高的相似度。


为在很深层上训练 Word2Vec 模型,我们使用了维基百科这样的大型语料库,将语料转换为单词对的列表。例如,在采用窗口宽度为 1 的情况下,句子“I want to track my order”将转换为[(I, want), (want, to), (want, I), (to, track), (to, want), (track, my), (track, to),…]。之后,每个单词转换为一个独热(one-hot)向量,输入到神经网络。输入进而将投影到较低维度的空间,形成嵌入,再投影回一个语料库规模的向量。这时,可采用 softmax 给出目标单词的预测。大多数情况下,“track”和“find”这样的词会具有相似的预测,因此会被投影到相似的嵌入。也就是说,“track”和“find”的余弦相似度很高。



图 5:Word2Vec 训练架构。图片引用自Chris McCormick的博客帖子


尽管 Word2Vec 广为使用,但它并非语境相关的,即在不同语境中使用的同一单词,将具有同样的向量表示。最近,ElMoBERT等语境词向量得到广泛关注。这些技术源自于称为“语言建模”的 NLP 系列问题。语言建模根据某个单词的周围单词,学习该单词出现的可能性。例如,单词“play”可以表示参与某项运动,根据语境也可以表示戏剧表演。BERT 的巨大成功可归因于双向语言模型,尽管大多数嵌入工作是在单向语言模型的浅层连接(包括正向和反向)上进行的。在 BERT 使用的双向语言模型中,句子中的某些特定单词是被遮掩(mask)的,语言模型尽量对此给出预测。这样,预测架构对于下游任务保持恒定和易用。


另一种最新提出的嵌入技术是句子嵌入,即将整个句子都嵌入到向量中。尽管词嵌入的功能非常强大,但是有时很难从一个句子的多个单词中得到该句子的向量表示。对词向量求平均、最大值或求和等基本操作只能给出一个近似值,在实践中效果不佳。一种广为使用的句子嵌入技术称为“思想跳跃向量”(skip-thought vectors)。该技术采用 word2vec 技术,并将其应用于句子,从而在高维空间中将相似的句子嵌入为相似的向量。


长短期记忆网络(LSTM)。 对于 NLP 在深度学习的应用,另一项重要技术是递归神经网络(RNN)。LSTM 是一种 RNN 变体,已成功应用于文本分类等多种有监督 NLP 任务。LSTM 是一种特殊的 RNN,它能够学习单词之间的长期依存关系,并避免了出现梯度消失等问题。LSTM 通过使用一种称为“门控”(gating)的机制来实现。门控允许信息有选择性地通过。LSTM 给出了三个门,即输入门,输出门和遗忘门(forget gate)。


  • 遗忘门决定了多少信息必须从上一个单元状态流过;

  • 输入门决定了多少信息必须从当前输入和先前的隐藏状态流过;

  • 输出门决定了多少信息必须流向当前隐藏状态。



图 6:LSTM 的单元(Cell)图。


给定一个句子,文本分类的目的是给出该句子是否属于任一设定的类别。解决文本分类的一种标准方法,是获取文本的句子表示形式(即固定大小的向量),并使用该表示形式选择类别。根据句子获取固定大小的向量有很多方法,其中一种标准做法是将消息的单词嵌入形式馈入到双向 LSTM(Bi-LSTM),并以输出的最后一层作为句子的表示形式。



图 7:LSTM 层的展开(Unrolling)。


虽然意图检测是一个文本分类问题,但是语义槽填充和信息抽取属于称为一类称为“序列标记”的问题。序列标记为句子中的每个单词或标记分配一个标签,目标是为每个单词给出正确的标签预测。如上所述,我们可以将句子输入双向 LSTM,给出每个单词的标签预测。


如何基于 FAQ 等知识库建立对话接口,是客户服务领域的常见问题。针对此类问题,我们给出大量“问题-答案”对,目的是正确匹配用户消息和正确解答。解决此问题的一种方法,就是使用传统的信息检索(IR)方法。其中,用户消息是“查询”,FAQ 是语料库。为加速检索性能,可在语料库上创建带有发布列表的倒排索引,并使用 TF-IDF 等传统的评分技术给出评分。尽管这些技术可帮助我们检索到最相关的答案,但时常会在对话接口上耗费过多的时间。


“机器阅读理解”和“问答”输入一段文本或语境,以及一个查询,目标是识别问题回答的文本部分。为在语境或文本片段中找出解答,有研究提出组合使用LSTM网络和注意力模型(attention model)。该研究提出,在较高层上通过词嵌入和字符嵌入,将文本的语境或段落馈入到 LSTM 层,对查询或问题也做同样操作。然后根据语境计算计算成对(pairwise)查询。根据查询计算注意力,进而再次用于双向 LSTM 网络,获得文本片段形式的解答的起始和结尾。目前,该研究领域非常活跃。最近几年中,机器阅读理解已经取得了长足进步。


对话理解或对话状态跟踪也同样是非常活跃的研究领域。在很多情况下,用户并非一次就能给出完成任务所需的全部信息。机器人必须与用户交谈,并导引用户去完成跟踪订单等各种任务。如何保持对话的“状态”,并从不同的消息集中抽取信息,是实现对话理解的关键。此类技术支持用户多轮交互,更改其中某些变量的值,无缝地完成任务。


三、部署


对话平台正与日俱增,例如 Google Assistant、Amazon Echo、Facebook Messenger、Apple iMessage、Slack、Twilio、Samsung Bixby,甚至包括传统的 IVR。随着此类平台数量的增加,为不同的平台构建独立的机器人无疑成为开发人员的噩梦。客观上,我们需要构建可与所有这些平台集成的中间件。其中面临的挑战,是需了解各接口间的差异和相似之处,并且还要跟上各个平台的不断变化。


此外,还需关注机器人版本控制和机器人测试。App Store 和 Google Play Store 等应用开发平台可维护应用的不同版本。同样,机器人开发平台也需要维护机器人的不同版本。版本控制支持开发人员轻松地实现更改回滚,掌握已部署更改的历史记录。但是机器人测试并非易事,因为机器人的响应不仅取决于用户消息,还取决于具体的语境。在端到端测试之外,还可单独测试 NLU 等子组件,以简化调试,加快迭代速度。


结束语


本文概要介绍了智能对话接口的构建模块。对话 AI 是一个新兴的领域,一些最佳实践也在不断地发展。我们憧憬在未来,智能对话接口将能够与所有设备开展对话、指引汽车控制各种功能、实现虚拟助理并预订下次旅程。此外,当人们致电互联网服务提供商的客户服务时,虚拟助手可立即给出准确地回答。


参考文献



作者简介


Kaushik Rangadurai 是一位早期加入 Passage AI 的工程师,主要从事对话和自然语言理解。他拥有 8 年以上为 LinkedIn 和 Google 等企业开发 AI 驱动产品的经验。此前,他在位于亚特兰大的乔治亚理工学院获得计算机科学硕士学位,研究方向是机器学习。


Mitul Tiwari 是 Passage.AI 的 CTO 和联合创始人。他的专业领域是使用 AI、机器学习和大数据技术构建数据驱动产品。此前,他曾任 LinkedIn 的“People You May Know and Growth Relevance”项目主管,引领大型社交推荐系统的技术创新。在任职 LinkedIn 之前,他曾在 Kosmix(现 Walmart Labs)从事 Web 规模文档和查询分类。Tiwari 在德克萨斯大学奥斯汀分校获计算机科学博士学位,在孟买的印度理工学院获本科学位。他作为合作作者在 KDD、WWW、RecSys、VLDB、SIGIR、CIKM 和 SPAA 等顶级会议发表论文 20 余篇。


原文链接:


Building Intelligent Conversational Interfaces


2019 年 11 月 28 日 08:00730

评论

发布
暂无评论
发现更多内容

架构师训练营第一周作业

fenix

食堂就餐卡系统设计

就餐卡系统架构文档

Geek_bobo

架构师训练Week1 - 食堂就餐卡系统架构设计

伊利是个圈

架构设计 极客大学架构师训练营 UML 作业

命题架构设计 - 食堂就餐卡系统

知识乞丐

极客大学架构师训练营

第一周作业二:学习总结

iHai

极客大学架构师训练营

【极客大学】【架构师训练营】【第一周】 食堂就餐卡系统设计

NieXY

极客大学 极客大学架构师训练营

架构homework1

蜡笔小晗

食堂就餐卡系统设计

周冬辉

「架构师训练营」架构方法:架构师如何做架构-总结

隆隆

食堂就餐卡系统设计

谭焜鹏

食堂就餐卡系统设计

Aldaron

作业二:根据当周学习情况,完成一篇学习总结

叶荣添CANADA

食堂就餐卡系统设计

Vincent

极客时间

架构师第一周学习小结

K先生

架构师训练营第一周总结

will

食堂就餐卡系统设计

哼哼

成为一名架构师

谭焜鹏

架构设计心得

吴吴

架构师训练营(第1周作业)

李德政

极客大学架构师训练营

【Week01】架构师如何做架构

Aldaron

Week01 食堂就餐卡系统设计

极客大学架构师训练营

架构师训练营第1周-心得体会

Larry

架构师训练营第一周总结作业

兔狲

极客大学架构师训练营

【架构师训练营 - week1 -1】食堂就餐卡系统设计

早睡早起

第一周学习总结

Vincent

极客时间

架构师如何做架构

atlasman

食堂就餐卡系统设计

atlasman

脑子不够怎么学架构

紫极

闲谈 极客大学架构师训练营

架构师训练营week1-学习记录

lijia_toby

极客大学架构师训练营

食堂就餐系统架构设计

K先生

Passage.AI如何构建智能对话接口-InfoQ