用深度学习提升优步客户支持票务助理(COTA)系统

用深度学习提升优步客户支持票务助理(COTA)系统

今年早些时候,我们推出了Uber的顾客痴迷票务助理系统,一个杠杆工具使用机器学习和自然语言处理(NLP)技术向客户支持代理推荐支持票证响应(联系人类型和应答),其中联系人类型是票证分配给的发行类别,应答是代理用于响应的模板。把它整合到我们的客户支持平台COTA v1在提供类似或更高水平的客户满意度的同时,将英语票务解决时间减少了10%以上。

对Uber来说,COTA v1只是一个开始。为了努力提高COTA的性能,我们进行了离线实验,结果表明深度学习可以提高解决方案的top-1预测精度,对于Contact Type模型提高16%(从49%到65%),对于Reply模型提高8%(从47%到55%)(更多细节,请参阅我们的知识发现(KDD)纸)考虑到这些任务的复杂性,这的确是一项壮举。

鉴于这些令人鼓舞的结果,我们决定将我们的深度学习模型纳入Uber的内部机器学习平台,米开朗基罗.我们建立了一个基于spark的深度学习管道,利用米开朗基罗现有的基础设施将第二代COTA (COTA v2)产品化,从而实现了这一目标。考虑到模型性能会随着时间的推移而衰减,我们还构建了一个模型管理管道来自动地对模型进行再培训和退休,以使它们始终保持最新。

在与Michelangelo集成之后,我们的在线测试验证了COTA v2深度学习系统在关键指标方面的表现明显优于COTA v1系统,包括模型性能、票处理时间和客户满意度。

第一代COTA:挑战与机遇

虽然COTA v1加快了支持票据的解决,但我们确定有两个主要方面需要改进。首先,COTA v1以一种过于复杂的方式进行负采样,这使得我们的模型难以训练。再加上对特定数据表的依赖,这个因素最终使COTA的再培训成为一项艰巨的任务。虽然不是不可克服的,但对于正在进行的任务来说,随着时间的推移,这种难度可能会降低定期维护的积极性。

其次,我们最初的实现不够可扩展,无法被未来的NLP模型使用。从那以后,我们做出了非常有意识的努力,开发了一种深度学习部署流程,不仅为我们的模型打开了大门,也为Uber其他所有团队的模型打开了大门。

为什么是深度学习?

COTA v1的成功激励我们进一步投资于我们的技术栈,并探索其他支持解决方案。Uber的客户支持服务于全球600多个城市,支持多种语言,并促进超过五种沟通渠道,覆盖了包括拼车、Uber Eats、共享单车和Uber Freight在内的各个业务领域的客户。我们业务的范围和规模给我们面临的挑战增加了巨大的复杂性。因此,分类和解决支持票证的方法的数量大约为数千种。此外,Uber的增长要求我们以前所未有的速度迭代。如果我们不把业务增长考虑在内,今天起作用的解决方案可能在几个月后就不会起作用。

深度学习已经彻底改变了许多领域,如机器翻译、语音识别、计算机视觉和自然语言理解,并在某些任务上取得了与人类专家相当或更好的表现。例如,深度学习模型在某些方面已经超过了人类图像分类与识别任务.对于使用视网膜照片的任务检测糖尿病眼病,谷歌的研究表明,深度学习算法的表现与眼科医生相当。最近的成功AlphaGo证明了结合强化学习的深度学习算法甚至可以打败世界上最好的人类这通常被认为是人类最复杂的棋盘游戏的玩家。

基于这些例子和更多的例子,深度学习似乎是开发COTA v2的自然选择。事实上,通过离线实验,我们发现,与COTA v1相比,深度学习模型可以提供更准确的门票分辨率预测。

移动到具有深度学习功能的COTA v2

简而言之,COTA v1是使用基于主题建模的传统NLP和机器学习技术构建的,这些技术混合了文本、类别和数字特征,如下图1(a)所示:

