81
Архитектура и алгоритмы для индексации всей музыки ВКонтакте Алексей Акулович vk.com 161104#5

Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

  • Upload
    ontico

  • View
    479

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

Алексей Акуловичvk.com

161104#5

Page 2: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

50миллионов треков?

Сколько музыки в ВК?

Page 3: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

100миллионов треков?

Сколько музыки в ВК?

Page 4: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

200миллионов треков?

Сколько музыки в ВК?

Page 5: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

500миллионов треков?

Сколько музыки в ВК?

Page 6: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

400миллионов треков

Сколько музыки в ВК?

Page 7: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

400миллионов треков

4 ПБ файлов

Сколько музыки в ВК?

Page 8: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

400миллионов треков

4 ПБ файлов

Сколько музыки в ВК?

+150к (1.5 ТБ)

в день

Page 9: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Есть что послушать

Page 10: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Найти в поиске по названию из ID3 тегов

Что с этим можно делать?

Page 11: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Найти в поиске по названию из ID3 тегов

Дубли

Что с этим можно делать?

Page 12: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Найти в поиске по названию из ID3 тегов

Дубли

Несоответствие названий и содержимого

Что с этим можно делать?

Page 13: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Найти в поиске по названию из ID3 тегов

Дубли

Несоответствие названий и содержимого

И всё

Что с этим можно делать?

Page 14: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Фильтровать дубли в поиске

Что хочется уметь делать

Page 15: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Фильтровать дубли в поиске

Предлагать варианты лучшего качества

Что хочется уметь делать

Page 16: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Фильтровать дубли в поиске

Предлагать варианты лучшего качества

Обложки, тексты, исполнители, …

Что хочется уметь делать

Page 17: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Фильтровать дубли в поиске

Предлагать варианты лучшего качества

Обложки, тексты, исполнители, …

Легализация

Что хочется уметь делать

Page 18: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Фильтровать дубли в поиске

Предлагать варианты лучшего качества

Обложки, тексты, исполнители, …

Легализация

Что хочется уметь делать

НА СЛУХ

Page 19: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Перекодированию (смена битрейта и т.п.)

А ещё быть устойчивым к

Page 20: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Перекодированию (смена битрейта и т.п.)

Добавлению тишины/шума в начало/конец

А ещё быть устойчивым к

Page 21: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Перекодированию (смена битрейта и т.п.)

Добавлению тишины/шума в начало/конец

Убиранию небольшой части из начала/конца

А ещё быть устойчивым к

Page 22: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Возьмём готовое решение!

Page 23: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Решение лишь создавало отпечатки

Что вышло?

Page 24: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Решение лишь создавало отпечатки

Поиск по ним мы сочинили свой

Что вышло?

Page 25: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Решение лишь создавало отпечатки

Поиск по ним мы сочинили свой

В целом работало на тестах

Что вышло?

Page 26: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Доп. требования: live, радио, подкасты

Page 27: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Доп. требования: live, радио, подкасты

Page 28: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Доп. требования: эквалайзер

Page 29: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Доп. требования: склейки, каверы

Page 30: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Доп. требования: зашумленный фрагмент

Page 31: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Доп. требования: не вышло

Ольга Шалахіна (vk.com/osshalakhina)

Page 32: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Что делать?

Page 33: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Что делаем?

Page 34: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Что делаем?

Page 35: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Получить некие данные

Что делаем?

Page 36: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Получить некие данные

Как-то сравнивать файлы по этим данным

Что делаем?

Page 37: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

MP3 на вход → аудио данные на выходе

Библиотека libmad1 + свой враппер на Go2

1 — http://www.underbit.com/products/mad/2 — https://github.com/AterCattus/fennec-tiny (файл mad.go)

Декодирование MP3

Page 38: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

MP3 на вход → аудио данные на выходе

Библиотека libmad1 + свой враппер на Go2

1 — http://www.underbit.com/products/mad/2 — https://github.com/AterCattus/fennec-tiny (файл mad.go)

Декодирование MP3

FFMPEG

Page 39: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Декодирование MP3: амплитуда

Page 40: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Получить некие данные

Как-то сравнивать файлы по этим данным

Что делаем?

Page 41: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Звуковая волна

Page 42: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Преобразование Фурье

Page 43: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

время

частота

Page 44: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

Songs About My Cats

Venetian Snares

Page 45: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

Continuum

Disasterpeace(FEZ Soundtrack)

