Трансформеры над пользовательской историей - всего лишь жалкий частный случай
Речь сегодня пойдёт о такой вычислительной конструкции, как графовые сети. Итак, что для неё нужно?
Датасет для рекомендаций можно представить в виде графа:
- Вершинами являются всевозможные сущности - документы, пользователи, все виды объектов в системе.
- Рёбрами являются известные связи между ними - например, клик пользователя на документ, или связь между треком и артистом в музыкальном сервисе.
Очевидно, вершины и связи при этом могут быть разных типов.
Чем в такой схеме является обычный рекомендательный трансформер?
- Берём вершину пользователя и последние N связей его с другими документами
- Применяем Attention к этой последовательности, сохраняем результат агрегации.
- Так как трансформеры многослойные, проделываем это K раз.
И в этом случае мы смотрим в графе только на глубину 1 относительно вершины, но на самом деле можно смотреть на глубину K и использовать гораздо больше объектов! На картинке иллюстрация работы GraphSAGE, основная суть которой в следующем:
1) Берём желаемую вершину V и сэмплируем у неё N соседей. Потом у них сэмплируем ещё соседей, и так K раз.
2) На каждом шаге пересчитываем эмбеддинг каждой вершины, агрегируя информацию со всех её соседей. Раньше это делали каким-нибудь усреднением, но сегодня мы уже знаем про Attention.
3) Информация постепенно перетекает из окрестности глубины K в сторону выбранной вершины, и в конце концов вся выбранная окрестность будет задействована.
Понятно, что возникает проблема экспоненциального взрыва количества задействованных вершин, но это уже вопрос гиперпараметров и деталей процедуры. Но глобально, по сравнению с трансформером, в процессе подсчёта одного сэмпла может задействоваться очень много информации из всей системы, тем самым улучшая степень переиспользования данных. После обучения полученные эмбеддинги можно подавать в тот же трансформер и это даёт прирост по метрикам относительно простых обучаемых с нуля эмбеддингов.
@knowledge_accumulator
Post #119
2.14K

- 👍 19
- ❤ 3
- 🔥 3