bert4rec简介

1、bert4rec提出动机

用户行为动态变化,序列行为建模取得了不错的效果

单向结构限制了行为序列中隐藏信息的挖掘

序列神经网络顺序依赖,无法并行计算

为此,提出了

  • 基于双向self-attention和Cloze task的用户行为序列建模方法。据我们所知,这是第一个将深度序列模型和Cloze task引入推荐系统的研究。
  • 将我们的模型与最先进的方法进行了比较,并通过对四个基准数据集的定量分析,证明了本文算法的有效性。
  • 我们进行了一项消融分析,分析了模型中关键部件的贡献。

2、bert4rec结构

2.1、推荐中行为序列建模的问题定义

2.2、模型的结构

2.2.1、模型整体结构

bert4rec整体架构如下图(b)所示,bert4rec是一个含有L层的transformer,每一层都可以利用上一层的信息,通过self-attention并行捕获任意位置的信息。

2.2.2、模型结构拆解

由上图(a)所示,bert4rec的transformer由multi-head self-attention和position-wise ffn构成。

2.2.2.1、Embedding layer

Embedding层加入了位置嵌入,本文的位置向量是学到的,不是transformer中的正弦。位置向量矩阵可以给定任意位置的向量,但是要明确最大的长度,因此需要对输入序列进行截断。

 

2.2.2.2、multi-head self-attention

引入温度 以产生更柔和的注意力分布,以避免极小的梯度

2.2.2.3、position-wise FFN

由于只有线性映射,为了使得模型具有非线性的性质,所以采用了Position-wise Feed-Forward Network。Position-wise的意思是说,每个位置上的向量分别输入到前向神经网络中,计算方式如下:

最终的隐层向量表示为

 

2.2.2.4、 Output layer

全链接层的一个映射

3、模型训练

预测下一个item的表示形式

输入为   ,向右shift一个即得到下一个序列的预测    

而在BERT4Rec中,由于是双向模型,每一个item的最终输出表示都包含了要预测物品的信息,这样就造成了一定程度的信息泄漏。因此采用Cloze taske,也就是将输入序列中的p%的物品进行masked,然后根据上下文信息预测masked的物品。

损失函数

4、实验对比

4.1、数据集

4.2、评价指标

在top-K推荐中,HR是一种常用的衡量召回率的指标,计算公式为:

分母是所有的测试集合,分子表示每个用户top-K列表中属于测试集合的个数的总和。

举个简单的例子,三个用户在测试集中的商品个数分别是10,12,8,模型得到的top-10推荐列表中,分别有6个,5个,4个在测试集中,那么此时HR的值是
(6+5+4)/(10+12+8) = 0.5。

4.3、实验对比方法

POP:最简单的基线,根据ud统计信息来排序(受欢迎程度)。

BPR-MF [39]:它使用成对排序损失优化带有隐式反馈的矩阵分解。

NCF [12]:它在mlp中模拟用户与item交互,而不是矩阵分解中的内积。

FPMC [40]:它通过将 MF 与一阶 MC 相结合来捕捉用户的喜好及其行为序列。

GRU4Rec [15]:它使用 GRU 和基于排名的损失来建模 基于会话的推荐的用户序列。

GRU4Rec+ [14]:它是 GRU4Rec 的改进版本,具有一类新的损失函数和采样策略。

Caser [49]:它在水平和垂直方向都使用了 CNN 为顺序推荐建模高阶 MC 的方法。

SASRec [22]:它使用从左到右的 Transformer 语言 模型来捕获用户的顺序行为

4.4、实验数据对比

不同数据集上效率指标的比较

双向transformer的影响

BERT4Rec (1 mask)表示每条序列中只mask一个词

序列最大长度对实验的影响

实验参数/结构对实验的影响

5、参考文档

BERT4Rec:使用Bert进行序列推荐 - 知乎 (BERT4Rec:使用Bert进行序列推荐)

https://arxiv.org/pdf/1904.06690.pdf (论文地址)

BERT4Rec:使用Bert进行序列推荐 - 知乎 (知乎 bert4rec)

https://arxiv.org/pdf/1904.06690.pdf (bert4rec论文)

Self-Attention与Transformer (Self-Attention与Transformer)

