我们都可以谈到呼叫使用IVR系统的企业的挫败感 - “按2与销售人员交谈,按3来永远等待”。甚至使用语音识别来导航树的“现代”系统仍然感觉笨拙,并且仍然经常需要人来最终解决查询。因此,当谷歌推出Duplex时,许多人被计算机震惊了,这台计算机可以通过电话与人类进行无缝和令人信服的互动。之后,互联网上充满了评论 - 图灵测试被打败了,道德已经死了,我们都注定了。无论社会影响如何,演示的绝对令人印象深刻都不容忽视。
最令人兴奋的是,与机器的自然,流畅的对话并不局限于谷歌研究机构的大厅!人们可以使用开源友好型技术,如开源Rasa Stack和Twilio等服务,立即构建基于AI的手机代理。在本文中,我将说明如何构建自己的类似Duplex的代理以自动处理电话呼叫。我们将从另一个方向处理手头的问题 - 呼叫业务并与机器(而不是呼叫业务的机器)交谈。
概观
在我们继续之前,让我们看看我在几个月内与同事一起建立的系统原型,用于预订沙龙预约。它简单,功能齐全,最重要的是,它是人工智能的!
The diagram below describes the system used in the demo:
像这样的系统由3个主要部分组成:
- 一种连接电话网络的方法
- 处理语音的系统(语音到文本和文本到语音)
- 能够进行对话并采取行动的自主代理人
电话
直到最近十年左右,如果你想要一台机器接听电话,电话公司和铜线都参与其中。我们不希望维持一个连接到PSTN(旧式铜线电话系统)的硬件柜,因此我们将利用VoIP和云来满足我们的需求。
特别是,Twilio提供了一种名为Elastic SIP Trunking的优质服务。您可以将SIP干线视为互联网上的专用电话线。 Twilio维护连接到物理电话网络的硬件,当有来电时,他们通过互联网向您的系统发起VoIP呼叫。当您的系统进行出站呼叫时,反之亦然。许多VoIP提供商希望您购买单独的中继线 - 这意味着如果您支付了两个中继线,您的系统在任何给定时间只能有两个活动呼叫。但是,Twilio没有这个限制 - 你只需支付你使用的时间。这是弹性SIP中继中的弹性,这也意味着Twilio将与您的系统一起扩展,无需进行复杂的资源预测。
对于上面的演示,我使用了两个不同的软件包来处理呼叫。第一个包Kamailio用作VoIP负载均衡器和路由器。它位于我们系统的防火墙之外,是Twilio连接的地方。然后,Kamailio将防火墙内的呼叫路由到第二个包Asterisk。 Asterisk是一个公共分支交换(PBX)平台,可以执行各种任务 - 从托管语音邮箱到启用电话会议到我们的自定义应用程序。 Asterisk处理控制呼叫(应答,挂断等)以及将音频桥接到语音子系统和从语音子系统桥接音频。
语音转录与合成
所以我们已经连接到电话系统,现在我们需要一种方法来处理电话的通用语音 - 音频。在过去几年中,机器学习技术在语音转录和合成方面取得了巨大的进步 - 我们在语音软件复兴方面有所改进。在转录方面,像谷歌和微软这样的公司在各种环境中都声称接近人类的理解水平。与此同时,在综合方面,像WaveNet和Tacotron这样的努力正在产生更像人类的结果,甚至重现复杂的节奏和母语人士的变形(这可能是Duplex演示所使用的)。
建立自治代理人
我们系统的核心是代理人,拥有自然发声代理的关键取决于它能够进行连贯的对话。尝试使用简单的基于树的方法来建模对话根本不会削减它 - 我们需要一个能够对曲线球作出反应并优雅反应的系统。我们需要使用一些人工智能。
为了解决这个问题,Rasa的团队已经构建了一套很棒的开源工具,用于构建基于AI的代理。 Rasa NLU使用最先进的机器学习技术将原始文本分类为结构化意图,并从该文本中提取实体(例如名称,日期,数量)。同时,Rasa Core使用递归神经网络(RNN)来构建对话应该如何流动的概率模型。这种基于RNN的模型不仅考虑了用户刚刚说了什么,而且还“记住”相关信息以告知其响应。该记忆有两种形式:(1)对话中的前一轮(例如“用户说他们想要重新安排,所以移动预约而不是创建新的预约”),以及(2)事实(Rasa称这些插槽)派生从用户的陈述(例如“理发是我们正在谈论的服务,而卡洛斯是理想的造型师”)。
使用Rasa无需在对话中对分支进行硬编码,也无需构建严格的规则集来驱动对话流。相反,您为Rasa(NLU和Core)提供样本数据(越多越好),系统将学习如何根据训练数据做出响应 - 这称为监督学习。
以下是一些NLU训练数据JSON的示例:
[ ... { "text": "I'd like to get a beard trim on Saturday.", "intent": "schedule", "entities": [ { "start": 18, "end": 28, "value": "beard trim", "entity": "service_name" }, ] }, ... ]
这里我们给出了一个示例短语以及如何对其进行分类,包括句子的哪个部分代表用户想要的服务。 Rasa甚至支持开箱即用的日期和时间等常用分类器,因此我们不必自己将星期六注释为实体。
同样,我们提供了对话示例,以便以降价格式训练Rasa Core:
## Schedule intent with valid service name * schedule{"service_name":"beard trim"} - action_service_lookup - slot{"service_id": 12345} - action_confirm_appointment ## Schedule intent with invalid service name * schedule{"service_name":"jelly beans"} - action_service_lookup [note the lack of slot setting here compared to above] - action_apologize_for_misunderstanding - action_prompt_for_service ## Schedule intent with no service name * schedule - action_prompt_for_service
在此示例中,我们提供了三个有关如何响应计划意图的对话示例。通过这样的示例,会话引擎将学到很多东西:
- 如果提供了服务名称(即已在intent上设置service_name实体),请执行查找操作(action_service_lookup)。
- 如果未提供服务名称(即尚未设置service_name实体),则提示用户输入服务名称
- 如果服务查找成功(即service_id槽设置为action_service_lookup的一部分),则确认约会
- 如果服务查找失败(即service_idslot未设置为action_service_lookup的一部分),则道歉并请求用户状态提供服务名称
这些例子非常简单,但它们可以说明人们可以轻松训练自己的会话代理。最终,这种基于培训的方法意味着,稍后当您的代理人获得前所未有的输入时,它将根据所学内容进行最佳猜测 - 通常效果很好。我鼓励您查看Rasa核心概述 - 它可以更好地解释为什么ML对话流方法是改变游戏规则的方法。
上面的演示使用了一套手工策划的训练数据(例如列出你可以想到的所有方式“你什么时候打开?”) - Rasa NLU训练的大约1300个例句和Rasa的几百个对话例子核心培训。该培训数据与定制编写的软件操作相结合,执行诸如“寻找开放预约插槽”或“确认预约插槽”之类的操作,并向Rasa公开以用于对话。代理将决定响应用户输入运行这些动作中的哪一个,并且来自那些动作的响应用于通知未来的响应(例如,是否在所请求的时间找到了约会时隙)。
把它们放在一起
我们已经涵盖了系统的3个主要部分 - 电话,语音和代理。让我们把它们放在一起:
这个粗略的架构图描述了上面演示的结构。它运行在由Kubernetes引擎管理的Kubernetes集群上,采用面向微服务的架构。每个盒子或多或少都是一个Kubernetes Pod(实际上有一些胶水盒,为简洁起见,这里省略了)。根据手头的任务,自定义软件是Go,Python和Node.js的组合编写的。
结论
我们正处于人机交互历史时期,机器学习的广泛应用使我们能够建立前所未有的新互动。您也不必成为ML研究员也可以参与其中 - 像Rasa Stack这样的软件将最先进的研究带入可用的产品中。将它与Twilio中令人敬畏的通信堆栈配对,您的软件可以全新的方式与世界互动。
附录
资源
如上所述,有许多语音系统在野外,这里有一些链接可以帮助你入门,虽然这绝不是一个全面的列表。
Speech-To-Text Systems
- Google Cloud Speech-To-Text
- Amazon Transcribe
- IBM Watson
- Microsoft Azure Speech-To-Text
- AssemblyAI
- Mozilla DeepSpeech + Common Voice
Text-To-Speech Systems
- Google Cloud Text-To-Speech
- Amazon Polly
- IBM Watson
- Microsoft Azure Text-To-Speech
- One of the Open Source Tacotron implementations
About the Author
Josh Converse is the founder of Dynamic Offset, a boutique consulting firm specializing in building great customer experiences through mobile, web, and conversational interfaces. Prior to consulting he was a tech lead at both Google and Apple. Drop a line and say hi — hello@dynamicoffset.io!
原文:https://blog.rasa.com/building-your-own-duplex-ai-agent-using-rasa-and-twilio/
讨论: 欢迎加入知识星球【首席架构师圈】
最新内容
- 15 hours ago
- 17 hours ago
- 17 hours 59 minutes ago
- 3 days 8 hours ago
- 3 days 16 hours ago
- 3 days 16 hours ago
- 3 days 17 hours ago
- 3 days 17 hours ago
- 1 week 1 day ago
- 1 week 1 day ago