文章链接:https://arxiv.org/pdf/2506.13695
机构:快手
发布时间:2025.06
参考文献:
Copyright (c) Wang-Luning. All Rights Reserved.
OneRec Technical Report在模型架构、RL机制、系统优化等方面提供了更详细的细节,且在很多方面相比于原始的OneRec进行了方法优化。
传统级联系统存在的问题:
算力碎片化:级联系统的计算效率很低,快手系统中在线服务时超过50%的资源浪费在了通信和存储上,而没有用到计算上,MFU仅为个位数,而LLM的MFU能达到约40%-50%。
目标冲突:如何定义“好”的推荐结果是没有标准答案的,会导致如下冲突:
多个目标下的冲突:快手系统中存在上百个相互竞争的目标,包括了用户、创作者、平台生态等多方的利益。
多个stage之间的建模目标冲突:不同stage的模型结构和大小不同,例如精排阶段的效果会受制于召回的结果。因此统一的优化目标和模型结构能够提升系统整体的连贯性。
其目前的结构难以应用当前LLM领域的scaling、RLHF等先进技术。
OneRec实现了端到端的简单结构,可以针对一个最终目标进行直接优化。其通过优化计算效率并减少不必要的通信和存储开销达到了20%多的MFU。其还通过设计更好的RL策略来进一步提升了实践中的效果。
SID的构建:
过往工作如TIGER仅基于物品的多模态特征embedding来构造SID,只关注了内容本身,忽略了物品之间的协同信号,难以利用视频间的共现信息来鼓励协同意义上类似的视频的SID变得类似。因此OneRec中通过将视频的多模态特征和协同信号进行集成,不仅使得内容类似的视频生成类似的SID,还会鼓励在协同意义上类似的视频生成类似的SID,从而采用RQ-KMeans来生成高质量的层次化SID。
具体而言,将在协同意义上类似的(具有强共现信息的)item pairs的多模态表征进行对齐训练,从而使得共现的视频的多模态表征能够尽可能类似,从而使得它们后续生成的SID也能尽可能接近。构建视频多模态表征、构建共现pair、对齐pair中两个视频的表征的过程如下:
多模态表征的构建:
对于每个视频,其表征中包含了多种模态的信息:标题文字、tag、音频ASR(speech to text)、图片OCR(image to text)、封面图、5个均匀采样的视频帧。使用MiniCPM-V-8B来处理这些多模态输出,产生
然后,使用一个
也即,在每层中都把原始的多模态表征
最终这4个可学习query tokens的输出即为该视频的多模态表征压缩后的版本,记为
Item Pairs的构建:
通过两种方式构造具有共现信息的item pairs,从而构建高质量的item-pair集
通过user-to-item召回来构建:对于每个用户,取其一个点击过的正样本,并将其和用户最新正向行为序列中在协同意义上最接近的样本进行配对
通过item-to-item召回来构建:将具有较高协同相似度分数的items进行配对,例如使用Swing分数
Item-Pair中的视频的表征的对齐训练:
对于某个Item-Pair中两个视频
其中
另外,为了保持内容理解能力,避免生成的表征只关心协同信息而忽略了表征中对于内容信息本身的理解,还额外对于视频标题文字做了一个NTP loss,使用LLaMA3模型作为decoder:
其中
通过上述过程抽象和对齐训练后的视频表征
模型架构与输入特征工程:
OneRec采用Encoder-Decoder架构,Encoder负责捕捉并抽象出用户的历史行为模式,Decoder负责自回归地生成用户接下来可能喜欢的视频SID。
Encoder输入的用户行为序列包含了4种不同的embedding,用来从不同角度捕捉的用户历史交互模式:
用户静态特征(User Static Pathway):
生成一个包含用户画像特征的表征,包含uid、年龄、性别等。每个特征初始时都具有一个dim=64的embedding:
可见,用户画像特征在模型输入时用1个token来表征。
短期行为表征(Short term Pathway):
用于处理最近
对于每个视频而言,每种信息同样含有一个自己的embedding(
可见短期行为表征在模型输入时用
正向反馈表征(Positive-feedback Pathway):
处理最近的
终身行为表征(Lifelong Pathway):
处理超长的用户历史交互序列(能达到10万个视频)。由于直接把每个视频当成一个token输入模型的话会使得输入序列过长,带来过大的attention开销,因此这里采用两阶段的层次化压缩策略来处理:
行为压缩:
首先对于历史序列中全部视频根据多模态内容进行聚类,并为每个cluster选出一个“代表视频”。
具体而言,设置一个比历史序列长度小若干数量级的cluster数量(例如序列长度为
特征聚合:
接下来构建每个cluster的代表性特征。对于vid、aid、label等稀疏类别特征,直接取该cluster的代表视频的特征。对于tag、timestamp、playtime、duration等连续特征,对cluster中所有特征的取值做平均。
至此得到了每个cluster的全部“代表特征”。
对于长度为
此时得到的长期历史行为表征为
然后,使用可学习query数量为
最终得到压缩后的长期行为表征
最终,将上述4种embedding tokens堆叠成一个序列后,添加可学习位置编码
Encoder最后一层的输出
另外,可以发现Encoder的输入并非SID,而是若干种embedding tokens构成的序列。这可能是因为Encoder的作用是充分捕捉历史信息而不是做生成,因此使用信息丰富的多层次embedding作为输入要比干巴巴的SID更好。而Decoder中则是基于SID做自回归生成的,它的输入和输出都是SID序列
Decoder采用了point-wise的生成策略,这一点和原始的OneRec使用session-wise生成的策略是不同的。每个视频的SID之前同样也会添加一个可学习的BOS token。训练时也是直接在一个video的sid上做自回归训练,而不是拿一个session作为一个序列进行训练。对于训练集中的视频
基于强化学习的偏好对齐:
预训练过程本质上是通过NTP训练来拟合曝光样本的空间分布,拟合现有推荐系统的结果,难以突破现有推荐系统的上限。因此在后训练阶段引入RL来对齐用户偏好。
不同于原始OneRec采用DPO,这里使用真正的RL来微调模型,使用preference reward来对齐用户偏好信息。另外,引入format reward来确保生成结果尽可能合法(生成对应真实视频的SID),同时也引入了一些其他的工业场景奖励(如扶持新内容、打压营销号等)。
用户偏好对齐:
过往工作中通常将CTR、点赞、观看时间等指标通过加权直接组合成一个分数来作为目标。然而手动调节加权权重很困难,不仅不精准而且无法做到个性化,还可能导致不同目标间的冲突。
因此,这里使用一个神经网络来学习个性化的偏好分数,称为P-Score。其类似于一个精排模型,输入的是用户表征和候选item,模型本身基于SIM架构(target attention)。模型含有多个辅助输出塔,对应CTR、点赞等各个指标,它们会在训练时和对应的ground truth做BCELoss,作为辅助训练目标。进一步,各个任务塔中的最后一层hiddent state会和用户、物品特征一起输入到一个MLP中,并输出一个P-Score作为综合的偏好分数。该MLP的训练loss是P-Score(
可见,通过调整加权系数
RL训练时,每轮迭代中使用old model为每个用户
其中
ECPO是GRPO的一种改进,其对于负优势情况进行了更严格的梯度截断,目的是让训练更稳定。在原始GRPO中,
因此,ECPO对于负优势且
生成格式的奖励:
在实践中,SID的数量(最大取到
引入强化学习后会加剧产生非法SID的问题。这是因为负优势导致的挤压效应,强化学习后模型的输出分布发生较大变化。RL过程中,
为了解决这个问题,引入格式奖励机制,鼓励模型生成合法的SID。从old model生成的
合法性RL学习使用的目标函数也是ECPO,只不过把优势换成了这里的合法性优势值
工业场景奖励:
推荐结果不仅要考虑用户偏好,还要考虑社区建设、商业推广、新视频助力等其他因素。在传统DLRM中,会在多个级联组件中手动设置各种策略,导致整个系统很复杂且可能出现冲突问题等。在OneRec中则只需要设置一些和它们相关的奖励,并使用RL算法来对齐模型在这些方面的偏好即可。
另外,不同于原始OneRec中使用session-wise的打分,这里抛弃了session-wise的概念,使用point-to-point的方式,也即每次给一个单独的视频打分。
后训练:
在实践中,后训练阶段使用实时数据流进行流式训练,同时进行拒绝采样微调(Reject Sampling Fine-Tuning, RSFT)和RL:
RSFT指的是,排除掉播放时长最低的50%的曝光数据后,使用那些播放时长较高的曝光数据进行NTP loss的持续微调训练,从而捕捉用户的实时兴趣变化。该过程使用了减小的lr。
为了最大化计算资源利用,将RL生成样本的任务和训练任务解耦,使用一个外部推理服务专门用于做RL样本生成。从RSFT数据中选取1%的用户来进行RL,每个用户使用外部推理服务生成512个样本,并且使用奖励模型依次生成它们的reward,然后把数据返回给训练任务(来计算梯度并更新模型参数)。训练任务每1000步就将更新后的模型参数通过消息队列发送给外部推理服务。