Автоматический рейтинг музыки на основе привычек прослушивания - PullRequest
8 голосов
/ 19 мая 2010

Я создал Winamp-подобный музыкальный проигрыватель в Delphi. Не так сложно, конечно. Просто простой.

Но теперь я хотел бы добавить более сложную функцию: песни в библиотеке должны автоматически оцениваться на основе привычек пользователя к прослушиванию.

Это означает: приложение должно «понимать», нравится ли пользователю песня или нет. И не только нравится ли ему / ей это, но и сколько.

Мой подход (данные, которые можно было бы использовать):

  • Просто измерьте частоту воспроизведения песни за раз. Начните отсчитывать время, когда песня была добавлена ​​в библиотеку, чтобы последние песни не имели никаких недостатков.
  • Измерьте продолжительность воспроизведения песни в среднем (в минутах).
  • Запуск песни, но ее непосредственное изменение на другую, должно плохо повлиять на рейтинг, поскольку песня не понравилась пользователю.
  • ...

Не могли бы вы помочь мне с этой проблемой? Я просто хотел бы иметь некоторые идеи. Мне не нужна реализация в Delphi.

Ответы [ 9 ]

10 голосов
/ 19 мая 2010

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

некоторые другие метрики для рассмотрения:

  • доля случаев, когда песня была немедленно воспроизведена (например, эта песня была немедленно воспроизведена 12% от времени ее воспроизведения)

  • они включили кнопку «повторить эту песню» во время воспроизведения?

  • раз сыграл в час, день, неделю, месяц

  • доля раз, когда эта песня была пропущена. (например, эта песня была воспроизведена, но сразу пропущена в 99% случаев)

  • доля прослушиваемой песни (в среднем пользователь слушал 50% этой песни против 100% другой песни)

также:

прослушайте микрофон пользователя. они поют вместе? : D

Какую громкость они играют песню? они провернули это?

Вставьте кнопку "Рекомендовать эту песню друзьям" (которая отправит название песни другу или что-то в этом роде). Песни, которые они рекомендуют, им, вероятно, нравятся.

Возможно, вы захотите извлечь некоторые функции из аудиопотока и найти похожие песни. Это сложно, но вы можете прочитать об этом здесь:

«Автоматическое извлечение признаков для классификации аудиоданных» http://www.springerlink.com/content/g71368g57x013j48/

«Понятные модели музыкальных коллекций, основанные на исчерпывающей генерации функций с временной статистикой» http://portal.acm.org/citation.cfm?id=1150523

«Совместное использование функций в распределенной системе для организации музыкальных коллекций» http://www.idea -group.com / Книжный магазин / Chapter.aspx? TitleId = 24432

4 голосов
/ 19 мая 2010

Измерьте продолжительность воспроизведения песни в среднем (в минутах).

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

ср. время воспроизведения / общая длина песни

3 голосов
/ 30 мая 2010

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

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

Я также хотел бы сгруппировать песни, имеющие один и тот же тег MP3-Id, здесь, поскольку это также дает подсказку о том, что в данный момент находится у пользователя. И если вы хотите предоставить функцию автозапуска, это также поможет. После прослушивания отличной песни на Гоа переключение на панк странно, даже если мне нравятся песни обоих миров.

1 голос
/ 27 мая 2010

Относительно ваших дополнительных метрик: не следует ли объединить метрику № 4 и метрику № 5? Если песню сразу пропускают, то доля прослушивания составляет всего 1% или около того, верно? - marco92w 21 мая в 15: 08

Они должны быть отдельными. Пропуск должен привести к отрицательной оценке песни, которая была пропущена. Однако, если пользователь закрывает приложение, когда начинается песня, вы не должны рассматривать ее как отрицательную оценку, даже если проигрывался только низкий процент песни.

0 голосов
/ 28 мая 2010

Вы можете использовать некоторые простые функции, такие как:

listened_time_of_song/(length_of_song + 15s) 

или

 listened_time_of_song/(length_of_song * 1.1) 

это означает, что если песня была остановлена ​​через 15 секунд, она была бы оценена с отрицательной оценкой, или, может быть, второй случай был бы еще лучше (длина песни не имела бы значения для окончательной ноты, если пользователь прослушал целую песню)

Другим способом может быть использование нейронных сетей, если вы знакомы с этим предметом.

0 голосов
/ 28 мая 2010

А как насчет искусственного интеллекта устройства по этой проблеме?

Хорошо! Позвольте мне сказать, что начинать с нуля было бы очень забавно сеть клиентов со своим "интеллектом" и, наконец, собирать результаты клиента на центральном "интеллекте".

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

Чем центральный «интеллектуальный» коллектор мог объединить отдельные рейтинги в «глобальные рейтинги» показывает тренда, предложения и каждый высокий рейтинг, который вам нужен.

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

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

0 голосов
/ 28 мая 2010

Просто измерьте, как часто песня была Воспроизведение за раз.

Часто я иду сыграть определенную песню, а затем просто запускаю свой iPod до конца альбома. Так что этот метод дал бы несправедливое преимущество песням в конце альбома. Что-то, что вы можете компенсировать, если ваш музыкальный проигрыватель работает так же.

0 голосов
/ 26 мая 2010

Используйте дату, когда песня была добавлена ​​в библиотеку, в качестве отправной точки.

Измерьте частоту воспроизведения песни / жанра / исполнителя / альбома (полностью, частично или пропущено) - это также позволит вам измерить частоту воспроизведения песни / жанра / исполнителя / альбома.

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

0 голосов
/ 26 мая 2010
(ListenPartCount * (ListenFullCount ^ 2)) + (AverageTotalListenTime * ListenPartTimeAverage)
--------------------------------------------------------------------------------------------
               ((AverageTotalListenTime - ListenPartTimeAverage) + 0.0001f)

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

Вы можете настроить эту фолмулю различными способами, например, e.ex, включая дерево прослушивания пользователя, f.ex, если пользователь слушает одну песню, а после этого он несколько раз прослушивает другую песню и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...