← All writing生成式推荐 · 13

语义相似,不等于被同一群人喜欢|生成式推荐 13:LC-Rec

LC-Rec 用 Semantic ID 连接 LLaMA 与商品目录,再通过显式、隐式对齐任务把语言语义和协同语义写进同一模型。

Read the English edition →

“网球拍”和“羽毛球拍”在语言空间里很近;“攀岩鞋”和“镁粉袋”在文字上不那么像,却常被同一批用户连续购买。

这就是生成式推荐的核心张力:

语言语义回答:它是什么?
协同语义回答:谁会在什么上下文里要它?

TIGER 的 Semantic ID 主要由内容构造;GPTRec 的 SVD token 主要由行为构造。LC-Rec: Adapting Large Language Models by Integrating Collaborative Semantics for Recommendation 试图在预训练 LLaMA 中同时保存两者。

它的关键不是简单拼接两种 embedding,而是围绕“商品 ID ↔ 商品语言 ↔ 用户行为”设计一组互译任务。

30 秒看懂本文

  1. 前两篇留下的问题:内容 Semantic ID 有冷启动语义,却不等于协同行为;协同 token 有行为结构,却难调用 LLM 的世界知识。
  2. LC-Rec 的答案:用 LLaMA 内容 embedding 和 RQ-VAE 构造四级商品 index;用 Uniform Semantic Mapping 均匀分配末级 code;再通过序列、双向互译、意图与偏好任务对齐语言和协同空间。
  3. 最重要的证据:Arts 数据集上 LC-Rec 的 NDCG@10 为 0.0906,TIGER 为 0.0703;只用序列任务时为 0.0812,逐步加入互译、非对称预测、意图与偏好后升到 0.0906。

从单一语义到语言—协同对齐

图 1:LC-Rec 不要求一个向量天然兼顾所有含义,而是用多个可监督方向建立翻译桥。

一个 ID 为什么需要两种语义

仍看八件商品:

商品对 语言关系 协同关系
网球拍—羽毛球拍 都是球拍,词义近 用户可能专注不同运动
攀岩鞋—镁粉袋 名词和类目不同 常在同一攀岩任务中出现
泳帽—运动毛巾 功能不同 游泳结束后的序列相关

如果 tokenizer 只重构标题,它可能把“所有球拍”放在一起;但推荐器真正需要的局部结构是“在此用户、此时刻,什么会跟着出现”。

LC-Rec 把商品索引当作 LLM 与目录之间的接口。一个理想 index 同时要:

  • 从文本推断,所以新商品可被命名;
  • 在历史中可预测,所以保留行为规律;
  • 能反向生成文本,所以 code 不是完全黑箱;
  • 唯一且合法,所以可做全目录检索。

用八件商品理解对齐任务

假设 I06 泳镜 的 index 为 <a17><b83><c41><d06>

LC-Rec 让模型练习几种“翻译”。

序列任务 SEQ

<I01 index>, <I03 index>, <I05 index>, <I07 index>
→ <I06 index>

这是标准 next-item prediction,提供协同和顺序信号。

显式双向互译 MUT

“防雾训练泳镜” → <I06 index>
<I06 index> → “防雾训练泳镜”

正反两个方向迫使新增 index token 接入 LLaMA 原有语言空间。

隐式非对称预测 ASY

index 历史 → 下件商品标题
标题历史 → 下件商品 index

它防止模型只在“全是 code”或“全是文字”的封闭格式中工作。

意图与偏好 ITE / PER

论文用 GPT-3.5 从评论生成用户意图和显式偏好文本,再训练:

用户意图 → 商品 index
index 历史 → 偏好文字

这让行为序列得到可读解释,但也把合成标签的偏差带进训练。

八件商品中的多向对齐

图 2:商品 index 是枢纽;任务覆盖 code→code、text→code、code→text 三条信息流。

先解决碰撞:Uniform Semantic Mapping

LC-Rec 先用 LLaMA 对商品标题与描述取 mean pooling,得到内容 embedding;RQ-VAE 使用 4 个量化层、每层 256 个 code、32 维 code embedding,总共只需约 1000 个新增 token。

普通 RQ-VAE 可能让多件商品得到完全相同的 code。TIGER 追加任意 collision token;LC-Rec 在最后一层使用 Uniform Semantic Mapping(USM),把一个 batch 的残差近似均匀地分给所有 code。

可把它写成约束分配:

[ \min_q \sum_r\sum_k q(k\mid r)\lVert r-v_k\rVert_2^2 ]

