Как это работает? Рекомендации в Яндекс.Музыке

20 марта 2015, 13:34

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

С сентября 2014 года в Яндекс.Музыке работает система музыкальных рекомендаций. Она даёт ответы на вопрос «Что бы ещё послушать?». У системы есть две ключевые особенности. Во-первых, её советы персональны — то есть составляются с учётом интересов каждого конкретного пользователя. А во-вторых, система самообучается: чем больше вы слушаете музыку, тем точнее будут рекомендации.

Как выявляются предпочтения
Прежде чем советовать пользователю ту или иную музыку, необходимо составить представление о его музыкальных вкусах. Самый простой способ сделать это — посмотреть, какие треки на Яндекс.Музыке он уже послушал. Это самая важная информация для рекомендательной системы; по истории прослушиваний можно установить, каких исполнителей и какие жанры человек предпочитает. Однако чтобы составить более полную картину, неплохо ещё понимать, что ему нравится больше, а что — меньше.

Для этого мы используем дополнительные данные. Один из источников таких данных — оценки «Нравится» и «Не нравится», которые ставят пользователи. Оценку «Нравится» в Яндекс.Музыке можно ставить трекам, альбомам, исполнителям и целым музыкальным жанрам. Оценка «Не нравится» есть в жанровом радио и в радио по исполнителю: с её помощью можно отметить треки, которые пришлись не по душе.

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

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


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

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

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


Как составляются рекомендации
Обработав данные, алгоритм выдаёт список треков и исполнителей, которые могут понравиться пользователю. Считать его окончательной рекомендацией, однако, нельзя. Во-первых, список слишком длинный — чтобы прослушать все треки, которые система выбрала за раз, не хватит и суток. Во-вторых, мы считаем, что рекомендации должны быть разнообразными: они должны включать в себя не только советы вида «раз вам понравилось X, послушайте Y», но и что-то ещё, что помогло бы сориентироваться в мире музыки — скажем, сообщения о новых релизах любимых исполнителей или чарты треков в жанрах, которые вам нравятся.

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


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

***
Задача рекомендаций в Яндекс.Музыке — помогать людям открывать для себя новую музыку. Новую не значит современную — система может посоветовать вам и треки, выпущенные в этом году, и музыку, написанную в XVIII веке. Главное — это будет музыка, которую вы ещё не слышали, но которая вам, скорее всего, понравится.

41 комментарий
Подписаться на комментарии к посту
Довольно сложный алгоритм. Спасибо за Вашу работу.
Максим Щепалин
23 марта 2015, 15:52
Игорь,
вроде все достаточно просто
Что если сегодня мне хочется слушать одно, а завтра оно уже мне надоест, и захочется послушать другое? Все предпочтения свалят в одну кучу и будут выдавать песни как попало? Или помимо «долгосрочных предпочтений» у вас есть и какие-то «мгновенные»? Например, прогрессив-прогрессив-прогрессив, но сегодня вечером — джаз?
Добавьте "не нравится" в список рекомендованных. Я не хочу пропускать, я хочу больше этого не слышать.

Есть ли возможность настройки местоположения "панели управления"? Снизу очень и очень неудобно - постоянно конфликтует с панелью задач.

Рекомендации пересчитываются только раз в сутки? Постоянного потока, как в Last.fm, нет?

