"Как Яндекс распознаёт музыку с микрофона"....

60
1

Upload: yandex

Post on 05-Dec-2014

2.648 views

Category:

Technology


7 download

DESCRIPTION

Музыкальный поиск Яндекса помогает находить альбомы, отдельные треки или исполнителей, в том числе по цитате из песни. Всё это — текстовые разновидности поиска. А если пользователь хочет узнать, какая музыка играет в данный момент, запросом становится само содержимое аудиофайла, непосредственно звуки музыки. Именно так устроено, например, «Распознавание» в мобильном приложении Яндекс.Музыка. В докладе мы обсудим особенности разных подходов к решению этой задачи и посмотрим, какие характеристики можно извлекать из аудиосигнала. И, конечно, поговорим о реализации поиска по музыкальному фрагменту в Яндексе, о возникающих сложностях и способах их решения.

TRANSCRIPT

Page 1: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

1

Page 2: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

2

Распознавание музыки по фрагменту

Евгений Крофто

Page 3: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

3

Введение. Актуальность

Виды музыкальных запросов

Page 4: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

4

Виды музыкальных запросов !  Исполнительские

Page 5: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

5

Виды музыкальных запросов !  Исполнительские !  Альбомные

Page 6: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

6

Виды музыкальных запросов !  Исполнительские !  Альбомные !  Трековые –  По названию трека

Page 7: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

7

Виды музыкальных запросов !  Исполнительские !  Альбомные !  Трековые –  По названию трека –  По цитате из слов песни

Page 8: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

8

!  Все это текстовые запросы –  Что делать, если запрос нельзя выразить в виде

текста?

Page 9: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

9

Постановка задачи

Page 10: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

10

Формат запроса !  Наш запрос – это фрагмент звукового сигнала, записанный с помощью микрофона

Page 11: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

11

Ограничения !  Наш запрос – это фрагмент звукового сигнала,

записанный с помощью микрофона –  Высокий уровень искажений –  Минимальная продолжительность запроса

Page 12: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

12

Требования !  Наш запрос – это фрагмент звукового сигнала, записанный с помощью микрофона –  Высокий уровень искажений –  Минимальная продолжительность запроса

!  Большой размер базы треков !  Возможность масштабирования !  Ответ за приемлемое время

Page 13: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

13

Особенность Поиск по примеру (Query by exact example) !  Что требуется найти: –  Точное совпадение с записанным фрагментом

!  Что не требуется находить: –  Похожие треки –  Cover-версии –  Другие исполнения

Page 14: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

14

Этапы решения

Page 15: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

15

Этапы решения

!  Построение сигнатуры (фингерпринта)

!  Способ сравнения сигнатур

!  Ускорение поиска

!  Отсечение ложных срабатываний

Page 16: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

16

Этапы решения

Построение сигнатуры

Page 17: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

17

Предобработка сигнала

!  Объединение каналов

! Ресэмплирование сигнала в частоту 8-11KHz

Page 18: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

18

Разбиение на фреймы Сигнал разбивается на фреймы

1 2

3Фрейм

Частота дискретизации 8KHz 1.  Hop size 2.  Overlap size 3.  Frame size

Page 19: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

19

Построение спектрограммы К каждому фрейму применяется оконная функция (Hanning window) и вычисляется преобразование Фурье

Время

Част

ота

Page 20: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

20

Извлечение признаков !  Spectral Centroid – центр масс спектра

𝑆𝐶↓𝑖,𝑏 = ∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒   𝑢|𝑓↓𝑖 (𝑢)|↑2  /∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒   |𝑓↓𝑖 (𝑢)|↑2    !  Spectral Bandwidth – разброс относительно центра масс

𝑆𝐵↓𝑖,𝑏 = ∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒   (𝑢  − 𝑆𝐶↓𝑖,𝑏↑ )↑2 |𝑓↓𝑖 (𝑢)|↑2  /∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒   |𝑓↓𝑖 (𝑢)|↑2   

