我们如何教授人工智能来回答支持问题。体验Yandex.Taxi

没有理想的服务-有时用户对技术支持有疑问。很难说在这种情况下,尝试结合可以解决问题的模板漫游器副本的组合,或者等待专家的回应已经半天,这更加令人不快。

在Yandex.Taxi中,我们选择了两个选项中的第三个选项-使用机器智能来创建人性化的技术支持。我的名字叫Tatyana Savelyeva,我的团队从事非结构化数据的机器学习。切入点-我分享用户的见解,讲述如何自动化复杂的流程,组织完全不同的团队的工作,当然,还要在实践中应用深度学习和技术技巧(没有这些技巧)。



为什么要自动化任何东西?


似乎为什么要发明一个多阶段支持结构-雇用更多人。如果每天大约有10个请求得到支持,这可能会起作用。但是,当用户呼叫数量趋向于一百万(这是Yandex出租车行程的一小部分,但绝对令人印象深刻)时,人们必须考虑更可靠的策略:找到并培训足够数量的运营商来应对这种数量的非典型问题至少更加困难。

不久前,业界决定在多个级别的支持下解决此问题。在第一阶段,最简单,可预测的问题被过滤掉了:如果现成的答案不合适,则对问题进行分类并传递给更有资格的专家。优雅,但有细微差别。

呼叫数量正在增长-需要更多时间来处理它们。操作员的吞吐量是人为因素-是否有很多原因会导致系统运行缓慢(账单持续数分钟)?在机器的帮助下,可以克服许多这些限制:如果机器累了,它不会出错,并且可以更快地做出决策。

大约一年前,我们开始使用机器学习来立即提示操作员可能的交互场景。客户现在可以更快地获得答案。但是,完美无止境!

从哪里开始?


假设您不走运:驾驶员没有到达并且没有联系。您与Yandex.Taxi支持人员联系将会发生什么?



有哪些可以优化以更快地解决问题的方法?让我们从第一阶段开始,在该阶段门票进入两行之一。最初,选择取决于查询中的关键字-可以,但是确定的准确性很低。为了解决这个问题,基于经典神经网络模型编码器BERT的分类器提供了帮助。

在此任务中,专家线的完整性是固定的:需要诉讼的案件不应由专家审理。但是,不要忘记为提高准确性而付出的努力:专家线路上应尽量减少简单的呼叫,以使真正关键情况下的响应时间不会超出用户的耐心。事实证明,机器学习方法的分类精度比关键字分析有效2倍。应对紧急情况的速度提高了1.5倍。

如今,试图在现有技术的框架内使专家线的工作自动化是很困难的:正在发生的事情的逻辑很难系统化,并且任何错误都会非常昂贵。让我们回到典型的,经过深入研究的第一线查询-也许将其处理交给算法处理?因此,例行任务将得到更快地解决,并且员工将能够更加关注超出模板范围的有争议的案例。

为了测试这个想法,开发了一个sujest系统-提示系统,该支持系统为支持人员提供了三种最能回答当前请求的选项:



实验成功:在70%的情况下,操作员选择了其中一种建议的消息,从而将响应时间减少了10%。似乎是时候完全自动化第一行了。

需要一个计划。一线员工做什么?

  1. 阅读文字,定义治疗的对象。
  2. 检查行程信息。
  3. 考虑前两点,选择准备好的答案之一。

举例说明。给出:给遇险用户的文本请求,一些旅行信息,有爱心的支持人员。



首先,员工将确定上诉的主题:“从卡上两次借记”。接下来,检查付款方式,状态和收费金额。一次性注销资金:可能是什么原因?是的,这里是:连续两个通知。

自动应答系统应该做什么?

全都一样。即使答案的关键要求也不会改变:

质量

如果用户对应用程序有所抱怨,则无需承诺要求驾驶员洗车。仅仅确切地了解问题是不够的,必须详细描述如何解决该问题。

速度
尤其是在情况紧急且答案很重要的情况下。

灵活性和可扩展性

带星号的任务:尽管已经开始创建带有出租车的支持系统,但是将结果转移到其他服务(例如Yandex.Food或Yandex.Lavka)还是很有用的。也就是说,在更改支持逻辑(响应模板,电话主题等)时,我想在几天而不是几个月内重新配置系统。

如何实施


阶段1.我们使用ML确定文本的主题,

首先,我们编写了参考主题树,并训练了分类器进行导航。大约有200种可能的问题:旅行(驾驶员没有到达),应用程序(我无法附上卡片),汽车(脏车)等。

如上所述,我们使用了基于BERT的预训练模型。即,为了对查询文本进行分类,有必要以向量的形式呈现查询文本,以使含义相似的句子在结果空间中并排放置。

BERT在未分配文本的两项任务上进行了预培训。首先,将15%的令牌随机替换为[MASK],然后网络会根据上下文预测初始令牌-这为模型提供了自然的“双向性”。第二项任务是教我们确定提案之间的关系:两个条目是连续提交还是分散在整个文本中?

在对Yandex.Taxi技术支持的请求样本中完成BERT体系结构后,我们得到了一个能够预测消息主题的网络,并根据我们的服务细节进行了调整。但是,主题的频率和主题本身会发生变化:为了使用它们来更新网络,在过去几周内,我们仅根据最新数据对模型的较低层进行了单独训练。因此,保留了有关支持文本特征的知识,并且将可能类别的概率充分分配到了今天。

