← All writing生成式推荐 · 07

通用 LLM 并不天然懂“喜欢”|生成式推荐 07:TALLRec

TALLRec 用少量 recommendation instruction 与 LoRA 把 LLaMA 对齐到偏好预测,并用接近随机的零样本表现证明:语言知识不等于推荐知识。

Read the English edition →

一个 LLM 知道《教父》是犯罪电影,知道《钢铁侠》是超级英雄电影,也能解释两者的导演、年代与主题。

但你告诉它:

用户喜欢《教父》,不喜欢《星球大战》。
他会喜欢《钢铁侠》吗?

它真的在预测这个用户,还是在复述“大多数人可能喜欢什么”?

上一篇 M6-Rec 展示了预训练语言模型覆盖工业推荐任务的潜力。但庞大的系统和域内数据让一个问题不容易被单独看清:通用语言预训练本身究竟带来了多少推荐能力?

TALLRec: An Effective and Efficient Tuning Framework to Align Large Language Model with Recommendation 用一个很干净的实验回答:

直接 prompt 通用 LLM,推荐表现接近随机;把少量用户偏好数据改写成 instruction,再用 LoRA 微调,能力才真正出现。

它把 2023 年 LLM4Rec 的关键词从 prompting 改成了 alignment。

30 秒看懂本文

  1. M6-Rec 留下的问题:大底座在复杂工业训练后有效,不代表一个通用 LLM 天然会根据个人历史判断喜欢。
  2. TALLRec 的答案:先用 Alpaca 指令数据维持通用 instruction following,再把推荐日志改写为“历史 + 目标商品 → Yes/No”,两阶段都只更新 LoRA 低秩参数。
  3. 最重要的证据:Movie 64-shot 中,最强传统基线 AUC×100 为 51.71,TALLRec 为 67.48;Book 64-shot 从 50.06 到 60.39。LLM 零样本基线接近 0.5,说明 domain gap 真实存在。

从语言模型到推荐语言模型的对齐缺口

图 1:世界知识可以解释商品,却没有自动提供“这个用户会不会喜欢”的监督方向。

上一篇留下了什么问题

通用 LLM 的预训练数据主要由网页、书籍、代码和对话构成。它的典型目标是:

推荐系统的目标却是:

两者都能写成文本,不代表条件分布相同。

语言语料会教模型:

  • “泳镜”属于游泳装备;
  • 攀岩鞋通常需要抓地力;
  • 羽毛球和网球都是球拍运动。

却很少明确教它:

  • 小林点击而小周未点击意味着怎样的个体差异;
  • 五星和一星怎样映射到偏好边界;
  • 同一件热门商品对不同用户为何要给不同分数。

如果只做 in-context learning,模型可能依赖流行度、常识或候选描述,而没有学会推荐日志中的决策边界。

用八件商品构造 rec-tuning 样本

TALLRec 将一条推荐记录整理成三部分。

1. 历史按喜欢 / 不喜欢分组

假设小林的评分是:

喜欢:I01 网球拍、I03 攀岩鞋、I05 羽毛球
不喜欢:I07 瑜伽垫

Movie 数据中,评分大于 3 视为喜欢;不高于 3 视为不喜欢。Book 数据使用自己的阈值。

2. 给出一个从未见过的目标商品

目标:I06 泳镜
标题与简介:用于游泳训练的防雾护目镜……

3. 输出二元标签

Instruction:
根据用户历史,判断他是否会喜欢目标商品。
只回答 Yes 或 No。

Output:
Yes

推荐日志转成 rec-tuning instruction

图 2:答案来自真实评分 / 行为标签,而不是 LLM 自行推测。自然语言只是承载监督的格式。

八件商品的完整目录仍在,但 TALLRec 每次只判断一个 target。这是pointwise preference prediction,不是直接从八件中生成 Top-K。

模型从输入到输出发生了什么

1. Alpaca tuning

先用通用 self-instruct 数据训练 LLaMA,使它理解各种“指令—输入—答案”关系。这个阶段不教推荐偏好,主要保留任务理解与回答格式。

2. Rec-tuning

再用上述推荐样本训练。Prompt 中包含:

  • 任务说明;
  • 喜欢和不喜欢的历史商品文本;
  • 目标商品文本;
  • 期望输出 YesNo

3. 两阶段都用 LoRA

对 Transformer 某个权重矩阵 ,LoRA 不更新整矩阵,而学习低秩增量:

其中 rank 。原始 LLaMA 参数冻结,只保存小得多的

论文使用 LLaMA-7B,报告可以在单张 RTX 3090 上完成训练。这里的“高效”指参数高效与显存可承受,并不表示 7B 模型线上推理便宜。

TALLRec 的 Alpaca tuning 与 rec-tuning

图 3:第一阶段学习遵循通用指令,第二阶段学习偏好边界;LoRA 是实现手段,不是监督来源。

