首页 > 教程攻略 > ai资讯 >LEARN:百川大模型在快手推荐中的应用

LEARN:百川大模型在快手推荐中的应用

来源:互联网 时间:2026-08-24 14:02:30

聊起这两年的推荐论文,冷启动和长尾问题几乎是绕不开的话题。就像前几年大家一窝蜂扎进序列模型和多目标优化里一样,现在这些问题的解决方案,外壳也从时序模型一路换到了对比学习、大语言模型。说到底,问题其实一直都在,只不过我们现在手里有了更好用的工具去解决它。这种“鸡生蛋、蛋生鸡”的循环,总是那么迷人,又那么处处显露。

关于冷启动和长尾推荐,传统模型最头疼的地方在于对ID的依赖。说白了,大多数模型学到的价值,就是那个ID对应的Embedding向量。一旦数据量不够,效果自然就大打折扣。

所以今天来分享一篇快手的工作,他们把百川大模型应用到了推荐系统中。

  • 论文:Knowledge Adaptation from LLM to Recommendation for Practical Industrial Application
  • 机构:快手
  • 链接:https://arxiv.org/pdf/2405.03988
  • 会议:从论文模板看,是标准的ACM格式。

LLM-Rec大模型推荐

大型语言模型(像GPT-3,这里用的是Baichuan2-7B)在处理和理解自然语言上确实表现出色。把它作为基座,本质上是看中了它身上那种更普世的知识提取能力。这样一来,推荐系统就能更好地理解物品描述,提高推荐的准确性和多样性。

Baichuan2-7B:

https://huggingface.co/baichuan-inc/Baichuan2-7B-Base

把大语言模型引入推荐,前几年的工作里也一直有。比如Bert4Rec、RankT5、RecFormer这些,都算得上是早期的尝试。具体到落地方式,行业里大致分成两派:

  • 冻结LLM的参数,只让模型适应推荐领域的数据

    :这种做法是借助LLM来生成物品的内容Embedding。通常是通过处理物品的文本描述(标题、说明、评论等),来捕捉物品的语义信息。Chat-Rec就是典型代表。
  • 用推荐领域的特定文本数据集对LLM进行微调

    :这种方法更直接,利用LLM来捕捉用户的行为序列。通过设计巧妙的提示词(prompt),让LLM去学习用户和物品之间的潜在关系,在预测任务中理解用户的偏好变化。TallRec在这方面做了示范。

但这篇论文认为,以上两种方式本质上都是在把LLM的广域能力和推荐领域强行缝合(也就是Rec-to-LLM)。这样做有个隐患:随着推荐任务的学习,模型可能会遗忘它在预训练阶段学到的那些通用知识,出现所谓的“灾难性遗忘”。

于是,他们提出了一个叫LEARN的新框架(Llm-driven knowlEdge Adaptive RecommeNdation)。这个框架的目标很明确:让大模型和推荐系统高效融合,但更像是一种特征提取。LEARN通过双塔结构(用户塔和物品塔),把LLM生成的Embedding作为输入,来改进推荐性能。

LEARN

LEARN模型的结构不复杂,就是两个塔:用户塔(User Tower)和商品塔(Item Tower)。每个塔里又包含两个核心模块:内容Embedding生成模块(CEG)和偏好理解模块(PCH)。

商品文本描述

我们首先得给每个商品做文本描述,包括它的标题、品类、品牌、价格、关键词和属性:

内容Embedding生成模块(CEG)

这一步的原理比较简单。先通过主谓宾结构把商品的描述信息转成一个完整的句子,然后扔进大模型,提取出所有token的高维向量,再经过一个均一池化操作,最终生成一个固定的Embedding。关键在于,在训练阶段,LLM是冻结的,目的就是为了防止它遗忘掉那些广域知识。

偏好理解模块(PCH)

这个模块可以看作是在生成用户的Embedding。具体做法是:把用户历史交互过的商品的那些内容Embedding,按顺序组成一个序列,输入到Transformer里,进行时序预测。简单来说,就是通过用户看过什么,来推断他接下来会对什么感兴趣。训练阶段,这里用了一个自监督的对比学习目标,目的是让模型能更清晰地分辨用户偏好的商品和不感兴趣的商品。

历史序列和目标序列

行为序列的处理也很直观。就是把当前曝光时刻作为一个分界点,之前的归为历史序列,之后的当作目标序列。对于第i个用户,可以这样定义:

  • 历史交互序列:U_hist_i = {Item_i1, Item_i2, ..., Item_iH}
  • 目标交互序列:U_tar_i = {Item_i(H+1), Item_i(H+2), ..., Item_i(H+T)}

用户塔和商品塔

用户塔就是前面说的PCH模块。而商品塔呢,论文里给了三种样式:

用户塔、商品塔

  1. Variant 1

    :这个变体跟用户塔共享了相同的架构和模型权重,但输入的是用户的目标交互序列。它的好处是,通过因果注意机制(causal attention)来处理用户历史交互,能让用户和商品的Embedding在同一个空间里对齐。
  2. Variant 2

    :使用自注意机制(self-attention mechanism),只关心商品本身,独立处理每个商品,不考虑商品之间的先后顺序。
  3. Variant 3

    :最直接,就直接用CEG生成的内容Embedding。训练时用用户的目标交互序列,推理时就只用单个商品的文本描述。

训练时,Variant 1 的输入是用户目标交互序列,而Variant 2 和3都是独立处理每个商品。推理时,三种变体都简化了:只需要一个商品的文本描述,就能独立输出它对应的Embedding。

损失和实际模型

到了实际应用里,模型的目标还是预测CVR(转化率)。所以,训练时还得加上一个传统的、专门做CVR预测的MLP结构:

因此,最终的损失函数由两部分组成。

主损失(Main Loss)

主损失直接来指导模型学习。输入是用户Embedding和商品Embedding,目标是预测用户对商品的偏好程度。正样本是用户实际交互过的商品,负样本是没交互过的。通过对比这两类样本,模型能更好地抓住用户偏好的特征。具体实现上,用的是InfoNCE损失。

辅助损失(Auxiliary Loss)

辅助损失负责进一步提升模型性能,帮助模型融合不同类型的Embedding。它本质上就是一个关于CVR任务的交叉熵损失,算是锦上添花。

实验

表里H是命中率(Hit Rate),R是召回率(Recall Rate):

商品Embedding方面的对比:

训练方式的对比:

与SOTA(当前最优)模型的比较:

三种商品塔之间的表现差异:

PCH模块的消融实验:

线上A/B测试的AUC指标:

CVR的提升效果:

冷启动和长尾场景下的表现:

看完这篇文章,最大的感受就是:推荐领域永远是紧跟潮流的。从当年的ResNet、Attention、LSTM、GNN,到现在大家纷纷用上对比学习,甚至有人在提Diffusion Model。有一个问题值得思考:既然对比学习这么好用,我们为什么不尝试给推荐序列里加点噪音呢?