编译:LiveVideoStack
在线语音通话已经成为人们日常生活的一部分,但数据包常以错误的顺序或错误的时间到达另一端,有时个别数据包甚至可能会完全丢失。这不仅导致通话质量降低,而且是音频和视频传输都普遍存在的问题。
Google Duo (移动设备视频通话服务)发现,其99%的呼叫需要处理数据包丢失、抖动过多或网络延迟等问题。在这些通话中,有20%因为网络问题损失了3%以上的音频持续时间,而10%的通话则损失了至少8%的音频。
导致数据包丢失的网络问题的简化图,接收方需要对其进行抵消,以实现可靠的实时通信。
为了确保可靠的实时通信,有必要处理丢失的数据包,这个过程被称为PLC。接收方的PLC负责创建音频(或视频),以填补由丢包、过度抖动或临时网络故障造成的空白(所有这三种情况都会导致数据丢失)。
为了解决这些音频问题,Google Duo开始使用全新的PLC系统WaveNetEQ。
WaveNetEQ是基于DeepMind的WaveRNN技术生成的模型,使用大量语音数据集进行训练,以更为逼真地延续短语音段,从而使其能够完全合成丢失语音的原始波形。
由于Duo采用端到端的加密,因此所有的加工处理都需要在移动设备上完成。Google称WaveNetEQ模型速度足够快,可以在电话上运行,同时仍提供最先进的音频质量和比其他当前正在使用的系统更自然的探测PLC。
A New PLC System for Duo
像许多其他基于Web的通信系统一样,Duo也基于WebRTC开源项目。为了抵消数据包丢失的影响,WebRTC的NetEQ组件使用信号处理方法分析语音并产生平滑的连续性。
这对于较小的数据包丢失(20ms或更短)非常有效,但当丢失的数据包数量过多导致出现60ms或更长的时间间隔时,带来的效果并不尽如人意。在后一种情况下,语音会变得机械化且不断重复,这对于许多使用线上语音通话的用户来说都是很常见的。
为了更好地解决数据包丢失的问题,Google Duo用WaveRNN的修改版本替换了NetEQ PLC组件。WaveRNN是用于语音合成的递归神经网络模型,它由两部分组成:自回归网络和调节网络。
自回归网络负责信号的连续性,它通过使每个生成的样本取决于网络的先前输出来提供语音的短期和中期结构。调节网络会影响自回归网络,并产生与移动速度较慢的输入功能一致的音频。
但是,WaveRNN与其前身WaveNet一样,是在考虑了文本到语音(TTS)应用程序的情况下创建的。作为TTS模型,WaveRNN会提供有关其应说和如何说的信息。
调节网络直接接收该信息作为构成词语和附加韵律特征的音素形式的输入(即所有诸如音调或音高之类的非文本信息)。从某种程度上来说,调节网络能够“窥见未来”,后续将自回归网络转向正确的波形并进行匹配,而这些在PLC系统和实时通信中则无法被提供。
对于功能正常的PLC系统,需要从当前语音(即过去)中提取上下文信息,同时生成逼真的声音。
Google Duo的WaveNetEQ解决方案可以在使用自回归网络保证音频连续性的同时,使用调节网络对长期特征(例如语音特性)进行建模。过去音频信号的频谱图被用作调节网络的输入,该调节网络提取有关韵律和文本内容的有限信息。这些被压缩的信息被反馈到自回归网络,该网络将其与近期的音频相结合,以预测波形域中的下一个样本。
这与WaveNetEQ模型训练过程中遵循的过程略有不同,在该过程中,自回归网络接收训练数据中存在的实际样本作为下一步的输入,而不是使用生成的最后一个样本。
这个被称为teacher forcing的过程可确保即使在训练的早期阶段(其预测仍为低质量),该模型仍可学习到有价值的信息。一旦对模型进行了充分的训练并将其用于音频或视频通话后,teacher forcing只会被用于 “预热”第一个样本模型,然后将其自身的输出作为下一步的输入传递回去。
WaveNetEQ结构。在推理过程中,Google通过teacher forcing用最新的音频来“预热”自回归网络。之后,模型将提供自己的输出作为下一步的输入。来自较长音频部分的MEL频谱图则被用作调节网络的输入。
该模型将应用于Duo抖动缓冲区中的音频数据。丢包事件发生后,如果真实音频仍然存在,Duo将无缝合并合成的、真实的音频流。为了找到两个信号之间的最佳对准,该模型的输出要比实际所需要的输出多一些,并从一个到另一个交叉淡入淡出。这样可使过渡平滑,并避免明显的噪音。
在60毫秒的移动范围内模拟音频上的PLC事件。蓝线代表实际的音频信号,包括PLC事件的过去和将来。在每个时间步长,橙色线代表合成音频WaveNetEQ将预测音频是否在灰色直线处被切断。
60 ms Packet Loss
NetEQ来自LiveVideoStack_00:00__00:06_
WaveNetEQ来自LiveVideoStack_00:00__00:06_
音频片段:音频片段来自LibriTTS,10%的音频被分成60 ms,然后由WebRTC默认的PLC系统NetEQ与Google的PLC系统WaveNetEQ填充。(由于微信推送最多只能上传3个音频文件,这里没能列出原文中的所有音频,包括音频被拆分成120 ms后再填充的效果)
Ensuring Robustness
影响PLC的一个重要因素是网络适应各种输入信号的能力,包括不同的扬声器或背景噪声的变化。
为了确保模型在众多用户中的鲁棒性,Google对WaveNetEQ进行了语音数据集的训练,该语音数据集中包含100多位使用48种不同语言的演讲者。
这使模型可以学习普适的人类语音特征,而不是某些特定的语言属性。为了确保WaveNetEQ能够处理嘈杂的环境,例如在火车站或自助餐厅接听电话这样的情形,Google通过将数据与各种背景噪声混合来增强数据。
尽管Google的模型学习了如何逼真地延续语音,但这仅在短期内有效——它可以完成一个音节,但不能预测单词本身。相反,对于更长的数据包的丢失,Google会逐渐淡出直到该模型在120毫秒后保持静音。
为了进一步确保该模型不会产生错误的音节,Google使用了Google Cloud语音转文本API对WaveNetEQ和NetEQ的样本进行了评估,并发现单词错误率没有显著差异(即抄录口头语音时产生的错误文本数量)。
Google一直在Duo上试验WaveNetEQ,结果显示WaveNetEQ对通话质量和用户体验都有积极的影响。WaveNetEQ已经可以在Pixel 4手机的所有Duo通话中使用,现在正被推广到其他型号及设备中。