Как стать автором
Обновить

Комментарии 87

Есть же масса научных статей на тему audio fingerprinting, оптимальные алгоритмы отпечатков уже давно известны человечеству. Зачем вы переизобрели свое да и похоже не очень качественно?
Мы в 2015 рассматривали некоторые доступные варианты (не только вскользь упомянутое), они не подошли под наши требования.

Часто задача заканчивается или на уровне «найти зашумленный кусок» или вообще по точному совпадению (не считая перекодирования).
С нашими аудио записями, когда пользователю льют просто невообразимое разнообразие всевозможных вариантов, все несколько сложнее.

Ну и вопросы масштабирования realtime поиска по всему объему записей…
Присоединясь. Я когда смотрел их доклад на Highload, тоже задался этим вопросом. Ребята похоже не рассматривали никакие научные статьи по этой теме
Потому что у них куча чемпионов мира по спортивному программированию, которых нужно чем-то занять. Ну не использовать же известные алгоритмы, ей богу!
Сишники у нас занимаются другими задачами)
Более скучными?
Про бОльшие нагрузки. А эту задачу мы своими силами backend'а сделали.
Многие говорят «все уже давно написано», но когда пробуешь использовать это в своей ситуации, а оно работает криво или вовсе не работает, вот тогда и встает выбор — разбираться с «чужим мерседесом и снимать два колеса» или сделать свой самокат, который делает именно то, что хочется.
Если сначала разобраться с чужим мерседесом, то свой самокат получится гораздо лучше!

Мне интересно почему до сих пор при загрузке трека с текстом песен в ID3 тэгах он не попадает автоматически в соотвествующее поле на сайте?

А, я понял. Почему при загрузке трека с текстом песен, вшитом в ID3, этот текст не извлекается загрузчиком и не помещается в соответствующее поле? Если этого действительно не происходит.

Да, мы в личке уже пришли к взаимопониманию.
Кажется ссылки на github репозитории нерабочие.
Если речь про github.com/mjibson/go-dsp/fft и соседнюю, то это и не ссылки, а именно имена go пакетов.
Это уже парсер Хабра принял их за ссылки и подсветил…
Практически то же самое, что и здесь — https://habrahabr.ru/company/yandex/blog/181219/ и https://habrahabr.ru/company/wunderfund/blog/275043/. Ну и echonest/echoprint-server аналогично работает
Если ввести в поиск «0», то выдаст в два раза больше аудиозаписей.
image
Есть «залитые», а есть «скопированные к себе».
А почему блокируются некоторые треки, например в США? Замечу, что треки под лицензией Creative Commons.
Примеры в личку) Разберемся.
Спасибо за статью!

Конечно, это не какой-то прорыв, не rocket science. Однако крайне приятно осознавать, что кому-то везёт, и он на работе может делать такие решения (пускай, и свой велосипед).

А ещё приятно, что в статье упомянут поиск LCS. На это место статьи можно сразу слать всех людей, кто утверждает, что алгоритмы не нужны, всё уже давно написано, а олимпиадное программирование никогда не пригодится.

Прочитал на одном дыхании. Как будто вернулся в свой университет.
У нас там еще и min-heap хорошо пошел :)
Возможны ли коллизии при таком способе нахождения отпечатка?

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

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

Только вот поиск по аудио у вас до сих пор невероятно тупой. Достаточно одной буквой ошибиться, чтобы он не понимал чего от него хотят:

Screenshot

то есть вы не в состоянии правильно написать название песни, а тупой — поиск?

Ну привык человек что гугл и яндекс поправяют запрос.

Начнём с того, что это был просто пример, коих ещё с пяток можно привести.

