《TALLRec: An Effective and Efficient Tuning Framework to Align Large Language Model with Recommendation》
大语言模型(Large Language Models: LLMs)已在多个领域展现出卓越的性能,这促使研究人员探索其在推荐系统中的潜在应用。人们初步尝试利用了 LLMs 的卓越能力,例如通过上下文学习(In-context Learning)实现的丰富知识和强大泛化能力,该方法将推荐任务构建为提示词(prompts)。然而,由于 LLM 的训练任务与推荐任务之间存在巨大差异,以及在 pre-training 期间推荐数据的不足,LLM 在推荐任务中的表现仍然不够理想。为了弥合这一差距,我们考虑通过使用推荐数据微调 LLM 来构建一个大型推荐语言模型(Large Recommendation Language Model)。为此,我们提出了一个有效且高效的、用于将 LLMs 与推荐任务对齐的微调框架,即 TALLRec。我们已经证明,即使在少于 100 个样本的有限数据集上,所提出的 TALLRec 框架也能显著提升 LLM 在电影和图书领域的推荐能力。此外,所提出的框架非常高效,可以在单张 RTX 3090 显卡上使用 LLaMA-7B 模型执行。更重要的是,微调后的 LLM 展现出了强大的跨域泛化能力。我们的代码和数据可在 https://github.com/SAI990323/TALLRec 获取。
大语言模型(Large Language Models: LLMs)在生成接近人类语言的文本以及执行广泛任务方面展现出了卓越的能力(《A Survey of Large Language Models》),这些任务包括自然语言处理、机器人技术和信息检索。先前的研究也证明了 LLMs 具有知识丰富和组合泛化(compositional generalization)的能力。只要给予适当的指令,这些模型能够学习如何解决未见过的任务,并激发自身的知识以达到高性能水平(《Few-shot learning with multilingual language models》)。LLM 的上述能力为解决当前推荐领域的挑战提供了有前景的机会,其中这些挑战需要强泛化能力和丰富知识。鉴于此,探索将 LLM 集成到推荐系统中是很有价值的,而这在先前的研究中受到的关注有限。
在最近的初步尝试中(《Chat-REC: Towards Interactive and Explainable LLMs-Augmented Recommender System》、《Zero-Shot Next-Item Recommendation using Large Pre-trained Language Models》),achieving the target 依赖于上下文学习(In-context Learning)(《Language models are few-shot learners》),这通常通过 OpenAI 官方 API 来实现。他们将 LLM 视为传统推荐模型(如 MF 《Matrix factorization techniques for recommender systems》和 LightGCN 《Lightgcn: Simplifying and powering graph convolution network for recommendation》)的工具(toolformer)(《Toolformer: Language models can teach themselves to use tools》),即 LLM 用于对这些模型筛选出的 candidate items 进行 re-ranking。然而,这些方法仅达到了与传统模型相当的性能。更糟糕的是,仅使用 In-context Learning 可能无法进行推荐。如 Figure 1 所示,我们发现 ChatGPT 要么拒绝回答,要么总是给出肯定的预测(喜欢)。因此,探索一种更合适的方式来更有效地在推荐中利用 LLM 至关重要。

