RecSys + DSSM + FPSLoss is all you need. clip.. clip. cross-entropy.. clip. cross-entropy. fps.. clip. cross-entropy. fps. loss.. clip. cross-entropy. fps. loss. loss-функции.. clip. cross-entropy. fps. loss. loss-функции. machine learning.. clip. cross-entropy. fps. loss. loss-функции. machine learning. pairCE.. clip. cross-entropy. fps. loss. loss-функции. machine learning. pairCE. recsys.. clip. cross-entropy. fps. loss. loss-функции. machine learning. pairCE. recsys. tripletloss.. clip. cross-entropy. fps. loss. loss-функции. machine learning. pairCE. recsys. tripletloss. рекомендательные системы.
RecSys + DSSM + FPSLoss is all you need - 1

Упрощать и искать похожие детали, очень полезный навык! Предлагаю быстро пробежаться и попробовать найти ту самую серебряную пулю в RecSys !

Введение

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

В современных системах чаще используются модели с поздним связыванием (late interaction): есть две независимые башни для query и doc, которые преобразуют их в вектора. Далее релевантность аппроксимируется через скалярное произведение: text{dotproduct}(text{vec}_q, text{vec}_d) to text{relevant}_{score}. Это может быть клик/не клик или ручная разметка.

Важно: скалярное произведение не нормировано, так как качество выше, если модель сама учит регулизацию. Если грамотной регулизации нет — лучше использовать нормированые вектора(aka косинусная мера).

Почему это удобно?

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

  • Не нужно каждый раз пересчитывать декартово произведение (doc, query) векторов.

  • Можно построить KNN и искать быстро!

  • Универсальный интерфейс, подходящий для многих задач.

  • Можно эффективно считать FPS (Full Product Softmax) — ранее связывание + претраин FPS + SFT эффективнее, чем позднее связывание без FPS претраина.

Что такое DSSM? Звучит мощно, не так ли?

В 2008 году Microsoft выпустили статью Learning Deep Structured Semantic Models for Web Search using Clickthrough Data, где показали DSSM (Deep Semantic Similarity Model): две башни (query, doc) и в таргете клик! С тех пор это название закрепилось за таким дизайном моделей.

Теперь ты знаешь, что значит это сокращение захватившее все продакшены бигтехов там где есть DL :D

RecSys + DSSM + FPSLoss is all you need - 3

Запросная часть обычно считается в рантайме, поэтому её делают легче, чем документную. Есть трюки для оптимизации нагрузки: кеширование, горизонтальный рост и др.

Классический пример башен — трансформеры над последовательностями + MLP (для категориальных/вещественных признаков и результата трансформера).

Ранжирующие лоссы

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

В течении написания наткнулся на офигетельный хендбук Яндекса по рексису. Многое буду брать от туда

Важное наблюдение:

Некоторые авторы пытались вместо косинусной меры использовать обучаемый MLP, но это оказалось неэффективно.

Обозначения

  • q , d — эмбеддинги объектов

  • R(q, d)=text{dotproduct}(q, d) — релевантность (помним, при нормализации векторов)


Основной трюк в обучении рекомендательных систем — сбор сэмплов из клика (обычно одного) и множества негативов (практически любой другой документ). Но использовать слишком много негативов неразумно! Здесь помогает negative sampling (ещё из Word2Vec). Обычно берём 1 позитив (d^{+}) и n approx 5–20 негативов (d_i^{-}).

PointWise | Softmax Loss

Классический способ — предсказывать абсолютную вероятность:

P(d mid q)=frac{exp(R(q, d))}{sum_{i=1}^{D} exp(R(q, d_i))}mathcal{L}(q, d^{+})=-log(P(d^{+} mid q))

Pairwise loss | PairCE + TripletLoss

Теперь важно лишь, что d^{+} релевантнее d^{-}.

Pair Cross-Entropy loss (PairCE):

mathcal{L}(R(q, d_+), R(q, d_-))=mathrm{CrossEntropy}(1.0, sigma(R(q, d_+) - R(q, d_-)))

Triplet loss:

mathcal{L}(R(q, d_+), R(q, d_-))=max(0, alpha - R(q, d_+) + R(q, d_-))

Все эти лоссы учат отталкивать разнорелевантные пары. Softmax Loss дополнительно учит предсказывать вероятность, что усложняет задачу для сетки, ведь для ранжирования это избыточно.

ListWise | FPSLoss

Часто используют PairCE/TripletLoss с одним кликом и кучей негативов — это похоже на ListWise, но можно ли придумать что-то новое? Да! В игру мощно врывается — CLIP (2021), решает задачу — определение семантической близости картинки и текста, где найден эффективный способ получения негативов.

RecSys + DSSM + FPSLoss is all you need - 16

Full Product Softmax loss (FPSLoss):

Собираем батч размера M: (q_1, d_1, r_1), ldots, (q_m, d_m, r_m), где q — запрос, d — документ, r — релевантность (обычно положительная, часто клик и равен 1).

Составляем матрицу эмбеддингов запросов U, документов W и вектор таргетов r.

Тогда перемножение матриц — это эффективный подсчёт dotproduct, а далее и вероятностей:

mathrm{softmax}(alpha U W^{T} + beta), quad U W^{T} in mathbb{R}^{M times M},

RecSys + DSSM + FPSLoss is all you need - 26

Остаётся, как и в Softmax, взять элементы только с диагонали:

L=-mathbb{I}{r > 0}^{T} cdot logleft(mathrm{diag}left(mathrm{softmax}(alpha U W^{T} + beta)right)right)

Интуитивно понятно, что учится относительная вероятность при условии query frac{p(text{query}|text{doc})}{p(text{query})}. Обращу внимание, что легко можно добиться смену местами query и doc.

Также заметим, как хитро и качественно теперь негативы собираются!

А что с этим делать?

RecSys + DSSM + FPSLoss is all you need - 29

Предлагается следующее:

  • Определить архитектуры башен: наверняка это должна быть комбинации BERT + MLP

  • Собрать очень много данных для FPS лосса (обычно яркий положительный фидбек пользователя)

  • Сделать долгий претраин на FPS

  • Дофайнтюниться на свою задачу, если нужно

Заключение

Этим хотел показать, общий вид DL RecSys и на самом деле все кроется в маленьких деталях. Абсолютно точно, для каждой задачи нужно относиться критически и замерять профит от каждого действия, что в рексисе является очень не простой задачей!


Если статья была полезна — ставьте лайк, подписывайтесь и делитесь своим опытом в комментариях!

Автор: naumtsevalex

Источник

Rambler's Top100