[Перевод] Машинное обучение в Hum to Search от Google

ffumozu1bu0hzhskfbqdz5zsvyw.gif


Навязчивые мелодии (англ. earworms) — хорошо известное и порой раздражающее явление. Как только одна из таких застревает в голове, от нее бывает довольно трудно избавиться. Исследования показали, что так называемое взаимодействие с оригинальной композицией, будь то ее прослушивание или пропевание, помогает прогнать навязчивую мелодию. Но что, если вы не можете вспомнить название песни, а можете только напеть мотив?
При использовании существующих методов сравнения мелодии, которую мы пытаемся воспроизвести, с ее исходной полифонической студийной записью возникает ряд сложностей. Звук концертной или студийной записи с текстом, бэк-вокалом и инструментами может сильно отличаться от того, что можем напеть мы. Кроме того, по ошибке или по задумке в нашей версии могут быть совсем не те высота, тональность, темп или ритм песни. Вот почему так много текущих подходов, применяемых к системе query by humming, сопоставляют напетую мелодию с базой данных уже существующих мелодий или других напевок этой песни вместо того, чтобы идентифицировать ее напрямую. Однако этот тип подходов часто основан на ограниченной базе данных, требующей обновления вручную.

Запущенная в октябре функция Hum to Search представляет собой новую полностью машинно-обучаемую систему Google Search, которая позволяет человеку найти песню, если он напоет или «промычит» ее. В отличие от существующих методов, этот подход создает эмбеддинг из спектрограммы песни, минуя создание промежуточного представления. Это позволяет модели сравнивать нашу мелодию непосредственно с исходной (полифонической) записью без необходимости иметь другую напевку или MIDI-версию каждого трека. Также не требуется использовать сложную созданную вручную логику для извлечения мелодии. Такой подход значительно упрощает базу данных для Hum to Search, позволяя постоянно добавлять в нее эмбеддинги оригинальных треков со всего мира, даже последние релизы.

Как это работает


Многие существующие системы распознавания музыки перед обработкой аудиосэмпла преобразуют его в спектрограмму, чтобы найти более правильное совпадение. Однако есть одна проблема в распознавании напетой мелодии — она зачастую содержит относительно мало информации, как в этом примере песни «Bella Ciao». Разницу между напетой версией и тем же сегментом из соответствующей студийной записи можно визуализировать с помощью спектрограмм, показанных ниже:

n7qz9itya15cvb5m9nselwoiqr8.png


Визуализация напетого отрывка и его студийной записи

Учитывая изображение слева, модель должна найти аудио, соответствующее правому изображению, в коллекции из более чем 50 миллионов похожих изображений (соответствующих сегментам студийных записей других песен). Для этого модель должна научиться фокусироваться на доминирующей мелодии и игнорировать бэк-вокал, инструменты и тембр голоса, а также различия, возникающие из-за фонового шума или реверберации. Чтобы на глаз определить доминирующую мелодию, которая могла бы использоваться для сопоставления этих двух спектрограмм, вы можете поискать сходство в линиях в нижней части приведенных изображений.

Предшествующие попытки реализовать поиск музыки, в частности, в контексте распознавания музыки, звучащей в кафе или клубах, продемонстрировали, как к этой проблеме может быть применено машинное обучение. Now Playing, выпущенный в 2017 году для телефонов Pixel, использует встроенную глубокую нейросеть для распознавания песен без необходимости подключения к серверу, а Sound Search, позже разработавший эту технологию, использует ее для распознавания на базе сервера для более быстрого и точного поиска более 100 миллионов песен. Следующей задачей стало применение того, что было изучено в этих релизах, для распознавания музыки из аналогично большой библиотеки, но уже по напетым отрывкам.

Настраиваем машинное обучение


Первым шагом в развитии Hum to Search было изменение моделей распознавания музыки, используемых в Now Playing и Sound Search, для работы с записями напевок. В принципе, многие подобные поисковые системы (например, распознавание изображений) работают аналогичным образом. Для обучения нейронная сеть получает на вход пару (напевку и исходную запись) для создания эмбеддинга для каждого входа, которые позже будут использоваться для сопоставления с напетой мелодией.

d9nugogeuyyhvudcp_d43_ox4gk.jpeg


Настройка обучения нейронной сети

