文 / Google James Lyon
2017 年,我们发布了具有闻曲知音功能的 Pixel 2,就是利用深度神经网络为移动设备带来低功耗、始终开启的音乐识别功能。
在开发 “闻曲知音” 时,我们的目标是打造一个小巧高效的音乐识别器,这需要数据库中的每个曲目有一个非常小的指纹,以支持音乐识别功能完全在设备上运行,而无需连接互联网。
事实证明,“闻曲知音” 不仅对设备上的音乐识别器有效,其准确性和效率也大大超出我们当时使用的服务器侧系统声音搜索,后者构建之时深度神经网络尚未得到广泛应用。
很自然地,我们就想能否将 “闻曲知音” 背后的技术用于服务器侧 “声音搜索” 中,让 Google 的音乐识别功能成为世界之最优。
最近,我们发布了新版本 “声音搜索”,其中就采用了 “闻曲知音” 中使用的部分技术。您可以在任意 Android 手机上通过 Google 搜索应用或 Google 智能助理来使用这一功能。
只要开启语音查询功能,当您附近有音乐正在播放时,系统就会弹出 “这首歌的歌名是什么?” 的提示,供您点击查询。或者,您也可以直接问:“Hey Google,这首歌的歌名是什么?” 使用最新版本的 “声音搜索”,即可获得比以往更快更准确的搜索结果!
“闻曲知音” 与 “声音搜索” 对比
“闻曲知音” 使音乐识别技术微型化,令其变得小而高效,足以在移动设备上连续运行而不会对电池产生明显影响。
为此,我们开发了一个全新的系统,使用卷积神经网络将几秒的音频转换成一个独特的 “指纹”。然后,系统会将指纹与设备上储存海量音乐的数据库进行比对,该数据库会定期更新以添加最新发布的曲目并删除过气曲目。
相比之下,服务器侧 “声音搜索” 系统则不同,其需要比对的曲目约为 “闻曲知音” 的 1000 倍之多。
由于音乐库的数量过于庞大,这对搜索的速度和准确性都是极大的挑战。在深入讨论这部分内容之前,我们先来了解一下 “闻曲知音” 的运作原理。
“闻曲知音” 的核心匹配流程
“闻曲知音” 通过将八秒音频片段的音乐特征投影到一系列低维嵌入式空间来生成音乐 “指纹”,这些低维嵌入式空间包含七个时长两秒的音频片段,片数之间的时间间隔为一秒,由此产生如下分段图:
然后,“闻曲知音” 会搜索设备内置的歌曲数据库,寻找相似的嵌入序列,该数据库也是通过使用同一神经网络处理流行歌曲而生成。“数据库搜索” 使用两阶段算法来识别匹配的歌曲,第一阶段使用快速但欠准确的算法搜索整个歌曲数据库,以找出可能的一些候选歌曲;第二阶段对每首候选歌曲进行详细分析以找出正确匹配的歌曲(如有)。
匹配,阶段 1:找出合适的候选歌曲:对于每次嵌入,“闻曲知音” 都会对设备内置数据库中的歌曲进行最邻近搜索以找出类似嵌入。数据库使用空间分割和向量量化混合法,以有效搜索数百万嵌入向量。由于音频缓冲区非常嘈杂,因此只能进行近似搜索,而且并非每次嵌入都能在数据库中找到正确歌曲的邻近匹配。但是,在整个音频片断中找到正确歌曲的几个邻近嵌入的机率非常高,因此,搜索范围会缩小到获得多次嵌入的一小组歌曲。
匹配,阶段 2:最终匹配:由于上述数据库搜索方法为近似搜索,“闻曲知音” 可能无法找到我们查询的某些嵌入附近的歌曲嵌入。因此,为获得准确的相似度分数,“闻曲知音” 会检索数据库中每首歌所有可能相关的嵌入,以填补 “缺口”。然后,结合音频缓冲区的嵌入序列和设备内置数据库歌曲中的另一个嵌入序列,“闻曲知音” 会两两评估其相似性分数并相加,以得到最终的匹配分数。
使用一系列嵌入而非单次嵌入对于 “闻曲知音” 匹配歌曲的准确性至关重要。指纹识别神经网络还不够准确,无法仅通过单次嵌入识别歌曲 — 每次嵌入都会生成大量误报结果。
但是,结合多次嵌入的结果,很容易就能消除误报,这是因为正确的歌曲能够匹配到每一次嵌入,而误报匹配仅接近输入音频的一两次嵌入。
扩展 “声音搜索” 服务器的 “闻曲知音” 功能
截止目前,我们已详细介绍了 “闻曲知音” 如何将歌曲与设备内置数据库中的歌曲相匹配。
从拥有成千上万首歌曲的 “闻曲知音” 到拥有数以亿计首歌曲的 “声音搜索”,最大的挑战在于,很多歌曲会有数千次产生误报结果。为了能够在不作其他改动的情况下补偿这一点,我们不得不提高识别阈值,这意味着如要得到确认的匹配结果,就需要识别更多音频。
然而,新版 “声音搜索” 服务器的目标是比 “闻曲知音” 匹配速度更快,而不是更慢,因此,我们不希望用户为一个结果等待 10 秒以上。
由于 “声音搜索” 是服务器侧系统,和 “闻曲知音” 一样,不受处理和存储数据制约条件的限制。因此,我们在指纹识别方面做了两大改动,两者均以牺牲服务器资源为代价提高准确性:
我们将所用神经网络的大小增加了四倍,并将每次嵌入从 96 维增加到 128 维,这就减少了神经网络将高维输入音频打包成低维嵌入所需的工作量。这对提高第二阶段的搜索质量至关重要,因为其十分依赖于原始神经网络输出的准确性。
我们将嵌入密度增加了一倍,事实证明,每 0.5 秒(而不是 1 秒)进行一次音频指纹识别并不会显著降低个别嵌入的质量,由于可用于匹配的嵌入数量增加一倍,质量反而有很大提升。
我们还决定根据歌曲的受欢迎程度对索引进行加权,实际上,我们降低了人气歌曲的匹配阈值,并且提高了不知名歌曲的匹配阈值。总而言之,这意味着我们几乎可以在数据库中无限制地添加更多(不知名)歌曲,而不会明显拖慢识别速度。
结论
对于 “闻曲知音”,我们原打算利用机器学习来创建一个音频指纹识别系统,该系统不仅要功能强大,而且设计要精简到足以完全在手机上运行。
但其实,我们已成功创建了一个出色的全方位音频指纹识别系统,并且将其设计思想很好地延续到了服务器侧 “声音搜索” 系统,尽管 “声音搜索” 面临的挑战与 “闻曲知音” 不尽相同。
当音乐声音很小或处于非常嘈杂的环境中时,我们尚无法做到每次都能匹配,这意味着我们仍有很大提升空间,但我们坚信,我们能够提升系统的识别速度。我们会继续以提供新一代音乐识别技术为目标,应对这些挑战。
如果下次您想知道播放的是什么音乐,不妨一试!您可以在主屏幕上创建一个快捷方式,如下所示:
致谢
我们对以下人员表示衷心感谢:Micha Riser、Mihajlo Velimirovic、Marvin Ritter、Ruiqi Guo、Sanjiv Kumar、Stephen Wu、Diego Melendo Casado、Katia Naliuka、Jason Sanders、Beat Gfeller、Julian Odell、Christian Frank、Dominik Roblek、Matt Sharifi 以及 Blaise Aguera y Arcas。
更多 AI 相关阅读:
· 通过 Google 照片库 API 打造新体验
· 构建 Google Dataset Search 和打造开放数据生态系统
· 针对资源匮乏语言的文字转语音系统:任重而道远