浅析Uber的一键式聊天架构

胡薇 发表于 2018-10-08 16:55:17 收藏 已收藏
赞(0) •  评论(0

浅析Uber的一键式聊天架构

胡薇 发表于 2018-10-08 16:55:17

通过机器学习和自然语言理解结束,Uber实现了一套智能的聊天系统,从而有效的提升司机和乘客之间的沟通效率,减少对司机的打扰。

想象一下站在路边等待你的优步车过来接你时,在你的应用程序上,你会看到车子几乎没有移动。于是你向司机发送消息了解发生了什么事。

你不知道的是,你的司机在前往接你的途中遇到了交通堵塞。他们会收到你的消息并希望回复。这种情况是优步的司机伙伴们告诉我们的一个痛点。所以我们开始思考,如果有可能的话,司机可以通过一个简单的点击就可以与乘客进行沟通。   

我们提出了一种新的智能回复功能,称为一键式聊天(OCC)。借助OCC,在开始行程前乘客和司机之间的协调更快、更无缝。利用机器学习和自然语言处理(NLP)技术来预测对一般乘客信息的响应,优步开发了OCC让司机更容易回复app内的消息。

OCC 是UberChat最新的关键的增强功能之一,旨在通过提供最相关的回复,为优步的司机伙伴提供一键式聊天体验。

图1:通过一键式聊天,司机可以更轻松地回复乘客的消息。

一键式聊天架构

一键式聊天(OCC)利用Uber的机器学习平台Michelangelo在乘客聊天消息上执行NLP,并生成适当的回复。如下面的图2所示,该体系结构遵循五个步骤:

1.发送方(乘客app)发送消息。

2.一旦我们的后端服务收到消息,后端就会将消息发送给Michelangelo的机器学习服务。

3.机器学习模型对消息进行预处理和编码,为每个可能的意图生成预测分数,并将它们发送回后端服务。

4.一旦后端服务收到预测,它将遵循回复检索策略以找到最佳回复(在这种情况下,生成前四个最佳回复)。

5.接收方(司机应用程序)接收建议并将其呈现在应用程序上供司机点击。

图2:优步智能回复系统OCC的架构由五步工作流程组成。

为了找到对每个接收消息的最佳回复,我们将任务制定为具有两个主要组件的机器学习解决方案:1)意图检测和2)回复检索。

如下面的图3所示,思考这个例子,以更好地理解机器学习如何实现OCC体验:

图3:机器学习算法赋予OCC体验流程。涉及两个关键步骤:1)意图检测和2)回复检索。

司机收到一条乘客的信息:“你现在在哪里?”,这在司机前往接乘客的途中非常常见的。OCC系统首先将消息的意图检测为“你在哪里?”这一步称为意图检测。然后,系统会向司机发出前四个最相关的回复,分别是“ 是的,我在路上 ”,“ 抱歉,堵车了 ”,“ 我在您的上车地点 ”,以及“ 请给我打电话“。这是回复检索步骤。现在,司机可以选择这四个回复中的一个,并通过一次点击将其发送给乘客。

在UberChat中实现OCC

我们的UberChat系统允许Uber平台上的司机,乘客,消费者和派送员在app内进行通信。当前流程遵循标准消息传递系统:我们希望发送者输入他们的消息,然后将消息发送给接收者。下面的图4显示了具有典型消息流的UberChat系统的概述:

图4:UberChat后端服务管理发送者和接收者之间的消息流。

对于用户发送的每条消息,Uber的消息传递平台(UMP)执行以下操作(如上图4所示):

1.将Sender的消息发送到Uber的Edge Gateway

2.将消息路由到Uber的Messaging Platform

3.将消息添加到推送通知服务

4.向Uber的Cassandra数据库存放持久化消息

5.推送远程和本地的表层消息给Receiver

6.收到消息后,从Messaging Platform获取消息正文

为了支持智能回复,我们要能够使用机器学习模型以足够低的延迟实时评估回复。为了满足这一需求,我们利用Uber的内部机器学习平台Michelangelo的机器学习的训练和服务流水线。

在UberChat中通过机器学习提供智能回复

根据设计,OCC旨在为司机伙伴们在前往接乘客期间(即Uber特定的场景和主题领域)提供简单的聊天体验。然而,它与所有其他试图理解普通文本信息的尝试一样都有一个技术挑战:它们不仅简短,而且还包含缩写、拼写错误和口语。我们在设计机器学习系统时考虑到了这一挑战。

