Привет! Меня зовут Александр Плошкин, я руковожу группой развития качества персонализации в Яндексе. Сегодня мы открываем доступ к одному из крупнейших рекомендательных датасетов — Yambda. Он содержит 4,79 миллиардов обезличенных пользовательских действий, собранных за 10 месяцев использования сервиса Яндекс Музыка.

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

Рекомендательные алгоритмы помогают людям находить нужные товары, фильмы, музыку и многое другое — именно они лежат в основе сервисов: от интернет‑магазинов до онлайн‑кинотеатров. Развитие этих алгоритмов напрямую зависит от научных исследований, для которых нужны качественные и объёмные датасеты. При этом опенсорс‑датасеты чаще всего невелики по размеру или уже устарели, так как коммерческие компании, которые накапливают терабайты данных, редко их публикуют.

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

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

Зачем нужны масштабные открытые датасеты

В последние годы рекомендательные системы переживают настоящий ренессанс. Технологические компании всё активнее внедряют трансформерные модели, вдохновившись успехами LLM в других областях. Как показал опыт CV и NLP, объём данных критически влияет на применимость методов: трансформеры не слишком эффективны на малых выборках, но становятся почти безальтернативными при масштабировании до миллиардов токенов.

В рекомендательной области действительно крупные открытые датасеты — редкость. Известные LFM-1B, LFM-2B и Music Listening Histories Dataset (27B) со временем стали недоступны из‑за лицензионных ограничений. А рекорд по числу взаимодействий сейчас держит рекламный датасет от Criteo — около 4 миллиардов событий.

Это создаёт проблему для исследователей: у большинства из них нет доступа к web‑scale‑сервисам, а значит — и возможности тестировать алгоритмы в условиях, приближенных к боевым. Популярные датасеты вроде MovieLens, Steam или Netflix Prize содержат от силы десятки миллионов взаимодействий и, как правило, фокусируются на явной обратной связи — рейтингах и отзывах. Между тем промышленные рекомендательные системы работают с гораздо более разнообразными и тонкими сигналами: кликами, лайками, дослушиваниями, просмотрами, покупками и так далее.

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

Чтобы решить эти проблемы и способствовать развитию новых алгоритмов в рекомендательных системах, мы открываем Yambda — YAndex Music Billion‑interactions DAtaset. Это крупнейший на сегодня открытый датасет пользовательских взаимодействий в рекомендательном домене.

Из чего состоит Yambda

Датасет включает действия 1 миллиона пользователей с более чем 9 миллионами музыкальных треков из сервиса Яндекс Музыка — всего 4,79 миллиарда взаимодействий.

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

В датасете доступны основные implicit‑ и explicit‑действия пользователей:

  • Listen — пользователь прослушал музыкальный трек.

  • Like — пользователь поставил лайк треку (отметка «Нравится»).

  • Unlike — пользователь отменил лайк.

  • Dislike — пользователь поставил дизлайк (отметка «Не нравится»).

  • Undislike — пользователь отменил дизлайк.

Для бóльшей доступности мы выкладываем также уменьшенные сэмплы по 480 миллионов и 48 миллионов событий соответственно. Статистика по ним приведена в таблице:

Данные хранятся в формате Apache Parquet, который из коробки поддерживают библиотеки анализа данных на Python вроде Pandas и Polars. Для удобства использования датасет полностью продублирован в двух форматах:

  • flat — каждая строка таблицы содержит одно взаимодействие между пользователем и треком.

  • sequential — в каждой строке таблицы хранится полная история действий одного пользователя.

Структура файлов следующая:

data/
├── artist_item_mapping.parquet
├── album_item_mapping.parquet
├── embeddings.parquet
├── flat/
│   └── 5b/
│       ├── listens.parquet
│       ├── likes.parquet
│       ├── dislikes.parquet
│       ├── unlikes.parquet
│       ├── undislikes.parquet
│       └── multi_event.parquet
│   └── 500m/
│       └── ...
│   └── 50m/
│       └── ...
└── sequential/
    ├── 5b/
    ├── 500m/
    └── 50m/

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

Если is_organic = 0, значит, событие произошло в результате рекомендаций — например, в персонализированном музыкальном потоке или рекомендательном плейлисте. Все остальные действия считаются органическими — то есть пользователи нашли контент самостоятельно.

Ниже в таблице приведена статистика по рекомендательным событиям:

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

Чтобы лучше понять структуру данных, мы собрали краткую статистику по нашему датасету:

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

При этом у распределения по трекам совсем другая картина:

