分享

Hum to Search 背后的机器学习

 雨夜的博客 2021-10-07

视频介绍:Hum to Search 背后的机器学习

萦绕 在您脑海中的旋律,通常被称为“耳虫”,是一种众所周知且有时令人恼火的现象——一旦耳虫出现,就很难摆脱它。研究发现,与原始歌曲互动,无论是听还是唱,都会将耳虫赶走。但是如果你不太记得这首歌的名字,只能哼着旋律怎么办?

将哼唱的旋律与其原始的复调录音室录音相匹配的现有方法面临着几个挑战。通过歌词、背景人声和乐器,音乐或录音室录音的音频可能与哼唱的曲调截然不同。由于错误或设计,当有人哼唱他们对歌曲的诠释时,通常音高、调、节奏或节奏可能会略有不同甚至显着不同。这就是为什么这么多现有的通过哼唱进行查询的方法将哼唱的曲调与歌曲的预先存在的仅旋律或哼唱版本的数据库相匹配,而不是直接识别歌曲。但是,这种方法通常依赖于需要手动更新的有限数据库。

Hum to Search 于 10 月推出,是 Google 搜索中一个全新的完全机器学习的系统,它允许人们仅使用哼唱的歌曲来查找歌曲。与现有方法相比,这种方法从歌曲的频谱图生成旋律的嵌入,而无需生成中间表示。这使模型能够将哼唱的旋律直接与原始(和弦)录音相匹配,而无需每个音轨的哼唱或 MIDI 版本或其他复杂的手工设计逻辑来提取旋律。这种方法极大地简化了 Hum to Search 的数据库,使其能够通过嵌入来自世界各地的原始录音(甚至是最新版本)不断刷新。

背景

许多现有的音乐识别系统在处理音频样本之前将其转换为频谱图,以便找到良好的匹配。然而,在识别哼唱旋律的一个挑战是,哼唱曲调通常包含信息相对较少,通过如示出的这个示例哼唱的啊朋友再见。哼唱版本与相应录音室录音中的相同片段之间的差异可以使用频谱图来可视化,如下所示:

file

给定左侧的图像,模型需要从超过 5000 万张外观相似的图像(对应于其他歌曲的录音室录音片段)的集合中定位与右侧图像对应的音频。为了实现这一点,模型必须学会专注于主导旋律,而忽略背景人声、乐器和声音音色,以及来自背景噪音或房间混响的差异。为了通过肉眼找到可能用于匹配这两个频谱图的主导旋律,一个人可能会在上图底部附近的线条中寻找相似之处。

之前为发现音乐所做的努力,特别是在识别在咖啡馆或俱乐部等环境中播放的录制音乐的背景下,展示了如何将机器学习应用于这个问题。Now Playing于 2017 年发布到 Pixel 手机,它使用设备上的深度神经网络来识别歌曲,而无需连接服务器,而Sound Search进一步开发了这项技术,以提供基于服务器的识别服务,以实现更快、更准确的搜索超过 1 亿首歌曲。下一个挑战是利用从这些版本中学到的知识来识别来自类似大型歌曲库的哼唱或演唱的音乐。

机器学习设置

开发 Hum to Search 的第一步是修改“正在播放”和“声音搜索”中使用的音乐识别模型,以处理哼唱的录音。原则上,许多这样的检索系统(例如,图像识别)以类似的方式工作。神经网络使用成对的输入(这里是成对的带有录制音频的哼唱或演唱音频)进行训练,为每个输入生成嵌入,稍后将用于匹配哼唱的旋律。

file

为了实现哼唱识别,网络应该生成嵌入,使包含相同旋律的音频对彼此接近,即使它们具有不同的乐器伴奏和歌声。包含不同旋律的成对音频应该相距很远。在训练中,网络会提供这样的音频对,直到它学会使用此属性生成嵌入。

然后,经过训练的模型可以生成类似于歌曲参考录音的嵌入的曲调嵌入。找到正确的歌曲只需从流行音乐的音频计算出的参考录音数据库中搜索类似的嵌入即可。

训练数据

因为模型的训练需要歌曲对(录制和演唱),所以第一个挑战是获得足够的训练数据。我们的初始数据集主要由唱歌的音乐片段组成(其中很少包含哼唱)。为了使模型更加健壮,我们在训练期间增强了音频,例如通过随机改变唱歌输入的音高或节奏。由此产生的模型对于唱歌的人来说效果很好,但对于哼唱或吹口哨的人来说却不是。

为了提高模型在哼唱旋律上的表现,我们使用SPICE从现有音频数据集中生成了模拟“哼唱”旋律的额外训练数据,SPICE是我们更广泛的团队开发的音高提取模型,作为FreddieMeter项目的一部分。SPICE 从给定的音频中提取音高值,然后我们使用它来生成由离散音频音调组成的旋律。这个系统的第一个版本将这个原始剪辑转换成这些音调。

file

我们后来通过用神经网络替换简单的音调发生器来改进这种方法,该神经网络生成类似于实际哼唱或吹口哨曲调的音频。例如,网络从上述唱歌的片段中生成了这个哼唱示例或吹口哨示例。

作为最后一步,我们通过混合和匹配音频样本来比较训练数据。例如,如果我们有来自两个不同歌手的相似剪辑,我们会将这两个剪辑与我们的初步模型对齐,因此能够向模型显示代表相同旋律的附加音频剪辑对。

机器学习改进

在训练 Hum to Search 模型时,我们从三元组损失函数开始。这种损失已被证明在各种分类任务(如图像和录制的音乐)中表现良好. 给定一对对应于相同旋律的音频(嵌入空间中的点 R 和 P,如下所示),triplet loss 将忽略源自不同旋律的训练数据的某些部分。这有助于机器改进学习行为,无论是当它发现一个太“容易”的不同旋律时,因为它已经远离 R 和 P(见点 E),或者因为它太难了,考虑到模型的当前在学习状态下,音频最终与 R 太接近了——尽管根据我们的数据,它代表了不同的旋律(见 H 点)。

file

我们发现,我们可以通过采取这些额外的训练数据(点H和E)考虑提高模型的精确度,即通过在一个批次的例子制订的模式的信心一般概念:如何确保是模型,所有它看到的数据可以正确分类,还是看到不符合其当前理解的示例?基于这种置信度概念,我们添加了一个损失,使嵌入空间所有区域的模型置信度达到 100%,从而提高了我们模型的精度和召回率。

上述变化,尤其是我们对训练数据的变化、增强和叠加,使部署在 Google 搜索中的神经网络模型能够识别唱歌或哼唱的旋律。当前系统在包含超过 50 万首歌曲的歌曲数据库上达到了很高的准确性,我们正在不断更新这些歌曲。这首歌的语料库仍有成长的空间,以包含更多世界上的许多旋律。

file

在 Google 应用中哼哼搜索

要试用该功能,您可以打开最新版本的 Google 应用,点按麦克风图标并说“这首歌是什么?” 或单击“搜索歌曲”按钮,之后您可以哼唱、唱歌或吹口哨!我们希望 Hum to Search 可以帮助您解决这个问题,或者可能只是帮助您查找和播放歌曲而无需输入歌曲名称。


更新说明:优先更新微信公众号“雨夜的博客”,后更新博客,之后才会陆续分发到各个平台,如果先提前了解更多,请关注微信公众号“雨夜的博客”。

博客来源:雨夜的博客

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多