文 / Google Research 软件工程师 Pablo Barrera 和 DeepMind 研究工程师 Florian Stimberg
在线通话帮助人们简化工作,与所爱的人保持联系,这种方式现已成为数百万人日常生活的一部分。为在互联网上完成通话传输,通话中的数据通常被拆分为许多叫做 数据包 (Packets) 的简短区块。这些数据包通过网络从发送方传输到接收方,并在接收方重新组合,以生成连续的视频和音频流。
然而,当数据包到达另一端时,经常会出现顺序错误或时间错误的问题,这种问题通常被称为 抖动 (Jitter)。有时,个别数据包甚至会完全丢失。诸如此类的问题在音频和视频传输中普遍存在,并且会导致通话质量变差,因为接收方必须设法填补出现的间隔。
举例来说,99% 的 Google Duo 通话均需要处理丢包、抖动过多或网络延迟。在这些通话中,有 20% 是因为网络问题而丢失了通话时长中超过 3% 的音频数据,另 10% 的通话丢失超过 8% 时长的音频数据。
Google Duo
https://duo.google.com/about/
网络问题导致丢包的简化示意图:接收方需要抵消丢包的影响,才可实现可靠的实时通信
为确保可靠的实时通信,当丢包数据重要时,接收方需对其进行处理。具体而言,如果没有持续提供新的音频,接收方要么收听到故障声要么是短暂的无声,但是一遍又一遍地重复同样的音频也并非理想的解决方案,因为这会产生假象,进而降低通话的整体质量。处理丢包的过程被称为丢包补偿 (Packet Loss Concealment, PLC)。接收方的 PLC 模块负责创建音频(或视频),以填补由丢包、过多抖动或临时网络故障造成的间隔,这三种情况都会导致数据的缺失。
为解决这些音频问题,我们推出了如今正在 Duo 中使用的全新 PLC 系统 WaveNetEQ。WaveNetEQ 是一种基于 DeepMind WaveRNN 技术的生成模型,该模型使用大量的语音数据语料库进行训练,以将短语音片段逼真地延续下去,使其能够完整合成丢失语音的原始波形。
DeepMind WaveRNN
https://arxiv.org/abs/1802.08435
Duo 的通话受到端到端加密保护,因此所有的处理均需在设备上完成。WaveNetEQ 模型速度很快,足以在手机上运行,同时还能提供最为前沿的音频质量。其 PLC 系统生成的音频对比其他 PLC 系统的生成音频听上去更加自然。
适用于 Duo 的全新 PLC 系统
像许多其他基于网络的通信系统一样,Duo 基于 WebRTC 开放源代码项目。为隐藏丢包带来的影响,WebRTC 的 NetEQ 组件采用可以分析语音,并对小于 20ms 的丢包非常有效,生成平滑连续的信号处理方法。但对 60 毫秒或更长的间隔,生成的音频效果则不够理想。在后一种情况中,语音将变得机械且重复。不幸的是,这是尝试过语音通话的人都非常熟悉的独特声音。
WebRTC 开放源代码项目
https://webrtc.org/
为更好地管理丢包,我们用改良版的 WaveRNN 取代了 NetEQ PLC组件。WaveRNN 是一种用于语音合成的循环神经网络模型,由自回归网络 (Autoregressive Network) 和调节网络 (Conditioning Network) 两部分组成。自回归网络负责信号的连续性,并通过使每个生成的样本依赖网络的先前输出,来提供语音的短期和中期结构。调节网络会影响自回归网络,以使生成的音频与速度更慢的输入特征相一致。
不过,WaveRNN 与其前身 WaveNet 一样,在创建时都考虑了文字转语音 (TTS) 应用。作为 TTS 模型,WaveRNN 提供了 应该 说什么以及 怎么 说的信息。调节网络直接接收这个信息,将其以组成单词的音素以及额外的韵律特征(即像语调或音高这样的非文本信息)的形式进行输入。在某种程度上,调节网络可以“预测未来”,然后将自回归网络引导至正确的波形,使其与“未来”匹配。但 PLC 系统和实时通信并未提供这样的语境。
WaveNet
https://deepmind.com/blog/article/wavenet-launches-google-assistant
PLC 系统如要正常运行,必须既能从当前的语音中提取上下文信息(即“过去”),又能生成合理的声音将语音进行下去。我们的解决方案 WaveNetEQ 可以同时做到这两点:在丢包事件期间,使用自回归网络提供音频的连续部分,同时使用调节网络来建模像语音特性这样的长期特征。调节网络使用过去音频信号的声谱图作为输入,提取有关韵律和文本内容的有限信息。自回归网络收到该压缩信息后,将其与不久前的音频相结合,以预测波形域的下一个样本。
这与 WaveNetEQ 模型 训练过程中 遵循的流程略有不同,在该流程中,自回归网络接收训练数据中实际存在的样本,然后将其作为下一步的输入,而不是使用生成的上一个样本。这一过程称为教师强制 (Teacher Forcing),可确保模型即使处于训练的早期阶段(其预测质量仍较差),仍可学习到有价值的信息。一旦对模型进行了充分的训练并将其用于音频或视频通话后,教师强制便只会用于为第一个样本“预热”模型。在此之后,模型会将其自身的输出作为下一步的输入传递回去。
教师强制
https://towardsdatascience.com/what-is-teacher-forcing-3da6217fed1c
WaveNetEQ 架构:在推理过程中,我们通过教师强制使用了最近的音频来“预热”自回归网络。之后,模型将使用其自身的输出作为下一步的输入。来自较长音频部分的 MEL 声谱图将用作调节网络的输入
该模型将应用于 Duo 抖动缓冲区中的音频数据。丢包事件发生后,一旦真实音频还在继续,我们将合成的音频流和真实的音频流无缝合并。为完美地将两个信号对齐,该模型会生成比所需稍多的输出,然后从其中一个到另一个进行交叉淡化。这样可使过渡期变得平滑,并避免明显的噪音。
在 60 毫秒的移动范围内模拟音频上的 PLC 事件:蓝色线条表示真实音频信号,包括 PLC 事件的过去和未来部分。橙色线条表示合成音频,WaveNetEQ 将在每一个时间步长预测音频是否要在垂直灰色线条处进行裁切
音频片段:WebRTC 默认 的 PLC 系统 NetEQ 与我们的模型 WaveNetEQ 之间的比较。音频片段来自 LibriTTS,在 60 或 120 毫秒的区块中, 10% 的音频被丢弃,然后由 PLC 系统填充。
LibriTTS
https://research.google/tools/datasets/libri-tts/
确保稳健性
PLC 期间的一个重要因素是网络适应各种输入信号的能力,这些信号包括不同的说话者或背景噪声的变化。为确保模型在众多用户中的稳健性,我们在包含 48 种不同语言的 100 多位说话者的语音数据集上对 WaveNetEQ 进行了训练,从而使模型可以学习一般的人类语音特性,而非特定语言属性。为确保 WaveNetEQ 能够处理嘈杂的环境(例如在火车站或自助餐厅接听电话),我们会通过将数据与各种背景噪声混合来增强数据。
尽管我们的模型学习了如何合理地将语音延续下去,但只能在短时间内应用:模型可以完成一个音节,但不能预测单词 本身。相反,对于更长的丢包,我们的模型会慢慢消声。120 毫秒之后,模型不会再生成声音。为了进一步确保该模型不会生成错误的音节,我们使用了 Google Cloud 语音转文本 API 对 WaveNetEQ 和 NetEQ 的样本进行评估,结果发现两者的单词错误率(即转录口述文本时出现的错误数量)没有显着差异。
Google Cloud 语音转文本 API
https://cloud.google.com/speech-to-text
我们一直在 Duo 上进行着 WaveNetEQ 的相关试验,现已证明该功能对通话质量和用户体验有着积极的影响。WaveNetEQ 已经可以在 Pixel 4 手机的所有 Duo 通话中使用,并将陆续推广到其他型号的设备。
Pixel 4 手机的所有 Duo 通话中使用
https://www.blog.google/products/pixel/more-helpful-pixel-features/
致谢
核心团队成员包括来自 Google 的 Alessio Bazzica、Niklas Blum、Lennart Kolmodin、Henrik Lundin、Alex Narest、Olga Sharonova 和来自 DeepMind 的 Tom Walters。我们还要感谢 Martin Bruse (Google)、Norman Casagrande、Ray Smith、Chenjie Gu 和 Erich Elsen (DeepMind) 作出的贡献。
更多 AI 相关阅读: