谷歌为YouTube添加新功能:利用机器学习自动生成音效字幕
选自Google blog
作者:Sourish Chaudhuri
机器之心编译
音频(audio)对于我们对世界的感知的影响的巨大自然不言而喻。语音(speech)显然是人们最熟悉的通信方式之一,但环境声音(sound)也能传达很多重要的信息。我们可以本能地响应这些背景声音所创造的语境,比如被突然出现的喧闹而吓到、使用音乐作为一种叙述元素或者在情景喜剧中将笑声用作一种观众提示。
自 2009 年以来,YouTube 就开始为视频提供自动生成的字幕了,而这主要是专注于语音转录以使 YouTube 上托管的内容能触及到更多人。但是,没有对视频中背景声音的类似转录,视频中的很多信息和效果都无法单独使用语音转录获取。为了解决这个问题,我们宣布为 YouTube 视频中的自动字幕增加音效信息,从而让人们能更大程度地获取丰富的音频内容。
在这篇文章中,我们讨论了为这项工作所开发的后端系统——这是辅助功能(Accessibility)、声音理解(Sound Understanding)和 YouTube 团队合作的成果,他们使用机器学习(ML)实现了有史第一个 YouTube 自动音效字幕系统。
点击「字幕/CC」按钮查看该音效字幕工作时的效果(只有 YouTube 可实验此字幕效果):
https://www.youtube.com/watch?v=QGiK8DAZ9BA
这项应用中使用了一种被称为深度神经网络(DNN)的机器学习技术来解决这个特定的字幕任务挑战。尽管分析视频的时域音频信号来检测多种背景声音的过程类似于其它已知的分类问题(比如图像中的目标检测),但在产品应用中,该解决方案还面临着额外的难题。特别是以下方面:当给定任意一段音频时,我们需要模型要能够:1)检测出我们想要的声音,2)在时间上对该声音进行定位,3)有效地和可能有并行和独立的多个语音识别结果的字幕进行整合。
一个用于背景声音的 DNN 模型
在开发此模型时我们面临的首个挑战是要获得足够多适合该神经网络训练的标记数据。虽然有标记的背景声音信息很难获得,但我们能够使用弱标记数据生成足够大的数据集来进行训练。但在给定视频中的所有背景声音中,我们该用哪种声音来训练用于检测的 DNN 呢?
在这个最初发布的功能中,我们选择了「鼓掌」、「音乐」和「笑声」,这主要是基于我们对人类创造的字幕的分析,分析表明这些背景声音是人工添加最多的字幕。虽然在这三种声音之外,还有远远更多的声音类别能提供远远更丰富的相关信息,但字幕中的这些音效所传递的语义信息是相对清楚的,比如相比于「铃声」字幕——它会引发这样的问题「这是什么的铃声?铃铛、时钟还是手机?」
最初我们做了不少检测这些背景声音的工作,这些工作还包括开发可扩展未来工作的基础与分析框架,声音事件的探测,以及其与自动字幕的整合。当我们扩展算法以理解更广泛的声音词汇时,对基础开发的投资将使我们在未来更容易地把更多的声音类型 ( 比如 [铃声]、 [敲门声]、[吠叫声] ) 包含进来,从而带来更多获益。由此,我们将能在叙述中加入被检测的声音以为用户提供更多相关信息 ( 比如 [钢琴曲]、[粗哑的掌声] )。
字幕的密集检测
当视频传到 YouTube 上时,音效识别流程就会在该视频的音频流上运行。DNN 会查看音频短片段并预测该片段是否包含所需要的声音事件。因为多个音效可以共同出现,因此我们的模型可以在每个时间步骤(time step)对每段音效进行预测。然后该片段窗口(segment window)向右滑动(即稍后的时间点),再一次使用该模型进行预测,这样一步步向后直到结束。这样我们就会得到一个密集流(dense stream),即词表中的声音事件以每秒 100 帧的频率出现。
当然,该密集预测流(dense prediction stream)并不会直接展露给用户,因为不仅显示密集预测流会导致字幕的闪烁,同时也是因为许多音效在发生时具有某种程度的时间连续性。例如,「音乐」和「掌声」通常至少会存在几秒钟。为了结合这种直觉,我们使用了包含 ON 和 OFF 两个状态的改进维特比算法(Viterbi algorithm)将密集预测流变得平滑一些,其中每个音效的预测段对应于状态 ON。下图是从密集检测到包含了目标音效的最后音频段这一过程的说明。
左图:来自我们的用于视频中单个声音类别的随时间的出现情况的 DNN 的密集的概率序列。中图:基于修改过的 Viterbi 算法的二值化的片段。右图:基于持续时间的滤波器移除了持续时间比该类别的预期时间短的片段。
类似这样的以分类为基础的系统当然会存在一些误差,也需要为了产品的目标在假正类(false positives)和错失检测之间寻找平衡。比如,训练数据集中的弱标签常常会让模型混淆可能会一同出现的事件。比如,一个标记为「笑」的片段常常包含语音和笑声,在测试数据中,「笑」模型有时会很难区别它们。在我们的系统中,可以根据 ON 状态上的时间(比如,无法决定声音 X 是否被识别到,除非这个声音至少持续 Y 秒)做出进一步的限制,进而将系统性能推至精确度召回曲线上一个预期的点。
一旦对系统暂时的定位声效表现感到满意(基于线下评估标准),我们就会面临以下问题:如何将声效与语音解释结合起来,打造一个单独的声音字幕,如何(或何时)将声效信息传到给用户才能让它们变得最有用?
将音效信息添加到自动字幕
一旦系统能准确检测和分类视频中背景声音,我们就开始寻找将这一信息传达给观众的有效办法。与我们的用户体验(UX)研究团队合作,我们探索了不同设计选项并在一个定性测试可用性的研究中测试了这些选项。参与者的听力水平不同,对字幕的要求也不同。我们问了他们很多问题,包括是否提升了他们的整体体验,是否能够搞清楚视频中发生了什么并能从说明中提取出相关信息,借此了解这些变量的效果如何,比如:
分别为语音字幕和音效字幕使用屏幕的不同部分
当语音字母和音效字幕同时出现时,将它们交叉呈现
仅在句子结束时或者语音出现停顿的时候(即使停顿出现在语音过程中),显示音效字幕
如果观看时禁音,用户对字幕的感受如何
几乎所有的用户赞许了被添加的精确音效信息,对此我们并不吃惊。我们还特别关注了该声音检测系统的错误反馈(当确定了一个声音其实却没有声音的假正例或没能检测到一个音效)。这个结果让人吃惊:当音效信息错误时,在大约一半的情况下它没使用户的体验降低。基于参与者的反馈,原因可能如下:
听到音频的参与者能够忽略误差。
听不到音频的参与者将这个错误解读为了一个声音事件的存在,而且没有遗漏关键的语音信息。
总体来说,系统时不时犯错误影响不大,只要在大多数时候能够提供正确信息,便会赢得用户的肯定。
展望未来
我们工作是使 YouTube 视频自动匹配音效字幕。这个首次展示只是第一步,我们将继续努力为丰富的视频内容匹配自动字幕,以方便那些由于不同方式不同环境而需要字幕的人。我们已经开发了一个框架,使带有音效的自动字幕更丰富,但完全做好还要更加努力。我们希望这会在社区之中激发进一步的工作和讨论,比如,不仅使用自动技术提升字幕效果,也探讨使创建者生成的与社区贡献的字幕更丰富和更好,从而进一步提升用户的观看体验。