[ \text{s.t.}\quad \sum_k q(k\mid r)=1,\qquad \sum_r q(k\mid r)=\frac{|B|}{K}. ]

  • (r):进入末级量化的商品残差;
  • (v_k):第 (k) 个 code;
  • (q(k\mid r)):残差分给 code 的软分配;
  • 第一条约束保证一件商品总共分配一次;
  • 第二条约束让每个 code 在 batch 中获得相同总质量。

论文用 Sinkhorn–Knopp 求近似最优传输。它同时利用距离和容量,避免热门 code 被挤爆,也无需再加无语义的任意后缀。

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

所有 index code 被加入 LLaMA 词表。一次推荐输入可能是:

Instruction:
Given the user's interaction sequence, recommend the next item.

History:
<a12><b07><c44><d03> ...

decoder 生成四个 index token。推理时,目录构建成 prefix trie;任一位置不在合法子节点集合中的 token,其 logit 被设为负无穷。论文用 beam size 20 做全目录生成。

LC-Rec 的 tokenizer、对齐与解码

图 3:离线商品 index 接入 LLaMA 后,多任务微调负责把语言知识、行为序列和目录约束连接起来。

训练仍是各任务输出 token 的负对数似然:

[ \mathcal L =-\sum_{\tau\in\mathcal T}\sum_{(x,y)\in D_\tau} \sum_t\log P_\theta(y_t\mid y_{<t},x), ]

其中 (\mathcal T) 包含 SEQ、MUT、ASY、ITE、PER。每个样本每个 epoch 随机选择一种 instruction 模板,减少模型对固定措辞的依赖。论文微调 LLaMA 4 个 epoch。

实验究竟证明了什么

在 Instruments、Arts、Games 三个 Amazon 子集上进行 full-ranking:

TIGER 与 LC-Rec 的 NDCG@10

图 4:LC-Rec 在三个子集都高于 TIGER;最强信息不只是总分,而是多类对齐任务的累积增益。

数据集 TIGER LC-Rec
Instruments 0.0803 0.0926
Arts 0.0703 0.0906
Games 0.0501 0.0681

Arts 的逐步消融:

训练任务 NDCG@10
SEQ 0.0812
+ MUT 0.0832
+ ASY 0.0848
+ ITE 0.0889
+ PER 0.0906

Games 也从 0.0535 依次升到 0.0681。意图和偏好文本贡献较大,说明 LLM 的语言能力只有在被任务显式连接到 index 后,才会转化为推荐收益。

论文还构造了语义相似负例来区分语言与协同判断。LC-Rec 在 language negatives 上准确率 75.73%,SASRec 为 73.52%;在 collaborative negatives 上是 60.01% 对 52.25%。这支持“二者都保留了一些”,但 60% 也说明协同辨别远未解决。

它失败在哪里

1. tokenizer 仍然离线

商品 index 在 LLM 推荐训练前冻结。生成器只能适应既定 code,推荐梯度不能修正不利于预测的量化边界。

2. 辅助语言是合成的

用户意图与偏好由 GPT-3.5 从评论生成。提升可能来自有价值的抽象,也可能继承生成模型的模板化、幻觉与信息泄露。没有评论的用户如何构造同等质量监督,仍不清楚。

3. 服务成本高

7B 级 LLaMA 加 beam 20 的全目录自回归解码,远重于 SASRec 点积或 ANN。实验目录约万级,未证明大规模延迟与吞吐。

4. 通用能力与推荐能力可能冲突

加入约 1000 个 code token 并对 LLM 做多任务微调,可能改变原有语言能力。论文提到这种风险,但没有系统评估灾难性遗忘或指令泛化。

5. index 版本仍是系统状态

重训 RQ-VAE 会改变 code;模型权重、历史转换、合法 trie 与缓存都要原子升级。USM 解决同一版本内的分配,不解决跨版本身份稳定。

下一篇为什么会出现

LC-Rec 说明多任务对齐可以把语言与协同信号接起来,但 tokenizer 本身仍主要以内容重构为目标。我们需要直接问:

什么样的商品 ID 才是“为推荐而生”的好 ID?

它至少要同时满足:

  1. 层次语义:共享前缀有含义;
  2. 协同一致:被相似用户消费的商品在 code 空间靠近;
  3. 分配多样:码本不要塌缩到少数热门 code。

下一篇 LETTER 会把这三条写成 tokenizer 的三个损失,并进一步用 ranking-guided generation 让 ID 学习与排序指标靠近。


本篇批判性结论:LC-Rec 真正推进的是“接口对齐”,而不是证明语言语义与协同语义已经合成一个完美空间。多向翻译任务让同一商品 index 能在不同模态间流动;但 tokenizer 冻结、合成监督和昂贵解码仍把它留在实验系统阶段。