关于适当性的更多信息:对于我们的所有服务(包括出租车),已经开发了一个完整的模型架构模块库和用于验证概率阈值的方法。它允许您:

  • , : , — ;
  • , . , . , , , .

第2阶段,我们处理有关行程的信息:我们为每个模板规定业务规则,为

支持人员提供了一个界面,其中对于每个响应模板,都需要一些强制性规则。例如,对于双倍付款的外观:

模板: “您好!我检查了所有事情:这次旅行只付了一次钱。钱首先被“冻结”在您的卡上,然后才被借记,因此,银行可能会两次通知一次交易。请检查您的银行对帐单以确保。如果您在此处看到两个已注销的金额,请发送以下声明的扫描或照片

规则: payment_type为“ card”,transaction_status为“ clear_success”,transaction_sum == order_cost

仅针对客户支持模板,我们的专家已经完成了超过1.5千条规则。

第3阶段,我们选择答案:我们将适当的文本主题和业务规则结合在一起作为模板,

每个主题都与适当的响应模板相匹配:主题由ML方法确定,并且根据上一段中的规则检查响应该模板的模板是否为真。用户将收到一个响应,该响应的验证将得出值“ True”。如果有多个这样的选项,则将选择支持人员中最受欢迎的选项。



顺便说一下,在Yandex.Taxi中与驱动程序的交互过程完全没有改变:该模型仅为操作员选择所需的模板,并独立回答用户。

完成


万岁!系统已经设计好,启动了,优化显示了出色的效果,但是现在放松还为时过早。自动应答器应稳定运行,无需持续干预,并且可以轻松扩展-自行或半手动模式。我们通过系统的三部分结构实现了这一目标:

  1. 离线开发-在此阶段,模型会更改,规则已准备就绪;
  2. 生产服务-一种微服务,可获取更新,应用更新并实时响应用户;
  3. 随后对结果进行分析以确保新模型正确运行,用户对自动答案感到满意。



再来个例子。最受欢迎的客户愿望清单(以及我们如何在不编写代码的情况下与他们打交道)排名最高:

出租车有很酷的自动答案:Yandex.Ed中也需要同样的答案

要将任何支持连接到我们的系统,您需要四个简单的步骤:

  1. 为文本创建主题树;
  2. 使每个主题与模式匹配;
  3. 在管理面板中使用模板填写一组规则;
  4. 提供用户请求和支持答案之间的对应表。

如果所有这些都存在,我们将设置新上传的路径,该模型将从接收到的数据中学习并与所有定义的规则(与特定的ML主题集成)一起进入我们的微服务。请注意:在现有流程的框架内,不会编写任何新逻辑!

支持的逻辑已更改,我们需要新规则。

请-在我们的管理面板中填写新规则。系统将分析更改如何影响自动答案*的百分比,同时考虑规则的要求。如果一切顺利,则将完成的规则​​转换为配置并加载到ML服务中。万岁!不到一个小时的时间,业务规则已在生产中更新,没有编写任何代码行,程序员也不会受到打扰。

*这似乎不是很明显,所以让我们在示例中添加一个示例。假设,专家引入了一条规则:仅对于价值超过200卢布的订单,才可以使用某些响应模板。如果此限制有效,则较小数量的旅行票将保持关闭状态,自动选择的答案的比例将减少,并且整个系统的效率将降低。为了防止这种情况的发生,及时拦截失败的规则并将其发送以进行修订很重要。

我们添加了一个新主题,我们想要更改模型,我们明天需要所有工作。

内容专家通常希望添加新主题,将其拆分为现有主题,或删除不相关的主题。没问题-您需要在管理面板中更改主题和响应模板之间的对应关系。

如果一线支持员工的答案中已经出现了新的或更改的主题,则通过定期重新培训的模型将自动收紧该数据并为其计算阈值(对于上周的数据,除了推迟测试的集合)。

在测试样本上,将根据特殊指标比较旧模型和新模型-准确性,份额是自动固定的。如果更改是积极的,则将在生产中推出新模型。

我们分析指标:不下沉,不破坏


我们将重点关注两个标准-用户对自动回复的平均评分以及其他问题的出现。在ab实验中监控变化,未观察到统计上显着的指标下降,而且,由于响应速度快,用户经常对模型的结果进行高度评价。

但是,无论我们多么努力,机器学习方法有时都会产生荒谬的反应。在下一次更新模型后,我们发现了一个案例:

用户:由于驾驶员,汽车准时到达,驾驶员表现出色,一切顺利!支持
我们将惩罚驾驶员,这种情况不会再次发生。

幸运的是,发射是一项测试。问题是这样的:该模型学会了对评分小于4的评论做出回应,有时我们错误地将她的评论显示为4星和5星。当然,由于学习限制,没有其他智能神经元可以回答。实施后,这种情况很少见(占总数的0.1%)-我们会跟踪它们并采取适当的措施:神经网络将响应用户的重复信息。

结论和未来计划


连接自动响应系统后,我们开始更快地响应用户请求,并最大程度地关注需要详细调查的真正复杂案例。我们希望这将有助于我们提高Yandex.Taxi的质量,并最大程度减少不愉快事件的发生。

自动修复模型将关闭第一行的60%,而不会浪费平均用户评分。我们计划进一步开发该方法,并将第一行的自动回答百分比提高到99.9%。并且,当然,继续为您提供帮助-支持我们的应用程序并在Habré上分享有关它的经验。

All Articles