LLM-ESR: Large Language Models Enhancement for Long-tailed Sequential Recommendation
NeurIPS 2024
Abstract
-
研究现状
顺序推荐系统(SRS)旨在根据用户的历史互动预测用户的后续选择,并在电子商务和社交媒体等多个领域得到了应用。然而,在现实世界的系统中,大多数用户只与少数几个项目进行交互,而大多数项目很少被使用。这两个问题被称为长尾用户和长尾项目挑战,它们经常给现有的SRS带来困难。这些挑战可能会对用户体验和卖家利益产生不利影响,因此解决这些问题至关重要。
-
现有领域存在的问题 :warning:重点关注
尽管一些研究已经解决了这些挑战,但由于交互本身的稀缺性,它们仍然面临着跷跷板或噪声问题。大型语言模型的进步从语义的角度为这些问题提供了一个有希望的解决方案。
-
针对现有问题,你的解决方案 (宏观的描述) we propose .... introduce :warning:重点关注
提出了时序推荐的大型语言模型增强框架(LLM-ESR)。该框架利用来自大型语言模型的语义嵌入来增强SRS,而不增加来自大型语言模型的额外推理负载。
-
具体解决方案是什么... (具体的细节)
为了解决长尾项目的挑战,设计了一个双视图建模框架,该框架结合了来自大型语言模型的语义和来自传统SRS的协作信号。针对长尾用户的挑战,提出了一种检索增强自蒸馏方法,利用来自相似用户的更多信息交互来增强用户偏好表示。
-
实验结果,超过SoTA多少
为了验证我们提出的增强框架的有效性和多功能性,我们使用三种流行的SRS模型在三个真实数据集上进行了广泛的实验。结果表明,该方法始终优于现有的基线,尤其有利于长尾用户和项目。
Introduction
顺序推荐的目标是根据用户的历史记录预测下一个可能的项目。
顺序推荐的本质是围绕从用户的交互记录中提取用户偏好。
SASRec应用自注意力机制技术来捕捉用户的长期偏好,而FMLPRec引入了纯MLP架构来识别用户偏好的动态。
尽管在顺序推荐方面取得了重大进展,但长尾挑战会减弱其实际效用。一般来说,这些挑战可以分为两种类型,影响用户方或项目方。为了说明这一点,在图1中展示了一个著名的SRS模型SASRec在Amazon Beauty数据集上的性能,以及它的统计数据。
i)长尾用户挑战:在图1 (a)中,我们注意到超过80%的用户与少于10个条目进行了交互(即,长尾用户),并且与具有更多交互记录的用户相比,SASRec对这些用户的性能低于标准。这表明,大多数用户获得的推荐服务低于最佳推荐服务。
ii)长尾项目挑战:图1 (b)表明,SASRec在更受欢迎的项目上表现得更好。然而,直方图表明,大约71.4%的项目拥有不超过30条交互记录,这意味着它们的使用频率较低。
解决这些长尾挑战对于提升用户体验和卖家利益至关重要。
目前研究问题
为了应对长尾条目的挑战,已有研究[Contextual inference of tail-item embeddings for sequential recommendation, Mutual enhancement of long-tailed user and item for sequential recommendation]考察了流行条目与长尾条目的共现模式,旨在丰富长尾条目与流行条目的表征。然而,忽略项目之间的真实关系可能会导致跷跷板问题。对于长尾用户的挑战,已有的研究[Augmenting sequential recommendation with pseudo-prior items via reversely pre-training transformer, Diffusion augmentation for sequential recommendation]探索了所有用户的交互历史,试图为尾部用户增加伪条目。然而,这些方法仍然只依赖于协作信息,由于用户之间的相似性不准确,容易产生噪声项。此时,用户或项目之间的良好语义关系可以产生效果,这表明利用语义来面对长尾挑战的潜力。
大型语言模型的最新进展为从语义角度缓解长尾挑战提供了希望。然而,大型语言模型最初是为自然语言处理任务设计的,而不是为推荐任务设计的。一些工作[63,43]做出了适应的改进,但仍存在两个问题。
i)集成效率低下:最近的研究探索了获取信息提示以激活ChatGPT[55,10]或修改LLaMA的标记化方法[25,27,59]以进行顺序推荐。尽管这些方法具有令人印象深刻的性能,但在工业环境中应用这些方法具有挑战性。这是因为推荐系统通常要求在线部署的低延迟,而大型语言模型通常需要高推理成本。
ii)语义信息不足:最近的一些研究[13,16]提出利用大型语言模型衍生的嵌入来初始化顺序推荐模型的项目嵌入层,从而集成语义信息。然而,如果在没有冻结嵌入层的情况下进行微调过程,可能会侵蚀项目之间的原始语义关系。
此外,这些方法只关注项目端,忽略了在用户端结合语义信息的潜在好处,这可能有助于SRS的序列编码器。
解决方案
在本文中,为了更好地将大型语言模型集成到SRS中以解决长尾挑战,我们设计了一个大型语言模型序列推荐增强框架(LLM-ESR)。首先,我们通过编码来自大型语言模型的提示文本来获得项目和用户的语义嵌入。由于这些嵌入可以提前缓存,因此我们的集成不会给大型语言模型带来任何额外的推理负担。为了解决长尾项目的挑战,我们设计了一个结合语义和协作信息的双视图建模框架。具体来说,从大型语言模型派生的嵌入被冻结,以避免语义不足。接下来,我们提出了一种检索增强自蒸馏方法来增强使用相似用户的SRS模型的序列编码器。用户之间的相似性是通过来自大型语言模型的用户表示来度量的。最后,需要注意的是,提出的框架是与模型无关的的,允许它适应任何顺序推荐模型。
Contribution
- 我们提出了一个大型语言模型增强框架,该框架通过引入来自大型语言模型的语义信息来缓解SRS的长尾用户和项目挑战。
- 为了避免大型语言模型的推理负担,我们设计了一种基于嵌入的增强方法。此外,直接利用派生的嵌入来保留原始的语义关系。
- 我们在三个真实数据集上进行了广泛的实验,并使用三个骨干SRS模型来验证LLM-ESR的有效性和灵活性。
问题定义
顺序推荐的目标是根据用户的交互记录给出下一个可能与之交互的项。
顺序推荐的目标是根据用户的交互记录,给出用户可能与之交互的下一个项目。用户和项目的集合分别表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> U = u 1 , ... , u i , ... , u ∣ U ∣ \mathcal{U} = {u_1, \dots, u_i, \dots, u_{|\mathcal{U}|}} </math>U=u1,...,ui,...,u∣U∣
和 <math xmlns="http://www.w3.org/1998/Math/MathML"> V = v 1 , ... , v i , ... , v ∣ V ∣ \mathcal{V} = {v_1, \dots, v_i, \dots, v_{|\mathcal{V}|}} </math>V=v1,...,vi,...,v∣V∣,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ U ∣ 和 ∣ V ∣ |\mathcal{U}| 和 |\mathcal{V}| </math>∣U∣和∣V∣分别是用户和项目的数量。每个用户都有一个交互序列,按照时间顺序排列用户交互过的项目,记为
<math xmlns="http://www.w3.org/1998/Math/MathML"> S u = v 1 ( u ) , ... , v i ( u ) , ... , v n u ( u ) S_u = {v_1^{(u)}, \dots, v_i^{(u)}, \dots, v_{n_u}^{(u)}} </math>Su=v1(u),...,vi(u),...,vnu(u)。其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> n u n_u </math>nu表示用户 u 的交互次数。为简化,在后续部分我们省略上标 (u)。因此,顺序推荐的问题可以定义为:
根据现有关于长尾顺序推荐系统(Long-Tailed SRS)的研究 ,我们可以将用户和项目划分为头部和尾部两组。设 <math xmlns="http://www.w3.org/1998/Math/MathML"> n u n_u </math>nu和 <math xmlns="http://www.w3.org/1998/Math/MathML"> p v p_v </math>pv分别表示用户的交互序列长度和项目 v 的受欢迎度(即总交互次数)。首先,我们根据 <math xmlns="http://www.w3.org/1998/Math/MathML"> n u n_u </math>nu和 <math xmlns="http://www.w3.org/1998/Math/MathML"> p v p_v </math>pv 的值按降序排列用户和项目。然后,取出前 20% 的用户和项目,分别记为 头部用户 (Head User)和 头部项目 (Head Item),对应的集合分别为 <math xmlns="http://www.w3.org/1998/Math/MathML"> U head \mathcal{U}{\text{head}} </math>Uhead和 <math xmlns="http://www.w3.org/1998/Math/MathML"> V head \mathcal{V}{\text{head}} </math>Vhead。其余的用户和项目为 尾部用户 (Tail User)和 尾部项目(Tail Item),即:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> U tail = U ∖ U head , V tail = V ∖ V head \mathcal{U}{\text{tail}} = \mathcal{U} \setminus \mathcal{U}{\text{head}}, \quad \mathcal{V}{\text{tail}} = \mathcal{V} \setminus \mathcal{V}{\text{head}} </math>Utail=U∖Uhead,Vtail=V∖Vhead
为缓解长尾问题,我们旨在提升对 <math xmlns="http://www.w3.org/1998/Math/MathML"> U tail \mathcal{U}{\text{tail}} </math>Utail 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> V tail \mathcal{V}{\text{tail}} </math>Vtail的推荐性能。
LLM-ESR
概述
提出的LLM-ESR概述如图2所示。为了获取语义信息,我们采用大型语言模型将文本用户的历史交互 和项目属性编码为大型语言模型用户嵌入和大型语言模型项目嵌入。然后,提出了对长尾项目和长尾用户进行增强的两个模块,即双视图建模和检索增强自蒸馏。
i)双视图建模:该模块由两个分支组成。一种是语义视图建模,旨在从用户的交互序列中提取语义信息。首先利用从大型语言模型项目嵌入中派生出来的语义嵌入层对项目进行编码。然后,设计了尺寸适配和空间转换适配器。输出的项目嵌入序列将被送入交叉注意力进行融合,然后序列编码器得到语义视图下的用户表示。另一个分支是协同视图建模,通过协同嵌入层将交互序列转换为嵌入序列。然后,通过交叉注意力和序列编码器,得到协同用户偏好。在本模块结束时,两个视图中的用户表示将被融合以提供最终建议。
ii)检索增强自蒸馏:该模块期望通过相似用户的信息交互来增强长尾用户。首先,将派生的大型语言模型用户嵌入作为检索相似用户的语义用户库。然后,将相似的用户输入到双视图建模中,得到其用户表示,作为自蒸馏的引导信号。最后,导出的蒸馏损失将作为辅助损失用于训练。
[!NOTE]
什么是cross-attention?
在深度学习中,cross-attention (交叉注意力)是一种注意力机制,通常用于处理两个不同输入之间的相互关系。它是 自注意力(self-attention)机制的扩展,在自注意力中,输入序列的每个元素都与该序列中的其他元素进行交互,而在交叉注意力中,两个不同的输入序列通过注意力机制进行相互关联。
具体来说,cross-attention 的工作原理如下:
- **查询(Query)**来自一个输入序列(比如文本A)。
- **键(Key)**和值(Value)来自另一个输入序列(比如文本B)。
交叉注意力的目的是让模型能够通过一个输入(文本A)关注到另一个输入(文本B)中的相关部分。在多模态学习(如图像与文本的结合)或者机器翻译任务中,cross-attention通常用于将不同模态的信息进行结合。
例如,在Transformer 架构中,BERT 或GPT 使用自注意力机制来处理同一输入的不同部分,而在一些高级架构(如ViT 、UNITER 或T5等)中,cross-attention用于不同模态(如图像和文本)间的信息流动。
简而言之,cross-attention允许模型"跨越"不同的输入序列,相互对照并生成融合的信息,这对于处理涉及多种输入形式的任务(如视觉问答、翻译等)非常重要。
[!TIP]什么是self-distillation?
Self-distillation(自我蒸馏)是一种知识蒸馏(Knowledge Distillation, KD)的方法,其中模型通过使用自己(而不是另一个教师模型)作为教师来对自己进行蒸馏。这种方法的主要思想是利用同一个模型在不同训练阶段或不同"深度"的输出作为目标,进行更高效的学习和改进。
在知识蒸馏中,通常有一个大模型(教师模型)和一个小模型(学生模型),学生模型通过模仿教师模型的输出(例如logits或中间层表示)来提高其性能。而在self-distillation中,目标并非使用不同的模型,而是利用同一个模型的不同训练状态(例如,较早和较晚的模型版本)来进行蒸馏。
工作原理
- **阶段1:**模型先经过初步的训练,得到一个原始模型(称为"学生"模型)。
- **阶段2:**通过将学生模型自己在初步训练后的输出作为"教师"模型的输出来进行再训练。这一步,模型会尝试模仿自己早期训练时的预测,尤其是注意到一些潜在的细节或弱点,从而改善自身的性能。
优势
**提高性能:**Self-distillation可以使模型通过学习其"软标签"而非硬标签来改进,可能会使其变得更加精细和稳健。
**简化训练流程:**与传统的知识蒸馏相比,不再需要引入外部的教师模型,简化了训练过程。
**增进鲁棒性:**这种方法有助于提升模型的泛化能力,减少对噪声数据的敏感性。
简而言之,self-distillation是一种利用相同模型之间的相互指导来提升学习效率和性能的技术,通过"自我模仿"来提高模型的质量。
双视图建模
传统的SRS模型善于捕捉协作信号,可以很好地推荐热门项目。然而,由于缺乏语义,它们在长尾项目上效果不好。因此,我们从双重视图对用户的偏好进行建模,以同时覆盖所有项目。此外,我们提出了两级融合,以更好地结合两者的好处。
语义视图建模
为了利用大型语言模型强大的语义理解能力,我们将属性和描述组织成文本提示。为了避免大型语言模型可能带来的推理负担,我们缓存了从大型语言模型中得到的嵌入以供使用。以往的工作往往将语义嵌入层作为项目嵌入层的初始化,这可能会在微调过程中破坏原有的语义关系。为了保留语义,我们冻结了语义嵌入层,并提出了一个适配器将原始语义空间转换为推荐空间。对于每一项i,我们可以通过取语义嵌入层的第i行得到它大型语言模型嵌入。然后,它将被送到可调适配器中以获得语义嵌入:
[!NOTE]
什么是适配器(Adapter)?
在机器学习和深度学习领域,适配器(Adapter)是一种轻量级的模块,通常用于调整和转换 原有的表示或特征,以使其适应某个特定的任务或模型。适配器通常被设计为一个小型网络,嵌入在已有的预训练模型或系统中,用于微调 或定制模型的特定部分,而不需要重新训练整个网络。
适配器的关键特点是:
- 它通常是在预训练模型基础上进行的小规模调整。
- 它通常只会调整部分参数,而不是整个模型的参数。
- 它具有较少的可调参数,因而比起重新训练整个模型,适配器更加高效且计算资源需求较低。
与一般的SRS模型类似,我们使用序列编码器fθ(例如,SASRec的自注意力机制层)来获得用户偏好在语义视图中的表示如下:
协同视图建模
为了利用协同信息,我们采用可训练item嵌入层,并通过交互数据监督更新。
为了实现共享序列模式和更高的效率,序列编码器fθ在语义和协同视图中都是相同的。此外,两个视图中的嵌入层处于不平衡的训练阶段(一个是预训练,另一个是从头开始),这可能会导致优化难度。为了处理这样的问题,我们通过降维的语义嵌入初始化协同嵌入。本文采用主成分分析(PCA)作为降维方法。
两级融合
语义视图和协同视图的有效整合是吸收两者优点的必要条件。然而,在双重视图中直接合并用户表示可能会忽略项目序列之间微妙的相互关系。因此,我们设计了一种双视图建模模块的两级融合方法,即序列级和逻辑级。前者旨在隐式捕捉双视图项目序列之间的相互关系,而后者则明确地针对推荐能力的组合。具体来说,我们提出了一个序列级融合的交叉注意机制。为了简化描述,我们只取与协作视图交互的语义视图作为说明,其他视图相同。交互协同嵌入序列可表示为:
[!NOTE]
该公式描述的是自注意力机制 (Attention Mechanism)中的缩放点积注意力(Scaled Dot-Product Attention)。这是 Transformer 模型中非常重要的一部分,广泛应用于自然语言处理和计算机视觉等领域。公式的具体含义和每个部分的解释如下:
<math xmlns="http://www.w3.org/1998/Math/MathML"> S ^ c o = Softmax ( Q K T d ) V \hat{S}^{co} = \text{Softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V </math>S^co=Softmax(d QKT)V
解释每个部分:
- Q (查询,Query):
Q
是一个矩阵,代表查询向量。通常来自于输入数据的某一部分或序列。每个查询向量都会与所有其他序列的键向量进行比较,得到与之的相关性。- K (键,Key):
K
是键向量矩阵。它与查询向量 Q 一起参与计算相似度或相关性。每个键向量是由输入数据映射得到的,用于帮助找出最相关的值。- V (值,Value):
V
是值向量矩阵,表示对应于每个键的实际信息。注意力机制的输出最终是基于这些值向量加权求和得到的。- d :
d
是查询和键向量的维度(通常是它们的长度)。这个参数用于缩放 操作,目的是避免在计算点积时值过大或过小。由于点积会随着维度增大而变得非常大,因此将其除以 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d d\sqrt{d} </math>dd 有助于保持数值稳定性。- <math xmlns="http://www.w3.org/1998/Math/MathML"> Q K T QK^T </math>QKT (点积操作):
- QKTQK^T 计算查询向量与键向量之间的点积,用于衡量它们之间的相似度。点积越大,表示它们的相关性越强。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> Q K T d \frac{QK^T}{\sqrt{d}} </math>d QKT (缩放操作):
- 由于查询和键的维度较大,点积可能会变得很大,因此我们通过除以 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d d\sqrt{d} </math>dd 来缩放结果,避免梯度消失或爆炸问题,确保数值稳定性。
- Softmax :
Softmax
是一个激活函数,常用于归一化操作。它将每个相似度得分转换为一个概率值,范围在 0 到 1 之间,所有得分的和为 1。它的作用是计算每个值在最终输出中的权重。- <math xmlns="http://www.w3.org/1998/Math/MathML"> S ^ c o \hat{S}^{co} </math>S^co (输出):
- 最终输出 <math xmlns="http://www.w3.org/1998/Math/MathML"> S ^ c o \hat{S}^{co} </math>S^co 是所有值向量 V 的加权和,权重由 Softmax 后的相关性得分给出。这个加权和就是注意力机制的最终输出。
总结:
该公式表示了如何通过**查询(Q)和 键(K)之间的相似度,计算一个加权的值(V)**向量的输出,通常用于计算不同输入之间的依赖关系。它的具体步骤包括:
- 计算查询向量与键向量的点积,得到它们之间的相关性。
- 对相关性进行缩放(除以 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d d\sqrt{d} </math>dd ),防止数值过大。
- 使用 Softmax 函数将相似度转换为概率形式,计算每个值的权重。
- 最后,通过加权和得到最终的输出。
按照同样的交叉注意过程,我们也可以得到相应的语义嵌入序列
公式(5) : <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( v n u + 1 = v j ∣ v 1 : n u ) = [ e j s e : e j c o ] T [ u s e : u c o ] P(v_{n_{u+1}} = v_j | v_{1:n_u}) = [ e_j^{se} : e_j^{co} ]^T [ u^{se} : u^{co} ] </math>P(vnu+1=vj∣v1:nu)=[ejse:ejco]T[use:uco]
- 概率计算 :
- 该公式表示根据用户的历史交互(通过嵌入向量表示)来预测用户接下来可能的行为,特别是推荐下一个商品 <math xmlns="http://www.w3.org/1998/Math/MathML"> v j v_j </math>vj。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> v n u + 1 = v j v_{n_{u+1}} = v_j </math>vnu+1=vj :表示下一个推荐的商品是 <math xmlns="http://www.w3.org/1998/Math/MathML"> v j v_j </math>vj,即模型的目标是预测下一个用户将购买的商品。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> v 1 : n u v_{1:nu} </math>v1:nu :表示用户历史交互的商品序列。 <math xmlns="http://www.w3.org/1998/Math/MathML"> v 1 : n u v_{1:nu} </math>v1:nu 是用户前 <math xmlns="http://www.w3.org/1998/Math/MathML"> n u n_u </math>nu次交互的商品。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> e j s e 和 e j c o e_j^{se} 和 e_j^{co} </math>ejse和ejco:分别是商品 j 的语义视图(semantic view)和协同视图(collaborative view)嵌入向量,表示商品的不同视图表示。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> u s e 和 u c o u^{se} 和 u^{co} </math>use和uco:是用户的语义视图和协同视图嵌入向量,表示用户的偏好。
- ":" :表示两个向量的拼接操作,这里拼接了商品的语义视图和协同视图嵌入向量,以及用户的语义和协同视图嵌入向量。
- 公式右侧 :通过拼接后的商品和用户嵌入向量做点积 计算,从而得到给定用户历史交互 <math xmlns="http://www.w3.org/1998/Math/MathML"> v 1 : n u v_{1:nu} </math>v1:nu 的情况下,推荐商品 <math xmlns="http://www.w3.org/1998/Math/MathML"> v j v_j </math>vj 的概率(商品和用户相似性)。
- 解释:该公式的目的是通过结合商品和用户的多视图嵌入来计算用户选择某个商品的概率。通过拼接商品和用户的语义及协同视图嵌入向量,再通过点积计算来得出预测概率。
公式(6) : <math xmlns="http://www.w3.org/1998/Math/MathML"> L R a n k = − ∑ u ∈ U ∑ k = 1 n u log σ ( P ( v k + 1 + = ∣ v 1 : k ) − P ( v k + 1 − = ∣ v 1 : k ) ) L_{Rank} = - \sum_{u \in U} \sum_{k=1}^{n_u} \log \sigma(P(v_{k+1}^{+} = | v_{1:k}) - P(v_{k+1}^{-} = | v_{1:k})) </math>LRank=−∑u∈U∑k=1nulogσ(P(vk+1+=∣v1:k)−P(vk+1−=∣v1:k))
- Pairwise Ranking Loss:
- 这是用于训练推荐系统的一种损失函数,叫做成对排名损失(pairwise ranking loss)。它用于优化模型,使得正例(用户实际喜欢的商品)相较于负例(用户没有喜欢的商品)具有更高的推荐概率。
- 符号定义:
- <math xmlns="http://www.w3.org/1998/Math/MathML"> v k + v_k^{+} </math>vk+:这是用户真实喜欢的商品,正例。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> v k − v_k^{-} </math>vk−:这是与正例配对的负例商品,用户没有喜欢的商品。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> σ \sigma </math>σ :这是sigmoid函数,用于将模型输出映射到0到1之间,代表概率值。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( v k + = v k + 1 ∣ v 1 : k ) P(v_k^{+} = v_{k+1} | v_{1:k}) </math>P(vk+=vk+1∣v1:k) :表示给定用户前 k 次交互历史,用户将会选择商品 <math xmlns="http://www.w3.org/1998/Math/MathML"> v k + 1 v_{k+1} </math>vk+1 的概率(正例)。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( v k − = v k + 1 ∣ v 1 : k ) P(v_k^{-} = v_{k+1} | v_{1:k}) </math>P(vk−=vk+1∣v1:k) :表示给定用户前 k 次交互历史,用户将会选择负例商品 <math xmlns="http://www.w3.org/1998/Math/MathML"> v k + 1 v_{k+1} </math>vk+1 的概率。
- 损失函数:
- 损失函数的目的是最大化正例与负例之间的差距。通过对比正负例的概率,模型学习如何区分用户的喜好。
- 损失函数通过log-sigmoid的方式计算正负例概率的差异。模型的目标是让正例商品的概率更大,而负例商品的概率更小,从而确保推荐系统能够准确地推荐用户可能感兴趣的商品。
- 总结: 通过计算每个用户历史交互序列中正负例商品的概率差异,模型能够优化推荐效果。该损失函数帮助模型在训练过程中调整参数,使得在给定用户历史交互的情况下,能够更准确地推荐用户可能感兴趣的商品。
总结:
- 公式 (5) 表示了通过结合商品和用户的语义及协同视图嵌入,计算推荐商品的概率。
- 公式 (6) 介绍了成对排名损失(pairwise ranking loss),通过对比正负例的概率来训练模型,最大化正例的概率,最小化负例的概率,从而提高推荐系统的准确性。
这些公式共同作用,使得推荐系统能够基于用户的多视图嵌入进行高效的推荐,同时通过成对排名损失进行优化,以提高推荐的质量。
检索增强自蒸馏
这种知识转移有两个关键的挑战,即如何检索相似的用户和如何转移知识。
检索相似用户
余弦相似度检索相似用户
自蒸馏
设计了自蒸馏,将知识从几个相似的用户转移到目标用户
教师模型通过池化操作获得:
自蒸馏损失:
训练和推理
训练:
优化的训练损失是成对排序损失和自蒸馏损失的组合,可以表示为:
推理:
Experiment
实验设置
数据集:Yelp, Amazon Fashion and Amazon Beauty
基线:LLM-ESR与三种知名的骨干SRS模型:GRU4Rec, Bert4Rec和SASRec结合起来。然后在实验中比较两组基线。一组是用于长尾顺序推荐的传统增强框架,包括CITIES和MELT。另一组是基于llm的增强框架,包括RLMRec和LLMInit。
GRU4Rec。它采用GRU作为序列编码器,以序列对一的成对损失作为最终排序损失。
Bert4Rec。受Bert训练模式的启发,该算法提出了一种将成对排序损失和完形填空任务相结合的方法,该方法在一个序列中掩盖一定比例的条目。Bert4Rec的序列编码器是双向自注意力机制层的堆栈。
SASRec b。与Bert4rec相比,SASRec采用因果自注意力机制层作为序列编码器的基本单元。在训练过程中,利用序列对序列的配对排序损失进行优化。
基线
传统基线
该类别首先将用户和项目分为长尾组和头组。然后,他们通过虚构的训练程序来增强长尾用户或项目。请注意,它们本质上只利用协作信号,而不引入任何语义。
CITIES:本文设计了一个嵌入推理函数,专门对长尾条目的嵌入进行细化。这种嵌入推理函数由头部条目训练,并在推理过程中用于长尾条目。我们遵循原始论文和代码中的超参数
MELT:提出了一个双边分支框架来增强长尾用户和项目。训练一个分支生成头部用户表示,并在推理时增强尾部用户。另一个分支是在训练过程中恢复头部条目的嵌入,在推理过程中更新尾部条目的嵌入。我们参考官方代码中的实现和超参数设置。
基于大模型的基线
这方面的方法旨在结合从大型语言模型中获得的语义信息来增强推荐模型。
RLMRec:该基线是利用源自大型语言模型的语义嵌入的先驱之一。然而,它是为协同过滤而不是顺序推荐而设计的。为了公平比较,我们在实现过程中消除了概要文件生成过程。我们参考了RLMRec的源代码,以使其适应顺序推荐模型。
LLMInit:最近的工作,即LLM2Bert4Rec[13]和SAID[16],都利用大型语言模型嵌入来初始化SRS模型中的项目嵌入层,然后通过交互数据对其进行微调。在本文中,我们将这种方式称为LLMInit。
整体性能
长尾项目和用户比较。项目被分组为尾部项目和头部项目。从表1中可以看出,LLM-ESR不仅在尾项组上取得了最好的成绩,而且在头项组上也获得了第一名。这种性能比较突出了通过双视图建模将语义和协作信号结合起来。LLMInit在所有基线上都领先于尾部组,这表明语义信息可以使长尾项目受益。值得注意的是,CITIES有时表现更好的尾部组,但损害那些受欢迎的项目,这意味着它有一个跷跷板问题。此外,结果表明,MELT、LLMInit和LLM-ESR可以显著增加尾部用户群。MELT的设计是为了增强尾用户,但由于其对协同视角的限制,不如我们的方法。虽然LLMInit也可以通过引入语义使尾部用户受益,但它忽略了用户端对大型语言模型的利用。
消融实验(ablation)
首先,我们去掉协同视图或语义视图(w/o Co-view and w/o Se-view.),研究双视图建模,分别表示为协同视图和语义视图。结果表明:无共视显著降低头部组的成绩,无共视明显损害尾部组的成绩。这种变化表明了协同信息和语义信息的鲜明特点,突出了两者的结合。
w/o SD意味着自蒸馏下降,这表明长尾用户的性能下降。结果表明,所提出的检索增强自蒸馏的效果。
这三个变量的结果验证了设计LLM-ESR每个组件的动机。
w/o Share和w/o CA表示采用分割序列编码器,消除交叉注意。两者的性能下降说明了共享设计和序列级融合的有效性。
超参数分析
超参数α控制设计的自蒸馏对优化的影响程度。当α值为1 ~ 0.01时,推荐准确率先上升后下降。大α的性能降低的原因在于过分强调自蒸馏会影响排序损失的收敛性。较小的α也降低了性能,这表明所设计的自蒸馏是有用的。对于检索到的用户N,最好是10个。原因是更多的用户可以提供更多的信息交互。然而,过大的N可能会降低检索用户的相关性。
分组分析
为了进行更细致的分析,我们根据序列长度 <math xmlns="http://www.w3.org/1998/Math/MathML"> n u n_u </math>nu和人气 <math xmlns="http://www.w3.org/1998/Math/MathML"> p v p_v </math>pv将用户和项目分为5组,如图4所示。从结果中,我们观察到基于llm的框架在每个用户和项目组中都有增加,而MELT对某些特定组有积极影响。它反映了MLET的跷跷板问题,揭示了利用大型语言模型的语义嵌入的好处。对比LLMInit和LLM-ESR, LLM-ESR可以在长尾组(如1-4个用户组和1-9个项目组)上获得更多的增量,证明了我们的框架对大型语言模型语义信息的保留效果更好。以Bert4Rec和GRU4Rec为骨干的分组。
可视化(t-SNE)
为了进一步研究大型语言模型如何增强传统的SRS模型,我们使用t-SNE可视化了SASRec、CITIES、MELT、我们的LLM- esr(连接语义嵌入ese和协作嵌入eco)和大型语言模型的项目嵌入,如图5所示。我们根据受欢迎程度将这些物品分为四类。t-SNE数据显示,SASRec、CITIES和MELT的嵌入倾向于根据项目受欢迎程度聚类。相比之下,大型语言模型嵌入的分布更加均匀,表明语义关系不受流行程度的影响。此外,我们的LLM-ESR嵌入也表现出更均匀的分布,验证了我们的方法有效地纠正了SRS中的嵌入分布,从而提高了长尾项目的性能。
局限
本文应该考虑到两个潜在的限制。
首先,所提出的LLM-ESR存在两个超参数,即自蒸馏损失的权重α和检索到的相似用户的数量N,搜索最佳模型非常耗时;
其次,只有OpenAI API提供的大型语言模型嵌入在实验中得到了验证,其他较新的模型[3,53]可能会带来更好的性能。
尽管如此,在各种数据集和骨干模型上的实验一致验证了我们的LLM-ESR的有效性
Related Work
顺序推荐
顺序推荐的核心是捕获下一个可能项目的顺序模式。
GRU4Rec[14]和Caser[50]采用rnn和cnn[21]进行序列建模。后来,受自注意力机制[52]在自然语言处理中的巨大成功的启发,SASRec[18]和Bert4Rec[49]验证了它在SRS中的潜力。此外,Zhou等人[66]提出了一种纯MLP架构,与SASRec相比,达到了相似的精度,但效率更高。尽管在SRS方面取得了巨大进展,但长尾问题仍未得到充分探讨。对于长尾条目问题,CITIES[17]专门设计了一个针对这些长尾条目的嵌入推理函数。对于长尾用户问题,数据增强是主要的方法[37,34]。只有一个工作,MELT[20],同时解决了这两个问题,但仍然坚持协同的观点。通过比较,提出的LLM-ESR通过引入大型语言模型,从语义的角度更好地处理了两个长尾(用户长尾,项目长尾)问题。
大型语言模型推荐
最近出现了一些研究如何在推荐系统(RS)中利用大型语言模型的工作,可以分为两类,即大型语言模型作为RS和大型语言模型增强RS。
第一类研究旨在直接由大型语言模型完成推荐任务。在早期,研究者倾向于制作提示模板,通过对话来激发大型语言模型的推荐能力。例如,ChatRec提出了一个对话过程来逐步完成推荐任务。DRDT通过上下文学习集成了基于检索的SRS动态反射过程。LLMRerank和UniLLMRec分别针对重新排序阶段和整个推荐过程制造了思维链提示。此外,也有研究者对RS的开源大型语言模型进行了微调,其中TALLRec是第一个采用参数高效微调技术对LLaMA-7B进行微调的llm。接下来的一些工作,包括E4SRec、LLaRA和RecInterpreter,目标是通过修改标记化将协作信号组合成大型语言模型。然而,这项工作面临着高推理成本的挑战。
另一条线,大型语言模型增强RS,更实用,因为他们在推荐时避免使用大型语言模型。例如,RLMRec通过辅助损失与大型语言模型对齐。AlphaRec采用大型语言模型嵌入增强协同过滤模型。另一方面,LLM4MSR和Uni-CTR提出利用大型语言模型增强多领域推荐模型。对于大型语言模型增强序列推荐,Harte et al.和Hu et al.采用大型语言模型嵌入作为传统模型的初始化。
所提出的LLM-ESR属于后一类,但进一步缓解了语义信息缺陷的问题。
结论
在本文中,我们提出了一个大型语言模型增强框架,用于顺序推荐(LLM-ESR)来处理长尾用户和长尾项目的挑战。首先,我们获取并缓存从大型语言模型中得到的语义嵌入,以提高推理效率。然后,提出了一种双视图建模框架,将大型语言模型的语义与传统模型中包含的协作信号相结合。它可以帮助增加SRS中的长尾项目。其次,我们设计了检索增强自蒸馏,以缓解长尾用户的挑战。通过综合实验,我们验证了LLM-ESR的有效性和灵活性。