LogQ correction
По малообъяснимой причине, я испытываю неприязнь к LogQ correction. Какая-то она слишком душная. Но всё же я стремлюсь оценивать идеи по их полезности, а не красоте. Поэтому сегодня я взгляну ей прямо в глаза и перерасскажу смысл вам.
Итак, в рекомендательных системах в каком-то смысле пытаются выучить распределение p(item | user), показывающее распределение на айтемы, с которыми пользователь положительно взаимодействует.
Для обучения нам нужны позитивные пары и негативные пары. Если в задаче ранкинга очень важны сложные негативы, и поэтому мы берём их из показов пользователя, для ретривала нам важнее уметь фильтровать полный мусор.
Поэтому ретривал-модели часто обучают следующим образом - берут батч (user_1, item_1), (user_2, item_2). Из N таких пар создают N * (N - 1) негативов, то есть каждого пользователя сопоставляют со всеми чужими документами. Получается халява - тяжёлую эмбеддинг модель мы применили 2*N раз, а получили N^2 обучающих сэмплов.
На практике матрицу юзерных эмбедов просто домножают на транспонированную матрицу документов, получаем много логитов, и в каждой строчке получается по одному p(item | user_i). Дальше применяем софтмакс и учим.
И тут в комнату входит душнила-математик -
«Вообще-то, при обучении такого классификатора важно честно оценить знаменатель при нормализации вероятности положительного документа. Если бы вы суммировали по всем документам, то можно и так, но в ваших негативах чаще других представлены популярные документы, являющиеся позитивами у других пользователей. Вы штрафуете их сильнее, чем надо»
Справедливо. Тут-то и приходит на помощь эта самая LogQ коррекция. По сути это просто importance sampling веса на негативные сэмплы, считающиеся как доля этого документа во всем датасете. Самое противное, что на полу она не валяется, и нужно заморачиваться с тем, чтобы её оценивать и добавлять в фичи, ну или как-то ещё её доставать.
И если вам было недостаточно душно в этой комнате, тут в неё заходит Кирилл @inforetriever
«Вообще-то, у вас тут в вашей коррекции ошибочка. Вы неправильно считаете вес для положительного айтема в знаменателе. Его вероятность в нём оказаться отличается от негативных документов»
В статье, от названия которой мне плохо - “Correcting the LogQ correction” - Кирилл и соавторы выписывают ну уже точно правильную формулу лосса для честной оптимизации likelihood. Там не очень сложно, но пересказывать тут в деталях откажусь, я только что позавтракал.
Судя по замерам, это добавляет качества. Конечно, не так много, как сама LogQ, но всё же это приятный результат, так что поздравляю авторов с успешным исследованием.
Боже упаси делать Retrieval 🙏
@knowledge_accumulator
Post #309
2.81K
- ❤ 24
- 👍 9
- 🔥 7