На этом графике отчётливо виден дисбаланс между самыми популярными треками и большой массой достаточно нишевых композиций: больше чем у 90% треков до 100 прослушиваний за весь период сбора датасета. При этом рекомендательным системам важно работать с полным каталогом, чтобы находить даже малопопулярные композиции, хорошо соответствующие вкусам пользователей.

Как использовать Yambda для оценки качества алгоритмов

В академических исследованиях качества рекомендательных алгоритмов часто используется схема Leave‑One‑Out (LOO) — когда из истории пользователя одно действие откладывается в тест, а остальные используются для обучения. Однако у этого подхода есть серьёзные ограничения:

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

  • Уравнивание всех пользователей: неактивные пользователи вносят такой же вклад в метрику, как и активные, что искажает картину.

Чтобы приблизить условия оценки к реальному сценарию использования рекомендательной системы, мы предлагаем альтернативу — global temporal split.

Суть метода проста: выбирается некий момент времени T, и все события после него исключаются из обучающего набора. Таким образом, модель обучается на прошлом и тестируется на будущем — как и в настоящем продакшне. Более наглядно на схеме:

Для наших замеров мы оставили один день в отложенной выборке по двум причинам:

  1. Большой объём данных даже для одного дня позволяет достоверно оценить качество работы алгоритмов.

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

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

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

Бейзлайны

Мы протестировали несколько популярных рекомендательных алгоритмов на Yambda, чтобы предоставить бейзлайны для будущих исследований и сравнений. Мы выбрали MostPop, DecayPop, ItemKNN, iALS, BPR, SANSA, SASRec. В качестве метрик мы использовали следующие:

  • NDCG@k (Normalized Discounted Cumulative Gain) оценивает качество ранжирования рекомендаций.

  • Recall@k измеряет способность алгоритма генерировать релевантные рекомендации из общего набора возможных рекомендаций.

  • Coverage@k показывает, насколько широко представлен каталог элементов в рекомендации.

Результаты представлены в таблицах, а код — на Hugging Face.


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

Датасет представлен в трёх вариантах: полная версия содержит 5 миллиардов данных, уменьшенные — 500 миллионов и 50 миллионов. Разработчики и исследователи смогут выбрать тот вариант, который отвечает их задаче и имеющимся вычислительным ресурсам. Данные датасета и код для оценки замеров доступны на Hugging Face.

Будем рады, если этот датасет окажется полезным в ваших экспериментах и исследованиях!

Комментарии (12)


  1. diakin
    28.05.2025 09:24

    Привет! Меня зовут Александр Плошкин, я руковожу группой развития качества персонализации в Яндексе. Сегодня мы открываем доступ к одному из крупнейших

    Привет! Меня зовут Александр Плошкин, я руковожу группой развития качества персонализации в Яндексе. Сегодня мы открываем доступ к одному из крупнейших 

    "У нас этого никто не замечает... у нас этого никто не замечает " (с)


    1. cartonworld
      28.05.2025 09:24

      Можно выделить текст, нажать [Ctrl + Enter], и отправить личное сообщение с описанием ошибки


      1. Adgh
        28.05.2025 09:24

        Сейчас Habr заставляет при этом бесконечно разгадывать капчу, я "сломался" после четвертой успешно разгаданной подряд. А для комментариев капчи нет) Привет, Habr!


      1. diakin
        28.05.2025 09:24

        Тогда не тот эффект!


      1. Maccimo
        28.05.2025 09:24

        Можно проявить уважение к читателям и вычитать текст перед публикацией.


      1. Newbilius
        28.05.2025 09:24

        Покажите, где у меня на стоковом Андроиде Ctrl, который реально нажать с Enter, ммм?


  1. svetayet
    28.05.2025 09:24

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


    1. PanDubls
      28.05.2025 09:24

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


      1. svetayet
        28.05.2025 09:24

        Это да. А меня всегда интересовало, есть ли критерии по содержанию песни. Ну типа этому человеку нравятся грустные песни, а не веселые; мужскими голосами спетые, а не женскими; на такую-то тему, а не на такую-то :). Или это я уже слишком усложняю, чтоб система портрет слушателя рисовала.


        1. ganzmavag
          28.05.2025 09:24

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

          Они как-то тут писали про эту технологию, она создает портрет песни по аудио и способна находить похожие.


  1. lleo_aha
    28.05.2025 09:24

    Теперь можно в базе попробовать себя найти на основе лайков в яндекс музыке


  1. pnmv
    28.05.2025 09:24

    Если is_organic = 0, значит, событие произошло в результате рекомендаций — например, в персонализированном музыкальном потоке или рекомендательном плейлисте.

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

    простой is_organic не очень интересен (уровень полезности - в районе пятидесяти процентов).