CausalDPO:推荐里的 DPO,不只会学偏好,也会把环境混杂一起对齐

背景

补完 DPO4RecDRPOFlexRecSearchLLM 之后,站里对推荐后训练已经能分出不少问题位:

  1. preference pair 是怎么构造出来的
  2. 离线日志先该过滤什么,再学什么
  3. LLM-RL 到底在对齐单一目标、多目标还是业务 reward
  4. reward 最终被谁消费,是 ranker、reasoner 还是搜索策略

但这一轮继续做增量检索时,我发现这里还缺一个比“pair 怎么造”“reward 怎么配”更早的因果位:

推荐里的 DPO,到底会不会把环境偏差本身一起对齐进去

换句话说,问题不只是:

  1. chosen / rejected 有没有噪声
  2. offline log 是不是重尾
  3. reward 有没有业务偏置

还包括:

这对 chosen / rejected,到底是稳定偏好,还是某个环境下暂时成立的伪相关

这一轮我直接用 arXiv API、arXiv 摘要页、HTML、PDF 与 GitHub API 做定向核验,再补一轮中文检索,最终锁定:

  1. Causal Direct Preference Optimization for Distributionally Robust Generative Recommendation
  2. 2603.22335 arXiv HTML
  3. 2603.22335 PDF
  4. user683/CausalDPO

核完之后,我更愿意把它记成:

推荐里的 DPO,不只会学偏好,也会把环境混杂一起放大

核心判断

这条线真正新增的,不是“又一个 DPO 变体”,而是 environment confounder

DRPO 关注的是:

离线 generative recommendation 先要从脏日志里筛出值得学的样本

CausalDPO 问的则更前一步:

就算 pair 本身干净,这个 pair 背后的偏好关系是不是被环境条件扭曲过

也就是说,这篇 paper 真正补出的不是一个更细的 loss trick,而是一个此前站里没单独命名的 owner:

environment confounder

如果不把这层单独记出来,后面很容易继续把下面几类问题混写成一种“偏好对齐不稳”:

  1. hard negative / noisy log
  2. objective conflict
  3. reward governance
  4. environment-driven spurious preference

CausalDPO 的判断很直接:

DPO 在推荐里不只是可能学偏,它还可能把环境偏差继续放大

它修的问题不是抽象的 OOD,而是 DPO amplifies spurious correlations

这篇 paper 最值得单独记的第一层,是作者没有只说“推荐会遇到分布漂移”,而是直接把矛头对准 DPO 本身。

摘要、Section 3.1 和附录都在反复证明一件事:

如果训练数据里的 chosen / rejected 已经带着 popularity、temporal drift、exposure bias 这类环境混杂,DPO 会进一步强化这种相关性

论文给的例子也很典型:

  1. 疫情期间医疗、健身、娱乐用品会一起涨
  2. 平台活动、政策变化、季节因素会改写交互分布
  3. item popularity 和 exposure 本身也会变成 confounder

这意味着推荐里的 preference pair 不能再被默认理解成纯净监督:

chosen > rejected 可能同时意味着“用户更喜欢”,也可能意味着“这个环境下它更容易被看见、更容易被点击”

Figure 1 还把这个风险写得很具体:DPO 训练后,高流行度 item group 的交互频次继续上升,长尾 group 继续被压低。

因此这条线的真正新意不是“做 OOD benchmark”,而是把 DPO 的主矛盾重新写成:

preference alignment 可能会主动放大 environment-driven shortcut

它给出的系统答案不是显式环境标签,而是 soft clustering -> backdoor adjustment -> invariance regularization

这篇 paper 的方法设计很值得记,因为它没有要求训练集自带明确的 environment label。

它的结构更像三层拼接:

  1. 先从模型 hidden representation 里抽 causal feature
  2. DBSCAN 先做初始 cluster,再用距离 softmax 得到 pseudo-environment 概率
  3. 再把这个 latent environment 分布接到 backdoor adjustmentMMD invariance regularization

也就是说,这条线真正不是在说:

把时间戳、曝光位、场景 ID 明牌喂给模型

而是在说:

就算环境标签不可见,也可以先从表示空间里反推出伪环境,再约束偏好学习在这些环境之间保持稳定

这会逼着 Story Lab 再补几列:

  1. latent-environment inference
  2. causal adjustment locus
  3. invariance regularization

否则后面把 RW / D3 / SPRec / DRPO / CausalDPO 放在一起时,还会继续把它们都写成“在做 OOD 或 debias”的同一类方法。

这条线最有价值的,不是只在一个偏移上涨点,而是给了四种 shift contract

论文实验最值得留下来的,不是某一个最好结果,而是它把 OOD 明确拆成四种 shift:

  1. popularity shift
  2. temporal shift
  3. exposure shift
  4. mixed shift

这件事很重要,因为它让“稳健性”不再只是一个泛标签,而开始对应不同数据生成机制。

Table 1 里三组结果已经很清楚:

  1. Yelp2018 的 popularity shift 上,CausalDPOH@10 / N@10 做到 1.53 / 0.77,明显高于最强 baseline SPRec1.02 / 0.61
  2. ML-10M 的 temporal shift 上,CausalDPO 做到 0.61 / 0.35,高于 SDPO / SPRec 这组 0.55 / 0.30
  3. Book-Crossing 的 exposure shift 上,CausalDPO 做到 0.64 / 0.37,也高于 RW0.59 / 0.29BIGRec0.53 / 0.30