从Transformer到BERT模型 (从Transformer到BERT模型)

BERT模型精讲 (BERT模型精讲)

推荐算法常用评价指标:NDCG、MAP、MRR、HR、ILS、ROC、AUC、F1等_mrr和map计算f1_十三吖的博客-CSDN博客

### BERT4REC 实现及其在推荐系统中的应用 #### 背景介绍 BERT4REC 是一种基于 Transformer 的序列化推荐算法,其核心思想来源于自然语言处理领域的双向编码器表示(Bidirectional Encoder Representations from Transformers)。该方法通过建模用户的交互历史来预测下一个可能的行为。它利用掩码语言模型(Masked Language Model, MLM)和因果语言模型(Causal Language Model, CLM),从而捕捉用户行为的上下文关系。 在推荐系统的背景下,BERT4REC 将用户的历史交互视为一系列 token 序列,并尝试通过对这些序列的学习来进行个性化推荐[^1]。 --- #### 技术实现要点 以下是 BERT4REC 在推荐系统中的主要实现步骤和技术细节: 1. **输入表示** 用户的历史交互被转化为一个由 item ID 组成的序列 \( S = \{i_1, i_2, ..., i_n\} \),其中每个 \( i_k \) 表示用户的一个交互项。为了适配 Transformer 结构,通常会将这些 item ID 映射到嵌入向量空间中[^3]。 2. **掩码机制** 掩码语言模型的核心在于随机遮蔽部分位置上的 items 并让模型去预测它们。具体来说,在训练过程中,某些 tokens 会被替换为特殊标记 `[MASK]` 或其他替代值。这种设计使得模型能够学习到更丰富的上下文依赖关系[^4]。 3. **Transformer 编码层** 使用多头注意力机制捕获全局范围内的关联模式。每一层都包含两个子模块:一个多头自注意网络以及一个前馈神经网络。经过若干堆叠后的隐藏状态可以用来生成最终的输出分布[^2]。 4. **目标函数** 对于给定的时间步 t 和对应的 ground truth label y_t ,交叉熵损失定义如下: ```python loss = -log(p(y_t | h_{t})) ``` 其中 p(\(y_t|h_t)\)) 表示根据当前时刻隐含表征计算得到的概率估计值。 5. **微调阶段** 预训练完成后进入下游任务特定调整期——即针对实际应用场景重新设置参数权重并优化性能指标的过程。例如,在电子商务网站上部署时可考虑加入商品类别特征作为额外辅助信息加以指导。 --- #### 示例代码片段 下面提供了一个简单的 PyTorch 版本实现概览: ```python import torch from transformers import BertTokenizer, BertForMaskedLM class BERT4RecModel(torch.nn.Module): def __init__(self, vocab_size, hidden_dim=768, num_layers=12, n_heads=12): super(BERT4RecModel, self).__init__() # 初始化 Tokenizer 及 Pre-trained model tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') bert_model = BertForMaskedLM.from_pretrained('bert-base-uncased') self.embedding_layer = bert_model.bert.embeddings.word_embeddings self.transformer_encoder = torch.nn.TransformerEncoder( encoder_layer=torch.nn.TransformerEncoderLayer(d_model=hidden_dim, nhead=n_heads), num_layers=num_layers ) def forward(self, input_ids, attention_mask=None): embeddings = self.embedding_layer(input_ids) output = self.transformer_encoder(embeddings, src_key_padding_mask=~attention_mask.bool()) return output # 假设我们有一个 batch size 为 2 的样本集 input_tensor = torch.tensor([[101, 7592, 102], [101, 2054, 102]]) # Example inputs with special tokens like '[CLS]' and '[SEP]' model = BERT4RecModel(vocab_size=30522) outputs = model(input_tensor) print(outputs.shape) # 输出形状应匹配预期大小 ``` 上述代码展示了如何构建基础框架并通过加载预训练好的 BERT 来初始化 embedding 层与 transformer 架构的一部分组件。 --- #### 讨论与展望 尽管 BERT4REC 已经取得了显著成果,但仍存在一些挑战亟待解决。比如长期记忆能力不足可能导致冷启动问题恶化;另外高昂算力需求也可能成为大规模工业级落地障碍之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值