Page 46: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

My Violent Heart

Nine Inch Nails

Page 47: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

Transitions

DJ Sonix

Page 48: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

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

Обычная песня

Займет 10 ПБ

А было 4 ПБ

Page 49: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Получить некие данные

Как-то сравнивать файлы по этим данным

Что делаем?

Page 50: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Уменьшение объема данных

Page 51: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Уменьшение объема данных

В 200 разменьше данных

Page 52: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Уменьшение объема данных

Пики это (время, частота)

Время → uint32Частота → uint32(время, частота) → uint64

Отпечаток: массив uint64

Page 53: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Получить некие данные

Как-то сравнивать файлы по этим данным

Что делаем?

Page 54: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Ищем временной сдвиг

одного трека относительно другого

при котором получается

максимум совпадений частот

Сравнение двух треков

Page 55: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Сравнение треков: разные

Page 56: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Сравнение треков: общий фрагмент

Page 57: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Из файла достать аудио фреймы

Совершить некую магию

Получить некие данные

Как-то сравнивать файлы по этим данным

Что делаем?

Page 58: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Всё ранее описанное общедоступно

https://github.com/AterCattus/fennec-tiny

Можно попробовать самим

Fennec SK042 Vulpes zerda Art Print by S-Schukina

Page 59: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

20 ТБ отпечатков

Как и где их все хранить?

Как по ним искать?

Кто подставил кролика Роджера?

Архитектура

Page 60: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Архитектура

Page 61: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

На каждом upload сервере

Движок генерации отпечатков

Page 62: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

На каждом upload сервере

Многопоточностьпо горутине на файл

Движок генерации отпечатков

Page 63: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

На каждом upload сервере

Многопоточностьпо горутине на файл

Обработка песни:типичная - 2-4 секундыаудиокнига - линейно больше

Движок генерации отпечатков

Page 64: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Прореженные индексы

20 ТБ →100 ГБ

Да, возможны потери

Движок индексирования и поиска

Page 65: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Обратные индексы в памяти

Движок индексирования и поиска

Page 66: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Насколько быстро движок работает?

Движок индексирования и поиска

Page 67: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Прогноз: 12 месяцев

Движок индексирования и поиска

Page 68: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Был прогноз: 12 месяцев

Повсеместное использование sync.Pool

Получили: 10 месяцев

Движок индексирования и поиска

Page 69: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Был прогноз: 10 месяцев

Использование container/heap

Получили: 6 месяцев

Движок индексирования и поиска

Page 70: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Был прогноз: 6 месяцев

Специализация container/heap

Получили: 5 месяцев

Движок индексирования и поиска

Page 71: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Был прогноз: 5 месяцев

Свой container/heap

Получили: 3 месяцев

Движок индексирования и поиска

Page 72: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Был прогноз: 3 месяцев

Обновления Go 1.5 → 1.6.2

Получили: 2.5 месяцев

Движок индексирования и поиска

Page 73: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Ooops!

Production тестирование

Page 74: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Ooops! Измененная скорость

Page 75: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Наибольшая общая подпоследовательностьLCS (longest common subsequence)

Ooops! Измененная скорость

t

ν

t

νt

ν

t

ν

Page 76: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Миксы и склейки

Версии на разных языках

«Happy birthday»

Рэп «школьников»

Ooops! Отличия во фрагментах

Page 77: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Ooops! Отличия во фрагментах

Page 78: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Ooops! Отличия во фрагментах

Одно совпадение Несколько совпадений

Page 79: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

● EQ changes Lowpass filter with 6dB octave roll-off starting at 10kHz● Low bitrate-sample rate MP3 encoding with standard ffmpeg settings at 64kbps

CBR 8kHz with an exception for 16kHz● Phase shifting or inversion between channels● Pitch shifting ± 2% at launch working to improve with an aim of reaching ±5%

over the course of the agreement● Speed changes 1.05x playback at launch, working to improve with an aim of

reaching 1.25x over the course of the Agreement, subject to mutual agreement between the Parties

● The addition of silence, voice-over, or other non-program material at the beginning or end of the track

Стресс-тест

Не читай - презентацию скачай :)

Page 80: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

«Ничто не вечно, ничто не закончено и ничто не совершенно»

Итоги

Page 81: Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулович (ВКонтакте)

Презентация:https://ater.me/conf/hl2016_audfp.pdf

Для вопросов после:https://vk.com/ac

Вот и всё