Как подавать разнотипные признаки в трансформер для RecSys
Есть числовые, категориальные и поведенческие признаки пользователя и товара. Как превратить их во вход трансформера?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Категории кодируются embedding table, числовые признаки нормализуются и проецируются через MLP, тип признака тоже можно дать отдельным embedding. Для пользователя действия идут последовательностью, для товара атрибуты можно подать как set/sequence tokens и агрегировать pooling/CLS.
Полный разбор
Разнотипные признаки нужно привести к общей размерности. Категориальный признак получает embedding по id значения и, часто, embedding типа признака. Числовой признак нормализуется и проходит через маленький MLP или linear projection; вместе с ним можно подавать embedding имени признака. Так модель понимает не только значение, но и что это за поле.
Для товара набор атрибутов можно рассматривать как множество токенов: категория, бренд, цена, текстовые/image embeddings, статистики. Transformer или attention-блок агрегирует их в item embedding через CLS token, pooling или attention pooling. Для пользователя естественнее последовательность действий: item embedding, тип события, timestamp/позиция, давность, контекст.
После получения user и item embeddings есть два частых пути: dot product в общем пространстве для retrieval или MLP/cross network для реранжирования. Важно заранее решить, какие признаки доступны online, а какие можно считать только offline.
Теория
Transformer не требует только текстовых токенов; токеном может быть любой признак, если его корректно спроецировать в embedding space.
Типичные ошибки
- Смешивать сырые числовые и категориальные признаки без нормализации и type embeddings.
- Забывать, что item id огромного каталога плохо масштабируется как обычный словарь.
- Не различать item representation для retrieval и feature-rich reranking.