我们推测仅使用 In-context Learning 的失败有两个原因:
1):由于训练 LLM 的语言处理任务与推荐任务之间存在巨大差距,LLM 可能与推荐任务不能很好地对齐。此外,在 LLM 的训练阶段,面向推荐的语料库非常有限。
2):LLM 的效果受到底层推荐模型的限制,这些模型可能由于自身能力有限而无法将 target items 包含在其 candidate lists 中。
因此,我们考虑构建一个 Large Recommendation Language Model: LLRM 来弥合 LLM 与推荐任务之间的差距,并在 In-context Learning 之外,更好地激发 LLM 的推荐能力。
为了实现这一目标,我们专注于使用推荐任务来微调 LLM。考虑到 instruction tuning 是让 LLM 学习解决不同任务并具有强大泛化能力的核心,我们提出了一个轻量级的微调框架,以使 LLM 适配推荐任务,名为 TALLRec。具体来说,TALLRec 将推荐数据构建为 instructions,并通过一个额外的 instruction tuning 过程来微调 LLM。此外,考虑到 LLM 训练需要大量的计算资源,TALLRec 采用轻量级微调方法,以高效地将 LLM 适应于推荐任务。
具体而言,我们将 TALLRec 框架应用于带有 LoRA (《LoRA: Low-Rank Adaptation of Large Language Models》)架构的 LLaMA-7B 模型(《LlaMA: Open and efficient foundation language models》)上,这确保了该框架可以在 NVIDIA RTX 3090 (24GB) GPU 上部署。此外,为了研究所需的最少计算资源,我们在 few-shot setting下进行了实验,仅使用了有限数量的微调样本。我们在电影和图书这两个知识密集的推荐场景中进行了详细实验,微调后的 LLaMA-7B 模型表现优于传统推荐模型、以及 In-context Learning Learning with GPT3.5(一个比 LLaMA-7B 强大得多的 LLM)。结果验证了我们框架的效率和鲁棒性:
1):我们的 TALLRec 框架可以在 few-shot setting 下快速激发 LLM 的推荐能力。
2):通过 TALLRec 框架训练的 LLM 在不同领域(例如,movie --> book)之间具有强大的泛化能力。
总的来说,我们的贡献总结如下:
我们研究了推荐中的一个新问题——将 LLM 与推荐对齐,揭示了 In-context Learning-based 方法的局限性,并强调了 instruction tuning 的重要性。
我们引入了一个新的 TALLRec 框架来构建大型推荐语言模型,该框架能够以低 GPU 成本和少量微调样本,有效且高效地对 LLM 进行推荐任务的微调。
我们进行了广泛的实验,验证了所提出框架的有效性和效率,并揭示了其在不同领域之间无缝切换的卓越鲁棒性。
LMs for Recommendation:已经有一些尝试将语言模型(language models: LMs)与推荐系统集成。尽管整合了 LMs (《Recommendation as language processing (rlp): A unified pretrain, personalized prompt & predict paradigm (p5)》、《Personalized prompt learning for explainable recommendation》),一些尝试仍然坚持使用传统的 user/item IDs 来表示 users/items。因此,它们忽略了 LMs 的语义理解能力,例如评论;而其他工作则已将语言信息作为 users/items embedding 的一部分纳入其中(《Towards Universal Sequence Representation Learning for Recommender Systems》)。此外,其他方法要么利用已经具备初步推荐能力的未公开模型(《M6-Rec: Generative Pretrained Language Models are Open-Ended Recommender Systems》),要么使用小模型在大规模下游任务数据上进行训练(《Prompt Learning for News Recommendation》)。此外,上述模型也限于小模型,而本文关于如何使大语言模型适应推荐任务的问题是正交的。
在推荐系统中,目前将 LLM 应用于推荐场景的研究很少。那些工作利用 GPT3.5 系列模型的交互能力并应用 In-context Learning (《Chat-REC: Towards Interactive and Explainable LLMs-Augmented Recommender System》、《Zero-Shot Next-Item Recommendation using Large Pre-trained Language Models》)。具体来说:
Chat-Rec(《Chat-REC: Towards Interactive and Explainable LLMs-Augmented Recommender System》)努力利用 ChatGPT 的交互能力,并将 ChatGPT 与传统推荐模型(例如 MF 《Matrix factorization techniques for recommender systems》,LightGCN 《Lightgcn: Simplifying and powering graph convolution network for recommendation》)连接起来,以构建一个对话式推荐系统。
NIR (《Zero-Shot Next-Item Recommendation using Large Pre-trained Language Models》)与 Chat-Rec 概念相似,它采用传统的推荐模型生成 candidate items,然后对这些 candidate items 进行三阶段 multi-step prompting process 以进行 re-ranking。
Sequential Recommendation:我们的设置接近于序列推荐(sequential recommendation),其目的是基于用户的 historical interaction sequences 来推断用户的 next interaction。
早期,马尔可夫链在序列推荐中扮演着重要角色。最近,基于深度学习的方法成为主流。大量工作使用不同类型的神经网络结构,如 RNN、CNN 和注意力机制,来建模 user interaction sequences。然而,由于仅使用 ID 来表示 users and items,这类工作无法快速适配和泛化到新场景。因此,一些工作通过 pre-training(《Perceive Your Users in Depth: Learning Universal User Representations from Multiple E-commerce Tasks》、《Parameter-Efficient Transfer from Sequential Behaviors for User Modeling and Recommendation》)、data augmentation(《Contrastive Learning for Representation Degeneration Problem in Sequential Recommendation》、《Multi-level Contrastive Learning Framework for Sequential Recommendation》、《Contrastive Learning for Sequential Recommendation》)、debiasing(《Interpolative Distillation for Unifying Biased and Debiased Recommendation》、《Unbiased Sequential Recommendation with Latent Confounders》、《Causal Intervention for Leveraging Popularity Bias in Recommendation》、《Disentangling User Interest and Conformity for Recommendation with Causal Embedding》)和 robust optimization(《Distributionally-robust Recommendations for Improving Worst-case User Experience》、《A Generic Learning Framework for Sequential Recommendation with Distribution Shifts》)来关注序列推荐模型的泛化能力。然而,它们忽略了现有 LLM 的强大泛化能力,导致探索不足。
在本节中,我们首先介绍微调 LLM 的预备知识和我们的任务表述,然后提出 TALLRec 框架。
指令微调(Instruction Tuning):是一项使用人工标注的 instructions 和 responses 来训练 LLM 的关键技术(《Training language models to follow instructions with human feedback》)。通常,指令微调包含四个步骤(见 Table 1 中的示例)。具体来说:
Step 1:定义一个任务,并使用自然语言阐述一个 "Task Instruction",其中通常包含对任务的清晰定义以及解决该任务的具体方法。
Step 2:用自然语言表述并构建任务的输入和输出,称为 "Task Input" 和 "Task output"。
Step 3:将 "Task Instruction" 和 "Task Input" 整合在一起形成 "Instruction Input",并将 "Task output" 作为相应的 "Instruction Output",用于每个 tuning sample。
Step 4:基于格式化后的 ("Instruction Input" "Instruction Output") pair,对 LLM 进行指令微调。

