Сегодня расскажем о персональном эмбеддинге пользователя, и как мы его строили.
Какую проблему решали? В рассылках скапливается огромное число писем, среди которых легко пропустить интересное письмо. Персональный эмбеддинг пользователя призван решить эту проблему и подсветить такие письма. Но область применимости этого эмбеддинга намного шире)
Обучение модели начинается с выбора метрик. Из очевидных: классификация читаемых рассылок, uniformity. Но не стали останавливаться на классике и завели:
• sex/age классификация
• sameUser - эмбеддинги принадлежат одному пользователю или разным
• sensitivity к прочтениям – как меняется эмбеддинг пользователя, если изменить метку у письма или группы писем.
Как учили модель эмбеддинга пользователя? На вход трансформеру подаём последовательность векторов, состоящих из эмбеддинга письма и метки 1/0 (прочитано / не прочитано). Учим на контрастив лосс: прочитанное письмо должно быть близко к эмбеддингу пользователя, непрочитанное – наоборот.
Далее подбираем порог для близости эмбеддингов и на потоке считаем косинусное расстояние между эмбеддингом письма и эмбеддингом пользователя.
Косинус выглядит хорошим бейзлайном, но у него есть ряд проблем:
• Геометрия – история рассылок образовала конус с осью в PersEmb. При использовании общего порога – у одного пользователя или все рассылки попадают в раствор или ни одного.
• Косинус плохо справляется с мало читающими – нужно учить скоринговую функцию.
После доработки нашего бейзлайна получилась следующая система: эмбеддинг пользователя учится как и раньше, в качестве меры близости – используем скоринговую функцию, которая на вход принимает не только эмбеддинги пользователя и письма, но и другие статистики. И вот уже год система запущена на всех читающих пользователях без исключений 🦾
Post #34
1.69K