Переранжирование и разнообразие в fashion-рекомендациях item-to-item
Fashion item-to-item рекомендации возвращают много почти одинаковых вещей. Как разделить ответственность retrieval, ranking и reranking, чтобы сохранить релевантность и добавить разнообразие?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Retrieval должен отвечать за recall, ранкер - за релевантность и бизнес-сигналы, а финальный reranking - за явные list-level ограничения: coverage категорий, штраф за дубликаты, MMR или похожие правила.
Подробный разбор
Начните с разделения стадий. Retrieval-модель находит совместимые кандидаты по embeddings или атрибутным фильтрам. Ранкер сортирует их по предсказанной релевантности или бизнес-ценности. Финальный слой reranking уже навешивает ограничения, которые неудобно учить pointwise-моделью: не показывать много почти одинаковых вещей, сохранять баланс категорий и выполнять продуктовые правила.
Для diversity сначала определите, что именно должно быть разнообразным. В fashion это могут быть категории в образе, цвета, бренды, ценовые сегменты или визуальная похожесть. Практические методы: штрафовать кандидатов, слишком близких к уже выбранным; использовать MMR; выбирать из category buckets; добавлять coverage constraints; обучать ранкер с diversity-aware признаками.
Оценивайте и релевантность, и качество списка. Candidate recall@K и NDCG недостаточно, если финальная выдача выглядит повторяющейся. Добавьте coverage, category entropy, intra-list similarity, serendipity или доменную метрику полноты образа, а затем проверьте online через бизнес-метрики и guardrails.
Типичные ошибки
- Считать reranking еще одним pointwise-классификатором.
- Мерить только recall и игнорировать почти одинаковые повторы.
- Определять diversity без связи с продуктовой семантикой.
- Пытаться засунуть все бизнес-правила в retrieval-модель.
Как сказать на собеседовании
- Назовите один конкретный метод reranking и одну diversity-метрику.
- Объясните, почему retrieval, ranking и reranking оптимизируют разные цели.
Офлайн-метрики рекомендаций: recall@K, precision@K, coverage и NDCG
Сравните recall@K, precision@K, coverage и NDCG для candidate generation и ранжирования. Как эти метрики ведут себя при изменении K?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Recall@K показывает, какая доля релевантных объектов попала в top K; precision@K - какая доля top K релевантна; coverage - какую часть каталога или пользователей покрывает система; NDCG учитывает релевантность с дисконтом по позиции.
Подробный разбор
Recall@K - это число релевантных объектов, найденных в top K, деленное на все релевантные объекты для запроса или пользователя. Для candidate generation это часто главная offline-метрика: следующая стадия уже не восстановит кандидатов, которых retrieval не достал. При росте K recall не убывает.
Precision@K - число релевантных объектов в top K, деленное на K. Она отражает концентрацию хороших объектов наверху списка и часто падает при росте K, потому что дальние позиции сложнее удерживать релевантными.
Coverage - отдельное семейство метрик. Это может быть catalog coverage, user coverage, покрытие известных positives у candidate generator или покрытие бизнес-правил после фильтров. Всегда называйте denominator: coverage чего именно вы считаете.
NDCG учитывает и релевантность, и позицию. Высоко релевантные объекты наверху дают больший вклад, чем те же объекты ниже, потому что DCG применяет логарифмический discount по позиции, а NDCG нормирует результат на идеальный ranking.
Типичные ошибки
- Путать denominator у recall и precision.
- Считать, что precision обязана монотонно расти или падать при изменении K.
- Говорить coverage без уточнения, coverage чего именно.
- Использовать NDCG, не определив binary или graded relevance labels.
Как сказать на собеседовании
- Явно напишите формулы recall@K и precision@K.
- Скажите, что offline-метрики все равно нужно валидировать online через A/B.
Обучение pointwise-ранкера без утечек и перекоса в популярные товары
Вы обучаете boosting-ранкер для рекомендаций по кликам и связкам образов. Как собрать датасет, сделать train/validation/test split и не переобучиться на популярные товары и старые показы?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Соберите примеры из реально показанных user-item или item-item пар, делайте temporal train/validation/test split, тюньте только по validation и проверяйте, что модель не тащит наверх только популярные товары из старых логов показов.
Подробный разбор
Для pointwise-ранкера каждая строка должна описывать решение, которое система реально могла принять: user-item или source-item-candidate пару, признаки, доступные на serving-time, контекст показа и label вроде click, outfit membership, purchase или weighted engagement. Негативы по возможности берите из показанных, но не кликнутых кандидатов; случайные негативы полезны, но могут сделать задачу слишком легкой.
Делите по времени, чтобы модель училась на прошлом и оценивалась на будущем. Минимум нужны train, validation и test: гиперпараметры подбираются по validation, а финальные метрики один раз считаются на held-out test. Если тюнить и репортить качество на одном и том же будущем fold, метрика будет оптимистичной.
Перекос в популярные товары появляется, когда модель слишком доверяет общей популярности: товар часто показывали, по нему чаще кликали, и модель снова тащит его наверх. Чтобы это заметить, сравните качество не только в среднем, но и по группам пользователей, категориям и новым товарам. Проверьте, что у модели есть признаки пользователя и контекста показа, а не только признаки самого товара. В негативные примеры берите не только случайные товары, но и товары, которые реально показывали пользователю, но он их не выбрал.
После обучения отдельно посмотрите, не стала ли выдача однообразной: сколько разных категорий и непопулярных товаров попадает в рекомендации, не просели ли новые товары и узкие сегменты. Финальную проверку все равно делайте в A/B-тесте: офлайн-метрика может выглядеть хорошо, даже если пользователю показывают одни и те же популярные вещи.
Типичные ошибки
- Тюнить гиперпараметры и репортить финальное качество на одном validation fold.
- Использовать только случайные негативы и игнорировать товары, которые показали, но по ним не кликнули.
- Учить модель на популярности товара и называть это персонализацией.
- Делить данные случайно по времени и случайно использовать будущие признаки каталога или будущую популярность товара.
Как сказать на собеседовании
- Явно скажите: train, validation и test split по времени.
- Скажите простыми словами: в логах есть только показанные товары, а популярные товары получают больше показов и кликов, поэтому модель может переучиться на старую выдачу.
Генераторы кандидатов и ALS для implicit-feedback рекомендаций
Какие генераторы кандидатов можно использовать в рекомендательной системе? Где в этом стеке находится ALS по implicit feedback, в чем его сильные стороны и ограничения?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Используйте несколько генераторов: popularity, правила, full-text, content embeddings, item-to-item, collaborative filtering, ALS/LightFM и two-tower retrieval. ALS факторизует user-item feedback в embeddings и достает объекты с высоким dot product.
Подробный разбор
В production recommender обычно смешивают несколько источников кандидатов. Popularity и freshness - сильные fallback-и. Full-text и атрибутные фильтры покрывают явный intent. Content embeddings достают семантически похожие объекты. Item-to-item генераторы стартуют от объекта из истории пользователя. Collaborative methods достают то, что нравилось похожим пользователям. Two-tower модели учат user и item embeddings для быстрого ANN retrieval.
ALS - конкретный алгоритм matrix factorization внутри семейства collaborative filtering. Для implicit feedback строится user-item матрица из views, clicks, likes, comments, shares или purchases, часто как weighted confidence, а не как чистые binary labels. ALS по очереди оптимизирует user factors при фиксированных item factors и item factors при фиксированных user factors.
Сильные стороны ALS - простота, масштабируемость и полезный collaborative signal. Слабые - cold start, ограниченная выразительность linear dot product, зависимость от истории interactions и чувствительность к popularity/exposure bias. Часто это baseline или один generator, а не вся рекомендательная система.
Типичные ошибки
- Считать ALS и collaborative filtering синонимами.
- Использовать один generator и пропустить cold-start или content cases.
- Смешивать разные feedback actions, не определив веса.
- Забывать, что ALS не умеет представлять новых пользователей и новые items без дополнительных признаков.
Как сказать на собеседовании
- Перечислите generators по источнику сигнала: popularity, content, collaborative и neural retrieval.
- Объясните ALS как alternating optimization факторизованной interaction matrix.
SASRec и база Transformer для рекомендательных систем
Объясните SASRec как последовательную рекомендательную модель, устройство self-attention в Transformer и отличие SASRec от BERT4Rec.
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
SASRec - causal self-attention sequential recommender, который предсказывает следующий item по предыдущим. BERT4Rec bidirectional и обычно обучается через masked-item prediction.
Подробный разбор
SASRec представляет последовательность взаимодействий пользователя как tokens и применяет Transformer self-attention, чтобы предсказать следующий item. Обычно это decoder-style или causal setup: каждая позиция должна attend только на предыдущие позиции, чтобы модель не видела будущее во время обучения.
В scaled dot-product attention каждый token порождает queries, keys и values. Dot products между query и key оценивают, какие предыдущие tokens важны; деление на квадратный корень из key dimension стабилизирует logits; softmax превращает scores в веса; weighted sum по values дает contextualized representations. Multi-head attention повторяет это в нескольких subspaces.
BERT4Rec использует BERT-like bidirectional encoder и masked-item training: часть items скрывается, а модель предсказывает их по левому и правому контексту. SASRec ближе к autoregressive next-item prediction. Выбор зависит от serving objective и от того, доступен ли future context в training task.
Типичные ошибки
- Разрешить модели attend на будущие items в next-item setup.
- Объяснять attention только как “смотрим на важные токены” без Q/K/V.
- Путать causal training в SASRec и masked training в BERT4Rec.
- Игнорировать serving-time latency и ограничения candidate retrieval.
Как сказать на собеседовании
- Упомяните causal mask для SASRec.
- Используйте Q, K, V и scaled softmax при объяснении attention.