正文还把平均增益写得很直:

  1. popularity shift 相对最强 competitor 平均增益 22.29%
  2. temporal shift 平均增益 24.06%
  3. exposure shift 各指标增益区间 8.47%23.33%

Table 4 的 mixed shift 更值得单独记,因为它说明这条线不只是“单偏移专杀器”:

  1. H@10 从最强 baseline 的 0.51 拉到 0.53
  2. N@100.22 拉到 0.24
  3. H@200.76 直接拉到 1.51
  4. N@200.28 拉到 0.47

这意味着这条线不该只被记成一个 popularity debias 或 temporal adaptation 方法,而更像:

preference alignment under multi-shift contract

它还有一个很值得单独记的边界:robustness 不一定要交出明显 IID tax

很多稳健方法都会默认给人一种印象:

你在 OOD 上更稳,往往要拿 IID 表现去换

CausalDPO 这里的一个重要信号是,它没有表现出明显的 IID tax

Table 3 里:

  1. ML-10M 上,CausalDPOH@10 / N@100.79 / 0.48,高于 RW0.77 / 0.45
  2. Book-Crossing 上,CausalDPOH@10 / N@101.77 / 0.99,高于 SASRec1.70 / 0.90

Section 3.5 还直接写出:

即便 OOD 假设不完全满足,MMD regularizer 仍会通过平滑不同 pseudo-environment 的输出,削弱环境特异噪声

这会让后续方法表里除了写 shift contract,还最好再补一列:

IID tax

否则后面很容易默认把所有 causal / robust 路线都理解成“拿 ID 性能换 OOD 稳定”。

Table 5 还补出了另一层:这不是只服务一个 loss,而像 causal regularization backbone

这篇 paper 还有一个很关键的附录信号:

它不是只证明自己的 loss 有效,还证明这套 causal regularization 可以接到其他 DPO 变体后面

Table 5 里:

  1. Dr.DPOML-10M 上的 H@10 / N@100.17 / 0.20,加上 causal regularization 后到 0.58 / 0.33
  2. CPO0.41 / 0.250.52 / 0.31
  3. SimPO0.29 / 0.210.36 / 0.27
  4. 最终 CausalDPO 自己做到 0.61 / 0.35

作者的结论也很明确:

问题不只是某个 DPO 变体不够强,而是它们普遍没有系统建模 environment confounder

这件事很关键,因为它说明这里的主角不只是一个新名字,而是:

causal regularization as a reusable backbone

公开边界要写准:repo 不是 placeholder,但离低门槛复现还差一截

这条线的公开边界比很多 paper-first 路线强,但也没有强到可以直接写成 turnkey reproduction。

GitHub API 能稳定核到:

  1. 官方仓 user683/CausalDPO 创建于 2025-05-09 13:46:03 UTC
  2. 最近一次 push 是 2025-07-17 03:28:00 UTC
  3. 根目录已经公开 causal_dpo.pysft.pyinference.pyevaluate.pytrainer/dataset/prompt/
  4. trainer/causal_dpo_trainer.py 里能直接看到 DBSCANsoftmax soft clustering 和 MMD loss

但 repo 也有明显实现漂移:

  1. README 写自己做了 Movielens-10M / Yelp2018 / Book-Crossing
  2. 实际公开 tree 里只有 dataset/ml-1mprompt/movie.txt
  3. *.sh 里保留了大量 base_model_path/datasetsave_checkpoint/... 这类本地占位
  4. README 说可以下载 fine-tuned checkpoint,但并没有给出实际下载链接

所以更准确的定位不是“已开箱即用”,而是:

official workflow code with implementation drift

证据与来源

  • 一手论文入口:CausalDPO arXiv 摘要页arXiv HTMLPDF
  • 时间与作者:arXiv 摘要页显示论文提交于 2026-03-21;PDF 元数据可回溯到作者 Chu Zhao / Enneng Yang / Jianzhe Zhao / Guibing Guo
  • 关键机制:Section 3.2-3.3 直接写出 backdoor adjustmentsoft clusteringDBSCAN 初始化、pseudo-environment 推断与 MMD invariance regularization
  • 关键结果:Table 1popularity / temporal / exposure shiftTable 4mixed shiftTable 3IID 对比,Table 5Dr.DPO / CPO / SimPO + causal regularization
  • 复杂度边界:Table 6 显示 CausalDPOBook-Crossing2971s / epoch,相对 DPO2482s 约多 19.70%,但正文同时写出平均性能提升约 205.9%
  • 公开仓入口:user683/CausalDPO;GitHub API 可核到创建时间、最近 push 时间、根目录结构与 dataset/ml-1m 的实际公开状态
  • 中文传播层:截至 2026-03-25,继续补做论文全标题中文检索、site:zhihu.comsite:weixin.qq.comsite:xiaohongshu.comxhslink 检索后,稳定结果仍主要停留在 arXiv 和 GitHub 原始入口,没有拿到稳定高价值中文机制稿或可复用小红书线索

下一步

  • CausalDPO / DPO4Rec / DRPO / SPRec / SDPO / RosePO / RW / D3 压到同一张 OOD preference alignment 观察表里,新增 environment confounder / latent-environment inference / invariance regularization / shift contract / IID tax
  • 把这条线和 DRPO 明确拆开:前者解决“先学什么样本”,后者解决“pair 本身是否带着环境伪相关”
  • 继续追中文传播层;如果后续出现稳定的中文机制稿、作者解读、讲义或 xhslink,再补一轮传播观察