И последнее: для любого, кто хочет попробовать сервис, возможность импорта-поиска с других сервисов (того же last.fm) будет очень востребованной.
Владимир,
пожалуй, поддержу, тк чем дольше пользуюсь сервисом, тем менее релевантные песни в "рекомендациях", связано скорее всего с несколькими вещами:
1) не всегда ставлю на паузу когда отхожу
2) проматываю некоторые композиции, которые итак слушаю каждый день в метро и по дороге.
поэтому сильно не хватает кнопки "не нравится" в рекомендациях, чтобы исключить эту песню/исполнителя из листа
Яндекс Музыка достаточно хорошо подсказывает похожую музыку, но до Last FM им далеко. Дело не только в like, но и наверно как долго человек пользуется сервисом.
Точность прогнозов на Яндекс.Музыке отстает лет на 400 и от Spotify, и тем более от Pandora. Но коллекция сервиса растет, и найти хорошую музыку исходя из своих предпочтений все проще. Так что можете просто бросить свои рекомендации, они особо не нужны.
Кстати, рекомендации от друзей - спорная штука. Во первых, такие рекомендательные системы часто не различают степень близости с человеком. Я, вот, однажды добавил в гугле в контакты человека с которым мы меньше месяца на одной работе в одной комнате посидели. И было это уже много лет назад. А он оказался очень "шумным" в рекомендательном плане. Практически на каждом третьем приложении в гугл плее стало написано что этот человек ему +1 поставил. В итоге он меня достал и я расфрендил его во всех соц сетях, но рекомендации не исчезали. В итоге (внезапно!), оказалось, что чтобы они исчезли мне надо было удалить человека из адресной книги в гмейле. На втором месте по шумности рекомендаций оказалась моя бывшая начальница на американской стороне. Короче я так и не понял логику гугла в связывании бизнес контактов с рекомендациями. Какое мне дело до того в какие игры играет, например свадебный фотограф, чей емейл у меня тоже остался в адресбуке.
А, мои реальные друзья ничего почти не плюсуют и их мнение теряется на фоне большей активности всяких деловых партнёров. В итоге так, как устроены социальные рекомендации в гугл плее меня больше раздражает, чем приносит пользы. Я бы предпочёл вообще выключить этот механизм и оставить только рекомендации вида "те, кто установил это, ещё установили то".
Во вторых, может быть у меня есть хороший друг, но он какое-нибудь гавно слушает. Я его за это меньше не буду уважать, но не хотел бы, чтобы его предпочтения просачивались в мои рекомендации. Хотелось бы какую-то кнопку "не нравится" не на отдельных композициях, а на всём источнике рекомендаций, чтобы один раз пометить, что он для меня не релевантен и больше не страдать от замусоривания.

Ничего, что я здесь Яндексу на Гугл нажаловался? Просто предостерегаю от чужих ошибок.
Сам я, правда, пока сижу на Play.Music, хотя несколько месяцев уже отдаю по 200 р. Яндексу от того, что никак не дойдут руки устроить полноценный тест драйв Яндекс.Музыки и решить - переехать, или отписаться. Пои первом знакомстве у вас на порядок меньше контента было.
Не хватает кнопки редактирования комментария. Некоторые опечатки и запятые, хоть убей, не видны пока не отправишь.
А ещё, когда я нажал авторизацию, через гугл, то меня авторизовали, но обратный редирект попал на 404.
Хотя основной причиной, почему я быстро Яндекс.Музыку отбросил было неудобство локального скачивания в андройд приложении. С плеем: я собираюсь выходить из офиса, вспоминаю, что то, что я слушал по пути из дома уже надоело. Быстренько нахожу какой-нибудь альбом из своей библиотеки или иду в список похожих исполнителей для чего-нибудь, что уже нравится и быстрой промоткой проверяю нравится - не нравится, жму ОДНУ кнопку и всё. Пока одеваюсь, иду к лифту, спускаюсь те альбомы, которые я выбрал скачаются через офисный wifi и я буду слушать их по пути. Скорее всего это будет несколько альбомов одного исполнителя и я опять-таки одной кнопкой запущу шаффл из всего, что скачано.
С яндекс музыкой мне понадобилось создать плейлист и ввести его название чтобы сохранить треки локально. Это фейл. Я даже когда не иду никуда буду страдать муками творчества придумывая название плейлиста и с вероятностью 75% вообще забью на это.
Andrey Titov,
Насчёт скачивания треков: в текущей Я.Музыке (по кр. мере платной на iOS) это работает. Поступаю именно так же - нахожу интересующий альбом, нажимаю на значок "скачать", и пока одеваюсь весь альбом скачивается для прослушивания в оффлайне.
wlame,
проверил на текущей Android версии. Если зайти в альбом, то  в меню есть "Загрузить все треки". После этого в нотификациях появилось "Загрузка закончена. Загружено 0 треков."
Мне удавалось только сначала отправить все треки в плейлист, а потом уже загрузить плейлист. Очевидно Android версия не такая доделанная, как iOS.
Andrey Titov,
если в андроид-версии это так, то это, действительно, недоработка. Можете зарепортить об этом в приложении. Должны починить.
Вот если бы Яндекс.Музыка взяла самое лучшее от Spotify и LastFM - цены бы вам не было!
Страшный сервис! Зайдёшь вечером, после работы, на полчасика, пару треков послушать и до часу ночи с этими рекомендациями сидишь, жесть вашу! :)))
Это комплимент. :)
А можно как-то отключить музыку на русском языке?
hidlor,
можно в большинстве жанровых радио https://yadi.sk/i/8x0FJTW9fTeHA
+1 к отключению музыки на русском языке.

Также в рекомендациях, рядом с "понравилось", не хватает "не понравилось". Можно закрыть только блок целиком.

