На какой лосс учить рекомендательную систему?
В рекомендациях доминирует парадигма "Learning to Rank" - учится модель, получающая на вход (пользователь, контекст, документ) и выдающая число - предсказание релевантности, по которому потом сортируем.
Важным вопросом является то, на что такую модель надо учить. Упростим ситуацию - предположим, что у нас собраны данные о рекомендательной выдаче, и для каждой тройки (пользователь, контекст, документ) одна метка - был ли положительный отклик.
Самым банальным подходом будет учить бинарный классификатор через какой-нибудь logloss. Если предположить, что у нас есть идеальная модель, предсказывающая вероятность отклика - это и будет лучшее ранжирование, мы этого и хотели.
Но в реальности наша модель обладает ограниченной ёмкостью, данные конечны, и поэтому модель не будет выдавать свой "теоретический" максимум. И тут важным является то, какого рода ошибки наша модель допускает, а это уже зависит от способа обучения.
Нам не так страшно, если модель будет ошибаться в значении вероятности для конкретного документа. Самое важное - это чтобы в рамках набора кандидатов при формировании выдачи модель выдала правильный порядок документов. Поэтому и учить нам есть смысл соответствующим образом - на правильный порядок.
Самый простой пример - Pair-Wise Logloss. Идея - вместо предсказании метки класса будем формировать пары из документов внутри одной выдачи с разными значениями отклика, и logloss применять к разнице логитов - предсказывать в качестве класса "порядок". Можно по-разному обучать эти разницы логитов, на картинке другой пример - PairwiseLogisticLoss. Больше примеров здесь.
В реальности есть подводные камни - сложности в реализации, отсутствие сигнала, если в пачке у всех документов был нулевой отклик, всякое по мелочи. Поэтому разные подходы часто комбинируются какими-то костыльными способами, ориентируясь на ранжирующую метрику вроде NDCG.
@knowledge_accumulator
Post #163
3.56K

- 👍 22
- ❤ 3
- 🔥 2