图1。(a) COTA v1的模型架构利用了主题建模、传统特征工程技术和按点排序算法,而(b) COTA v2支持混合输入特征的深度学习架构。

为了提取文本特征,构建了一个NLP Pipeline来处理传入的票据消息。主题建模用于从文本特征中提取特征表示。附加特征工程用于生成余弦相似度。一旦每个特征被设计出来,所有的特征都被输入到一个二进制点排序算法中,以预测联系类型和回复响应。

图1(b)描述了我们用于COTA v2的深度学习架构。文本特性经过典型的NLP预处理,如文本清理和标记化(未显示),并使用嵌入层(未显示)对票据中的每个单词进行编码,将单词转换为密集表示,该表示进一步通过卷积层对整个文本语料库进行编码。类别特征使用嵌入层进行编码,以捕获不同类别之间的密切程度。数值特征进行了批归一化处理,以稳定训练过程。我们的离线实验表明COTA v2深度学习系统在独立识别联系人类型或回复的单独任务和同时预测联系人类型和回复的联合任务方面,比COTA v1在系统上表现更好(提高8- 16%)。

图2。t-SNE图描述了通过深度学习模型学习到的a)单词和b)接触类型的嵌入。

上面的图2显示了t分布随机邻居嵌入t-SNE)我们通过深度学习模型学习的嵌入图。例如,在图2(a)中,我们可视化了一些特定于uber的关键词,观察到“vehicle”和“car”在嵌入的t-SNE图中非常接近。与支付相关的词汇,如“charge”、“credit”和“fare”,也在情节中聚集在一起。

图2(b)表示为接触类型学习的嵌入,每个数据点对应一个唯一的接触类型。联系类型用颜色编码成三个主要组:“骑手”、“司机”和“其他”(例如,食客、餐馆等)。t-SNE图显示了骑车人和驾驶员相关接触类型的清晰聚类。这些可视化直观地证实了该模型正在学习合理的表示,并表明它能够捕获单词之间的相关性和语义连接以及接触类型之间的关系。

简而言之,与COTA v1相比,深度学习可以提高解决方案的top-1预测精度,对于Contact Type模型提高16%(从49%到65%),对于Reply模型提高8%(从47%到55%),这可以直接改善客户支持体验。

部署COTA v2的挑战和解决方案

鉴于深度学习模型在我们的离线分析中的强大性能,我们决定将COTA v2系统集成到生产中。然而,考虑到集成NLP转换和深度学习训练的复杂性,以及使用大量的训练数据,部署我们的COTA v2深度学习模型也面临着相当大的挑战。

理想情况下,我们希望以分布式的方式利用Spark进行NLP转换。Spark计算通常使用CPU集群完成。另一方面,深度学习训练在基于gpu的基础设施上运行得更高效。为了解决这种二元性,我们需要找到一种同时使用Spark转换和GPU训练的方法,以及建立一个统一的管道来训练和服务于深度学习模型。

我们面临的另一个挑战是,考虑到Uber业务的动态特性,确定如何保持模型的新鲜度。根据这一点,需要一个管道来频繁地对模型进行再培训和重新部署。

为了解决第一个挑战,我们构建了一个深度学习Spark Pipeline (DLSP),利用Spark进行NLP转换,利用gpu进行深度学习训练。对于第二个挑战,我们集成了一个内部作业调度工具,并在DLSP之上构建了一个模型生命周期管理管道(MLMP),允许我们以所需的频率调度和运行每个作业。这两条管道不仅使我们能够将深度学习模型训练和部署到Uber的生产系统中,还使我们能够对模型进行再训练和刷新,以保持它们的最佳性能

在接下来的两个部分中,我们将更详细地讨论这两个管道。

COTA v2的深度学习Spark Pipeline

在设计DLSP时,我们希望根据最高效的硬件将任务分配给cpu和gpu。将管道定义为两个阶段,一个用于Spark预处理,一个用于深度学习,这似乎是分配工作负载的最佳方式。通过扩展Spark Pipeline的概念,我们可以使用现有的基础设施为批量预测和实时预测服务提供模型。

