1:论文背景
标题:基于生成式推荐模型与偏好对齐的召回排序统一框架
作者团队:快手
研究内容:将原来的召回->粗排->精排,替换成了端到端的生成式推荐。在模型的构建上,引入了多层聚类、MoE、DPO等的方法
附上一个很好的源自知乎的技术报告解读:https://zhuanlan.zhihu.com/p/1919784812291526799
2:论文动机
不足1:图(b)展示了传统的集联推荐架构,包括召回(recall)、粗排(pre-ranking)和精排(ranking)三个阶段。每个阶段独立运作,前一阶段的性能上限限制了后续阶段的性能,从而限制了整个系统的性能
不足2:传统的生成式模型即使应用,大多数也仅在推荐系统中作为召回阶段的选择器,其推荐准确性尚未达到多阶段排序系统的水平
图(a)是 OneRec 提出的端到端生成架构,它打破了分阶段设计的限制,直接使用一个 encoder-decoder 模型,输入用户行为序列后,一次性生成最终推荐视频列表。
3:方法
3.1:短视频向量编码
系统将每个视频v_i描述为一个多模态嵌入向量e_i,该向量整合了视频的标题、封面图、标签等内容特征,过去的生成式推荐方法通常会采用 RQ-VAE(Residual Quantized Variational Autoencoder)将嵌入向量e_i编码成语义 token。然而,这种方式存在“沙漏效应”:由于 token 分布严重不均,部分 token 被过度使用,而大多数 token 几乎从不出现,限制了模型表达能力,也容易导致训练不稳定。
3.1.1:方法描述
作者采用了分层残差量化机制,设定了多层的\{C^1,C^2,......C^L\}(每一层的codebook可以理解为聚类中心集合),每一层codebook对前一层的表征残差进行聚类,第一层输入就是多模态嵌入向量本身。每个嵌入向量通过多层 K-Means 编码,逐步生成一组离散语义 token
r^1_i = e_i,从C^1选择最近的中心点c_{s_i^1}^1,得出s_i^1与r_i^2
通过r_i^2,从C^2选择最近的中心点c_{s_i^2}^2,得出s_i^2与r_i^3
不断循环
最终一个多模态嵌入向量e_i被表示为一个token序列(s_i^1,s_i^2......s_i^L)
3.1.2:Balanced K-Means 训练方法:
每层codebook通过Balanced K-Means来训练聚类中心,以第一层为例,算法的输入是:视频集合\mathcal{V},和聚类数量K,作者将\mathcal{V}平均划分为K个子集,每个子集大小是w=|\mathcal{V}|/K
初始化阶段:随机选择K个向量作为初始中心点,即C_l=\{c_1^l,......c_K^l\}
聚类迭代过程:
初始化一个未分配的视频集合U
然后对每一个 clusterk做以下步骤:
计算U中所有视频到当前中心点c_K^l的距离
按距离从近到远排序
选择前w个最接近的视频分配给当前 cluster
用这w个视频的平均值更新中心点c_K^l
最后把这w个视频从U中移除
终止条件:当所有 cluster 的分配都不再发生变化时(也就是“收敛”了),循环结束
与传统 K-Means 不同,Balanced K-Means 会强制让每个 cluster 拿到相同数量的视频,这保证了所有 token 都能被均匀使用
3.2:生成会话列表
模型输入用户行为序列,输出5-10个优质推荐视频
输入token序列集合:H_u=(s_1^1,s_1^2,......s_1^l),(s_2^1,s_2^2,......s_2^l),......(s_n^1,s_n^2,......s_n^l)
输出token序列集合:S=(s_1^1,s_1^2,......s_1^l),(s_2^1,s_2^2,......s_2^l),......(s_m^1,s_m^2,......s_m^l)
3.2.1:端到端模型解读
编码器
将每个视频v_i代表的多模态嵌入向量e_i通过3.1中的方法,L层聚类处理后,变为长度为L的离散token,即(s_i^1,s_i^2......s_i^L)
用户的历史行为序列(多个视频)分别处理后,拼接成一个 长token 序列,每个视频用SEP分隔,作为 Encoder 的输入:
H_u=(s_1^1,s_1^2,......s_1^l),(s_2^1,s_2^2,......s_2^l),......(s_n^1,s_n^2,......s_n^l)
使用transformer架构对H_u编码得到一个用户兴趣表示序列H
H=encoder(H_u)
解码器
同样是transformer架构,前馈神经网络变为了MOE层
训练阶段,使用真实的推荐 session(优质序列),将每个视频编码为L个 token,(s_1^1,s_1^2,......s_1^l),并在每个视频前添加起始标记BOS分隔
优质序列特点:
用户在一个会话中实际观看的短视频数量大于或等于5个
用户观看会话的总持续时间超过一定阈值
用户表现出互动行为,例如喜欢、收集或分享视频
使用Next Token Prediction Loss训练模型,最小化生成 token 序列(每个视频)与真实推荐 token 序列之间的差异:
3.2.2:强化学习偏好对齐训练
构建一个奖励模型(Reward Model, RM),让其学会自动评估一个推荐 session 的“质量”,然后利用这个 RM 来对模型生成的多个候选推荐进行打分,从中选出“好”的(chosen)和“不好”的(rejected),形成偏好对比对
采用DPO,通过 pairwise ranking 的方式直接优化生成策略
3.2.2.1:奖励模型训练
输入:用户u与会话 session S=v_1,v_2,......v_m
对于 session 中的每个视频v_i,模型会融合用户向量生成一个目标感知向量:
e_i=v_i\odot u
经过融合后的所有视频表示构成一个向量集合h=e_1,e_2,......e_m
通过注意力机制建模构成信息表征h_f:
设计了多个预测任务,分别关注用户的不同偏好行为,通过不同的 MLP 模块来分别预测这些偏好行为
观看时间:session watch time (swt)
观看概率:view probability (vtr)
关注概率: follow probability (wtr)
喜欢概率:like probability (ltr)
通过简单的二元交叉熵损失训练奖励模型:
3.2.2.2:迭代偏好对齐
给定当前时间步的 OneRec 模型M_t,为每个用户u生成N个不同的推荐 session 候选,使用的是 Beam Search 采样:
通过奖励模型从这N个候选序列中选出得分最高的S_u^w和得分最低的S_u^l构成一个偏好对比对:
使用的是 DPO(Direct Preference Optimization)损失函数,它通过比较两个推荐结果的相对概率,来实现模型偏好上的优化:
输入:Beam Search 采样生成的序列数N,奖励模型RM, OneRec 模型M_t,DPO更新概率r_{DPO},epoch总数,每个epoch的样本集合
每一轮训练中,模型会遍历样本集合 N_{sample},对于每一个样本,根据预设概率r_{DPO}决定是否DPO微调:
决定微调:
不决定微调:
4:实验
4.1:离线实验
离线的实验指标
基线方法:包括 SASRec、BERT4Rec、FDSA 和 TIGER 等逐点方法,以及 DPO 及其变体(如 IPO、cDPO、rDPO、CPO、simPO 和 S-DPO)
观看时间:session watch time (swt)
观看概率:view probability (vtr)
关注概率: follow probability (wtr)
喜欢概率:like probability (ltr)
DPO更新概率r_{DPO}的消融实验
r_{DPO}加一倍,GPU资源也加一倍,但是0.01的r_{DPO}已经达到了最好效果的95%
所以作者离线实验选择r_{DPO}为0.01
不同模型参数的消融实验
0.05B->0.1B->0.2B->0.5B->1B,分别提升了14.45%,5.09%,5.70%,5.69%
目的:分析 OneRec 在不同层的预测分布,以验证偏好对齐策略的效果
对每个层的语义 ID(共8192个) 的 softmax 输出进行可视化,标记出具有最高奖励值的项目的语义 ID
OneRec+IPA 在预测分布上显示出显著的置信度变化,表明偏好对齐策略有效地促使基础模型生成更符合用户偏好的结果
第一层的预测分布显示出更高的不确定性(熵为 6.00),而后续层的分布逐渐集中(第二层平均熵为 3.71,第三层熵为 0.048),这归因于自回归解码机制,后续层受益于累积的上下文信息,从而约束了决策空间
4.2:线上ab实验
1%流量测试
评估指标:观看时间,平均观看时长