使用 transformer 来改进轮次结束检测

Using a transformer to improve end of turn detection

目前,语音 AI 应用中最难解决的问题之一是结束轮次检测。在对话式 AI 的背景下,轮次检测的任务是确定用户何时停止说话,以及 AI 模型何时可以在不无意中断用户的情况下做出回应。

目前,检测轮次结束最常用的技术称为短语端点检测。短语端点检测器是一种算法,用于尝试找出用户何时完成了一个完整的想法或话语。包括 LiveKit 的 Agents 框架在内,几乎所有人都使用语音活动检测(VAD)作为短语端点检测器。它的工作原理如下:

  • 通过神经网络运行音频数据包,该网络输出音频是否包含人类语音。
    • 如果音频样本包含人类语音,则用户尚未说完。
    • 如果音频样本不包含人类语音,则启动计时器以跟踪“沉默”(即无法检测到人类语音)的持续时间。一旦在没有人类语音的情况下经过了某个时间阈值(由您,即开发人员设置),那一刻就代表了一个话语的结束。AI 模型现在可以对用户的输入进行推理并做出回应。

Agents 使用 Silero VAD 来检测语音活动,并提供计时参数来调整其灵敏度。一旦 Agent 确定用户停止说话,框架就会在启动 LLM 推理之前引入一个延迟。这个延迟有助于区分自然的停顿和用户轮次的结束。您可以使用 min_endpointing_delay 参数配置此延迟。min_endpointing_delay 的默认值为 500ms。这意味着一旦 VAD 检测到从人类语音到没有人类语音的转换,并且这种没有持续至少 500ms,就会触发轮次结束事件。

您可以通过降低端点检测延迟阈值使您的 Agent 响应更快,但这会以频繁中断为代价。如果您将阈值增加到一两秒,您的 Agent 会感觉反应迟钝。这里显而易见的问题是,一刀切的方法无法考虑到每个用例、每种说话方式或每种口语语言。

一个更大的问题是,VAD 只关注某人何时说话(通过分析音频信号的存在),而人类还会使用语义、某人所说的内容以及他们如何说的来判断何时轮到自己说话。例如,如果有人说:“我理解你的观点,但是……”——VAD 会将其称为轮次结束,但人类很可能会继续听。

几个月来,我们一直在探索如何将语义理解整合到 LiveKit Agents 的轮次检测系统中。经过大量的实验和测试,我们很高兴发布一个开源的 transformer 模型,它使用语音内容来预测用户何时说完。在我们深入了解它的工作原理以及它如何用于轮次检测之前,请先查看结果

Shayne 在 LiveKit Agents 中使用新轮次检测系统的前后对比演示

模型工作原理

我们的 End of Utterance (EOU) 模型是一个基于 HuggingFace SmolLM v2 的 135M 参数 transformer,并针对预测用户语音结束的任务进行了微调。考虑到推理需要在 CPU 上实时运行,我们选择了一个小型模型。EOU 使用一个滑动上下文窗口,包含用户和 Agent 之间对话中最近的四个轮次。

当用户说话时,他们的语音会被一个(开发人员指定的)语音转文本(STT)服务转录成文本,每个单词都会附加到模型的上下文窗口。对于从 STT 接收到的每个最终转录,模型会根据当前上下文的末尾是否代表当前说话者的轮次结束做出预测,并附带置信度级别。目前,EOU 只能对英文转录进行预测,但我们计划在未来几个月内增加对更多语言的支持。

我们使用模型的方式很简单:模型预测用于动态缩短或延长 VAD 沉默超时。这意味着如果 EOU 表明用户尚未说完,Agent 将会等待更长时间的沉默。在我们的测试中,我们发现这种策略可以显着减少中断,同时不影响响应能力。与单独使用 VAD 相比,EOU 与 VAD 结合使用

  • 减少无意中断 85%
  • 错误地表明轮次尚未结束的次数占 3%

它在对话式 AI 和客户支持用例中特别有用,例如进行访谈和收集用户数据(如地址、电话号码或付款信息)。更多演示

如何在您的 Agent 中使用新模型

我们将新的轮次检测器打包成一个 LiveKit Agents 插件,因此只需在 VoicePipelineAgent 构造函数中添加一个额外的关键字参数即可将其添加到您的语音 Agent 中(您可以在此处找到完整的示例代码)

轮次检测的未来

除了将 EOU 扩展以支持更多语言外,我们还希望探索改进,例如增加上下文窗口和提高模型的推理速度(目前约为 50ms)。EOU 是在文本上训练的,因此虽然它在管道架构中有效(即 STT ⇒ LLM ⇒ TTS),其中语音在进一步处理之前转换为文本,但它不能用于直接消耗音频输入的本地多模态模型,例如 OpenAI 的 Realtime API

对于使用多模态模型进行内容感知轮次检测,我们正在开发一种新的基于音频的模型,该模型不仅会考虑说话者说了什么,还会考虑说话者如何表达自己,使用人类语音中的内含信息,如语调和节奏。

很难描述我们人类用来判断何时轮到自己说话的确切过程,这使得该任务非常适合基于机器学习的方法。即使是人类也并非总能做到这一点,非语言线索可以提高我们完成这项任务的表现。我们当面中断别人的次数少于在 Zoom 上,在 Zoom 上少于通过电话。我们相信,这一领域的研究对于构建更像人类、互动起来更自然的 AI 至关重要。我们很高兴能通过这个模型为社区做出我们的第一个贡献,并期待随着时间的推移看到这一领域出现大量的创新


如果您有兴趣交流想法、为项目做出贡献、加入核心团队,或者构建使用 LiveKit 新轮次检测模型的应用,请在 LiveKit 社区给我们留言。