培训

模型训练分为两个阶段,如图3(a)所示:

  1. 使用Spark进行预处理转换:我们利用我们的大型Spark集群来执行数据预处理,并适应培训和服务所需的转换。在预处理过程中对数据进行的所有转换都被保存为Spark变压器,然后用于构建一个用于服务的Spark Pipeline。Spark集群中的分布式预处理比单节点GPU机器上的数据预处理要快得多。我们在Spark集群中计算适合的转换(需要持久化数据的转换,如StringIndexer)和非适合的转换(如清除字符串中的HTML标记等)。
  2. 使用TensorFlow进行深度学习训练:一旦步骤(1)的预处理完成,我们利用预处理数据使用TensorFlow训练深度学习模型。这一阶段的训练模型将与步骤(1)中生成的Spark Pipeline合并。这将生成包含预处理变压器和TensorFlow模型的最终Spark Pipeline,该模型可用于运行预测。通过实现一个名为TFTransformer的特殊类型的转换器,我们能够将Spark Pipeline与TensorFlow模型结合起来,它将TensorFlow模型引入到Spark中。需要注意的是,因为所有的Spark transformer都是由Java实现支持的,所以TFTransformer坚持这种模式。
图3。我们构建了一个深度学习的Spark Pipeline架构,用于a)训练模型和b)服务请求。

服务

图3(b)描述了我们如何使用深度学习Spark Pipeline为训练过的模型提供批量预测和实时预测服务。通过训练构建的Spark Pipeline包含预处理变压器和TensorFlow转换。我们扩展米开朗基罗以支持服务通用Spark pipeline,并利用现有的部署和服务基础设施服务于深度学习模型。用于服务的管道运行在Java虚拟机(JVM)上。我们在服务时看到的性能有p95 < 10ms的延迟,这说明了在使用现有的JVM服务基础设施进行深度学习模型时,低延迟的优势。通过扩展Spark pipeline来封装深度学习模型,我们能够利用CPU和gpu驱动世界的优点:1)Spark转换的分布式计算和使用CPU的Spark pipeline的低延迟服务,2)使用gpu的深度学习模型训练的加速。

模型生命周期管理管道:保持模型的新鲜

为了防止COTA v2模型性能随着时间的推移而衰减,我们在DLSP之上构建了一个模型生命周期管理管道(MLMP)。特别是,我们利用Uber的内部作业调度工具Piper来构建端到端流水线,以固定的频率对我们的模型进行再培训和重新部署。

图4。我们的模型生命周期管理管道由六个作业组成,包括数据ETL、Spark转换和模型合并。

上面的图4描述了这个管道的流程。它总共包含6个任务,使用米开朗基罗现有的api对模型进行再训练。这些任务形成一个有向无环图(DAG),其依赖关系由箭头表示:

  1. 数据ETL:这涉及编写数据提取、基本转换和加载(ETL)作业来准备数据。它通常从几个不同的数据源提取数据,将其转换成正确的格式,并将其放入Hive数据库中。
  2. 火花转换:该步骤将原始数据(文本的、分类的、数值的等)转换为张量格式,以便它可以被TensorFlow图用于模型训练。底层的转换通过米开朗基罗以分布式计算的方式利用Spark引擎。变压器被保存到模型商店。
  3. 数据传输:有cpu的计算机集群执行Spark转换。深度学习训练需要gpu来加快进度。因此,我们将第2步的输出数据传输到GPU集群。
  4. 深度学习培训:一旦数据传输到GPU集群。触发一个作业,打开一个带有自定义Docker容器的GPU会话,并启动深度学习训练过程。训练完成后,TensorFlow模型文件被保存到模型存储中。
  5. 模型合并:第2步中的Spark变压器和第4步中的TensorFlow模型合并形成最终的模型。
  6. 模型部署:最终的模型被部署model_id作为对新部署模型的引用生成。的服务框架可以实现外部微服务的端点节俭通过引用model_id

