RecSys · учебник
Тренажёр Виджеты Повторение О проекте

Рекомендательные системы

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

Чем это отличается от конспекта
  • Всё проверяется. Каждое число посчитано скриптом из этого же репозитория или сверено с исходником. Математика виджетов сверена с независимой реализацией на Python — расхождение допускается до 1e-9.
  • Виджеты, а не картинки. Двадцать шесть интерактивных демонстраций, где параметр можно подвигать и увидеть, что происходит с метрикой. Это не иллюстрации: внутри настоящие вычисления.
  • Разбор живой системы. Отдельная часть читает открытый код реальной ленты — по дорожке запроса, с реальными весами из конфигов.

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

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

Часть I · Постановка и измерение

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

Глава 1

Задача и воронка

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

длинный хвостзакон Ципфаворонкастейкхолдеры
Глава 2

Данные и смещения

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

implicitлогирующая политикаfeedback loopпозиционное смещение
Глава 3

Метрики

У кандидатогенерации и ранжирования разные задачи, поэтому и метрики разные: полнота против порядка. Плюс тонкости, на которых ловят: Recall при фиксированном K, AUC без калибровки, усреднение по запросам.

Recall@KNDCGAUCкалибровка
Глава 4

Валидация и эксперимент

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

сплитыутечкиMDEподглядывание

Часть II · Кандидатогенерация

Как из миллионов кандидатов достать сотню за миллисекунды и не потерять по дороге нужное.

Глава 5

Коллаборативная фильтрация

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

JaccardPMIEASESLIM
Глава 6

Матричная факторизация

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

ALSiALSрангfold-in
Глава 7

Двухбашенные модели

Ранжирующий лосс, отличный на второй стадии, для кандидатогенератора смертелен — и причина не в качестве модели, а в вырожденности задачи. Отсюда софтмакс по каталогу и три инженерные поправки.

foldingнегативыLogQтемпература
Глава 8

Кодирование объектов

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

трансдуктивностьмеморизацияone-epochхеш-трюк
Глава 9

ANN и semantic IDs

Векторы обучены — осталось по ним искать. Почему точный перебор не влезает в бюджет, как устроен HNSW и какой ручкой в нём меняют полноту на скорость.

MIPSHNSWквантизацияsemantic IDs

Часть III · Ранжирование

Сотня кандидатов есть — теперь их надо упорядочить: чему учить модель, что подавать ей на вход и как совместить несколько целей сразу.

Глава 10

Обучение ранжированию

«Какой лосс взять» выглядит выбором из каталога, а на деле это выбор того, что именно вы объявляете правдой: релевантность, наблюдаемый порядок или структуру показанного списка.

BPRLambdaRankYetiRankкалибровка
Глава 11

Признаки

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

кардинальностьэмбеддинг-слойPLEsparse-градиенты
Глава 12

Взаимодействия признаков

История из шести шагов, где каждый следующий чинит поломку предыдущего — от кросс-признаков до DCN-v2. И главный тезис главы: MLP не выучивает произведение сам.

FMDCN-v2низкий рангskip connections
Глава 13

Мультизадачность и дистилляция

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

MMoEESMMbias-башняdark knowledge

Часть IV · Последовательности и выдача

История пользователя как вход и выдача как единое целое: что показывать вместе и что показать впервые.

Часть V · Инженерия

То, на чём всё предыдущее стоит: откуда берутся признаки в момент запроса и как система ведёт себя под нагрузкой.

Часть VI · Проектирование

Сборка всего предыдущего в одну процедуру — ту самую, по которой отвечают на системный вопрос собеседования.

Что ещё есть в каждой главе

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

Разбор открытого кода реальной ленты

Открытый код ленты «For You» в X

X выложил исходники своей главной ленты: 2028 файлов на Rust, Python, Scala и Java. Одиннадцать глав разбирают систему по дорожке запроса: реальные веса действий из кода, вывод формул, схемы и четыре виджета на настоящих числах. Все числа сверяются с исходниками автоматически. Теория объясняет, почему так делают; здесь видно, как это выглядит, когда написано всерьёз.

Глава x00

Обзор

Что именно выложили, чем две дорожки ленты отличаются друг от друга и как устроен репозиторий на 2028 файлов.

две дорожкикарта репозитория
Глава x01

Пайплайн

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

стадиигидратация запроса
Глава x02

Источники

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

ThunderSimClustersквоты
Глава x03

Retrieval

Двухбашенная модель в рабочем виде: как в коде устроены башни и чем там оказываются semantic IDs.

две башниsemantic IDs
Глава x04

Ранжирование

Ранжирующий трансформер и приём, ради которого он так устроен: кандидаты изолированы друг от друга внутри батча.

трансформеризоляция кандидатов
Глава x05

Скоринг

Реальные веса действий из конфигов, поправки к ним и то, как из отдельных вероятностей собирается один скор.

веса действийпоправкиDPP
Глава x06

Фильтры

Двадцать девять фильтров, их порядок — и что этот порядок говорит о стоимости каждого.

29 фильтровпорядок
Глава x07

Видимость

Разметка контента, правила видимости и репутация автора: слой, который решает не «что выше», а «показывать ли вообще».

разметкаправиларепутация
Глава x08

Блендинг

Как в ленту подмешивают рекламу и не-посты и какими долями это управляется.

рекламане-постыдоли
Глава x09

Конфигурация

Параметры, вынесенные в конфиги, и что по ним видно об устройстве экспериментов.

параметрыэксперименты
Глава x10

Чему учит

Что этот код говорит о теории из первой части — и пять мест, где он с ней расходится.

выводы о теориипять расхождений

Код X распространяется под Apache 2.0. Каждый процитированный фрагмент подписан файлом и коммитом; разбор вокруг него — наш.

Чем пользоваться по ходу

Тренажёр метрик

Шестнадцать типов задач с проверкой ответа и разбором: Precision, Recall, MRR, MAP, NDCG, AUC, матрица ошибок, сглаженный CTR, IPS, фильтр Блума. Статистика по типам добивает слабые места. → открыть

Режим повторения

Все вопросы с собеседований в одном месте: карточки, отметки «знаю / повторить», фильтр по главам, случайный вопрос. → открыть

Полный список интерактивных демонстраций с описанием, что каждая показывает, — в каталоге виджетов. Поиск по всему учебнику — на Cmd/Ctrl + K.