精度论文之CoRA:把协同信息注入 LLM 的权重,比改 prompt 更香
这是一篇把用户与物品协同信息以“模型插件”的形式注入到大语言模型参数空间的论文,通过LoRA让大模型在“不降智”的情况下更懂推荐
目录
一、针对的问题
1. 直接用推荐数据微调 LLM 导致通识与推荐文本能力下降
现有不少 LLMRec 做法会在推荐数据上对 LLM 进行指令微调或全量微调。由于数据规模与涵盖量偏窄,容易引发表示漂移:模型对通识知识与推荐相关文本的理解与推理能力被削弱,在跨任务评测上出现明显退化。结果是,即便引入了协同信息,整体效果仍然受限。
2. 将协同信息对齐到输入空间易扰乱原始语义,且拉长上下文、推理开销上升
把用户/物品的协同特征拼接进提示词或作为新 token 注入,会改变原提示的语义与注意力分配,出现语义被稀释或误读的问题。同时,上下文长度增加使解码计算量随长度线性上升,导致推理更慢、成本更高;当协同特征冗长时,该问题更加突出
这样说可能还是有点抽象,对吧?下面这两张图或许能帮您理解:不管是单个 token,还是由提示词组成的一整句话,它们都会在各自的语义空间里(通过高维 embedding 向量)以“语义坐标”的形式存在。


若直接在输入空间混合协同与文本,易导致语义漂移
二、论文创新点
1.协同版 LoRA:首次将协同信息以低秩增量权重注入 LLM 权重
To address this issue, we propose aligning collaborative features with the LLM’s parameter space by transforming them into plug-in weights to update LLM’s output. Unlike input space alignment, this parameter space alignment approach enables general LLM to directly leverage collaborative information as an adaption of each user-item pair for recommendation tasks, eliminating the need for fine-tuning or modifying the text prompts.
这是原文中的说法,意思是我们在参数空间而非输入空间对齐协同信息,避免直接修改W导致模型在推荐系统任务上能力下降且出现“遗忘”(原始任务上性能下降)
我高亮的“plug-in weights”对应了我对这个做法的理解:这是一个“模型插件”~
2. 协同查询生成器:Collaborative Query Generator
把 CF 的用户/物品嵌入(e_u,e_i)通过可学习查询 + 交叉注意力提炼为一个样本条件的表示 q_c,为后续映射成低秩增量权重ΔW并注入LLM权重做准备工作
同样有点抽象,后面我会说
三、方法背景
我想在介绍本文方法前,先给您简单介绍一下LoRA与Q-former,这两项技术不仅是作者工作的启发,更是CoRA 框架的核心基石
1. LoRA
一种参数高效微调方法,它通过两个低秩矩阵 B 和 A 构造权重增量 ΔW = B·A,再与原始权重相加,达到“冻结大模型主干,只训练小规模参数”的目的。这样做既能减少训练开销,又能避免模型遗忘原有知识
LoRA 的理论动机示意
横轴是模型参数规模,纵轴是任务的“内在维度”(有效自由度)。研究发现,随着模型变大,参数矩阵的变化并不是完全随机的,而是具有低秩结构,远低于原始权重矩阵的维度。因此,只需要用小规模的低秩矩阵近似,就能捕捉主要的变化模式。这正是 LoRA 提出“只训练 ΔW=B·A 而非全量参数”的依据
LoRA 的低秩分解原理
2. Q-former
Q-former 的精髓在于:它没有把图像特征和文本特征混在一起直接丢给 LLM,而是引入了一组可学习的 Query token 当“中介”。
- 左边的 Image Encoder 负责产出底层特征(比如一大串图像 embedding);
- 中间的 Query token 通过 Cross-Attention 主动去这些特征里“挑选”信息;
- 经过自注意力和前馈网络整理后,得到一个紧凑的表示,交给 LLM。
- 文本 token 永远看不到原始图像 token;
- 文本侧必须通过 Query token 才能接收到图像信息;
- 这样,Query token 就成了 唯一的翻译桥梁。
在本文的 CoRA 框架中,把图像特征换成了 CF 分支生成的用户/物品协同 embedding:
- CF 分支 = 提供协同特征(类似 Image Encoder);
- Collaborative Query Generator = 用 Query token 挑选关键信息(类似 Q-former);
- 最终这些信息会转成 LoRA 的增量权重 ΔW 注入 LLM 参数空间,而不是简单拼到 Prompt 里。
这就是 CoRA 的创新:协同 → Query 提炼 → 参数注入,避免了“输入空间拼接”的老路子
四、 本文方法