在线测试:cotav1 vs. cotav2

为了验证我们离线观察到的COTA v2深度学习模型的性能,我们在推出系统之前进行了一次在线测试。

测试策略

为了防止已经存在的抽样偏差,我们在打开A/B测试之前进行了A/A测试,如下图5所示:

图5。比较COTA v1和COTA v2系统的总体测试策略。

在A/A和A/B测试中,支持票按照50/50的比例随机分配到对照组和治疗组。在A/A测试阶段,对照组和治疗组都接受来自相同COTA v1模型的预测。在A/B测试阶段,治疗组采用COTA v2深度学习模型。

结果

我们运行了一周的A/A测试和一个月的A/B测试。下面的图6描述了我们跟踪的两个关键指标:模型精度(这里我们使用Contact Type模型作为示例)和每张票据的平均处理时间。如图6(a)所示,在a / a测试阶段,模型性能没有差异,而在我们打开a /B测试之后,有一个很大的飞跃。这些结果证实,与COTA v1相比,COTA v2的深度学习系统提供了更精确的agent解决方案。

在整个A/B测试阶段,处理组的每张票的平均处理时间要短得多,如图6(B)所示。从图6(a)中观察到的另一个结果是,模型性能随着时间的推移而衰减,突出了对图5中所示的模型管理流水线MLMP的需求。(注意:为了保证一致性,我们在实验过程中没有对模型进行再训练)。

我们的在线测试再次证明,如果有足够的训练数据,我们的COTA v2深度学习模型可以显著优于经典的COTA v1机器学习模型。

图6。在线测试的关键指标:a)模型精度和b) a / a和a / b测试每天的平均处理时间。

统计分析表明,在A/A测试中,对照组和处理组的平均处理次数差异无统计学意义,而在A/B测试中,差异有统计学意义。这相对减少了6.6%,加快了机票解析时间,提高了我们的机票解析建议的准确性。此外,我们还测量了客户满意度分数,发现使用COTA v2后有轻微的改善。

除了改善客户支持体验,COTA v2还将通过简化支持票据解决过程,每年为公司节省数百万美元。

下一个步骤

鉴于我们的深度学习模型在COTA v2中的强大性能,我们计划在未来使用问题类型预测来确定将给定的票据路由到哪个客户支持代理,因为这些代理通常拥有特定问题类型集的专业知识。这些更新将增加我们在第一次路由期间识别正确代理来解析票据的可能性,提高整个票据支持系统的效率。

我们还在研究能够让我们更快地对仅仅要求信息的罚单做出反应的功能,例如,提出“我如何更新我的优步头像”这样问题的罚单。对于这种票证,解决方案只是共享静态信息(在本例中是指令)。这可能只是所有客户支持罚单中的一小部分,但可以由COTA v2自动处理,而不需要代理的监督。简化这些静态响应将帮助客户节省时间,并使代理能够专注于更具挑战性的机票,提供更好的客户服务。

如果您对解决机器学习的挑战感兴趣,可以考虑申请我们的职位应用机器学习米开朗基罗,或者旧金山帕洛阿尔托,或班加罗尔客户痴迷工程团队。我们也在招聘旧金山的员工产品经理,还有数据分析师而且科学家们我们的客户至上团队

COTA是优步应用机器学习、客户支持平台、米开朗基罗团队和优步AI实验室之间的跨职能合作,贡献来自Piero Molino、Viresh Gehlawat、Yi-Chia Wang、Joseph Wang、Eric Chen、Paul Mikesell、Alex Sergeev、Mike Del Balso、Chintan Shah、Christina Grimsley、Taj Singh、Jai Malkani、Fran Bell和Jai Ranganathan。我们非常感谢Molly Vorwerck和Wayne Cunningham对编辑本文的帮助。

订阅我们的通讯以跟上优步工程的最新创新。

评论