SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS论文解读

SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS ICLR2016

首先介绍下session-based 的概念:session是服务器端用来记录识别用户的一种机制. 典型的场景比如购物车,服务端为特定的对象创建了特定的Session,用于标识这个对象,并且跟踪用户的浏览点击行为。我们这里可以将其理解为具有时序关系的一些记录序列。

一、写作动机

传统的两类推荐方法——基于内容的推荐算法和协同过滤推荐算法(model-based、memory-based)在刻画序列数据中存在缺陷:每个item相互独立,不能建模session中item的连续偏好信息。

二、传统的解决方法
  1. item-to-item recommendation approach (Sarwar et al.,2001; Linden et al., 2003) : 采用session中item间的相似性预测下一个item。缺点:只考虑了最后一次的click 的item相似性, 忽视了前面的的clicks, 没有考虑整个序列信息。
  2. Markov decision Processes (MDPs)(Shani et al., 2002):马尔科夫决策过程,用四元组<S,A, P, R>(S: 状态, A: 动作, P: 转移概率, R: 奖励函数)刻画序列信息,通过状态转移概率的计算点击下一个动作:即点击item的概率。缺点:状态的数量巨大,会随问题维度指数增加。
三、Deep Neural Network的方法

本文的贡献在于首次将RNN运用于Session-based Recommendation,针对该任务设计了RNN的训练、评估方法及ranking loss。
Motivation(Why): 第一篇提出将RNN 应用到session-based recommendation 的论文。
Main Idea(What): 一个session 中点击 item 的行为看做一个序列,用GRU来刻画。
How:
1.系统架构
在这里插入图片描述
GRU:
在这里插入图片描述
2. 训练策略
为了提高训练的效率,文章采用两种策略来加快简化训练代价,分别为:
Training strategy: 为了更好的并行计算,论文采用了mini-batch的处理,即把不同的session拼接起来,同一个sequence遇到下一个Session时,要注意将GRU 中的一些向量重新初化。
Training data sample:因为item的维度非常高,item数量过大的概率会导致计算量庞大,所以只选取当前的正样本(即下一个点击的item)加上随机抽取的负样本。论文采用了取巧的方法来减少采样需要的计算量,即选取了同一个mini-batch 中其他sequence下一个点击的item作为负样本,用这些正负样本来训练整个神经网络。
在这里插入图片描述
3. 损失函数
在这里插入图片描述
4. 数据集
RecSys Challenge 2015:网站点击流
Youtube-like OTT video service platform Collection
5. 评价指标
recall@20 :即在所有测试案例中前20个物品中具有所需物品的案例比例。
MRR :期望物品的评分的平均值
6. baseline
POP:推荐训练集中最受欢迎的item;
S-POP:推荐当前session中最受欢迎的item;
Item-KNN:推荐与实际item相似的item,相似度被定义为session向量之间的余弦相似度
BPR-MF:一种矩阵分解法,新会话的特征向量为其内的item的特征向量的平均,把它作为用户特征向量。
7. 实验结果
在这里插入图片描述在这里插入图片描述
结果表明:

  • 使用item embeding没什么用,因此还是用one-hot encoding
  • 在GRU层后面使用全连接层对于结果帮助不大,不过增加GRU层的数量会提高模型的表现
  • GRU比RNN和LSTM效果更好
  • adagrad优化器以及隐层节点数量100
利用基于检索的生成(RAG)和Transformer进行基于上下文的个性化推荐可以按以下方式实现: ### 数据准备 收集与推荐相关的多源数据,包括用户的历史行为数据(如浏览记录、购买记录等)、物品的属性信息(如商品类别、特征等)以及上下文信息(如时间、地点等)。对这些数据进行清洗、预处理和特征工程,以适合后续的模型处理。例如,将文本数据进行分词、向量化等操作。 ### 检索模块 - **构建索引**:使用高效的数据结构(如倒排索引、向量索引等)对物品信息和用户历史数据进行索引,以便能够快速检索相关信息。例如,对于文本信息可以构建倒排索引,对于物品的向量表示可以使用FAISS等工具构建向量索引。 - **上下文感知的检索**:根据用户当前的上下文信息(如当前浏览的页面、所处的场景等),从索引中检索出最相关的物品候选集。可以使用相似度计算(如余弦相似度、欧几里得距离等)来衡量物品与上下文的相关性。 ### 生成模块 - **Transformer模型**:选择合适的Transformer架构(如BERT、GPT等),并根据推荐任务进行微调。在微调过程中,使用历史的用户-物品交互数据和上下文信息作为训练数据,让模型学习到用户的偏好和上下文之间的关系。 - **RAG集成**:将检索模块得到的物品候选集作为额外的上下文信息输入到Transformer模型中。在生成推荐结果时,模型结合用户的上下文信息、历史偏好以及检索到的相关物品信息,生成个性化的推荐列表。 ### 模型训练与优化 - **损失函数**:定义合适的损失函数来衡量模型的预测结果与真实推荐结果之间的差异。常见的损失函数包括交叉熵损失、均方误差损失等。 - **优化算法**:使用优化算法(如Adam、SGD等)来更新模型的参数,以最小化损失函数。可以采用批量训练、随机梯度下降等策略来提高训练效率。 - **评估指标**:使用合适的评估指标(如准确率、召回率、F1值、NDCG等)来评估模型的性能,并根据评估结果进行模型的调优和改进。 ### 实时更新与反馈 - **实时数据处理**:在实际应用中,需要实时处理用户的新行为和上下文信息,及时更新模型的输入和推荐结果。可以使用流式处理框架(如Kafka、Flink等)来实现实时数据的采集和处理。 - **反馈机制**:建立用户反馈机制,收集用户对推荐结果的反馈信息(如点击率、购买率、满意度等),并将这些反馈信息用于模型的持续训练和优化,以不断提高推荐的准确性和个性化程度。 以下是一个简单的伪代码示例,展示了如何将RAG和Transformer结合进行个性化推荐: ```python # 模拟检索模块 def retrieval_module(context, index): # 根据上下文从索引中检索相关物品 relevant_items = index.search(context, top_k=10) return relevant_items # 模拟Transformer模型 import torch import torch.nn as nn class TransformerRecommender(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(TransformerRecommender, self).__init__() self.transformer = nn.TransformerEncoderLayer(d_model=input_dim, nhead=4) self.fc = nn.Linear(input_dim, output_dim) def forward(self, user_context, retrieved_items): # 合并用户上下文和检索到的物品信息 input_data = torch.cat((user_context, retrieved_items), dim=1) # 通过Transformer层 output = self.transformer(input_data) # 通过全连接层生成推荐分数 scores = self.fc(output) return scores # 主推荐函数 def personalized_recommendation(user_context, index): # 检索相关物品 relevant_items = retrieval_module(user_context, index) # 初始化Transformer模型 model = TransformerRecommender(input_dim=128, hidden_dim=256, output_dim=len(relevant_items)) # 生成推荐分数 scores = model(user_context, relevant_items) # 根据分数排序得到推荐列表 recommended_items = [relevant_items[i] for i in scores.argsort(descending=True)] return recommended_items ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值