Чтобы обеспечить распознавание того, что мы напели, сеть должна создавать эмбеддинги, для которых пары аудио, содержащие одну и ту же мелодию, расположены близко друг к другу, даже если у них разный инструментальный аккомпанемент и певческие голоса. Пары аудио, содержащие разные мелодии, должны находиться далеко друг от друга. В процессе обучения сеть получает такие пары аудио до тех пор, пока не научится создавать эмбеддинги с этим свойством.

В конечном итоге обученная модель сможет генерировать для наших мелодий эмбеддинги, похожие на эмбеддинги эталонных записей песен. В этом случае поиск нужной песни — это всего лишь вопрос поиска в базе похожих эмбеддингов, рассчитанных на основе аудиозаписей популярной музыки.

Данные для обучения


Поскольку для обучения модели требовались пары песен (записанные и спетые), первой задачей было получить достаточно данных. Наш исходный набор данных состоял в основном из спетых фрагментов (очень немногие из них содержали просто напев мотива без слов). Чтобы сделать модель более надежной, во время обучения мы применили аугментацию к этим фрагментам, а именно, изменяли высоту тона или темп в случайном порядке. Получившаяся модель работала достаточно хорошо для примеров, где песню именно спели, а не промычали или просвистели.

Для улучшения работы модели на мелодиях без слов мы сгенерировали дополнительные тренировочные данные с искусственным мычанием из существующего набора аудиоданных с использованием SPICE, модели извлечения высоты тона, разработанной нашей расширенной командой в рамках проекта FreddieMeter. SPICE извлекает значения высоты из заданного звука, которые мы затем используем для генерации мелодии, состоящей из дискретных звуковых тонов. Самая первая версия этой системы трансформировала данный оригинальный отрывок вот в это.

dxid-vagzomgj74mzyawwtevxkg.jpeg


Генерация мычания из спетого аудиофрагмента

Позже мы усовершенствовали наш подход, заменив простой генератор тона на нейросеть, которая генерирует звук, напоминающий настоящий напев мотива без слов. Например, спетый выше фрагмент можно преобразовать в такое мычание или насвистывание.

На последнем шаге мы сравнили обучающие данные, смешав и сопоставив аудиофрагменты. Когда, например, нам встречались похожие фрагменты от двух разных исполнителей, мы выравнивали их с помощью наших предварительных моделей и, следовательно, предоставляли модели дополнительную пару аудиофрагментов той же мелодии.

Улучшение машинного обучения


Обучая модель Hum to Search, мы начали с функции triplet loss. Как было показано, она хорошо справляется с различными задачами классификации, такими как классификация изображений или записанной музыки. Если дана пара аудио, соответствующая одной и той же мелодии (точки R и P в пространстве вложения, показанном ниже), функции triplet loss будет игнорировать определенные части обучающих данных, полученных из другой мелодии. Это помогает улучшить поведение при обучении как в случае, если модель находит другую мелодию, которая слишком простая и уже далеко от R и P (см. точку E), так и в случае, когда она слишком сложна, учитывая текущий этап обучения модели, и оказывается слишком близкой к R –, но по нашим данным, она представляет собой другую мелодию (см. точку H).

nqvwr9odsfgzoe9ctgs3ozkh5b8.jpeg


Примеры аудиосегментов, визуализированных как точки в пространстве для эмбеддинга

Мы обнаружили, что можем повысить точность модели, приняв во внимание эти дополнительные обучающие данные (точки H и E), а именно сформулировав общее понятие уверенности модели на серии примеров: насколько уверена модель, что все данные, которые она видит, можно классифицировать правильно, или она видит примеры, которые не соответствуют ее нынешнему пониманию? Основываясь на этом понятии, мы добавили потерю, которая приближает уверенность модели к 100% во всех областях встраиваемого пространства, что привело к повышению точности и запоминаемости нашей модели.

Вышеупомянутые изменения, в частности вариация, аугментация и комбинация обучающих данных, позволили модели нейросети, используемой в поиске Google, распознавать спетые или напетые мелодии. Текущая система достигает высокого уровня точности в базе данных из более полумиллиона песен, которые мы постоянно обновляем. Этой коллекции песен еще есть куда расти, чтобы включить в него больше музыки со всего света.

Чтобы потестить эту фичу, откройте последнюю версию приложения Google, нажмите на иконку микрофона и скажите «What’s this song» или кликните на «Search a song». Теперь можете напеть или насвистеть мелодию! Надеемся, Hum to Search поможет избавиться от навязчивых мелодий или же просто найти и послушать какой-то трек, не вводя его название.

© Habrahabr.ru