А вообще, это вполне нормальная ситуация, у меня в коллекции больше 2к треков, я не в состоянии точно запомнить названия всех. И да, внезапно, людям свойственно ошибаться.
Правописание не является функцей логики, поэтому утверждение о тупости любого опечатавшегося не особо-то истинно.
Это не по теме статьи. Текстовый поиск — другая история.
По «теме статьи» — если это делается не для того, чтобы потом выпилить весь раздел в платное приложение, а сугубо для удобства пользователей — конечно авторы всячески молодцы. Вот только мы живём в таком мире, что я скорее поставлю на первый вариант.
Вот и все что нужно знать про ВКонтакте — статьи пишут для галочки, свои опен сорс продукты не обновляют по три года.
А вы использовали golang до этого ещё где то или только в индексации аудиозаписей? Не думаете полностью перейти на этот ЯП?
Go у нас кроме этой задачи используется еще и во всяких разных других.

Переходить — нет конечно, каждому ЯП свои задачи.
Как давно начали использовать его (golang)? И в каких сервисах используется?

Если трек обрезать спереди на 5 секунд и сзади на 5 секунд, то найдет ли соответствие с оригиналом?
Как давно начали использовать его (golang)? И в каких сервисах используется?

С 2014 для всяких пушей, вот этих отпечатков, сбора access логов, голосовых сообщений, умных проксей, кое-какого api… в общем, это отдельная тема :)

Если трек обрезать спереди на 5 секунд и сзади на 5 секунд, то найдет ли соответствие с оригиналом?

Конечно. Оно выдерживает значительно более сильные искажения.
Спасибо. А почему выбрали go, а не C++?

P.S. Очень хотелось бы подробнее узнать конечно же про golang в вк :) Но если это отдельная тема, то будет ли еще что нибудь про то как его использовали в проекте, и конечно же исходники?
C/C++ используются для одних задач, Go — для других. Смотря что нужно сделать.

Ну, в теории, можно сделать отдельный пост про то, что есть на Go, если будет спрос на такую довольно специфическую тему)

Просто выложить исходники не достаточно. Они еще должны быть востребованы, как решающие какую-то распространенную задачу. С теми проектами, гду у нас сейчас Go, с этим не очень хорошо.
Например, про умные прокси и кое-какого api :)
Про то-самое-кое-какое-api, возможно, скоро будет что-нибудь публичное ;-)

Прокси используются в крайне специфичных задачах, вряд ли что интересное.
У меня такой вопрос… Если у меня аудиозаписи на странице скрыты, то они будут индексироваться в поиске?
Всё, что вы загрузили в интернет — остаётся там навсегда.
Модерация треков на подходе? Это видимо связано с платным доступом?

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


И самый интересный вопрос, на сколько устойчив ваш алгоритм к тому, что кто-нибудь сделает хитрое преобразования трека, при котором восприятие его не изменится, но при этом алгоритм сфейлится?

при каком макс. коэффициенте растяжения / сжатия ваш алгоритм продолжает работать

Сколько зададим в параметрах работы

кто-нибудь сделает хитрое преобразования трека

Зависит от «хитроты». Не возможно добиться 100% корректной работы на любой неизвестной выборке и без ложно-положительных срабатываний.

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

С искажением времени вы справились. А что если изменить тональность?

Скажите как так получается, загружаешь Вконтакте, перекодированный из допустим wav в mp3 формат без всяких метаданных, аудиофайл, а на следующий день он уже удален по просьбе правообладателей. К сведению музыка не голосовая, т.е. голосом никто не поет, исполнитель вряд ли мог найти данную запись и еще на следующий день после публикации. Название файла — Неизвестное. Как Карл?
Так по музыке и нашлось.
аудиосигнал в виде массива значений, описывающих зависимость амплитуды от времени.

На приведённой картинке точно не амплитуда, так как амплитуда не может быть отрицательной.

В нашей реализации используется пакет GO-DSP (Digital Signal Processing), а именно github.com/mjibson/go-dsp/fft — собственно FFT и github.com/mjibson/go-dsp/window — для оконной функции Ханна.


Ссылки на репозитории не рабочие.

