Pull to refresh

Comments 43

Прочитал вашу предыдущую статью по ссылке, но так и не понял, как же с помощью вашей программы можно искать музыку, похожую на ту, что у меня уже есть.
Что конкретно нужно развернуть подробнее?
Положим, у вас 10 тысяч песен в коллекции.
Вы запускаете обработку всех песен и помещение результатов в базу данных.
Затем вы выбираете одну песню, нажимаете кнопку «Найти» и получаете плейлист, отсортированный по убыванию похожести на образец.
Если речь не об этом, то поясните в чём?
Да, речь об этом. Теперь понятно. То есть, это не поиск новой музыки, похожей на ту, что есть в коллекции. Это поиск в коллекции музыки, похожей на ту, что я выбрал сам.
Какие красивые графики на параллельных координатах получаются! Еще бы осмыслить, что они значат (широту разброса треков по анализируемым параметрам?).
Проект очень интересный.
Да, именно широту разброса и означают. Только после анализа главных компонент получившиеся анализируемые параметры теряют человекочитаемый смысл, зато прибавляют в математическом смысле.
Обновил путь поиска музыки, но прежде чем его прописать программа начала сканировать всё что внутри этой папки. Короче хард повис :)
Извиняюсь, такие казусы у меня тоже бывали. Лучше сразу указывать нужный путь полностью.
Какова причина 20%? В тексте статьи не заметил.

К поддерживаемым форматом еще alac было бы приятно добавить.

Способ: github
Причина 20% ошибок при составлении плейлиста? Это значение среднее, и от жанра к жанру оно может колебаться в обе стороны.
Её порождает, конечно же, несовершенство алгоритма статистической обработки — основная компонента программы, которую я планирую развивать дальше.
Люто плюсую за гитхаб.
Решит все Ваши проблемы по аспектам с 0-го по 5-ый, и с GUI тоже.
Если найдёте желающих помогать с Вашим кодом.

UPD: глянул предыдущий пост и обнаружил github.com/johnnybuggy/holo

нынче я в непонятках…
Один раз мне таки удалось закоммитить туда, больше не получалось…

И да, кстати, как лучше всего искать желающих в английских интернетах? Где обычно делают анонсы?
Коллега, рекомендую почитать работы вот этих ребят www.mtg.upf.edu/
Конкретно вот эту публикацию mtg.upf.edu/system/files/publications/bogdanov_IPM2012.pdf
Автор вроде как уже защитился, так что информация вполне себе полезная должна быть.

Для возможности рекомендаций стоит добавить отправку «сэмплов» на сервер и их каталогизировать, использую мета-данные из публичных баз (last.fm, freebase etc.), не знаю правда как к этому отнесутся правообладатели, но тем не менее. Отправлять пользователя к его же музыке это не очень полезно.

Проблема content-based систем (а иначе вашу и не назовёшь) в том, что рекомендации будут очень сильно похожи на то, что слушает человек. Хотя, в случае экспериментальных или смешанных жанров вы можете получить вовсе бредовые вещи. Взять к примеру кусок какого-нибудь djent трека и часть его будет похожа на что-то инструментальное, часть на электронное. Тут как «повезёт» с куском. Для устранения проблемы обычно используются гибридные системы, куда вам и советую копать.

Я сейчас пытаюсь зайти несколько с другой стороны, использовать семантическую сеть для алгоритма рекомендаций (в качестве информационной базы используются всё те же публичные БД). Пока всё на зачаточной стадии (первый семестр докторантуры), но в направление верю :)
Как я понял по этой и предыдущей статье, цель автора — не найти новую музыку по предпочтениям, а собрать плейлист похожего из того, что уже есть, «под настроение».
Так что
> рекомендации будут очень сильно похожи на то, что слушает человек
это скорее фича.
Да, судя по первой части статьи, то что они делают очень похоже на то что делаю я. Отличие, при беглом осмотре, в том что они пытаются притянуть к произвольному звуку привычные характеристики типа жанра, темпа, мелодичности, экспрессии и т.д. Я считаю это не совсем правильным, так как есть жанры где всё кроме ярлыка самого жанра, определить невозможно (Merzbow — Pulse Demon), но композиция тем не менее входит, пусть и на окраину общего звукового континуума, который можно наблюдать на моём скриншоте про Scatterplot собранной базы данных.