Rec-tuning Task Formulation:我们的目标是利用 LLM,记作 LRLM,它可以预测一个 new item 是否会受到用户的喜爱。为了实现这一目标,我们使用推荐数据对 LLM 进行推荐微调(rec-tuning)。如 Table 2 所示,我们将推荐数据格式化为 instruction tuning 的模式。
我们首先编写一个 "Task Instruction",指导模型根据用户的 historical interactions 来判断用户是否会喜欢 target item ,并用 "Yes" or "No" 的二元答案进行回应。
为了格式化 "Task Input",我们根据评分将用户历史交互过的 items 分为两类:用户喜欢的 items 、以及不喜欢的 items,其中 items 按交互时间顺序排列,并用文本描述(例如,标题和简短介绍)表示。此外,"Task Input" 还包括用户从未见过的 target new item。
最后,我们合并 "Task Instruction" 和 "Task Input" 来创建 "Instruction Input",然后将预期的 "Instruction Output" 设置为 "Yes" or "No" 用于 rec-tuning。

在本小节中,我们介绍 TALLRec 框架,该框架旨在促进 LLM 与推荐任务的有效且高效对齐,特别是在低 GPU 内存消耗的情况下。具体来说,我们首先介绍具有轻量级实现的两个 TALLRec 微调阶段,然后介绍骨干模型的选择。如 Figure 2 所示,TALLRec 包含两个微调阶段:alpaca tuning 和 rec-tuning。
alpaca tuning 阶段是 LLM 的常见训练过程,增强了 LLM 的泛化能力。
而 rec-tuning 阶段模拟 instruction tuning 的模式,并为推荐任务微调 LLM。