А так статья очень даже интересная.
Репозиторий — https://github.com/mjibson/go-dsp
А что вы будете делать, если кто то импортнёт альбом одной последовательной дорожкой, как например, FLAC иногда делают с CD, одним файлом. когда будет общий трек на 70 минут из разных песен, как алгоритм будет искать совпадения?
Мы умеем находить фрагменты в склейке. Понятно, что похожесть будет ниже, чем у отдельного трека, но она будет.
А что будет, если на 15 минут закинуть один 3-минутный трек запрещённый лицензией, а остальное время забить не запрещёнными?
Будет запрет.
А если диджейский микс? Как у них с правами? Что если в если в «оригинальном» (вся музыка своя) миксе используется небольшой фрагмент «запрещенного» трека?
Интересная статья, спасибо! А применяются ли какие-то алгоритмы для создания «отпечатков» видео контента? Т.е. все тоже самое, но на видео ролике — работает как-то уже? Можно ли загрузив источник, сделав какой-то с него отпечаток, и после — найти содержимое, но уже в других роликах? Или это фантастика? У меня просто любопытство распирает :)
Если коротко — то да. Не уверен, что могу про это рассказывать)
Спасибо за ответ! Я просто в последнее время стал замечать интересное наблюдение, когда многие пытаются обмануть правообладателей видео-контента и пишут оригинальное название на латинице, или просто бессвязно, надеясь на то, что система определяет идентичность по каким-то ключевым словам в названии файла. И очень быстро, такой контент все равно банится. Я тогда и предположил, что скорее всего, люди написавшие такую систему, явно не с мороза пришли.

И еще один вопрос, если позволите! Сами понимаете, когда появляется один из разработчиков вк, нужно успеть спросить все!

Объясните пожалуйста, или отрепостите кому-нибудь кто может объяснить, если это возможно. ПОЧЕМУ в 2017 году я, как пользователь вк, который кажется в оном уже более 10 лет, до сих пор не могу увидеть все мои написанные комментарии в одном месте? Когда у вк был какой-то юбилей, то количество написанных комментариев даже показывалось. У меня их было что-то вроде 10к. Т.е. у вас явно вся эта информация по пользователю хранится, но почему же она не выводится нигде в интерфейсе пользователя??? Кроме того, я чутка мониторю вашу официальную страницу, которую «просматривают разработчики», и там тоже частенько такой вопрос поднимается на доработку/изменение. Я вот, даже с точки здравого смысла, никак не пойму, почему я, написатель собственных комментариев, даже спустя 10 лет, не могу их централизованно увидеть? Я же их автор, ну почему я не могу их посмотреть? При этом, у вас там публиковались какие-то лайф-хаки, которые позволяли в группе искать чужие комментарии. Мне просто со стороны, это кажется каким-то эпичным маразмом :) Ну т.е. официальные люди из вк пишут на официальной странице как можно поискать чужие комментарии в группе, но как поискать свои вообще везде — это табу! С чем это связано? Я так полагаю, инфа 100% — не с технической реализацией? А с чем тогда? Вот можно как-то это вопрос просветить настолько возможно, насколько это допустимо? Я нигде ответа не нашел.

Спасибо!
Интересует список своих комментов в конкретной группе или все комменты везде по сайту? )
Интересует список своих комментов везде по сайту. Т.е. я хочу натурально видеть, что и где я кому писал :)

Кстати, если вы знаете вменяемый способ поиска своих комментов в конкретной группе — был бы вам премного благодарен. Я, после прочтения официального мана, сейчас юзаю мной изобретенный лайф-хак: добавляю некий хвост в каждое свое сообщение, индентификатор меня, (типа ооо_1), и по нему ищу в группе. Только так, я могу видеть все свои комменты в группе. Может я изобрел колесо, фик его знает, но другой способ мне не известен. Но сами понимаете, другие участники группы, часто спрашивают: 000_1 — это что за фигня, парень?

Что же тут непонятного?
Вдруг вы лет 10 назад написали комментарий, оскорбляющий чувства выдуманных существ?
Летающего Макаронного Монстра, к примеру.
Если у вас будет список всех ваших комментариев, то вы сможете утаить еретические мысли от Святой Макаронной Инквизиции, а без списка даже и не вспомните, что что-то такое писали.
А вот SELECT * FROM ... WHERE userName = ... помнит всё.

Спасибо Вам за интересную и полезную (демонстрирует код, который делает возложенные на него обязательства как хотелось) публикацию!
а много ложно положительных срабатываний? скажем у меня есть мой любимый концертник, а вы его замените альбомной записью?
пс. вообще не пользуюсь vk, но интересно
Нет, такое не заменяется форсированно.

