i2i, или triggered-inducted recommendation.
Классика
В традиционных задачах рекомендаций, как user-to-item (u2i), система подбирает элементы для пользователя, основываясь на его истории. Например, если пользователь смотрел ножи и вилки, то логично показать и другие товары из кухонной утвари. В такой задаче чаще всего берут историю пользователя и пытаются предсказать , что он посмотрит в будущем.
i2i
На практике, u2i обычно сочетается с i2i сценарием. Это можно увидеть после того, как кликнуть на айтем, появляются подборки - "Похожих", "Товаров со скидкой", "Покупают вместе". Каждая из них пытается угадать намерение (интент) пользователя. Чаще всего в компаниях используют отдельную модель для u2i и для i2i, но саму связку user-click->item-buy->item в модели не закладывают. Например, в любом маркетплейсе, пользователь сначала кликает на айтем, потом может посмотреть похожие и покупает.
Идея
trigger&target
Triggered-inducted подход заключается именно в том, чтобы учить модель на задачу CTR синхронно u2i и i2i часть системы. Trigger — это элемент, на который пользователь кликнул, а target — это набор элементов, который предлагается пользователю после клика на trigger. И в ранжировании target айтемов важно учесть сигнал, что пользователя привлек именно trigger.
Например
Если после клика на вилку, логично показывать другие вилки, похожие на данную.
Основные челленджи
Учет покупок
У нас есть пользователь и датасет из айтемов (trigger и target). Например, если пользователь смотрел приборы для кухни и уже купил ложку, то при клике на вилку (trigger), хочется , чтобы система поднимала в выдаче другие вилки, ножи, тарелки, но не ложки - у него они уже есть. Если система игнорирует факт покупки, это может привести к ухудшению пользовательского опыта — показ ненужных товаров снижает вероятность покупки.
Учет интента
В системе хочется учесть интент пользователя. И тут скрывается второй челендж - если пользователь кликнул на нож, то ему стоит в target показывать другие ножи или все-таки товары связанные с кухней? Оба этих юзкейса хочется решить в нашей системе
Как можно решить?
Эвристики
Простое решение - использовать эвристик. Можно отслеживать, сколько раз пользователь просматривал товары одной категории, чтобы динамически корректировать выдачу. Например, заметить, что после покупки ложки, не надо показывать ее пользователю, если после события покупки пользователи нашей системы перестают покупать товары той же категории в 1 сессии
Нейросетевой подход
Для более сложных сценариев — можно применить нейросетевые модели, такие как подход из статьи Alibaba. В ней как раз и подсчитали важность связать u2i и i2i рекомендации.
Статья про метод который использует общие веса для trigger и target частей системы. Также в обоих коленах используется история пользователя, что позволит понижать в выдачей уже купленные товары. Есть отдельные блоки для нахождения максимально похожих элементов к данному и для подбор к интенту пользователя (желанию купить кухонную утварь). Подробнее я расскажу в отдельном посте.
Что я думаю?
Про статью
Авторы статьи определили актуальные проблемы - за это "+". Конечно, мы живем в 21 веке и все любят нейронки, но эти проблемы можно учесть и проще. Почему бы просто не отфильтровывать уже купленные товары ? Или подсчитать, сколько раз в сессии пользователь покупал товары одной категории (вилки) или разных (ножи, тарелки) и использовать эти веса для формирования выдачи?
Хотя нейросетевые модели дают прирост в доли процента, и это очень важно в масштабных системах, простые эвристики могут закрыть 90% задач. Они дешевле в реализации, легче масштабируются и гораздо объяснимее. А для оставшихся 10% сложных кейсов уже можно применять трансформеры.
Post #9
736