Привет, Хабр! Меня зовут Данил Картушов. ?
В этом посте я расскажу, как музыкальная платформа Deezer, используя метаданные, с первых секунд научилась рекомендовать персонализированные треки новым пользователям!
Содержание
? Предисловие
Я достаточно долгое время пользовался Deezer, у них действительно хорошие рекомендательные системы, которые сразу после регистрации нашли музыку с моими интересами. По сравнению с Spotify, Yandex Music, VK Music, которым требуется что бы я прослушал N-ое количество треков. Поэтому эта статья это еще мой личный интерес рассказать тебе про их технологии.
Статья о которой я буду рассказывать — A Semi-Personalized System for User Cold Start Recommendation on Music Streaming Apps. Авторы статьи предоставили код в GitHub, поэтому вы можете посмотреть изнутри.
Если тебе что-то будет не понятно во время чтения статей, то я оставил для тебя глоссарий в конце, но еще имеются дополнительные материалы с конспектами в моем телеграм канале.
Хочу выразить отдельную благодарность за ревью Олегу Лашинину, Богдану Печёнкину.
⏳ Еще минутку
А ты не заметил, как за последние пару лет TikTok, Reels, Shorts, X и другие сервисы соревнуются за ваше время? Я бы даже назвал происходящее **"эрой одной минуты"**. Компании буквально научились покупать ваше время рекомендуя вам контент.
Интересно, что "эра одной минуты" не нова. Как показывает исследование Google, до 91% пользователей не идут дальше первой страницы результатов поиска, что подчеркивает важность первого впечатления.
Если хочешь спрятать тело — положи его на вторую страницу выдачи гугла!
Другими словами, компании уже давно научились с первых минут рекомендовать вам персонализированный контент!
❄️ Холодный старт
В рекомендательных системах тоже важно сходу порекомендовать нужный товар новому пользователю. Бизнесу важно, что бы клиенты приходили и оставались, а не зашли и фыркнули на “Да кто такая эта ваша Gemini” и ушли к конкурентам отдавать гроши.
Знаешь есть такой термин — холодный старт. Это когда наша модель не знает достаточно информации о пользователе, что бы смоделировать для него какие-либо рекомендации.
Введем обозначения:
Холодные — пользователи, по которым у нас мало данных: либо новые пользователи, либо пользователи, которые заходят редко и мало пользуются нашим сервисом.
Теплые — противоположность холодным пользователям, это наши активные юзеры интересы которых мы уже знаем.
Что бы не играть в русскую рулетку с холодными пользователями и не рекомендовать им какую нибудь чушь простым решением часто выступают — популярные товары. Так как такие товары пересекаются в интересах у многих пользователей.
Конечно, это отличный и простой вариант, но я тебе сейчас расскажу как можно персонализировать популярные рекомендации!
Давай собирать информацию при регистрации! Такие данные будут объединять и теплых, и холодных пользователей. Чаще всего это данные о возрасте, поле, географическом расположении то, исходя из этих данных, можно найти похожих пользователей и порекомендовать им более подходящие товары.
?️ Метаданные
Ты когда-нибудь замечал, что твой телефон как будто тебя слышит? Ты только сказал про новенький увлажнитель воздуха, как он появляется у тебя в рекламе. Так вот это компании собирают метаданные о тебе.
Так cookie часто хранят ваши метаданные, которые потом используют в различных частях сайта: рекомендации, отображения сайта с нужным размером или языком, собирают аналитику о пользователях для улучшения продукта.
Например, Lamoda, как только ты заходишь на сайт, знает, откуда ты зашел, с какого браузера, региона, какой язык у тебя стоит, какие действия ты делал на сайте, какие объекты смотрел или добавил в корзину.
Такие данные называются metadata, они находятся в твоих cookie файлах и помогают различным разработчикам сделать для тебя удобный сайт или рекомендации. Допустим, если мы знаем, что ты из СНГ, то сайт для тебя будет на русском языке; а если знаем, что ты зашел с Mozilla, то сделаем удобное и быстрое отображение сайта для тебя.
И конечно, логично использовать это, чтобы рекомендовать тебе хорошие товары! Если мы знаем, где ты находишься, и знаем какую-то информацию о тебе, например регион, пол, возраст, то уже можем сузить круг рекомендаций. Мы будем рекомендовать не просто популярные товары, а популярные в соответствии с твоими метаданными.
Например, работяге на заводе, вряд-ли будут интересны “Марафоны желаний”, которые у нас в “Популярном”.
❗ Метаданные — дополнительные данные или свойства о некотором объекте. Они ничего не говорят о предпочтениях пользователей напрямую, однако мы их можем собирать как с теплых, так и с холодных пользователей с первых секунд.
Этот подход уже используется на таких платформах, как Spotify и Netflix. Мы можем применить его и в нашем случае: возьмем данные о предпочтениях наших активных пользователей — теплых. Затем, используя информацию про их предпочтения, мы сможем сформировать рекомендации для новых, еще не изученных — холодных пользователей, предпочтения которых нам еще неизвестны. А мостиком между теплыми и холодными пользователями станут метаданные.
? Интуиция
Допустим у нас есть пользователи, которые образуют разные подгруппы: любители репа, рока, пост панка, меломаны и тд. И для теплых пользователей мы можем сформировать эти группы так как знаем их предпочтения и какие лайки на какие треки они поставили.
Но еще мы знаем их пол, возраст и другие данные при регистрации. А значит можем составить какой-то портрет нашего пользователя усреднив эти данные.
Круто, ведь теперь мы можем посмотреть, а какие из этих портретов больше подходят нашему юзеру?
Стетхем на картинке наверное фанат попсы и репа, так как его значения метаданных ближе всего подходят к значениям в сегментах. Вот и давай ему посоветуем Анну Асти и Пост-Малона, которые будут в топе у пользователей в этих сегментах.
Но Deezer тебя буквально при регистрации спросят: окей, давай ты нам покажешь 10 артистов, которые тебе нравятся, а мы будем тебе накидывать еще похожих артистов. И тогда ты нам расскажешь кто тебе нравится.
Пока что представим нашу модель как черную коробку, которой на вход идут эти метаданные, а также какие еще клики сделал пользователь среди выданных ему объектов, что искал в поиске, и тд.
И каждый раз, когда он будет выбирать товар, мы будем предлагать ему еще релевантные товары в этот список, там самым дополняя некоторый вектор его предпочтений с метаданными.
Я хочу ввести некоторое обозначение, что бы не путаться: метаэмбеддинги — это некоторый вектор данные, которые неявно говорят о предпочтениях пользователя. То-есть он не выделил нам какие-то конкретные треки, которые ему нравились, ведь исполнитель может менять свои стили или вообще состав группы. А например запросы в поиске “Joji” не говорит нам какого именно Joji искал пользователь, может он просто фанат Аниме или сел на клавиатуру.
? Под капотом Deezer
Теперь, когда ты интуитивно понял принцип работы, мы можем узнать больше технических деталей.
? Если ты все еще не знаком с моделью ALS, KNN то по ссылке можно найти конспекты про эти модели!
USER-ITEM Embeddings
Наверное, уже классикой стало использование коллаборативных фильтраций, которые отлично аппроксимируют отношения между пользователями и объектами, и Deezer не стали исключением.
Давай просто будем брать модель ALS, из которой мы можем получить две матрицы: USER и ITEM они и будут являться нашими главными эмбеддингами.
Давай чуть разберемся, главные эмбеддинги это то, что мы собираемся предсказывать. То-есть наша модель зная косвенные признаки холодного пользователя, а именно метаданные, данные при регистрации, метаэмбеддинги будет предсказывать вектор главных эмбеддингов встраивая пользователя в теплые сразу после регистрации.
ITEM-ITEM Embeddings
Большинство моделей рекомендательных систем работают на item-item эмбеддингах, которые тоже достаточно быстро интегрируются с холодными пользователями и дают результаты. Такие эмбеддинги например можно использовать если бы мы рекомендовали похожие объекты по каким-то свойствам.
Забавно, но для item-item эмбеддингов в Deezer использовали SVD, подкрепляя это статьей с NeurIPS, которая гласит, что симметричные матрицы в Word2Vec с "negative sampling" лучше отображают гомофилию — схожие объекты находятся чуть ближе друг к другу, образуя неявные кластеры. Следовательно, их проще отделить, они лучше факторизуются, а значит, скрытые взаимодействия ****более явно проявляются.
? Open AI когда-то рассказывали что-то подобное основывая на концепции сжатия данных и это то-что мы видим у LLM моделей сейчас.
По аналогии с user-item эмбеддингами мы получаем матрицы, которые в дальнейшем будем использовать для кластеризации и обучения наших моделей.
Кластеризация
При помощи K-means вычисляем кластеры пользователей и усредняем различные метаэмбеддинги между теплыми пользователями. Для центроиды мы также считаем популярные товары, которые первым делом будем предлагать нашим холодным пользователям.
И в целом, мы уже могли бы остановиться и рекомендовать популярные товары, если наш холодный пользователь входит в один из центроидов. Это отлично подойдет для тех пользователей, которые только-только зашли в приложение и еще не сделали кликов, чтобы наша модель добавлял объекты.
Но, как заверяет Deezer, мы можем добавить более простые модели, например, KNN, которая будет искать сходства эмбеддингов относительно наших пользователей. Такое решение может быть достаточно шумным. Так что они решили встраивать решения в нейросеть.
Нейросети
Теперь самое интересное: мы уже посчитали средние значения в каждой центроиде метаэмбеддингов для наших горячих пользователей.
Далее мы создаем новый вектор для каждой сессии или пользователя, который соединяет все эти усредненные вектора и учим нашу модель предсказать главный эмбеддинг, который соответствует этой сессии или пользователю.
После чего мы уже можем использовать классические варианты KNN или AKNN, чтобы найти похожих пользователей.
Хочется заметить, что в оригинальной статье выделяют две модели:
Полу-персонализированные рекомендации, которые на самом деле используются в производстве Deezer. В этом случае 50 рекомендованных треков для каждого пользователя будут соответствовать 50 самым популярным трекам его сегмента пользователей.
Персонализированные рекомендации, которые непосредственно используют предсказанные векторы эмбеддингов каждого холодного пользователя из нейронной сети. В этом случае мы рекомендуем для каждого холодного пользователя 50 ближайших соседей по музыкальным трекам в пространстве эмбеддингов, основываясь на косинусной схожести.
Немного расскажу о дизайне, например, у нас есть некоторые модели, ранжирование, кандидатки, и перед нами стоит задача за один день встроить холодных пользователей в кандидатки. Тогда все, что нам нужно, это собрать как можно больше данных о пользователе после регистрации. Тогда под нашу систему будут попадать все пользователи, которые еще не зарегистрировались.
Из горячих пользователей мы можем собрать данные в их первые дни регистрации или просто "симулировать" регистрацию. Тем самым собрав из горячих пользователей псевдо-холодных, другими словами, представим, что наши горячие пользователи только-только зашли на сайт.
Далее получим эмбеддинги с помощью ALS или SVD, и в целом мы можем делать это в офлайне. И все, что нам остается, это сегментировать эти эмбеддинги и посчитать средние значения для каждой центроиды, что тоже можно сделать в офлайне.
А теперь нам нужно обучить нашу модель. Мы возьмем все наши метаданные и доступные эмбеддинги, которые пересекаются у горячих и холодных пользователей в день регистрации, и это будут наши фичи. А таргетом будут эмбеддинги, которые мы получили с помощью ALS. Теперь мы просто обучаем модель на данных псевдо-холодных пользователей.
В целом все готово! Если наш новый пользователь будет регистрироваться, то в онлайне мы уже можем получать метаданные пользователей и (мета-) эмбеддинги. Предсказывать (главные-) эмбеддинги и искать похожие усредненные значения (главных-) эмбеддингов у горячих пользователей, которые мы предрасчитывали в офлайне. А далее остается получить K взаимодействий пользователя, чтобы понимать его предпочтения.
Результаты
Полуперсонализированные рекомендации в среднем работают лучше, чем полностью персонализированные
На основе технологии SVD полуперсонализированные рекомендации Deezer показали увеличение Precision@50 на 13% по сравнению с полностью персонализированными
При использовании другой технологии, ALS, оба подхода показали хорошие результаты, но полностью персонализированные рекомендации оказались чуть более сильными
Эти результаты помогают Deezer делать музыкальные предложения новым пользователям еще более точными и интересными, даже если о системе известно очень мало.
? Глоссарий
Коллаборативная фильтрация — метод рекомендации, основанный на сборе и анализе информации о поведенческих предпочтениях пользователей и предпочтениях других людей. Используется для прогнозирования предпочтений пользователя на основе предпочтений схожих пользователей.
Факторизация — математический процесс разложения сложных структур (например, матриц) на более простые компоненты, которые легче анализировать и обрабатывать. В контексте рекомендательных систем это часто связано с уменьшением размерности данных.
ALS (Alternating Least Squares) — метод факторизации матриц, используемый для нахождения приближенных решений в задачах, где данные содержат пропуски. Часто применяется в коллаборативной фильтрации для определения скрытых факторов в данных о предпочтениях пользователей.
SVD (Singular value decomposition) — метод факторизации матриц, тоже используется для разложение на две и более матриц.
KNN (K-Nearest Neighbors) — алгоритм машинного обучения, который классифицирует объекты на основе ближайших обучающих примеров в пространстве признаков. В контексте рекомендательных систем используется для нахождения объектов наиболее похожих на те, которые нравятся пользователю.
Эмбеддинг — представление объектов, таких как слова, товары или пользователи, в виде векторов в низкоразмерном пространстве. Эмбеддинги позволяют моделировать сходство и различные связи между объектами.
Гомофилия — тенденция подобных объектов или индивидов агрегироваться или быть более похожими друг на друга в определенных аспектах, чем на случайно выбранных членов той же популяции. ****
Гетерофилия — тенденция различных объектов или индивидов агрегироваться или быть менее похожими друг на друга, противоположность гомофилии.
Кластеризация — процесс группировки набора объектов таким образом, чтобы объекты в одной группе (кластере) были более похожи друг на друга, чем на те, что в других группах.
K-means — популярный алгоритм кластеризации, который разделяет набор данных на K предопределенных различных непересекающихся подмножеств (кластеров), минимизируя сумму квадратов расстояний от каждой точки до центра её кластера.
? Приложение
Комментарии (7)
ivandreevich11
07.05.2024 09:19Дизер всегда первым делом узнает твои музыкальные предпочтения! Статья для новичка супер, особенно Глоссарий!
exTvr
07.05.2024 09:19+1Дизер всегда первым делом узнает твои музыкальные предпочтения
Так же как и спотифуй и эплмюзик.
Zara6502
07.05.2024 09:19Автор, вы не в США, тыкать вы будете своим друзьям, а к незнакомым людям обращаются на Вы. Это же элементарная вежливость. Я на Вы обращаюсь ко всем, даже к маленьким детям, не матерюсь, даже когда я один, ну не обезьяна же я в конце концов, а человек разумный.
uhf
07.05.2024 09:19+1Может, для рекомендации музыки, нужно доставать эмбеддинги тоже из музыки? Да не, фигня какая-то...
domix32
Так он же первым делом это спрашивает, не?