!  Spectral Flatness Measure – характеризует «гладкость» спектра. Помогает отличать сигнал похожий на шум от сигналов с выраженной тональностью

𝑆𝐹𝑀↓𝑖,𝑏 = [∏𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒  |𝑓↓𝑖 (𝑢)|↑2  ]↑1/𝑢↓𝑏 − 𝑙↓𝑏 +1  /1/𝑢↓𝑏 − 𝑙↓𝑏 +1 ∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒   |𝑓↓𝑖 (𝑢)|↑2   

Page 21: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

21

Извлечение признаков !  Shannon Entropy

𝑆𝐸↓𝑖,𝑏 =∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒|𝑓↓𝑖 (𝑢)|  𝑙𝑜𝑔↓2 |𝑓↓𝑖 (𝑢)|  ! Renyi Entropy

𝑅𝐸↓𝑖,𝑏 = 1/1−𝑟 𝑙𝑜𝑔(∑𝑢= 𝑙↓𝑏 ↑𝑢↓𝑏 ▒|𝑓↓𝑖 (𝑢)|↑𝑟  ) Энтропия (в теории информации) – мера неопределенности какого-либо опыта, который может иметь разные исходы, а значит, и количество информации.

Page 22: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

22

Извлечение признаков Mel-frequency Cepstral Coefficient (MFCC)

!  Частотная шкала переводится в Mel-масштаб

!  Берется логарифм мощности

!  Вычисляется дискретное косинусное преобразование

Изначально использовались в качестве признаков в распознавании речи

Page 23: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

23

Извлечение признаков

!  Локальные максимумы в спектрограмме

! Вейвлет-преобразование

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

Page 24: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

24

Сокращение размерности

!  Gaussian Mixture Model (GMM)

!  Hidden Markov Model (HMM) – статистическая модель, имитирующая работу процесса, похожего на Марковский процесс с неизвестными параметрами, и задачей ставится разгадывание неизвестных параметров на основе наблюдаемых.

! MinHash – техника для быстрой оценки близости двух множеств.

Page 25: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

25

Этапы решения

Сравнение сигнатур

Page 26: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

26

Сравнение сигнатур

!  Поиск ближайшего

–  Расстояние Хэмминга при побитовом сравнении –  Евклидово расстояние –  Манхэттенское расстояние

!  Максимальное правдоподобие

Page 27: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

27

Этапы решения

Ускорение поиска

Page 28: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

28

Ускорение поиска

!  Инвертированный индекс

!  Отбрасывание заведомо нерелевантных кандидатов

!  Иерархический поиск

Page 29: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

29

Этапы решения

Отсечение ложных срабатываний

Page 30: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

30

Отсечение ложных срабатываний Предварительные результаты поиска

TrackID 2534 Offset 829 Score 103

TrackID 14371 Offset 10917

Score 39

TrackID 8591 Offset 14439

Score 37

?

Page 31: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

31

Отсечение ложных срабатываний Предварительные результаты поиска

TrackID 2534 Offset 829 Score 103

TrackID 14371 Offset 10917

Score 39

TrackID 8591 Offset 14439

Score 37

?

Page 32: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

32

Отсечение ложных срабатываний

False acceptance rate 𝐹𝐴𝑅= 𝐶𝑜𝑢𝑛𝑡↓01 /𝐶𝑜𝑢𝑛𝑡↓00 

+ 𝐶𝑜𝑢𝑛𝑡↓01   False rejection rate

𝐹𝑅𝑅= 𝐶𝑜𝑢𝑛𝑡↓10 /𝐶𝑜𝑢𝑛𝑡↓10 + 𝐶𝑜𝑢𝑛𝑡↓11  

Да Нет

Да

Нет

Ответ поиска

Есть

ли

реле

вант

ный

отве

т?

Page 33: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

