经典推荐流水线
过去十年,工业级推荐系统几乎都采用模块化多阶段架构:
每个阶段独立训练、独立优化,特征靠人工工程。这套架构在很多场景下确实管用,但有难以根治的顽疾。
五大顽疾
- 冷启动:新用户/新物品没有交互历史,CF 系数找不到,embedding 无法初始化
- 数据稀疏:交互矩阵 99%+ 是空的,模型只能记住高频物品
- 个性化深度不足:模型只看 ID 和统计特征,不懂用户真正的意图
- 语义理解缺失:物品描述、评论、图片里有海量信号,传统模型用不上
- 长尾覆盖差:80% 的物品是冷门,但传统模型对它们几乎无能为力
为何 LLM 是答案
LLM 提供了一种统一的、语言原生的机制:可以跨任务、跨域、跨模态泛化,能 zero-shot/few-shot 推理,能从外部知识与上下文中推断关联——这恰好对应了上面五大顽疾的解药。
在进入 LLM 解法之前,论文用 §2 系统梳理了过去二十年推荐系统架构的演进——这部分本身就是一个很好的速成教材。
传统方法:启发式 / CF / 矩阵分解
启发式(Heuristic)
最古老的方法。基于全局统计:
即给每个物品按"被多少用户交互过"打分,热度高的排前面。共现规则则是"买了 A 的人也买 B":
简单、可解释、上线快,但没有任何个性化。所有人看到的都一样。
协同过滤(Collaborative Filtering)
核心假设——同好原则(homophily):行为相似的用户,未来偏好也相似。User-based CF 的预测公式:
- $\mathcal{N}_k(u)$ — 与用户 $u$ 最相似的 $k$ 个邻居
- $\text{sim}(u,v)$ — 用户相似度,常用余弦或 Pearson
- $r_{v,i}$ — 邻居 $v$ 对物品 $i$ 的评分
矩阵分解(Matrix Factorization)
把稀疏的评分矩阵 $R \in \mathbb{R}^{m \times n}$ 分解成两个低秩矩阵的乘积:
优化目标:
SVD++ 进一步引入隐式反馈,把"用户点过的其他物品"也作为信号:
MF 是 Netflix Prize 的赢家,至今仍是工业级推荐的基线。
内容过滤与混合模型
内容过滤(CBF)
用物品属性(类型、标签、描述、图像)构造特征向量 $\mathbf{x}_i$,与用户画像 $\mathbf{u}$ 计算余弦相似度:
能解决"新物品冷启动"(只要有属性就能推),但对新颖性不友好——总是推相似的东西。
LightFM / DeepFM
LightFM把协同信号和内容特征统一到一个潜空间:
DeepFM则用 FM 层学低阶交互、DNN 层学高阶交互,在大规模工业系统里广泛使用。
深度学习架构:NCF / Wide & Deep
NCF 把 MF 的内积换成 MLP,能学非线性的用户-物品交互:
Wide & Deep(Google Play)则用"宽线性 + 深网络"的双塔结构同时捕捉记忆(memorization)和泛化(generalization):
序列模型:GRU4Rec / SASRec / BERT4Rec / TiSASRec
用户行为本质是时间序列——上一个看的视频会影响下一个想看的。这类模型的演化路径:
首次把 RNN 用于会话推荐。隐状态 $h_t = \text{GRU}(x_t, h_{t-1})$,预测下一个物品 $\hat{y}_{t+1} = \text{softmax}(W h_t + b)$。
用单向自注意力代替 RNN:$\mathbf{H} = \text{SelfAttention}(\mathbf{X} + \mathbf{P})$,长程依赖建模能力大幅提升。
引入 BERT 的双向注意力 + masked item prediction,能同时利用过去和未来的上下文。
在注意力权重里显式加入绝对时间和相对时间:$\text{Attention} = \text{softmax}\left(\frac{QK^\top + T_\text{abs} + T_\text{rel}}{\sqrt{d_k}}\right) V$。
图神经网络:NGCF / LightGCN / PinSage
把用户-物品交互看成二分图 $\mathcal{G} = (\mathcal{U} \cup \mathcal{I}, \mathcal{E})$,用 GCN 做消息传递:
NGCF 加非线性激活,LightGCN 把非线性去掉、只保留邻居加权聚合(反而效果更好),PinSage 把这套搬到 Pinterest 的百亿节点图上。
大规模召回:Two-Tower / YouTube DNN / DLRM
工业系统物品池规模常达百万到十亿,召回阶段必须做到亚毫秒级。双塔(Two-Tower)是事实标准:
关键优势是物品塔可预计算,配合 ANN 索引(HNSW、PQ)能实现亚线性检索。YouTube DNN 用采样 softmax,DLRM(Meta)则用 embedding lookup + interaction layer。
论文 §3 把现代推荐系统抽象成三个核心阶段。理解它们对后续 LLM 的"插入位置"至关重要。
从百万物品中拉出几百到几千的候选集。优化目标是 recall 而非 precision。常用 ANN、双塔、图随机游走、heuristic 过滤等。形式化:$\mathcal{C}(u) = \{i \in \mathcal{I} \mid \text{sim}(f_u, f_i) \geq \tau\}$。
对候选集打分排序。模型更大、特征更多,用 DNN / Transformer / GBDT。在多任务学习中:$h = \text{Encoder}_\theta(\phi_u, \phi_i, \psi_{u,i})$,然后多头预测 $\hat{y}_\text{click}, \hat{y}_\text{dwell}, \hat{y}_\text{engage}$,损失加权 $\mathcal{L} = \lambda_1 \mathcal{L}_\text{click} + \lambda_2 \mathcal{L}_\text{dwell} + \lambda_3 \mathcal{L}_\text{engage}$。
在已排序列表上做最终调整:多样性、新鲜度、公平性、疲劳控制等。常用 DPP、submodular optimization、contextual bandit。形式化:$s'(u, i_j) = g(s(u, i_j), \delta(i_j), \gamma(i_j))$,$\delta$ 是多样性因子,$\gamma$ 是新鲜度因子。
所有推荐系统的痛苦,归根到底都是数据的痛苦。这一节是整篇综述最核心、最实用的部分。
冷启动问题
新用户/新物品没交互历史,传统 CF 的 embedding 直接不存在:
其中 $\mathbf{p}_{u'}, \mathbf{q}_{i'}$ 要么未定义、要么是随机初始化的垃圾向量,预测毫无意义。
论文列出了九种 LLM 解决方案,每种对应一个具体的工业落地:
| 方案 | 核心思路 | 典型系统 |
|---|---|---|
| ① Content-Conditioned Generation | 把物品标题/描述/评论喂给 LLM,让它直接生成推荐列表 | GenRec, GPTRec, PromptRec, JD.com, Pinterest |
| ② Retrieval-Augmented Generation | 先检索相关支撑集 $R(x_u)$,再由解码器生成 $P(i \mid x_u) = \text{Decoder}_\text{LLM}(x_u, R(x_u))$ | Amazon Alexa RecRAG, OpenAI plugin RecSys |
| ③ Zero-Shot Personalization | 用指令微调模型直接解析自然语言偏好 | Spotify 对话助手, TikTok 偏好助手 |
| ④ Representation Bootstrapping | 用 LLM 编码器把新用户/物品从元数据生成 embedding:$q_{i'} = f_\text{LLM}(x_{i'})$ | 各类 LLM-as-encoder 方案 |
| ⑤ Language-Native Dialogue | 对话式实时获取偏好,维护信念状态 $b_u^{t+1} = f_\text{update}(b_u^t, a_t, r_t)$ | DialogRec |
| ⑥ Prompt-Based Conditioning | 把推荐重构为语言建模任务 | PROMO, OpenAI plugin RecSys |
| ⑦ Multimodal Embedding Synthesis | 跨模态融合(Flamingo 风格门控):$q_i = \gamma_i^\top [f_\text{text}; f_\text{img}; f_\text{meta}]$ | Amazon 多模态 RecSys |
| ⑧ Meta-Learning for Fast Adaptation | MAML 风格少样本适应:$\theta^* = \theta - \alpha \nabla_\theta \mathcal{L}_{T_u}(f_\theta)$ | MeLU, Meta-LLMRec |
| ⑨ Cross-Domain Transfer | 共享语言表示跨域迁移:$P_{D_B}(i \mid x_u) \approx \text{LLM}(x_u^{D_A}, x_i^{D_B})$ | PromptRec, CrossAligner, LLM4CDSR |
假设你在 Amazon 上线了一个新品:"Bose QuietComfort 45 头戴式蓝牙降噪耳机",0 交互数据。
传统做法:embedding 是随机的,要等到积累几百次点击/购买才能稳定。这期间它几乎不会被推给任何人,陷入"曝光太少→交互更少"的死循环。
LLM 做法 ①(Content-Conditioned Generation):把标题、描述、规格、评论 prompt 给 LLM:"这个商品适合喜欢哪种音乐场景的用户?"LLM 立刻输出"通勤族、远程办公者、音质爱好者",这就是它的语义画像。
LLM 做法 ④(Representation Bootstrapping):直接用 LLM encoder(比如 Sentence-BERT)把描述编码成 embedding,与现有物品 embedding 落入同一空间,立即可被双塔召回。
数据稀疏
交互矩阵的稀疏度通常 >99%:
传统 CF 在稀疏矩阵上只能学到"高频物品"的好表示,长尾物品的 embedding 噪声极大。LLM 的解法:
- Text-Driven Generalization:完全不依赖交互矩阵,靠 LLM 对文本的理解做 zero/few-shot 打分
- Semantic Matching via Embedding:$\hat{r}_{ui} = \hat{p}_u^\top \hat{q}_i$,其中 $\hat{p}_u, \hat{q}_i$ 都由 LLM 编码生成(可以叠加知识图谱增强)
含噪隐式反馈
用户的点击/观看不等于真正喜欢——可能误点、可能因为前几个广告关掉了页面。建模为:
其中 $o_{ui}$ 是观察到的点击、$r^*_{ui}$ 是真实偏好。LLM 的解法非常巧妙——用语言指令把上下文喂进去,让它"读懂"用户的真实意图:
得到一个软去噪标签,替换原本的 0/1 标签做训练。
具体技术:
- Context-aware Prompt Interpretation:"用户在第 8 位停留 2 秒后点击——这是真喜欢还是误触?"
- Counterfactual Feedback Generation:$\hat{r}_{ui}^\text{cf} = \text{LLM}(\text{Counterfactual Prompt})$,估计 $P(r^*_{ui} \mid \text{do}(x_i^\text{pos} = 1))$
- Pseudo-Session Simulation:用 LLM 模拟会话用于预训练(SAM, LLM4RecSim)
- Explanation-enhanced Supervision:GPT4Rec 让模型同时输出推荐和解释,解释作为额外监督
时序漂移
用户兴趣不是静止的——上个月喜欢运动、这个月迷上音乐、下个月可能转战时尚。建模为:
LLM 的解法分两路:
① Prompt-based 时序适配
不需要改模型,只需精心设计 prompt:
- Recency 提示:"基于用户最近 7 天的行为推荐"
- 长短期拆分:"长期兴趣是 X,但本周明显在看 Y,请推荐符合 Y 的"
- 会话感知 slate prompt:把当前会话作为强上下文
- Few-shot drift 泛化:给几个"兴趣切换"的样例
- 历史摘要:用 LLM 把嘈杂的长历史压缩成稳定画像
② 结构与混合 LLM 集成
把 LLM 作为参数更新器:
或者把 LLM 的输出当作 Transformer 的输入:$h_t = \text{Transformer}([x_1, \ldots, \text{LLM}(x_t)])$。
多模态融合
真实物品有文本(标题、评论)、图像(封面、商品图)、元数据(类别、价格)、行为(点击序列)多种模态。融合公式:
五种 LLM 解法:
① Modal-Aware Weighting
用自注意力动态加权不同模态。当文本充分时弱化图像权重,反之亦然。
② Unified Representation
把所有模态序列化成一个 prompt:q_i = g_pool(LLM(Prompt_i))。UniModalRec, UnifiedIO, InstructRecLM 都是这条路。
③ Cross-Modal Alignment
用 CLIP / ALIGN / PaLI 等预训练对齐图文。CoCa-2Rec, OmniFM 是典型推荐落地。
④ Multimodal Imputation
缺失模态用生成补全:p(x^miss | x^obs) = Π p(w_t | w_<t, x^obs)。
⑤ Semantic Fusion via Templates
用 [TITLE]/[IMAGE]/[META]/[REVIEW] 这种结构化标签把多模态信息塞进 prompt。CM3, PromptFusionRec 等。
个性化 vs 泛化
个性化太强会过拟合($\mathcal{L}_\text{overfit} = \sum_u \sum_i (\hat{r}_{ui} - r_{ui})^2$ 在训练集小但泛化差),泛化太强又千人一面。LLM 提供了四种平衡策略:
FLAN-T5、InstructGPT、T0 在海量任务上指令微调,能 zero-shot 泛化到新场景。当冷启动或跨域时优先选它。
PROMO、PEPLER——只学少量 soft prompt token,针对个人/场景做精细化适配,不动主体参数。
Spotify 心情歌单、JD/Alibaba 的多样化策略——让 LLM 主动生成"用户可能也喜欢的不同类别"。
RecDSS 等系统在一个 prompt 里同时要求 LLM 做"推荐 + 解释 + 教学 + 转化预测",共享底座参数。
可扩展性:LLM 太大怎么办
工业推荐系统的核心约束是延迟——召回 + 精排必须在 100ms 内完成。把一个 7B 模型直接接进精排链路是不可能的。论文给出四种方案:
训练一个小模型逼近大 LLM 的输出分布:$\mathcal{L}_\text{distill} = \sum \text{KL}(p_\text{LLM} \,\|\, p_\text{student})$。TikTok、Amazon、Alibaba 都在用,能保留指令跟随和跨域推理能力。
LoRA + Prompt Tuning,只在少量参数上做微调——TikTok SAM、Meta InstructRec 都是这条路。
先用快模型做召回 $\mathcal{C}(u) = \text{Top-k}(g_\text{fast}(u, \mathcal{I}))$,再用 LLM 只对 $\mathcal{C}(u)$ rerank。YouTube、Amazon Alexa、OpenAI plugin 都是这套。
GLaM、Switch-LLM、V-MoE、M6-T、GopherMoE——每次只激活一小部分专家:$\tau_\text{sparse} \approx \sum \rho_l \cdot C_l, \rho_l < 1$,理论上能做到"参数多 10×、计算只多 1.5×"。
长尾建模
典型推荐系统的曝光分布严重偏头部:
长尾物品的相关度信号几乎全靠 popularity 项。LLM 五种解法:
- Content-Enriched Generation:GenRec / LLMRec 用物品描述补全长尾的语义
- Retrieval-Augmented Tail Expansion:RAG + 长尾召回(PromptRec, Llama4Rec 互相增强 + 自适应聚合)
- Tail-Aware Few-Shot Prompting:InstructGPT / FLAN-T5 用少样本展示长尾物品的优势场景
- Multimodal Tail Representation:Spotify 神经内容召回、Meta 跨模态底座
- Pseudo-Interaction Simulation:用 LLM 生成"假但合理"的长尾交互来扩展训练数据
线上线下不一致(Offline-Online Gap)
这是工业推荐系统永恒的痛——离线 NDCG 涨了 5%,A/B 测试 CTR 反而跌了 0.5%。形式化:
LLM 提供五种弥合手段:
- Counterfactual Evaluation via Prompt-Based Simulators:LLMRecSim 让 LLM 扮演用户做反事实模拟,得到 $\hat{y}_{ui}^\text{cf} \in [0, 1]$,比 IPS 估计方差更低
- Generative Relevance Scoring:$\tilde{r}_{ui}^\text{LLM} = \text{sigmoid}(\text{LLM}(x_i, c_u, \text{"How relevant?"}))$,混合指标 $\alpha \cdot \text{Recall@K} + (1 - \alpha) \cdot \mathbb{E}[\tilde{r}_{ui}^\text{LLM}]$
- Behavior-Level Satisfaction Estimation:把多事件 trace 喂给 LLM,输出 $\hat{s}_u \in [0, 1]$
- Interactive User Simulation:Agentic LLM 一步步模拟用户决策
- Evaluation Metric Generation:GPTMetrics, EvalTemplate, LLMJudge——让 LLM 当评判员做 pairwise slate 比较 $P(L_A \succ L_B)$
转化标签稀疏
正样本极少(0.1–1%):$|Y^+| / |Y| \ll 1$。LLM 五种增强:
| 策略 | 公式 / 做法 |
|---|---|
| Proxy Signal Augmentation | $\hat{y}_{ui}^\text{soft} = \sigma(\text{LLM}(x_u, x_i))$ 作为辅助标签 |
| Instruction-Tuned Imputation | temperature scaling 校准 |
| Generative Multi-Task Learning | $\mathcal{L}_\text{total} = \lambda_1 \mathcal{L}_\text{purchase} + \lambda_2 \mathcal{L}_\text{review} + \lambda_3 \mathcal{L}_\text{click}$ |
| Counterfactual Label Reasoning | LLM 推理 uplift score $\hat{y}_{ui}^\text{cf}$ |
| Language-Guided Reweighting | $\mathcal{L} = \sum w_{ui} \cdot \text{BCE}(y_{ui}, \hat{y}_{ui})$,权重由 LLM 给出 |
短期 vs 长期价值
推荐系统最常见的滑坡:为 CTR 优化导致 clickbait 横行,长期留存暴跌。本质是优化目标 $J(\pi) = \mathbb{E}_\pi[\sum \gamma^t R_t]$ 里 $\gamma$ 太小。LLM 五招:
用 RLHF 训出的 reward model 估计长期效用,超越点击/dwell time 这些短期信号。
主动对话:"你下个月计划做什么?"得到 $u_\text{long} = f_\text{LLM}(\text{user\_reply})$。
SimRec、UserGPT-Sim:$J_\text{sim} = \sum \gamma^t \hat{R}_t$,与 A/B 实测相关性 0.82–0.87。
$u_\text{stable} = \text{LLM}(S_u)$(StableRec, TempRec-Memory),减少 churn ~6%。
$R_t = \sum \beta_i \cdot R_t^{(i)}$,其中 $R_t^{(i)} = \text{LLM}(x_t^{(i)})$。$J(\pi) = \mathbb{E}[\sum \gamma^t \sum \beta_i R_t^{(i)}]$。让 LLM 把"满意度"拆分成多个子目标。
LLM 的引入也带来全新的隐私挑战——但同时它也提供了一些前所未有的解决方案。
用户数据敏感性
- Token Attribution & Prompt Fingerprinting:审计 LLM 输出到底用了哪些用户 token
- Federated Prompting + Local DP:本地差分隐私的联邦 prompt 学习
- Synthetic User Generation:用 LLM 生成合成用户做训练,避免使用真实数据
- Zero/Few-shot Personalization without Long-term Retention:不存历史,每次请求即时推断
法规合规(GDPR / CCPA / DMA)
- Ephemeral Prompt-Level Personalization:临时用、用完即弃
- Synthetic User Traces:合成用户轨迹替代真实日志
- Constraint-Aware Instruction Tuning:在指令里硬约束"不输出 PII"
- Audit Logs + Token-Level Attribution:流式日志重放 + token 归因
- 典型实践:Spotify, Zalando
差分隐私 + 联邦学习
- Gradient-Sanitized Fine-Tuning:梯度裁剪 + 噪声注入
- Federated Prompting:设备端 prompt 精炼,原始数据不出端
- Differentially Private RAG:DP-RAG 保证检索集不泄露
- 参考实现:Google Gboard(FL)、Apple(DP)、联邦 MF + DP
数据治理
合成数据 DP 保证:$\Pr[\text{LLM} \to D_\text{synth} \mid x \in D] \approx \Pr[\text{LLM} \to D_\text{synth} \mid x \notin D]$(合成数据看不出某个真实用户是否在原数据集里)。
论文 §5 列出了 LLM 在推荐系统里九个还没解决的工程难题——这是综述最有价值的部分之一,因为它具体到了数字。
自回归解码违反推荐 100ms SLA。即使 4-bit 量化的 7B 模型在 A100 上也要 >35ms。Flash-Attention v3、KV-cache fusion 能带来 1.7–2.3× 加速;层级路由(dense → sparse MoE)降低长尾延迟 28%;端侧 NPU + speculative decoding 再省 ~40ms。
模型翻倍 → 计算成本 4×、碳排放 3×。MoE + LoRA 能减 60–80% 平均算力,token 级缓存再减 15–25%;云上 LLM 推理价 ~$0.03/1k tokens。
LLM 可能推荐根本不存在的商品。检索 grounding + 约束解码 + 事实核查器能减少幻觉 25–40%;负样本增强 + 对比拒答可在广告目录上降到 <4%。
"recommend" → "suggest" 这种词汇微调能让 NDCG 偏移 >10%。Prompt 血缘图 + canary token + 对比差异测试有效,但会产生 ~5 GB/天的 lineage 日志。
RLHF 一次更新就让所有缓存 embedding 失效。Embedding 版本管理 + 向后兼容投影头能保持 cosine >0.85,但增加 2–3ms 延迟。
NDCG / MAP / Recall@K 都漏掉了语义保真度;LLM-as-judge 与人工评分相关性 <0.35;人工每条解释 $0.42。
记忆化与对抗注入是新威胁。DP 微调、联邦 prompt、SMPC / SGX 各增加 10–20% 延迟;最新提取攻击在 DP 噪声下仍有 18% 成功率。
没有 token 级遥测——上线后出问题难定位。Lineage 日志 ~2 GB/天/百万请求;安全 dashboard 离线召回 92%,但线上因 paraphrase 漂移只能召回 71%。
异步 reranker、RAG 栈、prompt store 把 MTTR 提高 1.4×;多租户隔离、GPU 调度都还是开放问题。
读完整篇综述,你应该带走的几条核心 takeaway:
不同场景的优先级建议
| 你的痛点 | 优先尝试 | 难度 |
|---|---|---|
| 新用户冷启动 | Content-Conditioned Generation 或 Representation Bootstrapping | 低 |
| 新物品冷启动 | LLM 编码物品描述 → 共享 embedding 空间 | 低 |
| 长尾物品曝光不足 | Retrieval-Augmented Tail Expansion + 多模态表征 | 中 |
| 用户兴趣漂移快 | Prompt 化长短期拆分 + LLM 摘要历史 | 中 |
| 线下涨线上不涨 | LLM 反事实模拟器 + Generative Relevance Scoring | 高 |
| CTR 高但留存差 | RLHF reward model + 多目标 LLM 拆分 | 高 |
| 合规审计压力 | 合成数据 + Ephemeral 个性化 + Token Attribution | 中 |
| 对话式推荐需求 | Language-Native Dialogue + 信念状态更新 | 高 |
工业落地的"三原则"
延迟会爆炸。必须走"两阶段混合"——快模型召回 + LLM rerank 小集合。或者把 LLM 蒸馏到小模型。
LLM 改动后离线指标常常严重虚高。用 LLM-as-judge、Counterfactual Simulator、Behavior-Level Satisfaction Score 三件套配合传统 NDCG。
Prompt 微调可能带来 >10% 指标偏移。把 prompt 当成代码版本管理:prompt store + lineage log + canary token + 对比差异测试。
论文未来方向
- 表达力 vs 效率的权衡——MoE、量化、蒸馏的边界
- 鲁棒的 prompt 设计 + caching 策略
- 低延迟推理:distilled / quantized 模型的极限
- Prompt 版本与可审计性的标准化协议
- 新的评估范式:定性用户建模 + 反事实模拟 + LLM 评判
- 幻觉、表征漂移、prompt 注入的系统级防御
- GDPR/CCPA 合规、可解释性保证