Насчёт попадание кусков из разных жанров в одном треке, для примера положим 40% металл, 60% мелодекламация голосом. Чаще всего это будет приводить к тому что в плейлисте будут находиться треки с такой же комбинацией — 40% металла и 60% декламации. Ну или с перекосом в ту или другую сторону, если точных совпадений найдено не будет.
Отличие, при беглом осмотре, в том что они пытаются притянуть к произвольному звуку привычные характеристики типа жанра, темпа, мелодичности, экспрессии и т.д. Я считаю это не совсем правильным, так как есть жанры где всё кроме ярлыка самого жанра, определить невозможно (Merzbow — Pulse Demon), но композиция тем не менее входит, пусть и на окраину общего звукового континуума, который можно наблюдать на моём скриншоте про Scatterplot собранной базы данных.

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

Послушав трек, что вы привели, я был полностью солидарен с last.fm в плане тегов. Noise/experimental/industrial. Даже описание исполнителя об этом говорит. И на сигнале вы должны будете увидеть характерный график для шума по идее.
Насчёт попадание кусков из разных жанров в одном треке, для примера положим 40% металл, 60% мелодекламация голосом. Чаще всего это будет приводить к тому что в плейлисте будут находиться треки с такой же комбинацией — 40% металла и 60% декламации. Ну или с перекосом в ту или другую сторону, если точных совпадений найдено не будет.

Вы анализируете не весь трек, разве нет?

Музыка субъективна и в качестве анализа качества рекомендаций вы всё равно будете использовать людей. Может стоит на них и ориентироваться, а не на машинный процент?

Используйте всю выборку пользователя и на основе неё сделайте статистический вывод о процентном соотношении треков определённого вида (ок, вам не нравится слово «жанр») у пользователя. Дальше из глобальной БД сэмплов можно выбирать похожие треки и в таком же процентном отношении отдавать их пользователю.
Используйте всю выборку пользователя и на основе неё сделайте статистический вывод о процентном соотношении треков определённого вида (ок, вам не нравится слово «жанр») у пользователя. Дальше из глобальной БД сэмплов можно выбирать похожие треки и в таком же процентном отношении отдавать их пользователю.

Изначальная цель стоит не совсем так.
Довольно часто среди знакомых и на околомузыкальных форумах я слышу «О, а посоветуйте ещё что-нибудь в духе XXX?». В таком случае мы скармливаем наиболее характерные комозиции XXX в качестве образца, на выходе получаем список похожих вещей. У меня это отлично работает почти для всех вариаций рок-музыки.
Но вы всё равно в таком случае ограничены своей фонотекой. Свою фонотеку, как правило, все знают и без софта.
У меня более 100тысяч треков, я знаю далеко не всё :)
Мне кажется идея сама по себе великолепна, смущают вот эти ваши «Центроиды» — спектрограммы специально выбранных фрагментов звука.

Правильно ли я понимаю, что это сделано для простоты и по идее надо сравнивать фрагменты «каждый с каждым»?

