快手生成式推荐论文:《OneRec: Unifying Retrieve and Rank with Generative Recommender and Preference Alignment》

背景

现在的推荐系统存在两个问题:

1. 为了平衡效果和效率,现在的推荐系统都是采用多阶段级联的架构:召回->粗排->精排,这种漏斗型框架的问题是:前链路会制约后链路的上限(一旦前链路过滤了某个item,这个item就不会出现在后面的链路中,即使后链路认为这个item收益很高)

2. 现在推荐系统基本都是point-wise建模的方式,没有考虑到同个session内item之间的互相影响(一次请求展示的所有item被视为同个session)

为了解决这些问题,快手提出OneRec:

1. 只需一个阶段就能得到最终推荐结果

2. session-wise建模,考虑了同个session内item之间的互相影响

 

方法

模型结构

模型整体结构采用了类似T5模型的encoder-decode结构,并且采用了MoE结构通过稀疏激活机制扩展模型容量,同时保持计算效率,Encoder输入用户的历史正向行为序列,Decoder生成一个session内的推荐item。这个Encoder-Decoder模型采用了MoE进行高效的参数量扩展。

模型进行了2个阶段的训练:

  1. 第一阶段采用基础的next item预测任务
  2. 第二阶段采用DPO进行偏好对齐

特征处理

模型输入的是历史用户历史正向行为序列对应的多模态embedding

正向序列的定义如下:

  1. session长度必须大于等于5
  2. 用户总观看时长超过一定阈值
  3. 用户有正向行为,如点赞、收藏、分享

多模态embedding通过预训练好的多模态模型RQ-VAE模型处理得到,每个item会得到L个embedding,最终会平铺这些embedding输入encoder中,并且会在会在每个item前面增加起始标志,最终encoder的输入可以表示为:

\[ \begin{align*} \bar{\mathcal{S}} = \{ & \boldsymbol{s}_{[\text{BOS}]}, \boldsymbol{s}_{1}^1, \boldsymbol{s}_{1}^2, \cdots, \boldsymbol{s}_{1}^L, \boldsymbol{s}_{[\text{BOS}]}, \boldsymbol{s}_{2}^1, \boldsymbol{s}_{2}^2, \cdots, \boldsymbol{s}_{2}^L, \\ & \cdots, \boldsymbol{s}_{[\text{BOS}]}, \boldsymbol{s}_{m}^1, \boldsymbol{s}_{m}^2, \cdots, \boldsymbol{s}_{m}^L \} \end{align*} \]

 

next-token训练

采用交叉熵损失来预测next-item,只到生成指定长度的session:

\[ \begin{align*} \mathcal{L}_{\text{NTP}} = -\sum_{i = 1}^{m} \sum_{j = 1}^{L} \log P( & \boldsymbol{s}_i^{j + 1} \mid [\boldsymbol{s}_{[\text{BOS}]}, \boldsymbol{s}_1^1, \boldsymbol{s}_1^2, \cdots, \boldsymbol{s}_1^L, \cdots, \\ & \boldsymbol{s}_{[\text{BOS}]}, \boldsymbol{s}_i^1, \cdots, \boldsymbol{s}_i^j]; \Theta). \end{align*} \]

 

dpo偏好对齐优化

推荐场景不像nlp,一次请求只能有一个session的反馈数据,我们无法获得直接的偏好数据,为了解决这个问题,论文中先训练了一个RM模型,然后用前一步预训练的OneRec模型采用beam search方式生成多个推荐结果,并用RM模型打分,用最优得分和最差得分构建一个偏好对,最后使用DPO算法优化预训练的OneRec模型

大概流程可以分为3步:

1. 训练Reward Model

论文中没没有详细介绍Reward Model的模型结构和输入,猜测是输入用户行为序列,采用target-attention + self-attention + multi_task_tower 预测ctr、vtr、wtr、ltr等目标:

\[ \begin{align*} \hat{r}^{swt} &= \text{Tower}^{swt}(\text{Sum}(\boldsymbol{h}_f)), \hat{r}^{vtr} = \text{Tower}^{vtr}(\text{Sum}(\boldsymbol{h}_f)), \\ \hat{r}^{wtr} &= \text{Tower}^{wtr}(\text{Sum}(\boldsymbol{h}_f)), \hat{r}^{ltr} = \text{Tower}^{ltr}(\text{Sum}(\boldsymbol{h}_f)), \\ &\text{where } \text{Tower}(\cdot) = \text{Sigmoid}(\text{MLP}(\cdot)) \end{align*} \]

并采用交叉熵损失训练:

\[ \mathcal{L}_{\text{RM}} = - \sum_{swt,\dots}^{xtr} \left( y^{xtr} \log \left( \hat{r}^{xtr} \right) + (1 - y^{xtr}) \log \left( 1 - \hat{r}^{xtr} \right) \right) \]

2. 输入用户正向行为session,采用beam search方式生成多个推荐结果,并用RM模型打分,用最优得分和最差得分构建一个偏好对

3. 用dpo算法优化OneRec模型

 

疑问

1. 快手短视频候选得有几十亿吧,next-token的方式是在全量候选中做训练?

2. reward模型可能会限制系统的效果上限(因此猜测reward模型肯定不是只用了正反馈session训练的,要不然大部分item都没被训练到)

posted @ 2025-04-23 21:01  AI_Engineer  阅读(1654)  评论(0)    收藏  举报