TALLRec Tuning Stages:
对于 alpaca tuning,我们使用 Alpaca (《Stanford Alpaca: An Instruction-following LLaMA model》)提供的 self-instruct data 来训练 LLM。具体来说,我们在 alpaca tuning 期间使用 conditional language modeling objective,如 Alpaca 仓库中所例示的。正式地,
其中:
self-instruct data 中的 "Instruction Input" 和 "Instruction Output"。
token, tokens。
在
few-shot learning场景下,如果训练样本比较多(如256-shot),那么alpaca tuning几乎没什么用;当训练样本比较少(如16-shot, 64-shot),那么alpaca tuning才有价值。
对于 rec-tuning,我们可以利用如 Table 2 所述的 rec-tuning 样本,类似于 alpaca tuning 的方式微调 LLM。
alpaca tuning和rec-tuning的唯一区别在与构造样本的方式不同:
alpaca tuning的数据格式是通用的。这个阶段让模型学会理解和执行各种形式的指令,而不是专门针对推荐任务。该阶段使用的数据集特指斯坦福大学
Alpaca项目发布的alpaca_data.json数据集。它是一个包含52,000条由text-davinci-003模型生成的 “指令-输入-输出” 三元组的数据集,采用了Self-Instruct方法,并由官方在GitHub上发布。
rec-tuning的数据格式完全是针对推荐任务的。这个阶段的目标是让模型学会推荐任务
Lightweight Tuning:然而,直接微调 LLM 计算量巨大且耗时。因此,我们建议采用轻量级微调(lightweight tuning)策略来执行 alpaca tuning 和rec-tuning。轻量级微调的核心前提是,现代语言模型可能拥有过多的参数,其信息集中在低本征维度(low intrinsic dimension)上(《LoRA: Low-Rank Adaptation of Large Language Models》)。因此,通过仅微调一小部分参数的子集,我们可以达到与微调整个模型相当的性能。
具体来说,我们采用 LoRA (《LoRA: Low-Rank Adaptation of Large Language Models》),它涉及冻结 pre-trained model parameters,并在 Transformer 架构的每一层中引入可训练的低秩分解矩阵(rank decomposition matrices),以促进轻量级微调。因此,通过优化 rank decomposition matrices,我们可以有效地整合补充的信息,同时保持原始参数处于冻结状态。总的来说,最终的学习目标可以计算为:
其中:LoRA 参数,我们仅在训练过程中更新 LoRA 参数。
通过 LoRA,我们仅用原始 LLM 参数的千分之一即可完成训练过程。
Backbone Selection:目前,有大量的 LLM 发布,例如 GPT 系列、PaLM、CHinchilla 和 LLaMA。其中,相当多的 LLM(例如 PaLM 和 Chinchilla)不提供其模型参数或 API 的访问权限,这使得它们难以用于研究或其他应用。此外,数据安全问题是推荐领域的重要问题。因此,我们利用第三方 API(例如 ChatGPT 和 text-davinci-003)来利用 LLM 需要进一步讨论。
为了模拟实际推荐场景中需要考虑的问题,我们打算模拟使用公开的 LLM 并更新其参数以用于推荐目的。经过仔细考虑,我们选择使用 LLM-LLaMA 进行实验,LLaMA 是目前性能最佳的开源 LLM,其训练数据也是公开可用的(《LlaMA: Open and efficient foundation language models》)。
在本节中,我们进行实验以回答以下研究问题:
RQ1:与当前 LLM-based 的推荐模型和传统的推荐模型相比,TALLRec 的表现如何?
RQ2:TALLRec 中的不同组件如何影响其有效性?
RQ3:TALLRec 在跨域推荐中的表现如何?
数据集:我们在两个数据集上进行实验。统计数据和更多细节可以在我们发布的数据中找到。
Movie:这是一个从 MovieLens 100K (《The MovieLens Datasets: History and Context》)处理得到的数据集,包含用户对电影的评分以及丰富的电影文本描述,如 "title" 和 "director"。因为我们在需要有限微调样本的 few-shot training setting 下进行实验,我们通过采样最近的 10,000 个 interactions 来处理原始数据集,并按 8:1:1 的比例划分为训练集、验证集和测试集。为了构建一个 rec-tuning sample,我们保留 target item 之前的 10 interactions 作为 historical interactions。遵循 《Lightgcn: Simplifying and powering graph convolution network for recommendation》、《Reformulating CTR Prediction: Learning Invariant Feature Interactions for Recommendation》,我们仅将 ratings > 3 的 interactions 视为 "likes",ratings ≤ 3 的视为 "dislike"。
Book:这是一个从 BookCrossing(《Improving Recommendation Lists through Topic Diversification》)处理得到的图书推荐数据集。BookCrossing 数据集包含用户评分(1-10)和图书的文本描述,例如 "Book-Author" 和 "Book-Title" 信息。对于每个用户,我们随机选择该用户交互过的一个 item 作为 prediction target,并采样 10 interacted items 作为 historical interactions。随后,我们将构建好的 rec-tuning samples 按相同的 8:1:1 比例划分为训练集、验证集和测试集。此外,我们根据阈值 5 对评分进行二值化。
Few-shot Training Setting:我们采用 few-shot training setting,其中仅从训练集中随机选择有限数量的样本进行模型训练。这被称为 "K-shot" training setting,其中 64,我们可以测试一种方法是否能够在训练数据严重有限的情况下,从 LLM 中快速获得推荐能力。
Baseline:我们将 TALLRec 与 LLM-based 的方法和传统推荐方法进行比较。
1):现有的 LLM-based 的方法采用 In-context Learning 直接生成推荐(《Chat-REC: Towards Interactive and Explainable LLMs-Augmented Recommender System》、《Zero-Shot Next-Item Recommendation using Large Pre-trained Language Models》)。为了公平比较,我们通过使用相同的指令使这些方法与 TALLRec 对齐。
具体来说,我们在不同的 LLM 上执行 In-context Learning :Alpaca-LoRA、Text-Davinci-002、Text-Davinci-003、ChatGPT。Alpaca-LoRA 是一个通过使用 LoRA 和 alpaca tuning 来复现 LLaMA model 的 Alpaca results 的模型。后三个是来自OpenAI 的 GPT 系列模型。
2):传统方法。由于我们的方法利用 historical interactions 来预测后续 interaction,类似于 sequential recommendation,我们考虑以下序列模型:
(i) GRU4Rec(《Session-based Recommendations with Recurrent Neural Networks》):是一个 RNN-based sequential recommender,它使用 GRU 来编码 historical interactions。
(ii) Caser(《Personalized top-n sequential recommendation via convolutional sequence embedding》):利用 CNN 来编码 historical interaction sequences。
(iii) SASRec(《Self-attentive sequential recommendation》):是一个经典的 transformer-based sequential recommender。
(iv) DROS (《A Generic Learning Framework for Sequential Recommendation with Distribution Shifts》):是一个 SOTA 的 sequential recommender model,它利用 distributionally robust optimization 来实现 robust recommendations。我们使用作者提供的由 GRU4Rec 实现的版本。
上述 sequential models 依赖于 item ID features,没有考虑 items 的文本描述。然而,在我们的设置中,我们假设 item 的文本描述可用于 LLM 微调。为了确保公平比较,我们进一步考虑比较 GRU4Rec 和 DROS 的以下变体:
(v) GRU-BERT:是 GRU4Rec 的一个变体,它结合了 pre-trained BERT 来编码文本描述。具体来说,BERT 编码文本描述并输出一个 CLS embedding,然后将其与 GRU4Rec 的原始 ID embedding 拼接起来作为 item representations。
(vi) DROS-BERT:与 BERT 集成,类似于 GRU-BERT。
评估指标:由于 TALLRec 旨在预测用户对 target item 的偏好,即一个二分类问题,我们采用推荐中常用的评估指标:AUC。
实现细节:
为了确保统一的序列长度,我们使用用户 last interacted item 来填充长度小于阈值(10 )的 historical interaction sequences。
通常是填充
0。这里采用不同的填充方式?
对于所有方法,我们使用 Adam with MSE loss (学习率为 1e-3)来优化参数。
我们在 {1e-3, 1e-4, 1e-5, 1e-6, 1e-7} 中搜索所有方法的 weight decay。
遵循 《A Generic Learning Framework for Sequential Recommendation with Distribution Shifts》,对于基线的特定超参数,我们坚持其原始设置。对于 GRU-BERT 和 DROS-BERT,我们使用 Hugging Face发布的 BERT,同时将 GRU 层数设置为 4,hidden size = 1024,以与 BERT 的 embedding size 对齐。
最后,我们使用不同的随机种子将所有方法运行五次,并报告平均结果。
我们旨在研究各种方法在 few-shot training setting 下的推荐性能,这使我们能够评估如何通过有限的 rec-tuning 样本快速调整 LLM 以适配推荐。与传统方法的评估结果如 Table 3 所示,而与 LLM-based 的方法的比较如 Figure 3 (a) 所示。
从 Figure 和 Table 中,我们得出以下观察结果:
我们的方法显著优于传统方法和 LLM-based 的方法,验证了通过我们的 TALLRec 框架微调 LLM 的优越性。TALLRec 成功解锁了 LLM 的知识和泛化能力以用于推荐。
LLM-based 的方法表现与随机猜测相似(AUC ≈ 0.5)。然而,通过 TALLRec 训练的 LLM 取得了显著的提升。这些结果表明推荐任务和语言任务之间存在巨大差距,显示了使用推荐数据对 LLM 进行 rec-tuning 的重要性。
在我们的 few-shot training settings 下,传统推荐方法始终表现不佳,这意味着传统方法无法用有限的训练样本快速学习推荐能力。
GRU-BERT 和 DROS-BERT 相比于它们的后端模型 GRU4Rec 和 DROS 没有显示出显著改进。这表明在 few-shot training setting 中,仅仅添加文本描述并不能增强传统推荐模型。
在
few-shot training settings下,传统推荐方法效果几乎等于随机,这是可以预期的,因此模型参数远远大于样本数量,模型没有得到充分学习。因此,与传统方法进行比较是没有什么价值的。


