谷歌于 2019 年为其 Pixel 手机推出了安卓系统下的录音软件 Recorder,对标 iOS 下的语音备忘录,并支持音频文件的录制、管理和编辑等。在此之后,谷歌陆续为 Recorder 加入了大量基于机器学习的功能,包括语音识别,音频事件检测,自动标题生成,以及智能浏览等。
不过当录音文件较长并包含多个说话人的时候,一部分 Recorder 的用户在使用过程中会感到不便。因为仅凭语音识别得到的文本,并不能判断每句话分别是谁说的。在今年的 Made By Google 大会上,谷歌公布了 Recorder 应用的自动说话人标注功能。该功能将实时地为语音识别的文本加上匿名的说话人标签(例如 “说话人 1” 或“说话人 2”)。这项功能将极大地提升录音文本的可读性与实用性。而这项功能背后的技术,被称为声纹分割聚类(speaker diarization)。谷歌在 2022 年的 ICASSP 会议上,首次介绍了其名为 Turn-to-Diarize 的声纹分割聚类系统。
左图:关闭了说话人标注的录音文本。右图:开启了说话人标注的录音文本。
系统架构
谷歌的 Turn-to-Diarize 系统包含了多个高度优化的模型和算法,实现了在移动设备上,以极少的计算资源完成对长达数小时的音频进行实时声纹分割聚类处理。该系统主要包含三个组成部分:用以检测说话人身份转换的说话人转换检测模型,用以提取每个说话人声音特征的声纹编码器模型,以及一个能够高效完成说话人标注的多阶段聚类算法。所有组成部分都完全运行在用户的设备上,不依赖于任何服务器连接。
Turn-to-Diarize 系统的架构图。
说话人转换检测
该系统的第一个组成部分是一个基于 Transformer Transducer(T-T)的说话人转换检测模型。该模型能够将声学特征序列转换为包含了特殊字符 < st > 的文本序列。特殊字符 < st > 表示一个说话人转换的事件。谷歌之前发表的论文曾经用诸如 < doctor > 或 < patient > 的特殊字符来表示具体说话人的身份。而在最新的系统中,由于 < st > 字符不局限于特定的身份,因此其应用也更加广泛。
对于大多数的应用,声纹分割聚类系统的输出一般不会直接呈现给用户,而是与语音识别模型的输出进行结合。由于语音识别模型在训练过程中已经针对词错率进行了优化,因此说话人转换检测模型对于词错率较为宽容,但更加注重特殊字符 < st > 的准确率。在此基础上,谷歌提出了一种新的基于字符的损失函数,实现了只需较小的模型,就能准确地检测出说话人转换事件 < st>。
提取声纹特征
当音频信号被按照说话人转换事件进行分割之后,系统通过声纹编码器模型对每一个说话人片段提取包含声纹信息的嵌入码,即 d-vector。谷歌在之前发表的论文中,一般都是从固定长度的音频中提取声纹嵌入码。与之相比,这次的新系统有多项改进。首先,新系统避免了从包含多个说话人信息的片段中提取声纹嵌入码,从而提升了嵌入码的整体质量。其次,每一个声纹嵌入码对应的语音片段,其时长都比较长,因此包含了对应说话人较多的声纹信息。最后,该方法得到的最终声纹嵌入码序列,其长度较短,使得后续的聚类算法计算代价较低。
多阶段聚类
声纹分割聚类的最后一步,便是对前面几步得到的声纹嵌入码序列进行聚类。由于用户使用 Recorder 应用生成的录音可能只有几秒钟,也可能长达 18 小时,所以聚类算法面临的关键挑战便是能够处理各种长度的声纹嵌入码序列。
为此,谷歌的多阶段聚类策略巧妙地结合了几种不同的聚类算法各自的优势。对于较短的序列,该策略采用聚合式分层聚类(AHC)。对于中等长度的序列,该方法采用谱聚类,并利用特征值的最大间隔法,来准确地估算说话人的数量。对于较长的序列,该方法先用聚合式分层聚类来对序列进行预处理,然后再调用谱聚类,从而降低了聚类这一步骤的计算代价。而在整个流式处理的过程当中,通过对之前的聚类结果进行动态缓存并重复利用,每一次聚类算法的调用,其时间复杂度以及空间复杂度,上限都可以被设置为一个常数。
多阶段聚类策略是针对设备端应用的一项关键优化。因为在设备端,CPU、内存、电池等资源通常都较为稀缺。该策略即使在处理过长达数小时的音频之后,依然能够维持在一个低能耗的状态下运行。而该策略的常数复杂度上限,通常可以根据具体的设备型号进行调整,实现准确率和性能之间的平衡。
多阶段聚类策略的示意图。
实时校正以及用户标注
因为 Turn-to-Diarize 是一个实时的流式处理系统,所以当模型处理完更多的音频之后,其预测得到的说话人标签也会变得更加准确。为此,Recorder 应用会在用户录音的过程当中,持续地对之前预测的说话人标签进行校正,保证用户在当前屏幕上看到的说话人标签始终是更为准确的标签。
与此同时,Recorder 应用的用户界面还允许用户对每一段录音中的说话人标签进行重命名,例如将 “说话人 2” 重命名为“汽车经销商”,从而方便用户阅读和记忆。
Recorder 允许用户对说话人标签进行重命名,从而提升可读性。
未来工作
谷歌在最新的数款 Pixel 手机上推出了自研芯片 Google Tensor。而当前的声纹分割聚类系统主要便运行在 Google Tensor 的 CPU 模块上。未来谷歌计划将声纹分割聚类系统运行到 Google Tensor 的 TPU 模块上,从而进一步降低能耗。此外,谷歌还希望借助多语言的声纹编码器以及语音识别模型,将这一功能扩展到除英语之外的其他语言上。