核心公式逐项拆解

TALLRec 的 rec-tuning 目标是:

  • :冻结的 LLaMA 原始参数;
  • :LoRA 的低秩可训练参数;
  • :推荐 instruction 数据;
  • :历史、目标商品和任务说明;
  • :目标答案,主要是 YesNo
  • :加入低秩增量后的语言模型。

答案只有一两个 token 时,这就是用语言模型头实现的二分类。推理可读取 Yes 的生成概率作为偏好分数,再用 AUC 衡量正样本是否排在负样本之前。

关键不是公式比普通 SFT 更新。关键是 将推荐信号放进模型能理解的 instruction 格式,而 让小数据不必重写 70 亿参数。

训练和推理分别怎么做

# stage 1: general instruction alignment
freeze LLaMA weights Phi
train LoRA parameters on Alpaca instruction pairs

# stage 2: recommendation alignment
for each user-target example:
    split history into liked and disliked items
    insert item title and description
    label output as Yes or No
    update LoRA with causal language-modeling loss

推理:

prompt = format(history, target_item)
logits = TALLRec(prompt)
score = P("Yes") / [P("Yes") + P("No")]
rank or classify the target by score

严格实现时要固定答案词与 tokenizer:

  • Yes yes 可能是不同 token;
  • 模型若生成解释而非单个答案,需要解析或约束;
  • AUC 应使用概率,不能只把生成字符串硬转成 0/1。

实验究竟证明了什么

论文使用 Movie 与 Book 两个域,分别抽取 16、64、256 条训练样本。Table 3 的 AUC×100:

域 / shots 最强传统或 BERT 增强基线 TALLRec
Movie / 16 50.85 67.24
Movie / 64 51.71 67.48
Movie / 256 54.20 71.98
Book / 16 50.07 56.36
Book / 64 50.06 60.39
Book / 256 50.20 64.38

TALLRec 在 few-shot 推荐中的 AUC

图 4:数值来自原论文 Table 3。所有方法使用相同数量的 few-shot 训练样本。

这组结果说明两件事。

第一,传统序列模型在 16–256 条样本下几乎学不到稳定边界;预训练 LLM 的先验显著提高样本效率。

第二,论文 Figure 3 中直接 in-context prompt 的 Alpaca-LoRA、GPT 系列模型接近随机,经过 rec-tuning 才跃升。模型参数里有知识,不等于任务能力已经可用。

Ablation 进一步区分:

  • 只做 Alpaca tuning(AT)明显弱于 rec-tuning;
  • 数据不超过 128 条时,Alpaca + rec-tuning 通常优于只做 rec-tuning;
  • 数据增多后两者差距缩小,说明通用 instruction prior 的价值在极低数据区最明显;
  • 用电影域训练的模型可向图书域迁移,反之亦然,但同域 / 混合数据通常更强。

它失败在哪里

1. 任务被缩成 Yes/No

TALLRec 判断一个给定商品是否喜欢,不解决百万商品召回,也不直接生成一个合法 Top-K 列表。候选从哪里来,仍是外部问题。

2. 实验规模很小

Movie 来自处理后的 MovieLens-100K 最近 10,000 条记录;Book 的历史因缺少时间戳采用随机采样。两域和几百条训练样本不足以代表广告、短视频或电商全链路。

3. 文本可能泄露流行度与标签捷径

标题和简介能提供强语义,但模型可能学习一般受欢迎程度,而非个体协同偏好。论文没有用严格反事实实验完全分离两者。

4. LoRA 解决训练成本,不解决推理成本

只训练千分之一参数,前向仍经过 LLaMA-7B 的主体。高 QPS 排序需要量化、蒸馏、缓存或更小模型。

5. 历史被压成十件商品

模型没有面对真正的长期用户:几百次跨主题点击、兴趣漂移、重复行为和噪声事件都不在主要实验里。

6. AUC 不等于推荐列表质量

二元目标没有评估列表多样性、新颖性、校准、曝光偏差或在线用户价值。

下一篇为什么会出现

TALLRec 证明少量 rec-tuning 可以跨越 domain gap。很自然的下一步是:把更多历史放进 prompt,模型是不是会持续变好?

答案出人意料。LLM 明明还远没用完 context window,历史增加到某个长度后,AUC 却开始下降。它不是“装不下”,而是“抓不住”。

下一篇 ReLLa 会把这个现象命名为 lifelong sequential behavior incomprehension,并用目标相关的行为检索 SUBR 与检索增强微调 ReiT 解决:长上下文时代,选择什么往往比塞入多少更重要。


论文:Bao et al., “TALLRec: An Effective and Efficient Tuning Framework to Align Large Language Model with Recommendation,” RecSys 2023.

原文arXiv:2305.00447

系列导航二十篇论文看懂生成式推荐的前世今生