为了证明 TALLRec 中 alpaca tuning 和 rec-tuning 的有效性,我们 K-shot training setting 下对不同的 TALLRec 与其两个变体 "AT" 和 "RT" 的性能进行比较,其中 "AT" 仅进行 alpaca tuning,而 "RT" 仅实施 rec-tuning。通过改变
我们将结果总结在 Figure 3 (b) 中,从中我们得到以下观察结果:
"AT" 的性能与 "RT" 和 TALLRec 相比显著下降,表明了 rec-tuning 的关键作用,它有效地激发了 LLM 的推荐能力。
在有限的 rec-tuning 样本(<= 128)下,TALLRec 通常优于 "RT",这证实了 alpaca tuning 可以增强 LLM 在新任务上的泛化能力,尤其是在新任务的训练数据不足时。随着 rec-tuning 样本数量的增长,TALLRec 和 "RT" 的结果变得更加接近。这是有道理的,因为当新任务有充足的训练数据时,来自其他任务的泛化能力的重要性就会减弱。
随着 rec-tuning 样本数量的增加,TALLRec 的表现始终优于基线。这归功于 rec-tuning,它可以利用有限的样本激发 LLM 的推荐能力。
为了进一步研究 TALLRec 的泛化能力,我们进行了跨域推荐的实验。具体来说,我们使用不同的 rec-tuning 样本来微调 TALLRec,包括:
"TALLRec (Book)":仅使用来自 Book 数据集的样本。
"TALLRec (Movie)":仅使用来自 Movie 数据集的样本。
"TALLRec (Both)":同时使用 Book 和 Movie 数据集的样本进行微调。
我们在 few-shot training setting 下,令 {16, 64, 258} 中变化,并分别在 Book 和 Movie 的测试集上评估模型。结果总结在 Figure 4 中,从中我们可以发现:
TALLRec 展示了卓越的跨域泛化能力。例如,仅在 Movie 样本上微调后,"TALLRec (Movie)" 在 Book 数据上也表现出良好的性能,与 "TALLRec (Book)" 相当。这令人印象深刻,表明 TALLRec 具有跨域泛化能力,而不是像传统推荐器那样仅拟合单一领域。
当 rec-tuning 样本数量超过 64 时,"TALLRec (Both)" 在两个测试集上都超过了 "TALLRec (Movie)" 和 "TALLRec (Book)" 。这一发现表明 TALLRec 可以无缝整合来自不同领域的数据以增强其泛化性能。在未来的工作中,使用来自异构领域的大规模推荐数据对 TALLRec 进行预训练是很有前景的。

随着 LLM 的进步,人们逐渐认识到它们在推荐系统中的潜力。在这项工作中,我们探索了使用 LLM 进行推荐的可行性。我们的初步发现表明,即使是现有的最佳 LLM 模型在推荐任务中也表现不佳。为了解决这个问题,我们提出了一个 TALLRec 框架,该框架可以通过两个微调阶段(alpaca tuning 和 rec-tuning)有效地将 LLM 与推荐任务对齐。我们的实验结果表明,使用我们的 TALLRec 框架训练的 LLM 优于传统模型,并展现出强大的跨域泛化能力。展望未来,我们计划探索更有效的方法来激活更大模型的推荐能力,并微调 LLM 以同时处理多个推荐任务。