从外部看,OCC接收到最新传入的消息并返回可能的回复,但在后台还有更多事情要做。有两个主要的工作流为OCC ML系统、离线训练和在线服务提供服务,如图5所示:

图5:OCC的背后,我们的机器学习系统依赖于两个工作流程,离线训练和在线服务。

离线训练

在离线训练期间,我们使用以下基于嵌入的ML和NLP流水线来处理这些文本消息:

预处理器

为了准备文本嵌入模型的训练数据,我们利用了匿名的UberChat消息。我们首先按语言(语言检测)对聊天消息进行划分,然后进行长度截断(长度<= 2)。最后,我们对每条消息进行标记。

文本和消息的嵌入

在预处理之后,我们使用Doc2vec模型进行消息嵌入,它从可变长度的文本片段(例如句子,段落和文档)中学习固定长度的特征表示。我们在数百万个匿名的、聚集的UberChat消息中训练Doc2vec模型,并使用该训练将每个消息映射到一个密集的向量嵌入空间。满足我们需求的Doc2vec的两个主要优点是它可以捕获单词的顺序和语义。下面的图6使用t-SNE图在二维投影中可视化单词向量。由于它捕获了单词的语义,因此模型可以将相似的单词聚集在一起。例如,“Toyota”接近““Prius”和“Camry”,但与“chihuahua”相距很远。

图6:Doc2vec单词嵌入的这种二维t-SNE投影显示了模型自动组织概念和隐式地学习单词之间的关系的能力,并基于语义对它们进行聚类。

意图检测

为了理解用户的意图,我们在嵌入过程之后训练了我们的意图检测模型。与Gmail的智能回复功能类似,我们将意图检测任务定义为分类问题。

为什么我们需要意图检测?因为人类语言丰富。有很多方式会提出同样的问题,比如“你要去什么地方?”,“你俩要去哪里?”,“你的目的地是什么?”拼写错误和缩写会增加更多排列,所以聊天消息增加了一定程度的复杂性。

创建一个需要对数百万个问题进行回复的系统将无法扩展,因此我们需要一个系统来识别每个问题背后的意图或主题,从而对有限的意图进行回复。下面的图7说明了不同的消息如何根据检测到的意图聚集在一起:

图7:在这种二维t-SNE的句子嵌入的投影中,模型围绕意图聚类消息。

意图-回复映射

我们利用匿名和聚集的历史对话来查找每个意图的最常见的回复。之后,我们的通信内容策划师和法律团队进行一轮又一轮扩充,使回复尽可能的容易理解和准确。然后,我们为回复检索创建意图 - 回复映射。

在线服务

一旦我们完成模型的离线训练,在线服务就相对简单了。我们获取最新的输入消息并通过与离线相同的预处理器发送它们。预处理的消息将通过预先训练的Doc2vec模型编码为固定长度的向量表示,之后我们使用向量和意图检测分类器来预测消息的可能意图。

最后,通过利用我们的意图 - 回复映射,我们根据检测到的意图检索最相关的回复,并将它们显示给接收消息的司机伙伴。此外,一些极端情况将由规则而不是算法所掩盖,包括非常短的消息(预处理阶段中被截断的消息),表情符号和低置信度预测(多意图用例)。

下一步

我们计划继续在全球市场中将一键式聊天功能扩展到其他语言。我们还在研究更多特定于Uber的上下文功能,如地图和交通信息,并计划将它们合并到我们现有的模型中。这些更新将增加我们更准确地识别用户意图和展示定制回复的可能性,从而更好地协助司机伙伴们:简而言之,让优步体验变得更加神奇。

此外,虽然当前系统使用静态意图 – 回复映射来检索回复,但我们计划构建一个回复检索模型以进一步提高OCC系统的精度。

在高层次上,OCC是一个多回合对话系统的自然应用,因为司机伙伴们和乘客们可以在他们找到对方之前进行多次对话。利用OCC和其他功能,构建一个对话系统改善化成功接到乘客和聊天体验的这个长期过程,最终在我们的平台上带来更好的用户体验。

OCC只是Uber中众多不同的NLP / Conversational AI计划中的一个。例如,NL也被用于提高Uber[1,2]的客户服务,同时也处于免提乘车的核心位置,这一块我们将很快开始测试声控命令。  

收藏

相关话题
文章来源专栏
+关注

评论(0)

加载更多评论

参与评论

分享到

QQ空间 QQ好友 微博
取消