33

Отсечение ложных срабатываний !  Нужно найти баланс

!  Подбор порога для отсечения

Запросы (отсортированы по максимальной близости)

Степ

ень

близ

ости

Множество запросов с релевантным ответом

Множество запросов без релевантного ответа

Page 34: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

34

Существующие подходы

Page 35: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

35

J. Haitsma, T. Kalker !  В качестве признака – разность энергий

𝐹(𝑛,𝑚)={█■1,    𝐸(𝑛,𝑚)−𝐸(𝑛,𝑚+1)−(𝐸(𝑛−1,𝑚)−𝐸(𝑛−1,𝑚+1))>00,    𝐸(𝑛,𝑚)−𝐸(𝑛,𝑚+1)−(𝐸(𝑛−1,𝑚)−𝐸(𝑛−1,𝑚+1))≤0   !  Сравнение сигнатур по расстоянию Хэмминга

J. Haitsma, T. Kalker (2002). A Highly Robust Audio Fingerprinting System.

Page 36: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

36

J. Haitsma, T. Kalker

Page 37: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

37

A. Wang !  Предложил искать локальные максимумы в спектрограмме

!  Важно только «положение» максимума, а не амплитуда

!  Для повышения уникальности пики объединяются в пары

!  Сравнение: ищется смещение, максимизирующее число совпавших пар пиков

A. Wang (2003). An Industrial-Strength Audio Search Algorithm.

Page 38: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

38

Наш выбор

Page 39: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

39

Наш выбор

!  Проведен первичный анализ статей

!  Интуитивно подход Wang лучше

!  Наличие доступного прототипа (Dan Ellis)

!  Наличие параметров, возможность подстроить алгоритм

Page 40: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

40

Наш выбор: реализация

!  Этапы реализации подхода:

–  Прототип переписан на с++ –  Реализована схема построения индекса –  Подбор параметров для обеспечения необходимого уровня распознавания –  Оптимизация поиска –  Двухуровневый поиск – обеспечение масштабируемости –  Анализ ложных срабатываний

Page 41: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

41

Спектрограммы

Сигнал на входе mono 8000Hz Параметры построения спектрограммы: !  Размер окна 512 samples !  Перекрытие 50%

Записанный фрагмент

Искомый фрагмент оригинального трека

Время Ча

стот

а

Амп

литу

да

Част

ота

Амп

литу

да

Page 42: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

42

Инициализация порога

!  Берем максимум энергии в первых n фреймах, по каждой частоте !  Каждый максимум размываем по Гауссу !  Полученные значения и есть пороги (в каждой частоте свой)

50 100 150 200 2500

0.5

1

1.5

2

2.5

3

3.5

4

Original signalPositive local maximaFinal output

(J.-S. Roger Jang)

Page 43: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

43

Отбор пиков

!  Применяем пороговое «лезвие» к фрейму !  Берем все, что оказалось выше порога !  Ищем локальные максимумы

Частота

Амп

литу

да

Page 44: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

44

Корректирование порогов

!  Значения энергии отобранных пиков используются для обновления порогов !  Снова сглаживаем по Гауссу !  При переходе от фрейма к фрейму порог уменьшается («опускающееся лезвие») Время

Амп

литу

да

Page 45: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

45

Извлеченные пики

Наборы пиков в запросе (вверху) и в фрагменте оригинального трека (внизу)

Записанный фрагмент

Искомый фрагмент оригинального трека

Время Ча

стот

а

Амп

литу

да

Част

ота

Амп

литу

да

Page 46: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

46

Объединение пиков в пары Объединяем пики в пары Плюсы: !  Увеличиваем уникальность ключа в индексе !  Уменьшаем объем вычислений Минусы: ! Воспроизводимость пары ниже чем у пиков

Время Ча

стот

а

Записанный фрагмент

Искомый фрагмент оригинального трека

Амп

литу

да

Част

ота

Амп

литу

да

Page 47: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

47

Сравнение

Считаем гистограмму число совпадений для разных смещений

Сдвиг по времени Числ

о со

впад

ений

Записанный фрагмент

Искомый фрагмент оригинального трека

Время Ча

стот

а

Амп

литу

да

Част

ота

Амп

литу

да

Page 48: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

48

Подбор параметров

!  Увеличение плотности пиков

!  Какими параметрами можно регулировать отбор пиков

–  Число пиков на фрейм –  Число пар для каждого пика –  Скорость снижения порога !  Цена высокой плотности пиков – увеличение объема вычислений

Page 49: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

49

Общая схема

Легкая  сигнатура  

Поиск  в  легком  индексе  

Топ  треков  Результат   Поиск  в  тяжелом  индексе  

Тяжелая  сигнатура  

Page 50: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

50

Структура «легкого» индекса

0 1 2 3 4 5 …

13 7 43 121 133 354 74 …

124 11 101 14437 33 74 142 …

TrackID

Offset

LandmarkHash

Page 51: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

51

Структура «тяжелого» индекса

0 1 2 3 4 5 6 …

11234 5 34 101 153 54211 40 …

12432 10 131 17531 44 82 107 …

LandmarkHash

Offset

TrackID

Page 52: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

52

Двухуровневый поиск

Мета  поиск  

Базовый  поиск  Базовый  поиск  Базовый  поиск  

Мобильное  устройство  

Запрос

Результат

Page 53: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

53

Фильтрация ложных срабатываний !  Анализ значений «релевантности» (близость фрагмента трека и запроса)

!  Ищем резкий перепад значений

!  Если не находим, считаем, что релевантного трека у нас в базе нет.

Треки (отсортированные по релевантности)

Реле

вант

ност

ь

Page 54: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

54

Планы на будущее

Page 55: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

55

Что дальше

Это только начало пути Над чем будем работать: !  Добавить инкрементальный поиск

!  Нормализация итогового score

!  Попробовать Mel-масштаб для шкалы частот

!  Попробовать сравнивать спектрограммы как изображения

!  Машинное обучение для построения сигнатур

Page 56: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

56

Y. Ke, D. Hoiem, R. Sukthankar !  Предложили рассматривать спектрограммы как изображения

!  Применение методов «компьютерного зрения»

!  Признаки Viola/Jones

!  Отбор признаков (сокращение числа признаков) с помощью AdaBoost

Y. Ke, D. Hoiem, R. Sukthankar (2005). Computer Vision for Music Identification.

Page 57: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

57

S. Baluja, M. Covell !  Спектрограмма разбивается на фрагменты (Spectral Images)

!  К каждому фрагменту применяется вейвлет-преобразование

!  Отбирается топ самых «сильных» вейвлетов и берется их знак

!  Полученный разреженный вектор «сжимается» с помощью MinHash

!  Для поиска кандидатов используется локально чувствительное хэширование (LSH)

!  Для отобранных кандидатов считается расстояние Хэмминга

S. Baluja, M. Covell (2006). Content Fingerprinting Using Wavelets.

Page 58: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

58

Ссылки на статьи

!  J. Haitsma, T. Kalker (2002). A Highly Robust Audio Fingerprinting System.

!  A. Wang (2003). An Industrial-Strength Audio Search Algorithm.

!  Y. Ke, D. Hoiem, R. Sukthankar (2005). Computer Vision for Music Identification.

!  S. Baluja, M. Covell (2006). Content Fingerprinting Using Wavelets.

!  D. Ellis (2009). Robust Landmark-Based Audio Fingerprinting.

Page 59: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

59

Спасибо за внимание

Page 60: "Как Яндекс распознаёт музыку с микрофона". Евгений Крофто, Яндекс

60

Евгений Крофто Разработчик

[email protected]

Магистр

© ООО «Яндекс», 2013