Skip to content

Commit

Permalink
feat: Describe transformers in recommender systems
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikolay-Lysenko committed Jul 4, 2024
1 parent 7c559b0 commit 14282fc
Showing 1 changed file with 31 additions and 7 deletions.
38 changes: 31 additions & 7 deletions notes/machine_learning/recommender_systems.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
" - градиентного бустинга,\n",
" - нейронных сетей:\n",
" - адаптации [DSSM](__home_url__/notes/DSSM (Deep Semantic Similarity Model)) под рекомендательные системы,\n",
" - [BERT4Rec](__home_url__/notes/BERT4Rec).\n",
" - [BERT4Rec](__home_url__/notes/Трансформерные модели в рекомендациях), [SASRec](__home_url__/notes/Трансформерные модели в рекомендациях), etc.\n",
"\n",
"Некоторые из перечисленных вариантов могут быть использованы и для извлечения кандидатов, если они достаточно быстры в рантайме. Действительно, top-$k$ товаров, отранжированных каким-либо методом, можно рассматривать в качестве кандидатов для более сложного метода.\n",
"\n",
Expand Down Expand Up @@ -357,9 +357,9 @@
]
},
"source": [
"## BERT4Rec\n",
"## Трансформерные модели в рекомендациях\n",
"\n",
"#### Классический вариант\n",
"#### BERT4Rec\n",
"\n",
"Задача выдачи рекомендаций на основании последовательности действий (sequential recommendation) ставится как предсказание следующего «предмета», с которым у пользователя будет положительное взаимодействие, исключительно по упорядоченному списку «предметов», с которыми до этого были положительные взаимодействия. Для решения этой задачи в статье [Sun et al., 2019](https://arxiv.org/pdf/1904.06690) модель [BERT](__home_url__/notes/BERT (Bidirectional Encoder Representations from Transformers)) адаптируется под предметную область рекомендательных систем.\n",
"\n",
Expand All @@ -369,13 +369,37 @@
"\n",
"#### SASRec\n",
"\n",
"Более ранний вариант BERT4Rec описан в статье [Kang et al., 2018](https://arxiv.org/abs/1808.09781) и называется Self-Attentive Sequential Recommender (SASRec). В нём задача восстановления скрытых токенов не нуждается в модификациях, потому что вместо этого модифицированы связи между трансформерными блоками. Модель сделана однонаправленной, то есть $i$-й в истории действий пользователя «предмет» может повлиять на векторное представление $j$-го, только если $j \\le i$.\n",
"Более ранний вариант BERT4Rec описан в статье [Kang et al., 2018](https://arxiv.org/abs/1808.09781) и называется Self-Attentive Sequential Recommender (SASRec). В нём задача восстановления скрытых токенов не нуждается в модификациях, потому что вместо этого модифицированы связи между трансформерными блоками. Модель сделана однонаправленной, то есть $i$-й в истории действий пользователя «предмет» может повлиять на векторное представление $j$-го, только если $i \\le j$.\n",
"\n",
"#### Обобщения\n",
"#### Учёт признаков\n",
"\n",
"Очевидно, что история действий пользователя не описывает его целиком, есть и другие пользовательские признаки. Также есть и признаки «предметов». Для совмещения способности модели BERT4Rec обрабатывать историю действий с возможностью учитывать иные признаки, можно доработать [двубашенную архитектуру](__home_url__/notes/Нейросетевые методы для заполнения кросс-табуляционной матрицы).\n",
"Очевидно, что история действий пользователя не описывает его целиком, ведь есть и другие пользовательские признаки. Также есть и признаки «предметов». Чтобы их учитывать, можно ввести нейронную сеть с [двубашенной архитектурой](__home_url__/notes/Нейросетевые методы для заполнения кросс-табуляционной матрицы).\n",
"\n",
"<Заметка будет дописана.>"
"Пользовательская «башня» состоит из трансформерных блоков, где в качестве входов берутся:\n",
"* исторические действия, представленные как сумма трёх векторов размерности $d$:\n",
" - вложение «предмета» (обучаемое или заготовленное заранее на основании его контентных признаков, таких как название, описание, изображение и т.д.),\n",
" - обучаемое вложение типа действия, которое было совершено (клик, заказ и т.п.),\n",
" - вложение позиции в истории действий;\n",
"* любые иные признаки, сгруппированные по векторам размерности $d$, чтобы их можно было обрабатывать в том же трансформере;\n",
"* произвольное вложение \\<CLS\\>-токена.\n",
"\n",
"Выходом пользовательской «башни» является векторное представление \\<CLS\\>-токена.\n",
"\n",
"Для «предметов» же «башня» является многослойным перцептроном, как-либо обрабатывающим их признаки, а её выход имеет размерность $d$. Скалярное произведение этого вектора на выход пользовательской «башни» можно считать оценкой степени соответствия «предмета» пользователю.\n",
"\n",
"#### Индуктивность\n",
"\n",
"Ещё одна точка роста связана с тем, что BERT4Rec и SASRec работают с идентификаторами «предметов». Во-первых, из-за этого они трансдуктивны, то есть не способны ни делать предсказания для новых «предметов», ни учитывать их появление в истории пользователя. Во-вторых, количество обучаемых параметров как минимум пропорционально количеству «предметов», из-за чего для маркетплейсов, видеоплатформ и социальных сетей оно становится слишком большим. Действительно, если есть $l$ «предметов» и для каждого на входе в трансформер есть получение вложения размерности $d$ по его индексу (embedding lookup), то это уже $l \\times d$ обучаемых параметров.\n",
"\n",
"Способы решения этой проблемы таковы:\n",
"* использовать только заранее обученные векторные вложения (но тогда не будет возможности влиять на них),\n",
"* обучать вложения не для «предметов», а для токенов, входящих в их названия; это имеет смысл, если токенов меньше, чем «предметов» — тогда уменьшение количества обучаемых параметров также окажет регуляризационный эффект; и тут есть варианты:\n",
" - в качестве вложения «предмета» взять сумму вложений его токенов, то есть «предмет» рассматривается как «мешок токенов»,\n",
" - каждый токен считать самостоятельным элементом истории, который подаётся в трансформер (может оказаться вычислительно затратным, если история бывает длинной).\n",
"\n",
"#### Графовые нейронные сети\n",
"\n",
"Помимо истории действий текущего пользователя есть история действий всех пользователей с текущим «предметом». Чтобы учитывать и её, позволив похожим пользователям обмениваться информацией друг о друге, можно применить [графовые нейронные сети](__home_url__/tags/графы) к двудольному графу, вершинами которого являются пользователи и «предметы», а рёбрами являются взаимодействия. Трансформеры будут применяться в свёрточных слоях для агрегации вложений соседних вершин."
]
},
{
Expand Down

0 comments on commit 14282fc

Please sign in to comment.