From 11e222083f3887f86f23b2e0c4fad375574220b4 Mon Sep 17 00:00:00 2001 From: Nikolay Lysenko Date: Wed, 3 Jul 2024 23:14:40 +0300 Subject: [PATCH] feat: Describe BERT4Rec --- .../recommender_systems.ipynb | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/notes/machine_learning/recommender_systems.ipynb b/notes/machine_learning/recommender_systems.ipynb index 6592bba..e23fa92 100644 --- a/notes/machine_learning/recommender_systems.ipynb +++ b/notes/machine_learning/recommender_systems.ipynb @@ -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", @@ -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 является двунаправленной моделью, то есть он способен учитывать информацию о более поздних взаимодействиях при формировании векторного представления текущего «предмета». Чтобы двунаправленность не осталась чисто номинальной и чтобы её потенциал был раскрыт, на этапе предварительного обучения задача восстановления скрытых токенов ставится в том же виде, что и для обработки текстов. Иными словами, токен \\ может возникать в произвольных местах последовательности. Однако в задаче последовательных рекомендаций встречаются только такие последовательности, где токен \\ есть лишь в самом конце. Поэтому в качестве этапа дообучения ещё раз ставится задача восстановления скрытых токенов, но на этот раз всегда скрывается исключительно последний токен.\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": { @@ -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$." ] } ],