Как насчет сложных композиций? Что если 20% фрагмент попал на нехарактерный участок?
Центроиды носят служебную функцию опорных значений, и их форма выбрана по принципу отличаться друг от друга как можно сильнее, как по громкости, так и по корреляции графика частот.
У меня возникла задача отсортировать свою коллекцию по темпу композиций (в основном для «режимов» ходьбы, бега и занятий прочим спортом) в ударах в минуту. Коллекция большая, из файлов разных форматов, местами ogg или ape+cue, много композиций с переменным ритмом.
Как я понял из статьи (а понял я плохо :( ), подобной возможности в программе нет. Планируется? И если нет, то вы случайно не знаете, какая софтина мне может помочь?

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

Понял только, что она строит забавные визуализации, построенные, по сути, с использованием mp3'шек в качестве random seed.
Из звука каждого из файлов извлекаются количественные features, и затем визуализируются разными способами. Где вы там увидели random seed я, честно говоря, не понял.
Я имел в виду, что эти ваши features совершенно ничего не говорят пользователю. Это просто seed для построения причудливых графиков.
А если например два чёрно-белых изображения сравниваются по гистограммам, то значения гистограммы вы тоже назовёте сидом рандома? По-моему это некорректно.
Гистограмма несет человеку полезную информацию. Фотограф, например, может оценить, насколько кадр получился светлый или темный, не полагаясь на цветопередачу убогого экранчика фотоаппарата, который к тому же слепнет на солнце.

А вот если на гистограмму наложить еще десяток других графиков, каждый из которых по отдельности что-то значит (хотя не факт, что пользователю есть хоть какой-то толк от каждого из них), да так, что нельзя отличить, какая линия какому показателю соответствует — получится ерунда.

Для человека это — произведение спорного искусства, а не средство анализа, как вы заявляете в заголовке статьи.

Для машины — может, она и сможет находить похожие изображения по каким-то формальным критериям, но что толку? Для человека важно содержательное сходство, а критерии типа «отношение средней плотности зеленого цвета в строке к количеству строк» (я утрирую, конечно) будет ставить в один ряд изображения, совершенно нерелевантные с точки зрения человека.

PS Дискуссия напомнила, как в South Park S15E4 мерялись пиписьками. Каждый придумывал свою формулу так, чтобы характеристики именно его члена дали наибольший результат. Какого-то математического или физического смысла эти формулы, конечно, не содержали.
А в чем преимущество устранения учителя, если конечная цель — это выработка вкуса единственного пользователя этой программы? Почему бы не сделать какой-нибудь плагин, ненавязчиво слушающий вместе с пользователем его плей-лист и настраивающий свою нейронную сеть на основании собранных вами семплов, а потом уже кластеризующий весь остальной непрослушанный объем музыки? Если эти субъективные мнения, выраженные в нейронных сетях, слить в облако, то можно получить и некое подобие объективной кластеризации.
Дело как раз в том что я не пытаюсь подстроиться под вкус слушателя. Точнее как, я беспристрастно пытаюсь найти что-то похожее на то что подано в качестве образца.
Ну, тогда боюсь, программа представляет исключительно научный интерес и результаты будет давать непредсказуемые. Музыкальная гармония — понятие до конца не формализованное на уровне кластеризации оных. Тем более для нескольких инструментов одновременно.
Я вот уже давно не слушаю mp3 с компа-потому что реально надоедает одно и тоже слушать по 10 раз. Я перешел на online станции, и неплохо бы было, чтобы Вашу программу можно было напускать на потокове вещание с тем чтобы она давала рекомендации к тому что слушать.
Экспериментирую) Подсунул программе AC/DC — Highway to hell.
Среди топ10 соответствий оказались 3 песни КиШ.
Много думал оО
Всё зависит от того какой объём библиотеки вы обработали и какие жанры она охватывает.
Затем, нужно абстрагироваться от названий групп и слушать только звук.
И наконец, если в библиотеке нет ничего похожего по звучанию, то программа предлагает просто ближайшие композиции. Я бы мог задать пороговое значение, различия выше которого не допускались бы, но тогда могут возникать ситуации что похожих песен и нет.
Библиотека размером в 26К композиций. Ищет похожие кстати очень долго, порядка 5-10 минут.
Насчёт скорости выполнения запросов сейчас очень активно думаю.
Можете накидать пару-тройку получающхся у вас плейлистов, если не хотите публично, можно в ЛС. Спасибо.
Анализировались аналогичные решения от Apple, Google, Pandora Radio, Last.fm. Во всех случаях поиск ведётся по метаданным, что как минимум неспортивно, а как максимум, субьективно и подвержено мнениям живых оценщиков.
В отличие от них, HOLO пока является беспристрастным рецензентом и рекомендателем, системой «без учителя».


Во-первых, из приведенных только Pandora является чисто expert-based RS. А вот Last.fm насколько мне известно, коллаборативная (ну на самом деле гибридная, скорее всего).

Во-вторых, content-based рекомендательные системы могут давать неплохое разнообразие и приятно удивить пользователя (diversity и serendipity), но они очень и очень сильно подвержены, скажем так, «упячкам». То есть периодически вы будете рекомендовать что-то очень и очень странное. Почитайте ocelma.net/MusicRecommendationBook/index.html, там много интересного, в том числе и такого рода исследования.

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

А вообще, это классный проект, вы большой молодец, что смогли в одиночку создать такую систему. Плюс идея интересная — ведь вы анализируете коллекцию пользователя! Удачи вам, я верю, что ваш продукт найдет свою нишу.
Рекомендательные системы затягивают, очень интересная область. Сам не могу оторваться =) Правда, я больше в коллаборативной фильтрации работаю, в content-based ничего не смыслю. Надо наверстывать…
Спасибо вам за дополнительную полезную информацию.
Во-вторых, content-based рекомендательные системы могут давать неплохое разнообразие и приятно удивить пользователя (diversity и serendipity), но они очень и очень сильно подвержены, скажем так, «упячкам». То есть периодически вы будете рекомендовать что-то очень и очень странное

При большом размере «аудитории» Collaborative filtering делает то же самое. При малом — проблема «холодного старта».
Но в любом случае 100% сейчас не даёт ничего. Впрочем, это скорее проблема людей, а не ПО :)
Анализировались аналогичные решения от Apple, Google, Pandora Radio, Last.fm. Во всех случаях поиск ведётся по метаданным

Есть еще Echo Nest. Насколько я знаю, у них как раз анализируется музыка.
Sign up to leave a comment.

Articles