Автоматическая музыкальная оценка на основе привычек слушания

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

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

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

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

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

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

8
задан 2 revs, 2 users 100% 8 January 2019 в 18:35
поделиться

9 ответов

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

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

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

4
ответ дан 5 December 2019 в 09:24
поделиться

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

некоторые другие показатели, которые следует учитывать:

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

  • включали ли они" повтор эта песня "во время воспроизведения?

  • раз проиграна за час, день, неделю, месяц

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

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

также :

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

на какой громкости играет песня?

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

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

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

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

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

10
ответ дан 5 December 2019 в 09:24
поделиться

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

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

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

0
ответ дан 5 December 2019 в 09:24
поделиться
(ListenPartCount * (ListenFullCount ^ 2)) + (AverageTotalListenTime * ListenPartTimeAverage)
--------------------------------------------------------------------------------------------
               ((AverageTotalListenTime - ListenPartTimeAverage) + 0.0001f)

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

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

0
ответ дан 5 December 2019 в 09:24
поделиться

Просто измерьте, как часто песня сыграно за раз.

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

0
ответ дан 5 December 2019 в 09:24
поделиться

Как насчет искусственного интеллекта для решения этой проблемы?

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

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

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

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

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

0
ответ дан 5 December 2019 в 09:24
поделиться

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

listened_time_of_song/(length_of_song + 15s) 

или

 listened_time_of_song/(length_of_song * 1.1) 

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

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

0
ответ дан 5 December 2019 в 09:24
поделиться

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

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

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

3
ответ дан 5 December 2019 в 09:24
поделиться

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

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

1
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: