Skip to content

Commit

Permalink
feat: Describe BERT4Rec
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikolay-Lysenko committed Jul 3, 2024
1 parent a0f557b commit 11e2220
Showing 1 changed file with 34 additions and 3 deletions.
37 changes: 34 additions & 3 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.\n",
" - [BERT4Rec](__home_url__/notes/BERT4Rec).\n",
"\n",
"Некоторые из перечисленных вариантов могут быть использованы и для извлечения кандидатов, если они достаточно быстры в рантайме. Действительно, top-$k$ товаров, отранжированных каким-либо методом, можно рассматривать в качестве кандидатов для более сложного метода.\n",
"\n",
Expand Down Expand Up @@ -347,6 +347,37 @@
"Ещё один из [подходов](http://users.cecs.anu.edu.au/~u5098633/papers/www15.pdf) предполагает обучение очищающего от шума автокодировщика. В обучающих данных объектами являются пользователи, представленные в виде строк матрицы $R$. Шумом же считается замена каких-либо значений на пропуски (или на плэйсхолдер пропуска, если пропуски не поддерживаются конкретным программным инструментом). Получив на вход строку с искусственно добавленными пропусками, автокодировщик должен вернуть строку без этих пропусков (но с исходно существовавшими пропусками)."
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"рекомендательные_системы",
"нейронные_сети",
"трансформеры"
]
},
"source": [
"## BERT4Rec\n",
"\n",
"#### Классический вариант\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",
"В целом, переход от обработки текстов к рекомендациям достаточно прямолинеен. Так, например, вместо токенов используются идентификаторы «предметов», а задача классификации пар предложений отсутствует, так как она не имеет смысла в контексте рекомендаций.\n",
"\n",
"Единственное нетривиальное место связано с задачей восстановления скрытых токенов. По построению BERT является двунаправленной моделью, то есть он способен учитывать информацию о более поздних взаимодействиях при формировании векторного представления текущего «предмета». Чтобы двунаправленность не осталась чисто номинальной и чтобы её потенциал был раскрыт, на этапе предварительного обучения задача восстановления скрытых токенов ставится в том же виде, что и для обработки текстов. Иными словами, токен \\<MASK\\> может возникать в произвольных местах последовательности. Однако в задаче последовательных рекомендаций встречаются только такие последовательности, где токен \\<MASK\\> есть лишь в самом конце. Поэтому в качестве этапа дообучения ещё раз ставится задача восстановления скрытых токенов, но на этот раз всегда скрывается исключительно последний токен.\n",
"\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",
"\n",
"#### Обобщения\n",
"\n",
"Очевидно, что история действий пользователя не описывает его целиком, есть и другие пользовательские признаки. Также есть и признаки «предметов». Для совмещения способности модели BERT4Rec обрабатывать историю действий с возможностью учитывать иные признаки, можно доработать [двубашенную архитектуру](__home_url__/notes/Нейросетевые методы для заполнения кросс-табуляционной матрицы).\n",
"\n",
"<Заметка будет дописана.>"
]
},
{
"cell_type": "markdown",
"metadata": {
Expand Down Expand Up @@ -409,11 +440,11 @@
"\n",
"#### Применение\n",
"\n",
"После ранжирования есть список из $\\nu \\le n$ «предметов» (до ранжирования могли дойти не все «предметы», плюс можно исключить те, которые получили нулевые оценки релевантности). Переранжирование проводится итеративно с некоторым шагом $k$, то есть сначала заполняются позиции с первой по $k$-ю, потом позиции с $(k+1)$-й по $2k$-ю и так далее. Если у матрицы $L$ нет обучаемых параметров, то $k$ формально можно брать любым, но слишком низкие $k$ могут привести к недостаточному разнообразию (в частности, при $k=1$ от переранжирования вообще ничего не изменится), да и слишком большие тоже (при $k=\\nu$ все «предметы» попадут в топ-$k$). Если же обучаемые параметры есть, то желательно брать $k \\le t$, чтобы корректнее оценивались вероятности подмножеств размера $k$.\n",
"После ранжирования есть список из $n^{\\prime} \\le n$ «предметов» (до ранжирования могли дойти не все «предметы», плюс можно исключить те, которые получили нулевые оценки релевантности). Переранжирование проводится итеративно с некоторым шагом $k$, то есть сначала заполняются позиции с первой по $k$-ю, потом позиции с $(k+1)$-й по $2k$-ю и так далее. Если у матрицы $L$ нет обучаемых параметров, то $k$ формально можно брать любым, но слишком низкие $k$ могут привести к недостаточному разнообразию (в частности, при $k=1$ от переранжирования вообще ничего не изменится), да и слишком большие тоже (при $k=n^{\\prime}$ все «предметы» попадут в топ-$k$). Если же обучаемые параметры есть, то желательно брать $k \\le t$, чтобы корректнее оценивались вероятности подмножеств размера $k$.\n",
"\n",
"Из формулы для вероятности подмножества теперь интересует только числитель, потому что нормирующий знаменатель одинаков для всех подмножеств. Если за $\\mathbb{S}_i$ обозначить множество индексов, для которых «предметы» не были выбраны к началу $i$-й итерации, то на этой итерации будет решаться задача:\n",
"$$\\max_{Y \\in \\mathbb{S}_i, \\vert Y \\vert = k} \\det(L_Y).$$\n",
"Всего потребуется перебрать $C_{\\nu - (i-1)k}^k$ вариантов, что может оказаться вычислительно неподъёмным. В таких случаях используют жадный алгоритм, итеративно строящий множество $Y$ элемент за элементом на основании максимизации текущего $\\det(L_Y)$. Кстати, порядок, в котором в $Y$ добавлялись элементы, можно считать тем порядком, в котором будут стоять эти $k$ элементов после переранжирования. Если же множество $Y$ было найдено по-честному, порядок внутри него можно по-прежнему выводить из $s_i$."
"Всего потребуется перебрать $C_{n^{\\prime} - (i-1)k}^k$ вариантов, что может оказаться вычислительно неподъёмным. В таких случаях используют жадный алгоритм, итеративно строящий множество $Y$ элемент за элементом на основании максимизации текущего $\\det(L_Y)$. Кстати, порядок, в котором в $Y$ добавлялись элементы, можно считать тем порядком, в котором будут стоять эти $k$ элементов после переранжирования. Если же множество $Y$ было найдено по-честному, порядок внутри него можно по-прежнему выводить из $s_i$."
]
}
],
Expand Down

0 comments on commit 11e2220

Please sign in to comment.