Learning RecSys on Graphs.
Если собрать все данные, которые порождает какой-нибудь продукт (e.g. Яндекс Маркет), получится граф. Строить рекомендации для пользователей с помощью этого графа — это ключевая задача рекомендательной системы.
Вершинами в графе являются всевозможные сущности и объекты — пользователи, товары, поисковые запросы, etc.
Ребра — это взаимодействия между сущностями: e.g. взаимодействия пользователей с товарами, клики на товары по запросу, etc. Метаданные ребер содержат контекст взаимодействия, e.g. время и тип взаимодействия, девайс пользователя, поверхность рекомендации.
Граф — гетерогенный (разнородный). Вершины и ребра в нем имеют разные типы, содержат разные наборы информации.
Это гиперграф. В нем есть гиперребра — ребра, объединяющие произвольное количество вершин. Например, купленные вместе товары (i.e. basket).
Граф — динамический. Он развивается со временем; поток событий в системе порождает новые ребра в графе.
Еще есть граф знаний. Все метаданные вершин можно представить в виде графа с “семантическими вершинами”, e.g. категориями и характеристиками товаров. Сами семантические ноды могут быть связаны между собой, e.g. таксономия категорий товаров.
А еще можно построить граф сразу для всей экосистемы. Добавить в тот же граф для Маркета данные из других сервисов, т.н. кросс-доменный граф: пользователей, айтемы, их метаданные и всевозможные типы взаимодействий.
Задача графовых моделей — извлечь максимум пользы из этих данных. Любые модели рекомендаций так или иначе оперируют этим графом, но, как правило, игнорируют большую его часть. Например, sequential модели (e.g. SASRec) часто рассматривают только пользователей и айтемы, оставляют только один тип ребра, при этом выкидывают все метаданные айтемов и ребер (кроме их порядка по времени), убирают граф знаний и кросс-доменную информацию.
Обучить ультимативную графовую модель на всех данных, получив универсальные эмбеддинги для всех сущностей в системе — одна из задач, которой мы с командой занимаемся в Яндексе.
Если собрать все данные, которые порождает какой-нибудь продукт (e.g. Яндекс Маркет), получится граф. Строить рекомендации для пользователей с помощью этого графа — это ключевая задача рекомендательной системы.
Вершинами в графе являются всевозможные сущности и объекты — пользователи, товары, поисковые запросы, etc.
Ребра — это взаимодействия между сущностями: e.g. взаимодействия пользователей с товарами, клики на товары по запросу, etc. Метаданные ребер содержат контекст взаимодействия, e.g. время и тип взаимодействия, девайс пользователя, поверхность рекомендации.
Граф — гетерогенный (разнородный). Вершины и ребра в нем имеют разные типы, содержат разные наборы информации.
Это гиперграф. В нем есть гиперребра — ребра, объединяющие произвольное количество вершин. Например, купленные вместе товары (i.e. basket).
Граф — динамический. Он развивается со временем; поток событий в системе порождает новые ребра в графе.
Еще есть граф знаний. Все метаданные вершин можно представить в виде графа с “семантическими вершинами”, e.g. категориями и характеристиками товаров. Сами семантические ноды могут быть связаны между собой, e.g. таксономия категорий товаров.
А еще можно построить граф сразу для всей экосистемы. Добавить в тот же граф для Маркета данные из других сервисов, т.н. кросс-доменный граф: пользователей, айтемы, их метаданные и всевозможные типы взаимодействий.
Задача графовых моделей — извлечь максимум пользы из этих данных. Любые модели рекомендаций так или иначе оперируют этим графом, но, как правило, игнорируют большую его часть. Например, sequential модели (e.g. SASRec) часто рассматривают только пользователей и айтемы, оставляют только один тип ребра, при этом выкидывают все метаданные айтемов и ребер (кроме их порядка по времени), убирают граф знаний и кросс-доменную информацию.
Обучить ультимативную графовую модель на всех данных, получив универсальные эмбеддинги для всех сущностей в системе — одна из задач, которой мы с командой занимаемся в Яндексе.
🔥25👍8😎6
#arxiv_weekly (25.12.23 - 29.12.23)
1. Инкрементальное дообучение рексистем уже давно стало мейнстримом. В стандартном сетапе модель дообучается только на новых данных, накопившихся за шаг дообучения (e.g. час/день/неделя). Однако, модель "оверфитится" на новые данные, особенно при сильном distribution drift. Может теряться какой-то более долгосрочный сигнал из более старых данных. Как с этим предлагают бороться инженеры из JD.com можно прочитать в статье An Incremental Update Framework for Online Recommenders with Data-Driven Prior: два доп. лосса и дополнительные фичи в модели.
2. Для рекомендации коротких видеороликов особенно важно учитывать негативный фидбек - пользователи ожидают, что если они скипнули рекомендации, то им быстро начнут показывать что-то другое. В Tencent предлагают доп. лосс для негативов, учитывающий повторные показы и моделирующий "забывание" контента; а также предлагают способ обучения парето-оптимальной модели с помощью подсчета градиентов по лоссам и KKT-based "парето солвера". Статья Pareto-based Multi-Objective Recommender System with Forgetting Curve.
3. Небольшая обзорная статья с метриками ранжирования и кандидатогенерации: A Comprehensive Survey of Evaluation Techniques for Recommendation Systems. Упоминают novelty, diversity, serendipity, catalog coverage. Лично для меня новой метрикой стала "distributional coverage" про энтропию распределения выдачи айтемов для всех пользователей.
4. В ShareChat попробовали проанализировать эволюцию эмбеддингов айтемов по мере обучения для real-time и batch сценариев. В первом случае мы обновляем эмбеддинги сразу после взаимодействия, во втором накапливаем много взаимодействий, и уже потом делаем апдейт эмбеддингов. Говорят, что real-time апдейты гораздо лучше, эмбеды быстрее сходятся к стабильному значению, показывают качество выше, меньше подвержены popularity bias. См Monitoring the Evolution of Behavioural Embeddings in Social Media Recommendation. Подозреваю, что не все выводы из статьи правильные, но само направление исследования интересное.
5. Индексы для кандидатогенерации как правило используют простые метрики близости типа косинуса / l2. Более сложные модели, e.g. нейросетка над конкатенацией векторов запроса и кандидата, не влезают по скорости. В Baidu Research предлагают ускорить процесс поиска по графу (e.g. hnsw) с помощью прунинга кандидатов. Статья GUITAR: Gradient Pruning toward Fast Neural Ranking.
6. Атрибуция конверсий в рекламе - довольно сложная штука; иногда пользователю показываются несколько баннеров из одной кампании, и сложно понять, что именно привело к конверсии. В Criteo предлагают вместо ставок (bid-by-bid optimization) перейти на уровень стратегий (policies) целиком для пользователей. Подробности в Maximizing the Success Probability of Policy Allocations in Online Systems.
7. В Ant Group (Alibaba) уменьшают углеродный след рекомендательной системы, добавив его в оптимизацию: GreenFlow: A Computation Allocation Framework for Building Environmentally Sound Recommendation System.
8. Название статьи Large Language Models are Not Stable Recommender Systems говорит само за себя: переставив в промпте пару слов, можно получить совсем другие рекомендации.
9. В статье Preliminary Study on Incremental Learning for Large Language Model-based Recommender Systems пробуют добавить инкрементальное дообучение для рекомендательных LLM'ок. Сходу не заводится: при инкрементальном дообучении модель забывает долгосрочную информацию, а при обучении с нуля теряется профит на свежих данных.
Это был последний дайджест уходящего 2023-го года. С наступающим!
1. Инкрементальное дообучение рексистем уже давно стало мейнстримом. В стандартном сетапе модель дообучается только на новых данных, накопившихся за шаг дообучения (e.g. час/день/неделя). Однако, модель "оверфитится" на новые данные, особенно при сильном distribution drift. Может теряться какой-то более долгосрочный сигнал из более старых данных. Как с этим предлагают бороться инженеры из JD.com можно прочитать в статье An Incremental Update Framework for Online Recommenders with Data-Driven Prior: два доп. лосса и дополнительные фичи в модели.
2. Для рекомендации коротких видеороликов особенно важно учитывать негативный фидбек - пользователи ожидают, что если они скипнули рекомендации, то им быстро начнут показывать что-то другое. В Tencent предлагают доп. лосс для негативов, учитывающий повторные показы и моделирующий "забывание" контента; а также предлагают способ обучения парето-оптимальной модели с помощью подсчета градиентов по лоссам и KKT-based "парето солвера". Статья Pareto-based Multi-Objective Recommender System with Forgetting Curve.
3. Небольшая обзорная статья с метриками ранжирования и кандидатогенерации: A Comprehensive Survey of Evaluation Techniques for Recommendation Systems. Упоминают novelty, diversity, serendipity, catalog coverage. Лично для меня новой метрикой стала "distributional coverage" про энтропию распределения выдачи айтемов для всех пользователей.
4. В ShareChat попробовали проанализировать эволюцию эмбеддингов айтемов по мере обучения для real-time и batch сценариев. В первом случае мы обновляем эмбеддинги сразу после взаимодействия, во втором накапливаем много взаимодействий, и уже потом делаем апдейт эмбеддингов. Говорят, что real-time апдейты гораздо лучше, эмбеды быстрее сходятся к стабильному значению, показывают качество выше, меньше подвержены popularity bias. См Monitoring the Evolution of Behavioural Embeddings in Social Media Recommendation. Подозреваю, что не все выводы из статьи правильные, но само направление исследования интересное.
5. Индексы для кандидатогенерации как правило используют простые метрики близости типа косинуса / l2. Более сложные модели, e.g. нейросетка над конкатенацией векторов запроса и кандидата, не влезают по скорости. В Baidu Research предлагают ускорить процесс поиска по графу (e.g. hnsw) с помощью прунинга кандидатов. Статья GUITAR: Gradient Pruning toward Fast Neural Ranking.
6. Атрибуция конверсий в рекламе - довольно сложная штука; иногда пользователю показываются несколько баннеров из одной кампании, и сложно понять, что именно привело к конверсии. В Criteo предлагают вместо ставок (bid-by-bid optimization) перейти на уровень стратегий (policies) целиком для пользователей. Подробности в Maximizing the Success Probability of Policy Allocations in Online Systems.
7. В Ant Group (Alibaba) уменьшают углеродный след рекомендательной системы, добавив его в оптимизацию: GreenFlow: A Computation Allocation Framework for Building Environmentally Sound Recommendation System.
8. Название статьи Large Language Models are Not Stable Recommender Systems говорит само за себя: переставив в промпте пару слов, можно получить совсем другие рекомендации.
9. В статье Preliminary Study on Incremental Learning for Large Language Model-based Recommender Systems пробуют добавить инкрементальное дообучение для рекомендательных LLM'ок. Сходу не заводится: при инкрементальном дообучении модель забывает долгосрочную информацию, а при обучении с нуля теряется профит на свежих данных.
Это был последний дайджест уходящего 2023-го года. С наступающим!
🎄39👍2🔥2🕊1
Рекомендации от меня, на случай если не знаете, чем занять себя в новогоднюю ночь:
1. Начать с этого короткого ШКЯ видео.
2. Посмотреть видео про самые дикие рождественские традиции в Европе и Америке.
3. Посмотреть рождественское аниме 2003-го года Tokyo Godfathers.
P.S: для рекомендательных систем, новогодние праздники - это всегда тяжелый период. Дикий distribution shift :)
1. Начать с этого короткого ШКЯ видео.
2. Посмотреть видео про самые дикие рождественские традиции в Европе и Америке.
3. Посмотреть рождественское аниме 2003-го года Tokyo Godfathers.
P.S: для рекомендательных систем, новогодние праздники - это всегда тяжелый период. Дикий distribution shift :)
❤12👍5🔥1
Про ML соревнования.
Свои первые деньги, не связанные со студенческими стипендиями, я заработал ~шесть лет назад, заняв второе место в ML соревновании. На часть из полученных 200 тысяч я собрал мощный комп с 1080ti, чтобы нейроночки обучать и в ведьмака играть :)
Первые два года изучения ML меня очень сильно драйвили соревнования, вплоть до того, что я посвящал им почти все свободное время. Подозреваю, что от улучшения метрик и карабканья по лидерборду у меня выделяется довольно большое количество серотонина, потому что я тогда фигачил без отдыха месяцами, на чистом энтузиазме.
Мой первый контест — Sberbank Data Science Journey 2017; определение релевантности вопроса параграфу текста. Обогнал своего препода с кафедры, заняв 8-е место. Изучал NLP и классический ML буквально по ходу соревнования, и такое изучение теории на практике для меня работало очень хорошо. Еще помню, что там часть вопросов была синтетическая, сгенерированная, и надо было научиться отличать их от настоящих, чтобы сразу ставить им нолики. Я применил марковскую цепь как языковую модель для генерации синтетики и очень радовался, что это сработало :)
Основное, что я вынес с соревнований(и вспомнил во время написания этого поста):
1. Успешность идеи очень сильно зависит от реализации. У контестов, как правило, были чаты, где участники активно общались по ходу соревнования. Я неоднократно наблюдал, как те же идеи, что давали много профита у меня, у других людей не срабатывали. И наоборот. Осталось ощущение, что почти из любой идеи можно выжать профит, если рассмотреть ее под правильным углом.
На работе с этим сложнее: конкретные эксперименты проводит один человек, и если эксперименты закончились неудачно, то всегда остается некоторая неопределенность, почему так получилось. Здесь помогают (1) статьи, по которым мы иногда точно понимаем, что что-то должно работать. (2) правильные формулировки задач, смещение акцента с оффлайн-метрик базового качества на интерпретируемые вопросы и гипотезы, (3) перепроверки друг за другом, а также (4) возвращение к старым направлениям экспериментов.
2. Получил очень много опыта по ведению экспериментов. С одной стороны, оптимизировать какое-то не совсем интерпретируемое чиселко в отрыве от бизнеса — не очень продуктивно. Соревнования сильно разнятся по степени "осмысленности", это зависит от осознанности организаторов. С другой стороны — в отличие от работы, здесь ты соревнуешься с другими людьми, и есть возможность себя относительно них очень хорошо откалибровать. Насколько хорошо ты ставишь эксперименты, а именно: находишь правильные гипотезы, быстро их проверяешь, правильно реализуешь.
На работе все сильно зависит от самокритичности человека, это иногда и плохо, и хорошо. Из неудачной серии экспериментов можно сделать совсем разные выводы. Самый частый вывод — что гипотеза неудачная или задача нерешаемая; он особенно плох, если не получилось при этом сформировать правильную интуицию происходящего. В соревнованиях же, если ты находишься низко по лидерборду, то у этого может быть только одна причина :)
Итого, плюсы соревнований:
* опыт экспериментирования
* возможность откалиброваться относительно других экспериментаторов
* доп. источник заработка
Минусы:
* осмысленность поставленных задач сильно зависит от осознанности организаторов
* прошлый пункт, на самом деле, еще иногда приводит к страшным эффектам по типу ликов в данных и к совсем необобщающимся на бизнес зависимостям, без которых высокую метрику не получишь
* если у вас хорошая работа, то на ней задачи интересней, и необходимость в соревнованиях отпадает. На работе у меня есть возможность самому формулировать задачи, и при этом мне доступны почти неограниченные ресурсы с т.з. данных и железа. После выхода в Яндекс ~3.5 года назад, я перестал участвовать в соревнованиях
На бустерс @boosters после долгого молчания платформы началось новое соревнование по рекомендашкам от hh. Вашего покорного слугу на лидерборде тоже можно найти. Решил тряхнуть стариной :)
Свои первые деньги, не связанные со студенческими стипендиями, я заработал ~шесть лет назад, заняв второе место в ML соревновании. На часть из полученных 200 тысяч я собрал мощный комп с 1080ti, чтобы нейроночки обучать и в ведьмака играть :)
Первые два года изучения ML меня очень сильно драйвили соревнования, вплоть до того, что я посвящал им почти все свободное время. Подозреваю, что от улучшения метрик и карабканья по лидерборду у меня выделяется довольно большое количество серотонина, потому что я тогда фигачил без отдыха месяцами, на чистом энтузиазме.
Мой первый контест — Sberbank Data Science Journey 2017; определение релевантности вопроса параграфу текста. Обогнал своего препода с кафедры, заняв 8-е место. Изучал NLP и классический ML буквально по ходу соревнования, и такое изучение теории на практике для меня работало очень хорошо. Еще помню, что там часть вопросов была синтетическая, сгенерированная, и надо было научиться отличать их от настоящих, чтобы сразу ставить им нолики. Я применил марковскую цепь как языковую модель для генерации синтетики и очень радовался, что это сработало :)
Основное, что я вынес с соревнований
1. Успешность идеи очень сильно зависит от реализации. У контестов, как правило, были чаты, где участники активно общались по ходу соревнования. Я неоднократно наблюдал, как те же идеи, что давали много профита у меня, у других людей не срабатывали. И наоборот. Осталось ощущение, что почти из любой идеи можно выжать профит, если рассмотреть ее под правильным углом.
На работе с этим сложнее: конкретные эксперименты проводит один человек, и если эксперименты закончились неудачно, то всегда остается некоторая неопределенность, почему так получилось. Здесь помогают (1) статьи, по которым мы иногда точно понимаем, что что-то должно работать. (2) правильные формулировки задач, смещение акцента с оффлайн-метрик базового качества на интерпретируемые вопросы и гипотезы, (3) перепроверки друг за другом, а также (4) возвращение к старым направлениям экспериментов.
2. Получил очень много опыта по ведению экспериментов. С одной стороны, оптимизировать какое-то не совсем интерпретируемое чиселко в отрыве от бизнеса — не очень продуктивно. Соревнования сильно разнятся по степени "осмысленности", это зависит от осознанности организаторов. С другой стороны — в отличие от работы, здесь ты соревнуешься с другими людьми, и есть возможность себя относительно них очень хорошо откалибровать. Насколько хорошо ты ставишь эксперименты, а именно: находишь правильные гипотезы, быстро их проверяешь, правильно реализуешь.
На работе все сильно зависит от самокритичности человека, это иногда и плохо, и хорошо. Из неудачной серии экспериментов можно сделать совсем разные выводы. Самый частый вывод — что гипотеза неудачная или задача нерешаемая; он особенно плох, если не получилось при этом сформировать правильную интуицию происходящего. В соревнованиях же, если ты находишься низко по лидерборду, то у этого может быть только одна причина :)
Итого, плюсы соревнований:
* опыт экспериментирования
* возможность откалиброваться относительно других экспериментаторов
* доп. источник заработка
Минусы:
* осмысленность поставленных задач сильно зависит от осознанности организаторов
* прошлый пункт, на самом деле, еще иногда приводит к страшным эффектам по типу ликов в данных и к совсем необобщающимся на бизнес зависимостям, без которых высокую метрику не получишь
* если у вас хорошая работа, то на ней задачи интересней, и необходимость в соревнованиях отпадает. На работе у меня есть возможность самому формулировать задачи, и при этом мне доступны почти неограниченные ресурсы с т.з. данных и железа. После выхода в Яндекс ~3.5 года назад, я перестал участвовать в соревнованиях
На бустерс @boosters после долгого молчания платформы началось новое соревнование по рекомендашкам от hh. Вашего покорного слугу на лидерборде тоже можно найти. Решил тряхнуть стариной :)
👍25🔥11🏆2
#arxiv_weekly (01.01.24 - 05.01.24)
1. (Multi-view) contrastive learning — устоявшаяся техника в рекомендашках. Аугментируем пользователя (e.g. сэмплируем историю, аугментируем граф данных, или берем представление из другого момента времени), и затем сближаем его представления, отдаляя от чужих. В Visa Research заметили dimension collapse: выученные векторы неэффективно используют пространство, кучкуясь в небольшом подпространстве. Чтобы это полечить, предлагается специальный лосс. Сравниваются с DirectAU. Статья Towards Mitigating Dimensional Collapse of Representations in Collaborative Filtering.
2. Так как в рексистемах очень большой трафик и строгие требования по времени ответа, мы не можем на все запросы использовать самые сложные модели и набирать для всех десятки тысяч кандидатов из кандгена. Иногда еще и трафик сильно растет (e.g. в праздники), приходится "деградировать", понижая качество всей системы.
В Meituan выделили три подзадачи аллокации ресурсов:
(1) elastic channel — для каждого запроса динамически выбираем какие каналы кандгена использовать и в каком объеме,
(2) elastic queue — динамически обрезаем множество кандидатов перед ранжированием,
и (3) elastic model — динамически выбираем ранжирующую модель, т.е. на разные запросы будет отрабатывать разное ранжирование.
Предлагают использовать RL (DQN) для всех трех задач. Статья RL-MPCA: A Reinforcement Learning Based Multi-Phase Computation Allocation Approach for Recommender Systems.
3. В FARFETCH рассказали как рекомендуют размер одежды покупателям, статья Tailor: Size Recommendations for High-End Fashion Marketplaces.
4. В Tencent пробуют взять разные подходы, использующие LLM'ки для рекомендаций (UniSRec, RecFormer, UniM2Rec), и сдистиллировать их в обычный ортодоксальный SASRec. Статья Distillation is All You Need for Practically Using Different Pre-trained Recommendation Models.
5. Вышло два обзора, про графовые нейросети над табличными данными и про атаки на рексистемы.
1. (Multi-view) contrastive learning — устоявшаяся техника в рекомендашках. Аугментируем пользователя (e.g. сэмплируем историю, аугментируем граф данных, или берем представление из другого момента времени), и затем сближаем его представления, отдаляя от чужих. В Visa Research заметили dimension collapse: выученные векторы неэффективно используют пространство, кучкуясь в небольшом подпространстве. Чтобы это полечить, предлагается специальный лосс. Сравниваются с DirectAU. Статья Towards Mitigating Dimensional Collapse of Representations in Collaborative Filtering.
2. Так как в рексистемах очень большой трафик и строгие требования по времени ответа, мы не можем на все запросы использовать самые сложные модели и набирать для всех десятки тысяч кандидатов из кандгена. Иногда еще и трафик сильно растет (e.g. в праздники), приходится "деградировать", понижая качество всей системы.
В Meituan выделили три подзадачи аллокации ресурсов:
(1) elastic channel — для каждого запроса динамически выбираем какие каналы кандгена использовать и в каком объеме,
(2) elastic queue — динамически обрезаем множество кандидатов перед ранжированием,
и (3) elastic model — динамически выбираем ранжирующую модель, т.е. на разные запросы будет отрабатывать разное ранжирование.
Предлагают использовать RL (DQN) для всех трех задач. Статья RL-MPCA: A Reinforcement Learning Based Multi-Phase Computation Allocation Approach for Recommender Systems.
3. В FARFETCH рассказали как рекомендуют размер одежды покупателям, статья Tailor: Size Recommendations for High-End Fashion Marketplaces.
4. В Tencent пробуют взять разные подходы, использующие LLM'ки для рекомендаций (UniSRec, RecFormer, UniM2Rec), и сдистиллировать их в обычный ортодоксальный SASRec. Статья Distillation is All You Need for Practically Using Different Pre-trained Recommendation Models.
5. Вышло два обзора, про графовые нейросети над табличными данными и про атаки на рексистемы.
👍21
Нейросетевой мир победил (в ранжировании).
В каждой рекомендательной системе есть алгоритм, который определяет финальную выдачу. Иногда он работает сразу над всем каталогом айтемов, т.е. full-scan, но чаще всего ему на вход приходит уже отфильтрованное множество из сотен-тысяч кандидатов.
В составе этого алгоритма могут быть различные бизнес-правила и эвристики. Например, не показывать на соседних позициях в выдаче айтемы из одной категории; или что-то посложнее, типа DPP или MMR. Логика бывает разная: буст разнообразия, новизны, тяжелого хвоста, замешивание разных источников (e.g. органики и рекламы). Сервисы и поверхности (e.g. ленты/фиды, рекомендации похожих айтемов, поиск) довольно сильно разнятся по набору работающих эвристик.
А вот составляющая ранжирования, формирующая для пар (пользователь, айтем) скоры предпочтения, всегда очень похожа:
1. Информация, идущая на вход модели, декомпозируется на пользовательские (user), айтемные (item) и совместные (user-item) признаки. Используется раннее связывание информации про кандидата и пользователя, т.е. в рамках модели моделируется взаимодействие между признаками пользователей и айтемов. Термин не совсем строгий, и приобретает смысл в первую очередь в контексте нейросетей: ему противопоставляются двухбашенные модели, в которых информация про пользователя и айтем анализируется раздельно. Операция скалярного произведения над векторами айтема и пользователя называется поздним связыванием.
2. Для обучения используются в первую очередь объекты, которые прошли через всю воронку рексистемы, т.е. были представлены пользователю. Чаще всего их называют impressions; например, на рексисе есть воркшоп Workshop on Learning and Evaluating Recommendations with Impressions. По сути, все эти объекты уже довольно хороши для пользователя, и зачастую отсутствие положительного фидбека объясняется вспомогательными эффектами, e.g. position bias (пользователь уже удовлетворил свои нужды объектами с более ранних позиций).
3. Модель учится выдавать вероятность положительного события / релевантности (pointwise) или явно ранжировать кандидатов (pairwise, listwise). Либо делает и то, и другое, e.g. Regression Compatible Listwise Objectives for Calibrated Ranking with Binary Relevance от Google.
Можно выделить два основных класса архитектур, использующихся в больших сервисах:
1. Градиентный бустинг (J. Friedman) и его комбинации с линейными моделями (e.g. Practical Lessons from Predicting Clicks on Ads at Facebook). Он прожевывает до десятков миллионов сэмплов (e.g. пар для ранжирования), очень понятным образом работает с признаками (делает по ним сплиты в решающих деревьях), позволяет из коробки интерпретировать важность признаков (e.g. через количество сплитов по признаку), обладает хорошей обобщающей способностью, не сильно страдает от объектов-выбросов, заводится на небольших датасетах и быстро работает на CPU. По сути, это венец эволюции классического ML в контексте ранжирования.
2. Нейросетевое ранжирование. В целом, линейные модели — тоже нейросети. Но обычно подразумевается что-то с более сложной нейросетевой архитектурой. Категориальные признаки превращаются в эмбеддинги, вещественные фичи нормализуются и, зачастую, тоже превращаются в эмбеддинги. Затем следует энное количество различных нейросетевых слоев, явно и неявно моделирующих взаимодействие между признаками. В конце нейросети может быть как предсказание какой-то одной характеристики, так и многоголовая архитектура, предсказывающая одновременно разные типы событий (e.g. клик, лайк, покупку, дизлайк).
Большая часть компаний в своих крупных продуктах использует нейросетевое ранжирование (e.g. YouTube, Pinterest, Airbnb, X (Twitter), Meta, Alibaba). Развитие такого же подхода внутри Яндекса — это одна из задач, которой мы с командой занимаемся (кроме графовых моделей, о которых я уже рассказывал).
В будущих постах обязательно покроем, почему этим стоит заниматься и за счет чего нейросети превосходят градиентный бустинг в ранжировании. А пока, можете почитать посты про нейросетевое ранжирование в Pinterest и YouTube :)
В каждой рекомендательной системе есть алгоритм, который определяет финальную выдачу. Иногда он работает сразу над всем каталогом айтемов, т.е. full-scan, но чаще всего ему на вход приходит уже отфильтрованное множество из сотен-тысяч кандидатов.
В составе этого алгоритма могут быть различные бизнес-правила и эвристики. Например, не показывать на соседних позициях в выдаче айтемы из одной категории; или что-то посложнее, типа DPP или MMR. Логика бывает разная: буст разнообразия, новизны, тяжелого хвоста, замешивание разных источников (e.g. органики и рекламы). Сервисы и поверхности (e.g. ленты/фиды, рекомендации похожих айтемов, поиск) довольно сильно разнятся по набору работающих эвристик.
А вот составляющая ранжирования, формирующая для пар (пользователь, айтем) скоры предпочтения, всегда очень похожа:
1. Информация, идущая на вход модели, декомпозируется на пользовательские (user), айтемные (item) и совместные (user-item) признаки. Используется раннее связывание информации про кандидата и пользователя, т.е. в рамках модели моделируется взаимодействие между признаками пользователей и айтемов. Термин не совсем строгий, и приобретает смысл в первую очередь в контексте нейросетей: ему противопоставляются двухбашенные модели, в которых информация про пользователя и айтем анализируется раздельно. Операция скалярного произведения над векторами айтема и пользователя называется поздним связыванием.
2. Для обучения используются в первую очередь объекты, которые прошли через всю воронку рексистемы, т.е. были представлены пользователю. Чаще всего их называют impressions; например, на рексисе есть воркшоп Workshop on Learning and Evaluating Recommendations with Impressions. По сути, все эти объекты уже довольно хороши для пользователя, и зачастую отсутствие положительного фидбека объясняется вспомогательными эффектами, e.g. position bias (пользователь уже удовлетворил свои нужды объектами с более ранних позиций).
3. Модель учится выдавать вероятность положительного события / релевантности (pointwise) или явно ранжировать кандидатов (pairwise, listwise). Либо делает и то, и другое, e.g. Regression Compatible Listwise Objectives for Calibrated Ranking with Binary Relevance от Google.
Можно выделить два основных класса архитектур, использующихся в больших сервисах:
1. Градиентный бустинг (J. Friedman) и его комбинации с линейными моделями (e.g. Practical Lessons from Predicting Clicks on Ads at Facebook). Он прожевывает до десятков миллионов сэмплов (e.g. пар для ранжирования), очень понятным образом работает с признаками (делает по ним сплиты в решающих деревьях), позволяет из коробки интерпретировать важность признаков (e.g. через количество сплитов по признаку), обладает хорошей обобщающей способностью, не сильно страдает от объектов-выбросов, заводится на небольших датасетах и быстро работает на CPU. По сути, это венец эволюции классического ML в контексте ранжирования.
2. Нейросетевое ранжирование. В целом, линейные модели — тоже нейросети. Но обычно подразумевается что-то с более сложной нейросетевой архитектурой. Категориальные признаки превращаются в эмбеддинги, вещественные фичи нормализуются и, зачастую, тоже превращаются в эмбеддинги. Затем следует энное количество различных нейросетевых слоев, явно и неявно моделирующих взаимодействие между признаками. В конце нейросети может быть как предсказание какой-то одной характеристики, так и многоголовая архитектура, предсказывающая одновременно разные типы событий (e.g. клик, лайк, покупку, дизлайк).
Большая часть компаний в своих крупных продуктах использует нейросетевое ранжирование (e.g. YouTube, Pinterest, Airbnb, X (Twitter), Meta, Alibaba). Развитие такого же подхода внутри Яндекса — это одна из задач, которой мы с командой занимаемся (кроме графовых моделей, о которых я уже рассказывал).
В будущих постах обязательно покроем, почему этим стоит заниматься и за счет чего нейросети превосходят градиентный бустинг в ранжировании. А пока, можете почитать посты про нейросетевое ранжирование в Pinterest и YouTube :)
🔥27👍8❤1🤔1
#arxiv_weekly (08.01.24 — 12.01.24)
1. Один из способов борьбы с холодным стартом в рекомендашках — это meta-learning. В статье G-Meta: Distributed Meta Learning in GPU Clusters for Large-Scale Recommender Systems инженеры из Alibaba рассказывают как адаптировали обучение DLRM (нейросетевых рексистем) под мета-лернинг сетап. Говорят, кстати, что с 2022-го года мета-лернинг в проде в поиске и рекомендациях Alipay, и принес +6.48% CVR / +1.06% CTR для рекламы на главной странице.
2. Актуальность сжатия больших матриц эмбеддингов в рекомендашках мы уже обсуждали в дайджесте про JPQ (joint product quantization). Инженеры из Meta адаптировали под сценарий частичного прунинга метод AdaEmbed, который глядя на градиент и частоту лукапов прунит эмбеддинги. Бьем эмбеддинг на чанки, и в рамках каждого чанка используем стратегию из AdaEmbed. При использовании эмбеддинга в обучении/применении паддим (заполняем) нулями запруненные чанки. Статья Fine-Grained Embedding Dimension Optimization During Training for Recommender Systems.
3. В Ant Group (та же Алибаба) предлагают обучать кластеризацию интентов (читай пользовательских намерений) end-to-end, совместно с обучением самих пользовательских эмбеддингов. Прошлые алгоритмы (e.g. ICLRec) делали это двухстайдийно или итеративно, то есть эмбеддинги пользователей и кластеры обучались отдельно. Здесь же предлагается сделать эмбеддинги центроидов обучаемыми параметрами и добавить парочку лоссов к next item prediction. Из интересного — в одном из лоссов эмбеддинг пользователя сближается сразу cо всеми центроидами, таким образом авторы борятся с проблемой confirmation bias. Статья End-to-end Learnable Clustering for Intent Learning in Recommendation.
4. В Deezer выпустили шортпейпер по мотивам своей презентации с ECIR'24 про борьбу с холодным стартом в рекомендациях новых музыкальных релизов: проблемы возникают из-за того, что у них основные модели строятся на коллаборативном сигнале. Рассказывают про использование бандитов и дистилляцию эмбеддингов коллаборативной модели в модель, использующую метаданные. Статья Let's Get It Started: Fostering the Discoverability of New Releases on Deezer.
5. В Sharechat опубликовали сразу две статьи. В Learning-to-Rank with Nested Feedback парадигма learning to rank адаптируется под сценарий “вложенных списков”, в котором взаимодействие с айтемом из выдачи приводит к появлению новой карусели рекомендаций. А в статье Variance Reduction in Ratio Metrics for Efficient Online Experiments предлагается использовать градиентный бустинг для снижения дисперсии в аб-тестах. Я по АБ-тестам не эксперт, возможно насколько это разумно нам подскажет @cryptovalerii.
6. Вышел обзор про кросс-доменные рекомендации от китайского Shenzhen University: A Survey on Cross-Domain Sequential Recommendation.
1. Один из способов борьбы с холодным стартом в рекомендашках — это meta-learning. В статье G-Meta: Distributed Meta Learning in GPU Clusters for Large-Scale Recommender Systems инженеры из Alibaba рассказывают как адаптировали обучение DLRM (нейросетевых рексистем) под мета-лернинг сетап. Говорят, кстати, что с 2022-го года мета-лернинг в проде в поиске и рекомендациях Alipay, и принес +6.48% CVR / +1.06% CTR для рекламы на главной странице.
2. Актуальность сжатия больших матриц эмбеддингов в рекомендашках мы уже обсуждали в дайджесте про JPQ (joint product quantization). Инженеры из Meta адаптировали под сценарий частичного прунинга метод AdaEmbed, который глядя на градиент и частоту лукапов прунит эмбеддинги. Бьем эмбеддинг на чанки, и в рамках каждого чанка используем стратегию из AdaEmbed. При использовании эмбеддинга в обучении/применении паддим (заполняем) нулями запруненные чанки. Статья Fine-Grained Embedding Dimension Optimization During Training for Recommender Systems.
3. В Ant Group (та же Алибаба) предлагают обучать кластеризацию интентов (читай пользовательских намерений) end-to-end, совместно с обучением самих пользовательских эмбеддингов. Прошлые алгоритмы (e.g. ICLRec) делали это двухстайдийно или итеративно, то есть эмбеддинги пользователей и кластеры обучались отдельно. Здесь же предлагается сделать эмбеддинги центроидов обучаемыми параметрами и добавить парочку лоссов к next item prediction. Из интересного — в одном из лоссов эмбеддинг пользователя сближается сразу cо всеми центроидами, таким образом авторы борятся с проблемой confirmation bias. Статья End-to-end Learnable Clustering for Intent Learning in Recommendation.
4. В Deezer выпустили шортпейпер по мотивам своей презентации с ECIR'24 про борьбу с холодным стартом в рекомендациях новых музыкальных релизов: проблемы возникают из-за того, что у них основные модели строятся на коллаборативном сигнале. Рассказывают про использование бандитов и дистилляцию эмбеддингов коллаборативной модели в модель, использующую метаданные. Статья Let's Get It Started: Fostering the Discoverability of New Releases on Deezer.
5. В Sharechat опубликовали сразу две статьи. В Learning-to-Rank with Nested Feedback парадигма learning to rank адаптируется под сценарий “вложенных списков”, в котором взаимодействие с айтемом из выдачи приводит к появлению новой карусели рекомендаций. А в статье Variance Reduction in Ratio Metrics for Efficient Online Experiments предлагается использовать градиентный бустинг для снижения дисперсии в аб-тестах. Я по АБ-тестам не эксперт, возможно насколько это разумно нам подскажет @cryptovalerii.
6. Вышел обзор про кросс-доменные рекомендации от китайского Shenzhen University: A Survey on Cross-Domain Sequential Recommendation.
🔥10👍3❤1
#arxiv_weekly (15.01.24 — 19.01.24)
1. Один из недостатков ранжирования — при формировании выдачи не учитывается взаимное влияние айтемов; скоры считаются поточечно (pointwise). Чтобы это исправить, добавляется стадия переранжирования, основная проблема которой — вычислительная сложность. Кроме того, сама постановка задачи переранжирования довольна амбициозна — в идеале оно должно заменить большую часть бизнесовой логики постпроцессинга ранжирования, самостоятельно обеспечивая нужные сервису качества выдачи, типа разнообразия, свежести, релевантности. В LinkedIn сделали подход к снаряду и предложили свой жадный последовательный алгоритм с линейной сложностью (еще и с RL сравнились) в статье MultiSlot ReRanker: A Generic Model-based Re-Ranking Framework in Recommendation Systems.
2. Рекомендательные системы многостадийны: кандген, преранжирование, ранжирование, переранжирование, etc. Одна из проблем применения РЛ к рекомендашкам — чаще всего пытаются обучить одного агента, в предположении что он работает с полным корпусом айтемов и формирует выдачу для пользователя. В то время как в реальности агент если и будет применяться, то только в составе одной из стадий. Инженеры из Kuaishou пробуют обучить сразу несколько агентов (MARL — multi-agent RL), по одному на каждую стадию, в статье UNEX-RL: Reinforcing Long-Term Rewards in Multi-Stage Recommender Systems with UNidirectional EXecution.
3. В прошлых дайджестах мы уже обсуждали проблематику формирования таргетов из просмотров видеороликов. Распределение длительности просмотров очень сильно скошено в сторону коротких значений. Стандартный подход в индустрии — побить значения на бакеты (<30 секунд, 30<x<60 секунд, etc; чаще это делают по квантилям) и использовать ординальную регрессию. Инженеры из Kuaishou исследуют как лучше формировать бакеты: придумали довольно сложную систему, в которой есть классификаторы (для бакетов) и "рестораторы", восстанавливающие исходные длительности просмотров. Предлагается подбирать бакеты так, чтобы минимизировать ошибки классификации и "ресторации". Статья CREAD: A Classification-Restoration Framework with Error Adaptive Discretization for Watch Time Prediction in Video Recommender Systems.
4. В Ant Group (Alibaba, Alipay, etc) построили граф данных для рекламных баннеров (из метаданных баннеров и взаимодействий с пользователями и страницами) и обучили на нем вариационный авто-кодировщик. Репортят большие приросты по CTR (особенно для холодного старта) от использования полученных эмбеддингов баннеров в рекламных моделях. Статья GACE: Learning Graph-Based Cross-Page Ads Embedding For Click-Through Rate Prediction.
5. Uber выложили очень простенький pre-print Handling Large-scale Cardinality in building recommendation systems, в котором описывают сетку для, кажется, ранжирования в Uber Eats. Модель очень напоминает 2016-й год :(
6. В Spotify исследуют сценарий, в котором пользователи обмениваются контентом. "Получатель" более склонен провзаимодействовать с контентом, если (1) музыкальный вкус совпадает с "отправителем", (2) они близки и (3) артист, которым поделились, популярен среди круга общения "получателя". Подробности в Link Me Baby One More Time: Social Music Discovery on Spotify.
7. Вышло две статьи про аудио-эмбеддинги от SiriusXM-Pandora: (1) On the Effect of Data-Augmentation on Local Embedding Properties in the Contrastive Learning of Music Audio Representations и (2) Similar but Faster: Manipulation of Tempo in Music Audio Embeddings for Tempo Prediction and Search.
8. Не так давно появился новый сценарий рекомендашек под названием trigger-induced recommendations, в котором рекомендации генерятся в ответ на взаимодействие с айтемом, e.g. при клике на товар появляется плашка с рекомендациями. Утверждается, что это очень важный сценарий для еком платформ типа Алибабы и Амазона. Инженеры из Alibaba предлагают очень мудреную нейросетку в статье Deep Evolutional Instant Interest Network for CTR Prediction in Trigger-Induced Recommendation.
1. Один из недостатков ранжирования — при формировании выдачи не учитывается взаимное влияние айтемов; скоры считаются поточечно (pointwise). Чтобы это исправить, добавляется стадия переранжирования, основная проблема которой — вычислительная сложность. Кроме того, сама постановка задачи переранжирования довольна амбициозна — в идеале оно должно заменить большую часть бизнесовой логики постпроцессинга ранжирования, самостоятельно обеспечивая нужные сервису качества выдачи, типа разнообразия, свежести, релевантности. В LinkedIn сделали подход к снаряду и предложили свой жадный последовательный алгоритм с линейной сложностью (еще и с RL сравнились) в статье MultiSlot ReRanker: A Generic Model-based Re-Ranking Framework in Recommendation Systems.
2. Рекомендательные системы многостадийны: кандген, преранжирование, ранжирование, переранжирование, etc. Одна из проблем применения РЛ к рекомендашкам — чаще всего пытаются обучить одного агента, в предположении что он работает с полным корпусом айтемов и формирует выдачу для пользователя. В то время как в реальности агент если и будет применяться, то только в составе одной из стадий. Инженеры из Kuaishou пробуют обучить сразу несколько агентов (MARL — multi-agent RL), по одному на каждую стадию, в статье UNEX-RL: Reinforcing Long-Term Rewards in Multi-Stage Recommender Systems with UNidirectional EXecution.
3. В прошлых дайджестах мы уже обсуждали проблематику формирования таргетов из просмотров видеороликов. Распределение длительности просмотров очень сильно скошено в сторону коротких значений. Стандартный подход в индустрии — побить значения на бакеты (<30 секунд, 30<x<60 секунд, etc; чаще это делают по квантилям) и использовать ординальную регрессию. Инженеры из Kuaishou исследуют как лучше формировать бакеты: придумали довольно сложную систему, в которой есть классификаторы (для бакетов) и "рестораторы", восстанавливающие исходные длительности просмотров. Предлагается подбирать бакеты так, чтобы минимизировать ошибки классификации и "ресторации". Статья CREAD: A Classification-Restoration Framework with Error Adaptive Discretization for Watch Time Prediction in Video Recommender Systems.
4. В Ant Group (Alibaba, Alipay, etc) построили граф данных для рекламных баннеров (из метаданных баннеров и взаимодействий с пользователями и страницами) и обучили на нем вариационный авто-кодировщик. Репортят большие приросты по CTR (особенно для холодного старта) от использования полученных эмбеддингов баннеров в рекламных моделях. Статья GACE: Learning Graph-Based Cross-Page Ads Embedding For Click-Through Rate Prediction.
5. Uber выложили очень простенький pre-print Handling Large-scale Cardinality in building recommendation systems, в котором описывают сетку для, кажется, ранжирования в Uber Eats. Модель очень напоминает 2016-й год :(
6. В Spotify исследуют сценарий, в котором пользователи обмениваются контентом. "Получатель" более склонен провзаимодействовать с контентом, если (1) музыкальный вкус совпадает с "отправителем", (2) они близки и (3) артист, которым поделились, популярен среди круга общения "получателя". Подробности в Link Me Baby One More Time: Social Music Discovery on Spotify.
7. Вышло две статьи про аудио-эмбеддинги от SiriusXM-Pandora: (1) On the Effect of Data-Augmentation on Local Embedding Properties in the Contrastive Learning of Music Audio Representations и (2) Similar but Faster: Manipulation of Tempo in Music Audio Embeddings for Tempo Prediction and Search.
8. Не так давно появился новый сценарий рекомендашек под названием trigger-induced recommendations, в котором рекомендации генерятся в ответ на взаимодействие с айтемом, e.g. при клике на товар появляется плашка с рекомендациями. Утверждается, что это очень важный сценарий для еком платформ типа Алибабы и Амазона. Инженеры из Alibaba предлагают очень мудреную нейросетку в статье Deep Evolutional Instant Interest Network for CTR Prediction in Trigger-Induced Recommendation.
🔥23👍5
Необходимое условие для успеха нейросетевого ранжирования — это масштабирование по данным. У нейросетевых рекомендательных моделей качество сильно растет при увеличении обучающего датасета, у градиентного бустинга — нет.
Чаще всего в ранжирующий катбуст запихивают ~50кк сэмплов. В сервисах побольше — это неделя залогированных данных с андерсэмплингом, в сервисах поменьше — две недели / месяц. Для нейросетей с почти любой архитектурой это количество данных далеко от оптимального. Можно использовать вплоть до миллиардов сэмплов, получая приличные приросты метрик качества (как мы делаем с трансформерами над историей пользователя).
У нейросетевого ранжирования емкость модели (возможность выучивать какие-то зависимости) гораздо больше. Почему так получается — обсудим в других постах. Но чтобы эту емкость реализовать, нужны большие датасеты.
Есть такая область, как табличный DL. Там нет e2e анализа последовательностей, upstream моделей, и, самое главное, нет достаточно больших датасетов. Поэтому примерно все существующие статьи (e.g. (1) Are Neural Rankers still Outperformed by Gradient Boosted Decision Trees?, (2) When Do Neural Nets Outperform Boosted Trees on Tabular Data?) репортят доминацию GBDT.
Немного цитат из индустрии:
Applying Deep Learning To Airbnb Search
On Gradient Boosted Decision Trees and Neural Rankers: A Case-Study on Short-Video Recommendations at ShareChat
Monolith: Real Time Recommendation System With Collisionless Embedding Table
Приводимый в посте график — это относительный прирост оффлайн-метрики ранжирования относительно катбуста для нейросети в одном из более крупных сервисов Яндекса.
Чаще всего в ранжирующий катбуст запихивают ~50кк сэмплов. В сервисах побольше — это неделя залогированных данных с андерсэмплингом, в сервисах поменьше — две недели / месяц. Для нейросетей с почти любой архитектурой это количество данных далеко от оптимального. Можно использовать вплоть до миллиардов сэмплов, получая приличные приросты метрик качества (как мы делаем с трансформерами над историей пользователя).
У нейросетевого ранжирования емкость модели (возможность выучивать какие-то зависимости) гораздо больше. Почему так получается — обсудим в других постах. Но чтобы эту емкость реализовать, нужны большие датасеты.
Есть такая область, как табличный DL. Там нет e2e анализа последовательностей, upstream моделей, и, самое главное, нет достаточно больших датасетов. Поэтому примерно все существующие статьи (e.g. (1) Are Neural Rankers still Outperformed by Gradient Boosted Decision Trees?, (2) When Do Neural Nets Outperform Boosted Trees on Tabular Data?) репортят доминацию GBDT.
Немного цитат из индустрии:
Applying Deep Learning To Airbnb Search
We were able to deprecate all that complexity by simply scaling the training data 10x and moving to a DNN with 2 hidden layers.
On Gradient Boosted Decision Trees and Neural Rankers: A Case-Study on Short-Video Recommendations at ShareChat
As the dataset size increases, the marginal improvement in the neural ranker’s performance is higher than that of GBDTs.
Monolith: Real Time Recommendation System With Collisionless Embedding Table
Deep learning have been dominating recommendation models as the gigantic amount of user data is a natural fit for massively data-driven neural models.
Приводимый в посте график — это относительный прирост оффлайн-метрики ранжирования относительно катбуста для нейросети в одном из более крупных сервисов Яндекса.
🔥25👍1
Forwarded from Data Secrets
У кого лучшие рекомендательные системы в России? Ответ кажется очевидным.
Не будем тянуть. Сегодня наш гость, Кирилл Хрыльченко – лид команды R&D рекомендаций в Яндексе и автор канала @inforetriever, рассказал о том, как работают SOTA персонализации рекомендаций на примере Яндекса.
Не будем тянуть. Сегодня наш гость, Кирилл Хрыльченко – лид команды R&D рекомендаций в Яндексе и автор канала @inforetriever, рассказал о том, как работают SOTA персонализации рекомендаций на примере Яндекса.
🔥35👍8😁2
Иногда в контексте канала появляются идеи, которые выходят за рамки написания постов. Я, честно говоря, не ожидал, что канал когда-нибудь дойдет до текущих масштабов (преодолели сегодня тысячу участников), и мне казалось, что с ростом аудитории будет только сложнее выходить за рамки уже существующего формата. Но в реальности происходит другое - я наоборот смелею, и желание экспериментировать растет.
Решил заложить под определенное количество подписчиков определенный контент. Не с целью чтобы ускорить рост (не думаю, что это влияет), а чтобы были дедлайны по реализации. В моменте всегда находится что-то, из-за чего эти идеи откладываются. С этим поможет только коммитмент :)
1. Видеозапись с рассказом про ML в Пинтересте, когда наберется 1250 подписчиков. Про ранжирование, графовые сетки, трансформеры для персонализации, etc. Посты в телеграме по размеру ограничены, и я, на самом деле, большую часть постов подбиваю под эти ограничения. Приходится дробить повествование и создавать cliffhanger'ы, но зато меньше времени нужно на написание отдельных постов. Вот в формате часового видео можно довольно много рассказать и никаких ограничений нет. И текст вылизывать не нужно =) На работе я постоянно где-то что-то рассказываю, и не раз посещала мысль, что было бы круто что-то записать и для вас.
2. Пародия на аватарку канала с моей физиономией на 1500 подписчиков. Пункт шуточный, чтобы основательно подготовиться к следующему :)
3. Подкаст про рекомендательные системы на 1750 подписчиков. В составе из четырех яндексоидов, вместе с моим бывшим тимлидом Севой @yalinter, Сашей @knowledge_accumulator и Мишей @WazowskiRecommends. Обсудим тренды рексистем (трансформеры, РЛ, языковые модели, графы, etc), соберем ваши вопросы, и на самые интересные постараемся ответить.
4. Ридинг группа (почти виртуальный митап) на 2000 подписчиков (надеюсь, не все две тысячи придут). Обсудим выбранную голосованием статью, или даже несколько. Может, поговорим про то, как их вообще искать и читать. Я про это уже писал, но, кажется, еще осталось что обсудить. В этом поучаствует Сережа @pragmaticml, который, собственно, недавно пришел ко мне с предложением сделать что-нибудь про чтение статей.
Для меня все эти пункты звучат довольно сложно, но если хотя бы какой-нибудь реализуется, и реализуется успешно - буду доволен. Спасибо за то, что читаете канал, ставите реакции и пишете комментарии!
Решил заложить под определенное количество подписчиков определенный контент. Не с целью чтобы ускорить рост (не думаю, что это влияет), а чтобы были дедлайны по реализации. В моменте всегда находится что-то, из-за чего эти идеи откладываются. С этим поможет только коммитмент :)
1. Видеозапись с рассказом про ML в Пинтересте, когда наберется 1250 подписчиков. Про ранжирование, графовые сетки, трансформеры для персонализации, etc. Посты в телеграме по размеру ограничены, и я, на самом деле, большую часть постов подбиваю под эти ограничения. Приходится дробить повествование и создавать cliffhanger'ы, но зато меньше времени нужно на написание отдельных постов. Вот в формате часового видео можно довольно много рассказать и никаких ограничений нет. И текст вылизывать не нужно =) На работе я постоянно где-то что-то рассказываю, и не раз посещала мысль, что было бы круто что-то записать и для вас.
2. Пародия на аватарку канала с моей физиономией на 1500 подписчиков. Пункт шуточный, чтобы основательно подготовиться к следующему :)
3. Подкаст про рекомендательные системы на 1750 подписчиков. В составе из четырех яндексоидов, вместе с моим бывшим тимлидом Севой @yalinter, Сашей @knowledge_accumulator и Мишей @WazowskiRecommends. Обсудим тренды рексистем (трансформеры, РЛ, языковые модели, графы, etc), соберем ваши вопросы, и на самые интересные постараемся ответить.
4. Ридинг группа (почти виртуальный митап) на 2000 подписчиков (надеюсь, не все две тысячи придут). Обсудим выбранную голосованием статью, или даже несколько. Может, поговорим про то, как их вообще искать и читать. Я про это уже писал, но, кажется, еще осталось что обсудить. В этом поучаствует Сережа @pragmaticml, который, собственно, недавно пришел ко мне с предложением сделать что-нибудь про чтение статей.
Для меня все эти пункты звучат довольно сложно, но если хотя бы какой-нибудь реализуется, и реализуется успешно - буду доволен. Спасибо за то, что читаете канал, ставите реакции и пишете комментарии!
🔥74👍6❤1
NLP образца 2020-го года.
В далеком 2017-м я начинал познавать дивный нейросетевой мир с области обработки естественного языка. В те времена эмбеддинги слов формировались с помощью предобученных word2vec / glove / fasttext, а в качестве энкодера использовались RNN. Механизм внимания вне NMT почти не использовали (см., например, HAN). Были еще сверточные сети над текстом, как раз кодил такие для соревнования Toxic Comment Classification Challenge.
С этого соревнования, собственно, у меня и остались самые яркие воспоминания про то время. Топ-1 kaggle kernel там был от основателя fastai Jeremy Howard'а. Медальку за соревнование он так и не получил (у меня было серебро).
NLP тогда воспринималось по-другому. Наверно также, как я сейчас воспринимаю рекомендательные системы. Область бурно развивалась, только-только появились трансформеры, было очень интересно вчитываться в статьи. Сам факт, что такие задачи как sentiment analysis, NER, NMT удавалось решать нейросетями — был большим вдохновением.
Успехи в компьютерном зрении мне были не так интересны; на то время могу выделить разве что image captioning и style transfer. Я тогда еще иногда встречался с доуниверситетскими друзьями, и объяснял как работает word2vec и как в машинном обучении мы составляем признаковые пространства для объектов. Это казалось чем-то очень интересным =)
К чему я это все: в те годы у меня не было каких-либо "умных" систем для хранения статей. Как вчерашний студент, я хранил гигантские стопки бумажных заметок. Первая попытка это преодолеть произошла как раз перед выходом в Яндекс, когда я еще самоидентифицировался как NLP'шник и не занимался рексисом. Я сконструировал эдакий граф цитирования важных на мой взгляд NLP/DL статей с временной шкалой.
До сих пор иногда мне пишут коллеги с просьбой скинуть "ту самую NLP пдфку со статьями". Делюсь ею и с вами (см. первый комментарий) :)
В далеком 2017-м я начинал познавать дивный нейросетевой мир с области обработки естественного языка. В те времена эмбеддинги слов формировались с помощью предобученных word2vec / glove / fasttext, а в качестве энкодера использовались RNN. Механизм внимания вне NMT почти не использовали (см., например, HAN). Были еще сверточные сети над текстом, как раз кодил такие для соревнования Toxic Comment Classification Challenge.
С этого соревнования, собственно, у меня и остались самые яркие воспоминания про то время. Топ-1 kaggle kernel там был от основателя fastai Jeremy Howard'а. Медальку за соревнование он так и не получил (у меня было серебро).
NLP тогда воспринималось по-другому. Наверно также, как я сейчас воспринимаю рекомендательные системы. Область бурно развивалась, только-только появились трансформеры, было очень интересно вчитываться в статьи. Сам факт, что такие задачи как sentiment analysis, NER, NMT удавалось решать нейросетями — был большим вдохновением.
Успехи в компьютерном зрении мне были не так интересны; на то время могу выделить разве что image captioning и style transfer. Я тогда еще иногда встречался с доуниверситетскими друзьями, и объяснял как работает word2vec и как в машинном обучении мы составляем признаковые пространства для объектов. Это казалось чем-то очень интересным =)
К чему я это все: в те годы у меня не было каких-либо "умных" систем для хранения статей. Как вчерашний студент, я хранил гигантские стопки бумажных заметок. Первая попытка это преодолеть произошла как раз перед выходом в Яндекс, когда я еще самоидентифицировался как NLP'шник и не занимался рексисом. Я сконструировал эдакий граф цитирования важных на мой взгляд NLP/DL статей с временной шкалой.
До сих пор иногда мне пишут коллеги с просьбой скинуть "ту самую NLP пдфку со статьями". Делюсь ею и с вами (см. первый комментарий) :)
❤20🔥13👍3🤓3
У какой модели, формирующей векторы для товаров, максимальная емкость?
Anonymous Quiz
4%
Трансформер над названием товара
8%
Мешок слов над названием товара
24%
Обучаемый вектор
24%
Трансформер над названием товара и картинкой
40%
Графовая нейросеть, использующая фидбек пользователей про товары
🥴24👍5🤔3😁1
Обучаемые векторы для рекомендательных систем.
Есть конечное множество пользователей и айтемов. Хотим рекомендовать пользователям айтемы.
Пусть для каждого объекта задано векторное представление, при этом предпочтения пользователя
Почти в любой нейросети возникают векторы объектов. Иногда это целевая задача - получить эмбеддинги, обладающие определенными полезными свойствами (привет, representation learning). В рекомендашках это тоже актуально; и (1) для кандидатогенерации, которую часто делают на основе эмбеддингов (embedding-based retrieval), и (2) для ранжирования, серьезный вклад в которое вносят нейросетевые признаки.
В случае обучаемых эмбеддингов векторы объектов объявляются частью параметров модели; их значения подбираются в процессе оптимизации. Рассмотрим двухбашенную модель с обучаемыми векторами: она задается функционалом потерь (+ данными для обучения), процедурой оптимизации и, непосредственно, набором обучаемых векторов.
Утверждается, что у такой модели максимальная емкость. Что вообще такое емкость модели (англ. model capacity)? Это способность выражать взаимосвязи, аппроксимировать функции. В терминах двухбашенной модели об этом думать проще: представим, что у нас есть некоторая оптимальная структура семантического пространства (если нас волнует только семантическая близость объектов, то с точностью до поворотов, сдвигов и, возможно, масштабов), которую мы хотим получить.
В теории, двухбашенная модель с обучаемыми векторами может выучить любую структуру семантического пространства. Пусть у нас есть какая-то другая модель (e.g. мешок слов, трансформер, графовые нейросети), тогда можно инициализировать обучаемые эмбеддинги векторами из этой модели. В обратную сторону это не работает - имея набор векторов, не всегда можно так настроить "content-based" модель, чтобы она выдавала нужные векторы (привет, дистилляция).
Почему бы тогда не использовать всегда только обучаемые векторы? Несколько причин:
1. Недостаточно данных. Bias-variance tradeoff гласит, что более сложные модели сильнее переобучаются, hence для них нужно больше данных. Double descent в рекомендашках я пока не наблюдал, поэтому будем считать, что это правда :)
2. Тяжелые хвосты (long tail distributions). Если у вас большая часть объектов мало встречается в данных (т.е. хвост тяжелый), то про них сложновато делать выводы без дополнительной информации (e.g. контента), и тем более сложно выучить хорошие векторные представления.
3. Постоянно появляются новые объекты, поэтому нужна индуктивность - умение работать на объектах, не встречавшихся в обучении. У обучаемых векторов она отсутствует, они трансдуктивны.
4. Нестационарность распределений. Интересы пользователей меняются, содержимое айтемов обновляется, тренды (популярности объектов) эволюционируют. Обучаемые векторы это не учитывают.
Последние два пункта частично лечатся инкрементальным дообучением (получили новые данные - дообучились). Но:
* проблема курицы и яйца - чтобы дообучиться, надо накопить фидбек для новых объектов. Чтобы его накопить, нужно их рекомендовать. Если модель на них не дообучалась, то и рекомендовать их не будет.
* у инкрементального дообучения будет определенная задержка, побороть которую можно только невероятными инфраструктурными усилиями. Пока дообучение не произойдет, качество работы на новых и изменившихся объектах будет плохое.
Что же тогда делать? Вносить индуктивное смещение (англ. inductive bias): анализировать содержимое айтемов, делать нейросетевые энкодеры, добавлять регуляризацию, представлять пользователя через историю взаимодействий, etc. Об индуктивном смещении и как оно помогает бороться со всеми этими проблемами поговорим в другой раз :)
Есть конечное множество пользователей и айтемов. Хотим рекомендовать пользователям айтемы.
Пусть для каждого объекта задано векторное представление, при этом предпочтения пользователя
u определяются через скалярное произведение <u, i> для любого айтема i. Тогда говорят, что векторы пользователей и айтемов находятся в одном семантическом пространстве, а такую модель называют двухбашенной. Эти векторы еще часто называют эмбеддингами, потому что объекты буквально вкладываются (англ. to embed) в векторное пространство.Почти в любой нейросети возникают векторы объектов. Иногда это целевая задача - получить эмбеддинги, обладающие определенными полезными свойствами (привет, representation learning). В рекомендашках это тоже актуально; и (1) для кандидатогенерации, которую часто делают на основе эмбеддингов (embedding-based retrieval), и (2) для ранжирования, серьезный вклад в которое вносят нейросетевые признаки.
В случае обучаемых эмбеддингов векторы объектов объявляются частью параметров модели; их значения подбираются в процессе оптимизации. Рассмотрим двухбашенную модель с обучаемыми векторами: она задается функционалом потерь (+ данными для обучения), процедурой оптимизации и, непосредственно, набором обучаемых векторов.
Утверждается, что у такой модели максимальная емкость. Что вообще такое емкость модели (англ. model capacity)? Это способность выражать взаимосвязи, аппроксимировать функции. В терминах двухбашенной модели об этом думать проще: представим, что у нас есть некоторая оптимальная структура семантического пространства (если нас волнует только семантическая близость объектов, то с точностью до поворотов, сдвигов и, возможно, масштабов), которую мы хотим получить.
В теории, двухбашенная модель с обучаемыми векторами может выучить любую структуру семантического пространства. Пусть у нас есть какая-то другая модель (e.g. мешок слов, трансформер, графовые нейросети), тогда можно инициализировать обучаемые эмбеддинги векторами из этой модели. В обратную сторону это не работает - имея набор векторов, не всегда можно так настроить "content-based" модель, чтобы она выдавала нужные векторы (привет, дистилляция).
Почему бы тогда не использовать всегда только обучаемые векторы? Несколько причин:
1. Недостаточно данных. Bias-variance tradeoff гласит, что более сложные модели сильнее переобучаются, hence для них нужно больше данных. Double descent в рекомендашках я пока не наблюдал, поэтому будем считать, что это правда :)
2. Тяжелые хвосты (long tail distributions). Если у вас большая часть объектов мало встречается в данных (т.е. хвост тяжелый), то про них сложновато делать выводы без дополнительной информации (e.g. контента), и тем более сложно выучить хорошие векторные представления.
3. Постоянно появляются новые объекты, поэтому нужна индуктивность - умение работать на объектах, не встречавшихся в обучении. У обучаемых векторов она отсутствует, они трансдуктивны.
4. Нестационарность распределений. Интересы пользователей меняются, содержимое айтемов обновляется, тренды (популярности объектов) эволюционируют. Обучаемые векторы это не учитывают.
Последние два пункта частично лечатся инкрементальным дообучением (получили новые данные - дообучились). Но:
* проблема курицы и яйца - чтобы дообучиться, надо накопить фидбек для новых объектов. Чтобы его накопить, нужно их рекомендовать. Если модель на них не дообучалась, то и рекомендовать их не будет.
* у инкрементального дообучения будет определенная задержка, побороть которую можно только невероятными инфраструктурными усилиями. Пока дообучение не произойдет, качество работы на новых и изменившихся объектах будет плохое.
Что же тогда делать? Вносить индуктивное смещение (англ. inductive bias): анализировать содержимое айтемов, делать нейросетевые энкодеры, добавлять регуляризацию, представлять пользователя через историю взаимодействий, etc. Об индуктивном смещении и как оно помогает бороться со всеми этими проблемами поговорим в другой раз :)
👍30🔥16
Forwarded from Yandex for ML
Вот первые темы выступлений:
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍6❤5
Face reveal: https://youtu.be/iBhGAKFGKdQ?si=2omgFLtuDxv0UjbF
Рассказываю про нейросетевое ранжирование для рекомендаций.
После доклада за кулисами обсудили РЛ, графовые сетки, bias'ы, трансформеры для персонализации, академию, индустрию, роблокс, рекомендательные ленты, next item prediction, movielens, как делать надо и как не надо, симуляции пользователей, языковые модели, объяснения рекомендаций, манипуляции вместо рекомендаций, trust bias, фидбек луп.
P.S: Подписчики на митапе зашеймили за отсутствие постов на канале. Заверил, что это временно :)
Рассказываю про нейросетевое ранжирование для рекомендаций.
После доклада за кулисами обсудили РЛ, графовые сетки, bias'ы, трансформеры для персонализации, академию, индустрию, роблокс, рекомендательные ленты, next item prediction, movielens, как делать надо и как не надо, симуляции пользователей, языковые модели, объяснения рекомендаций, манипуляции вместо рекомендаций, trust bias, фидбек луп.
P.S: Подписчики на митапе зашеймили за отсутствие постов на канале. Заверил, что это временно :)
YouTube
Нейросетевое ранжирование для рекомендательных систем / Кирилл Хрыльченко
Ранжирование — самая сложная ML-часть рекомендательной системы. Почему улучшать качество рекомендаций нужно нейросетевыми моделями, а не градиентными бустингами, рассказал Кирилл Хрыльченко, руководитель группы исследования перспективных рекомендательных…
❤45🔥20👍1