对于用户-项目的(u,i),我们首先从预训练的协同框架模型(CF)中获取用户嵌入eu和项目嵌入ei,将二者拼接为[eu,ei ].随后将这些嵌入输入协同查询生成器,得到特定于该用户—物品对的协同查询,从而在协同信息与 LLM 参数空间之间搭建桥梁。类似 BLIP2 的 QFormer 与 VLoRA 的感知权重生成器,我们初始化 k个可学习查询嵌入,并让它们通过带交叉注意力的 N个解码块,以从 k个语义子空间吸收协同信息。
既有 LLMRec 方法把用户/物品嵌入投到 LLM 的输入空间以整合协同与文本信息,这会干扰 LLM 对原始提示的理解,导致性能下降。因此我们避免在输入空间混合两类信息,转而把协同信息视为预训练 LLM 的增量权重。
下面给您提供一个Q-former和CoRA的对比表格,应该能帮助您更好的理解CoRA的架构
| Q-former(图像场景) | CoRA(推荐场景) |
|---|---|
| 外部特征:图像编码器输出 V | 外部特征:CF + Collab-Query 提供 [eu, ei] |
| 查询 tokens:从 V 里做 Cross-Attention | 查询 tokens:从 [eu, ei] 里做 Cross-Attention |
| 产出:投到 LLM 输入,作为“视觉伪 token” | 产出:不是 token,而是 LoRA 的低秩增量权重 ΔW 注入 LLM 参数 |
| 目标:多模态对齐与生成 | 目标:让 LLM 感知协同信息,做更准的推荐 |
我们将协同信息生成的增量权重记为 W_c。最终写入 LLM 的权重为:
W ^ = W + W c = W + R ( q c W F C ) W proj \hat{W} = W + W_c = W + \mathcal{R}(q_c W_{FC}) W_{\text{proj}} W^=W+Wc=W+R(qcWFC)Wproj
重要符号说明:
- q_c:通过collaborative query generator(协同查询生成器)得到的协同要点
- W_FC:一层全连接,把 q_c变成长度为 d×r的长向量
- R:reshape,将其变为d×r的矩阵
- 权重矩阵Wproj:维度r×d,将维度还原为d维
计算流程:
q c → W F C vec ( d ⋅ r ) → R B ∈ R d × r → W proj W c ∈ R d × d q_c \xrightarrow{\, W_{FC} \,} \text{vec}(d \cdot r) \xrightarrow{\, \mathcal{R} \,} B \in \mathbb{R}^{d \times r} \xrightarrow{\, W_{\text{proj}} \,} W_c \in \mathbb{R}^{d \times d} qcWFCvec(d⋅r)RB∈Rd×rWprojWc∈Rd×d
把协同信息转成 LoRA 的低秩权重,直接写进 LLM 参数空间。
训练设置:
model:
arch: mini_gpt4rec_vx
model_type: pretrain_vicuna
freeze_rec: True
freeze_proj: True # stage 1: proj false, lora: false
freeze_lora: False # sateg2: proj true, lora True
freeze_bias: True
max_txt_len: 1024
proj_token_num: 1
proj_drop: 0
proj_mid_times: 10
end_sym: "###"
prompt_path: "prompts/tallrec_movie.txt"
# prompt_template: '### Input: {} \n### Response:'
prompt_template: '{}'
llama_model: "vicuna_weight_working"
user_num: -100
item_num: -100
ans_type: 'v2'
lora_config:
use_lora: True
r: 16
alpha: 32
target_modules: ["q_proj", "v_proj", "o_proj", "k_proj"] # ["q_proj", "v_proj"] # ['lm_head'] ##["lm_head"] # ['lm_head'] ['lm_head'] #
dropout: 0.05
rec_config:
user_num: -100
item_num: -100
embedding_size: 256
pretrained_path: "pretrained/mf/ml_lr0.001_wd0.0001_best.pth"
ckpt: "/data0/liuyuting/CoLLM/minigpt4/logs/stage1/20240718111/checkpoint_best.pth"
- 冻结协同过滤分支 Rec:
freeze_rec: True(第一阶段得到的 MF/LightGCN/SASRec 等作为特征提供者)。 - 训练 LoRA 相关参数:
freeze_lora: False(适配层/相关小模块可学习)。 - 秩 (r):论文设置为 (r = 16)。
- 插入位置:在注意力的四个线性层注入协同权重 [W_q; W_k; W_v; W_o]
实践中包含 (W_o) 的组合更稳定、效果更好。
五、实验结果及性能对比
在 Amazon-Book 与 ML-1M 数据集上的性能对比(指标:AUC / UAUC)
结果总结
- CoRA 在两个数据集上的 AUC / UAUC 都显著高于传统协同过滤(CF)方法与 LLMRec 基线模型。
- 带协同的 LLMRec > 不带协同的 LLMRec,说明协同信息对 LLM 推荐任务是加分项。
- CoRA > CoLLM / BinLLM:同样是引入协同,CoRA 不依赖提示工程(Prompt),而是通过 改权重注入,避免了语义冲突。
关键发现
- 传统 CF(MF/LightGCN/SASRec) 虽然能提供推荐能力,但与大模型结合不佳。
- 纯 LLMRec(ICL / Prompt4NR / TALLRec) 不利用协同信息,表现较弱。
- LLMRec w/ Collab.(CoLLM, BinLLM) 虽然融合协同特征,但方式仍有限。
- CoRA 的参数空间注入方式,在 三种协同模型(MF、LightGCN、SASRec) 上都带来了额外提升,证明其方法具备 通用性与稳健性。
协同信息对推荐至关重要,而 CoRA 通过「权重注入」比「拼 Prompt」更高效、更稳健。
六、结果分析及消融实验
1. 实验结果分析
原预训练模型Vicuna-7B(LLaMA)线性权重维度4096WQ
W ′ = W + Δ W = W + B A W' = W + \Delta W = W + BA W′=W+ΔW=W+BA
Y = ( W + B A ) X = W X + B A X Y = (W + BA)X = WX + BAX Y=(W+BA)X=WX+BAX
参数规模对比
-
增量矩阵分解: B(m×r),A(r×n):4096×16+4096×16=131072个参数
-
原始权重:4096^2 = 16777216个参数
-
缩减比例:参数规模缩小到 1/128。
性能影响
- 合并推理:在 W+BA 模式下,依旧保持 W 级别的运算效率。
- 不合并推理:相当于多执行两次小矩阵乘(A 和 B 很窄),速度几乎不变。
总结:LoRA 的核心优势在于 极大减少参数量(1/128),同时保证推理时几乎无额外开销,
既轻量又高效。
2. 消融实验
协同与文本融合的有效性
- 目的:验证 CoRA 是否真的让 LLM “听得懂”协同信息。
- 做法:
- ID-Only:仅用用户/物品的 ID 嵌入,去掉物品文本;
- w/ Text:在 ID 嵌入的基础上加入物品文本;
- 同时把 TALLRec 作为 “仅文本” 的参考线。
- 结果:在 ID-Only 场景,CoRA 仍显著优于其它方法 → 说明它显著增强了 LLM 的协同感知能力。
协同权重注入位置(q/k/v/o/f)的影响
-
背景:LLM 的每个解码块包含 6 类线性权重:
- 注意力的 (Q, K, V, O),
- 前馈网络(FFN)的 up/down。
-
实验设计:作者比较了把 “协同增量权重” 插到不同权重组合上的效果,包括:
- qkvof、qkvo、qkv、qko、qk
-
结果结论:
- qkvof(除了 FFN 全插)整体最好;
- 含 (O) 的组合优于不含 (O) → 输出投影 (W_O) 对协同感知至关重要;
- 把 FFN 也插上(qkvof)并不如只插注意力层(qkvo) → 协同增强的主要收益来自注意力层的四类线性权重。
七、个人心得
1. 可能的不足
这张图展现了LoRA 增量权重的基本形式,有助于您理解下面我对CoRA框架提出的不足
对于超参数 α
LoRA 中 α 对增量权重的控制作用
- α 的作用:控制增量矩阵 BA 添加到原始权重时的幅度,平衡预训练模型的知识与新任务的适应。
- 1/r:保证在不同 r 下,ΔW 的量级保持一致,使训练更稳定。
- 作者观点:α 不必因为改变 (r) 而重新调节学习率等超参,α 起到稳定超参数的作用。
对于秩 r
原LoRA论文中:不同 r 对性能的影响
- LoRA 原作者的实验表明:非常小的 (r)(如 1, 2)也能带来不错的性能。
- 结论:提高 (r) 不一定能提升效果,取决于任务和数据集。
- 关键问题:如何选择合适的 (r),取决于模型是否见过类似的数据。
- 本文局限:CoRA 的作者没有详细说明 (r) 的选择逻辑,也未使用 α 来进一步稳定模型。
2. 思考:注入位置的选择
原LoRA论文中:不同权重矩阵注入的效果对比
- 原LoRA作者的对比实验显示:
- 仅在 W_q 或 W_k 插入,性能明显下降。
- 在 (W_q, W_v) 插入,效果最佳。
- 解释:即使在 r=4 时,ΔW 已捕获足够信息,此时 “插更多位置” 不如 “精挑关键权重”。
- 本文联系:CoRA 中尝试的注入组合(qkvof, qkvo, qkv, qko, qk)可类比原始 LoRA 的发现:
- 并不是插得越多越好,关键在于关注能有效提升协同感知的权重。
个人总结:
CoRA 的思路启发我们关注 参数高效注入的边界 —— 小秩 r 已足够稳定,α 可以减少调参成本,而注入位置的选择比数量更重要。换句话说,轻量但精准的修改 > 大规模粗暴注入
更多推荐




所有评论(0)