И вопрос, что считать ложно-положительным: концертная запись и должна матчиться (с меньшей степенью, но должна).
Ложно положительное — это именно разные записи, которые взяли и совпали. Мне такие примеры сейчас не известны, все хорошо.
тогда я не понимаю в чем смысл, зачем вы обрабатываете записи но ничего с ними не делаете. в чем тогда смысл? и концертная запись не должна совпадать, ибо там СОВСЕМ другой звук.
  • не дублировать в поиске один трек под разными названиями;
  • предлагать прослушать любимую композицию в более высоком качестве;
  • добавлять обложки и текст ко всем вариантам песни;
  • усовершенствовать механизм рекомендаций;
  • улучшить работу с жалобами владельцев контента.

Вот ivan386 правильно привел пример: мы можем подставить треку оригинальную обложку или текст песни, предложить лучшее качество, и т.п.
Но не форсированно заменять вашу песню на другую.
Увы, «поиск по музыке» иногда приводит к тому, что система удаляет cover-версии, несмотря что они законны.
Хорошая тема, в опенсурс!
Это может послужить человечеству.
А как вы выбирали ключевые точки (пики) на спектрограмме?
Это локальные максимумы. В своей небольшой окрестности отфильтровываются через два прохода (вперед и назад) по спектрограмме.
А теперь запилите возможность искать только оригиналы треков в наилучшем качестве без всяких тошных недоремиксов.
Лучше бы вместо всей этой возни назначили меня верховным модератором фонотеки, чтобы я мог очистить её от всяких недоремиксов, на которые тут жалуются. Заодно и от проблем с правообладателями избавились бы, я-то знаю, как правильно послать их. А то надоело, что чуть ли не каждый второй трек заблокирован. Вам самим-то не стыдно было так прогнуться? Нам в очередной раз продлили санкции, собираются ввести новые, постоянно обваливают цены на нефть, а вы о чём-то договариваетесь с ними и послушно выполняете их противоправные требования. Тьфу, противно!
И мой комментарий из предыдущей темы, который остался без ответа.
Есть альбом: https://vk.com/album296339984_212813665 Его автор удалила свою страницу. Ссылку нашёл в какой-то теме, где прикрепили часть фотографий из него. Остальные просмотреть не могу. Залейте, пожалуйста, весь альбом архивом на файлообменник.
Я так понял можно грузить к вам треки «задом наперед», сделать клиенты и дополнения к браузерам, которые будут играть их нормально и система ничего не заметит.

Думаю такой случай они не предусмотрели. Но это легко исправляется.

Да, к сожалению решить весьма просто проблему. Так-то нужно искать уязвимости в алгоритме)
Не понятно только, зачем нам это.
1. Применялся ли список эталонных песен (mp3-файлы), относительно которого вёлся поиск дубликатов песен?
2. Как определить какая песня является оригинальной (эталонной), а остальные копии? Например, если в базе ВК есть 1 уникальная песня в двух экземплярах, которые отливаются только продолжительностью звучания (одна со скоростью X, а другая ускоренная на 5%). Если я правильно понял содержание статьи, хэши у них будут разные, но при этом алгоритм определит, что одна песня является дублем другой.
3. Хэш каждой песни сравнивается с каждой песней в БД?

Благодарю за статью.
У нас есть некий пополняемый список эталонов, но часто они появляются на сайте позже «модификаций».

Да, каждая новозагруженная песня ищется по всей базе (конечно же не fullscan'ом).
Посмотрел код здесь. В match.go есть допустимые коэффициенты масштабирования, а вот где вы Longest Common Subsequence ищите, не пойму. Есть там этот код?

Увы, я не могу выложить весь код. Это все, что могу + будет обновление еще этой версии в ближайшее время.

Да какая разница. После того, как был выкинут точный поиск всё это потеряло смысл. Поиск музыки превратился в фигню для тех, кто не знает чего хочет — тупо впаривает наиболее популярные.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий