Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,096 views

Published on

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

Published in: Engineering
  • Login to see the comments

  • Be the first to like this

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

  1. 1. Архитектура и алгоритмы для индексации всей музыки ВКонтакте Алексей Акулович vk.com 161104#5
  2. 2. 50 миллионов треков? Сколько музыки в ВК?
  3. 3. 100 миллионов треков? Сколько музыки в ВК?
  4. 4. 200 миллионов треков? Сколько музыки в ВК?
  5. 5. 500 миллионов треков? Сколько музыки в ВК?
  6. 6. 400 миллионов треков Сколько музыки в ВК?
  7. 7. 400 миллионов треков 4 ПБ файлов Сколько музыки в ВК?
  8. 8. 400 миллионов треков 4 ПБ файлов Сколько музыки в ВК? +150к (1.5 ТБ) в день
  9. 9. Есть что послушать
  10. 10. Найти в поиске по названию из ID3 тегов Что с этим можно делать?
  11. 11. Найти в поиске по названию из ID3 тегов Дубли Что с этим можно делать?
  12. 12. Найти в поиске по названию из ID3 тегов Дубли Несоответствие названий и содержимого Что с этим можно делать?
  13. 13. Найти в поиске по названию из ID3 тегов Дубли Несоответствие названий и содержимого И всё Что с этим можно делать?
  14. 14. Фильтровать дубли в поиске Что хочется уметь делать
  15. 15. Фильтровать дубли в поиске Предлагать варианты лучшего качества Что хочется уметь делать
  16. 16. Фильтровать дубли в поиске Предлагать варианты лучшего качества Обложки, тексты, исполнители, … Что хочется уметь делать
  17. 17. Фильтровать дубли в поиске Предлагать варианты лучшего качества Обложки, тексты, исполнители, … Легализация Что хочется уметь делать
  18. 18. Фильтровать дубли в поиске Предлагать варианты лучшего качества Обложки, тексты, исполнители, … Легализация Что хочется уметь делать НА СЛУХ
  19. 19. Перекодированию (смена битрейта и т.п.) А ещё быть устойчивым к
  20. 20. Перекодированию (смена битрейта и т.п.) Добавлению тишины/шума в начало/конец А ещё быть устойчивым к
  21. 21. Перекодированию (смена битрейта и т.п.) Добавлению тишины/шума в начало/конец Убиранию небольшой части из начала/конца А ещё быть устойчивым к
  22. 22. Возьмём готовое решение!
  23. 23. Решение лишь создавало отпечатки Что вышло?
  24. 24. Решение лишь создавало отпечатки Поиск по ним мы сочинили свой Что вышло?
  25. 25. Решение лишь создавало отпечатки Поиск по ним мы сочинили свой В целом работало на тестах Что вышло?
  26. 26. Доп. требования: live, радио, подкасты
  27. 27. Доп. требования: live, радио, подкасты
  28. 28. Доп. требования: эквалайзер
  29. 29. Доп. требования: склейки, каверы
  30. 30. Доп. требования: зашумленный фрагмент
  31. 31. Доп. требования: не вышло Ольга Шалахіна (vk.com/osshalakhina)
  32. 32. Что делать?
  33. 33. Из файла достать аудио фреймы Что делаем?
  34. 34. Из файла достать аудио фреймы Совершить некую магию Что делаем?
  35. 35. Из файла достать аудио фреймы Совершить некую магию Получить некие данные Что делаем?
  36. 36. Из файла достать аудио фреймы Совершить некую магию Получить некие данные Как-то сравнивать файлы по этим данным Что делаем?
  37. 37. MP3 на вход → аудио данные на выходе Библиотека libmad1 + свой враппер на Go2 1 — http://www.underbit.com/products/mad/ 2 — https://github.com/AterCattus/fennec-tiny (файл mad.go) Декодирование MP3
  38. 38. MP3 на вход → аудио данные на выходе Библиотека libmad1 + свой враппер на Go2 1 — http://www.underbit.com/products/mad/ 2 — https://github.com/AterCattus/fennec-tiny (файл mad.go) Декодирование MP3 FFMPEG
  39. 39. Декодирование MP3: амплитуда
  40. 40. Из файла достать аудио фреймы Совершить некую магию Получить некие данные Как-то сравнивать файлы по этим данным Что делаем?
  41. 41. Звуковая волна
  42. 42. Преобразование Фурье
  43. 43. Спектрограмма время частота
  44. 44. Спектрограмма Songs About My Cats Venetian Snares
  45. 45. Спектрограмма Continuum Disasterpeace (FEZ Soundtrack)
  46. 46. Спектрограмма My Violent Heart Nine Inch Nails
  47. 47. Спектрограмма Transitions DJ Sonix
  48. 48. Спектрограмма Обычная песня Займет 10 ПБ А было 4 ПБ
  49. 49. Из файла достать аудио фреймы Совершить некую магию Получить некие данные Как-то сравнивать файлы по этим данным Что делаем?
  50. 50. Уменьшение объема данных
  51. 51. Уменьшение объема данных В 200 раз меньше данных
  52. 52. Уменьшение объема данных Пики это (время, частота) Время → uint32 Частота → uint32 (время, частота) → uint64 Отпечаток: массив uint64
  53. 53. Из файла достать аудио фреймы Совершить некую магию Получить некие данные Как-то сравнивать файлы по этим данным Что делаем?
  54. 54. Ищем временной сдвиг одного трека относительно другого при котором получается максимум совпадений частот Сравнение двух треков
  55. 55. Сравнение треков: разные
  56. 56. Сравнение треков: общий фрагмент
  57. 57. Из файла достать аудио фреймы Совершить некую магию Получить некие данные Как-то сравнивать файлы по этим данным Что делаем?
  58. 58. Всё ранее описанное общедоступно https://github.com/AterCattus/fennec-tiny Можно попробовать самим Fennec SK042 Vulpes zerda Art Print by S-Schukina
  59. 59. 20 ТБ отпечатков Как и где их все хранить? Как по ним искать? Кто подставил кролика Роджера? Архитектура
  60. 60. Архитектура
  61. 61. На каждом upload сервере Движок генерации отпечатков
  62. 62. На каждом upload сервере Многопоточность по горутине на файл Движок генерации отпечатков
  63. 63. На каждом upload сервере Многопоточность по горутине на файл Обработка песни: типичная - 2-4 секунды аудиокнига - линейно больше Движок генерации отпечатков
  64. 64. Прореженные индексы 20 ТБ →100 ГБ Да, возможны потери Движок индексирования и поиска
  65. 65. Обратные индексы в памяти Движок индексирования и поиска
  66. 66. Насколько быстро движок работает? Движок индексирования и поиска
  67. 67. Прогноз: 12 месяцев Движок индексирования и поиска
  68. 68. Был прогноз: 12 месяцев Повсеместное использование sync.Pool Получили: 10 месяцев Движок индексирования и поиска
  69. 69. Был прогноз: 10 месяцев Использование container/heap Получили: 6 месяцев Движок индексирования и поиска
  70. 70. Был прогноз: 6 месяцев Специализация container/heap Получили: 5 месяцев Движок индексирования и поиска
  71. 71. Был прогноз: 5 месяцев Свой container/heap Получили: 3 месяцев Движок индексирования и поиска
  72. 72. Был прогноз: 3 месяцев Обновления Go 1.5 → 1.6.2 Получили: 2.5 месяцев Движок индексирования и поиска
  73. 73. Ooops! Production тестирование
  74. 74. Ooops! Измененная скорость
  75. 75. Наибольшая общая подпоследовательность LCS (longest common subsequence) Ooops! Измененная скорость t ν t ν t ν t ν
  76. 76. Миксы и склейки Версии на разных языках «Happy birthday» Рэп «школьников» Ooops! Отличия во фрагментах
  77. 77. Ooops! Отличия во фрагментах
  78. 78. Ooops! Отличия во фрагментах Одно совпадение Несколько совпадений
  79. 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 Стресс-тест Не читай - презентацию скачай :)
  80. 80. «Ничто не вечно, ничто не закончено и ничто не совершенно» Итоги
  81. 81. Презентация: https://ater.me/conf/hl2016_audfp.pdf Для вопросов после: https://vk.com/ac Вот и всё

×