Еще грустно, что нельзя чистить историю прослушиваний: жена с моего аккаунта слушает "свою" музыку, от которой меня воротит, а избавиться от рекомендаций на основе этого треша – нельзя.
Очень бы хотелось увидеть несколько вещей:
1. Кнопка "Не нравится"
2. Возможность в мобильных версиях скачивать музыку не ставя "лайки" на отдельные треки и не добавляя все, что хочется скачать в плейлисты. Иногда хочется скачать что-нибудь по быстрому, перед метро.
3. Ну и хотелось бы увидеть при жизни музыку в высоком качестве. Если не лослесс, то хотя бы 320кб/с
amartynsh,
320 теперь только с подпиской)

Очень хотелось бы все таки шкалу оценок, хотя бы в 3 звезды, так как треки понравившиеся легче добавлять кнопкой "Нравится", а степень отметить нельзя. Чтобы потом из этой папки отсортировать только top rated.
По браузерной версии:
1) Публичные плейлисты с голосованием.
2) Периодическое добровольное анкетирование пользователей для более точного big data анализа вкусов. Вполне себя оправдывает, если это повысит точность рекомендаций.
3) Что-то типа кнопки "мне повезёт" - мгновенная рекомендация. Можно ограничить количество нажатий в сутки, чтобы излишне не перегружать сервера.
4) Можно ввести добровольную пятибалльную шкалу, отключаемую в настройках. Опять же во имя точности рекомендаций.
Было бы очень круто, если бы Яндекс.Музыка умела импортировать историю прослушиваний с lastfm. Тогда можно было бы составлять более точный прогноз пожеланий опираясь не многолетнюю историю, а не собирать все данные о предпочтениях пользователя с чистого листа.
Удалённый пользователь
25 марта 2015, 15:30
СПАСИБО ВАМ!
не знаю как остальным а мне сильно не хватает сброса рекомендаций.  Вкусы меняются и хочется иметь возможность слышать новое, а рекомендации с течением времени сильно ограничивают
Почему теперь рекомендации рандомно проигрываются?
еще есть куда расти
Дима Васильев
11 января 2016, 14:02
Молодцы, логично все продумали, усовершенствуйте далее.
Чем дольше пользуюсь, тем меньше хочется пользоваться рекомендациями. Я обычно слушаю альтернативу или vocal trance, зато подборка у меня теперь на 90% - смесь панка, попсы и какого-то унылого говна. Было бы не плохо мочь все начать заново, ну или сделайте кнопку "не нравится", что б больше не получать треки от этого исполнителя или в этом жанре.
пока все просто поживем увидим
Alexandr Litvinenko
29 марта 2016, 09:05
Ребята из Яндекса, огромная просьба.. Пожалуйста, при просмотре альбома, показывайте плз сразу в списке песен, какие из них я уже лайкнул.... отображайте напротив песен сердечко сразу же, а не только при наведении курсора. Ведь это несложно...
как слушать свой плейлист не по порядку...а РАНДОМНО??
Jonny,
есть же кнопка рядом с громкостью
Мужики подскажите,а как можно узнать или прокачать,или может у кого-нибудь из разработчиков есть  -полный каталог исполнителей на яндекс музыки(я обнаружил что есть код к каждому например artist 1 или 2 итд,но есть и пропуски -пустые страницы ошибка 404,хотелось бы знать каждого исполнителя и его порядковый номер,чтоб всех прослушать!!! Не поверю.что списка нету -может кто поможет мировому меломану,чтоб не тратить мне 10-ки лет,а пройти побыстрее все!!! В принципе у меня есть список исполнителей с 4 сайтов полный 2 миллиона песен и исполнителей,но все равно с  яндекс только по жанрам скачал все названия,но ведь исполнителей много,поэтому нужен полный список
Хороший сервис. В основном новую для себя музыку нахожу в рекомендациях, важно правильно расставить лайки на исполнителях и жанрах и тогда несколько треков в неделю удается найти.
Действительно, не хватает кнопки " не нравится", дабы каких-то исполнителей система не рекомендовала. Это отбор сделает более точным и узким.
Благодарю то что надо;)
Дарья Мамонтова
31 декабря 2016, 11:07
Сразу не настроила "Любимых исполнителей" и теперь не знаю что с этим делать. Очень обидно. Это можно как-то исправить?
Обновлено 31 декабря 2016, 11:07
reshetnikovdm@ect-center.com
10 февраля, 06:50
Неделю не послушаешь музыку и такое в подборку накидывает, что уши кровоточить начинают. Из где-то 20 треков 12-15 в мусор сразу.