作者 | 冯卡门迪
整理 | NewBeeNLP
https://zhuanlan.zhihu.com/p/705497209
这一两年推荐的论文工作离不开冷启和长尾问题,就像过去几年离不开序列和多目标一样,所套的壳子也从时序模型发展到对比学习和LLM,更像是“问题长期存在,我们现在有了更好的工具解决”,鸡生蛋与蛋生鸡总是这么的迷人和无所遁形。
关于冷启动和长尾推荐,以往推荐模型主要的问题是对于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
将大语言模型引入到推荐中的工作在前几年也一直都有(指NLP模型,非要说BERT这类不算LLM那就不算),比如Bert4Rec、RankT5、RecFormer之类
过往使用大模型做推荐分为两种思路:
冻结LLM参数并适应推荐领域数据 :利用LLM生成物品的内容嵌入,通常是通过处理生成物品的文本描述(如标题、说明、评论等),从而捕捉物品的语义信息,比如Chat-Rec。 在推荐领域的特定文本数据集上微调LLM :利用LLM捕捉用户行为序列,通过设计提示prompt,使LLM学习用户和物品之间的潜在关系,在预测任务中理解用户的偏好变化和行为模式,从而更好地预测用户可能感兴趣的物品,比如TallRec。
文中认为以上其实都是将LLM的广域和推荐领域强行结合(Rec-to-LLM),可能会出现遗忘,即随着推荐任务的学习,模型会丢失在预训练过程中学到的知识。
由此有了新的这个LEARN框架(Llm-driven knowlEdge Adaptive RecommeNdation),旨在有效融合大模型和推荐系统(LLM-to-Rec),更像是一种特征提取,LEARN框架通过双塔结构(用户塔和物品塔),利用LLM生成的Embedding来改进推荐性能。
LEARN
LEARN模型的主要结构包括两个塔:用户塔(User Tower)和商品塔(Item Tower),每个塔由两个模块组成:内容嵌入生成模块(Content-Embedding Generation Module, CEG)和偏好理解模块(Preference Comprehension Module, PCH)。
商品文本描述
首先对每个商品按标题、品类、品牌、价格、关键词和属性进行文本描述:
内容Embedding生成模块(CEG)
通过主谓宾将item描述转为句子后使用大模型抽取token的高维向量,通过均一池化生成Embedding,在训练阶段,冻结LLM以防止其遗忘广域知识:
偏好理解模块(PCH)
其实是用户Embedding生成,将内容Embedding映射到推荐系统的协作域:使用来自用户历史交互的商品内容Embedding序列作为输入,传入Transformer中做时序预测,最终生成用户Embedding。在训练时,使用自监督对比学习作为训练目标,以增强模型区分用户偏好商品和非偏好商品的能力。
历史序列和目标序列
感觉是对行为序列做截断,当前曝光之前的作为历史序列,当前曝光之后的作为目标序列,对于第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,商品塔给了三种样式:
用户塔、商品塔
Variant 1 :使用与用户塔相同的架构和模型权重,但输入的是用户目标交互序列(user target interactions)。这种方法通过使用相同的因果注意机制(causal attention)来处理用户历史交互,从而对齐用户和商品Embedding。 Variant 2 :使用自注意机制(self-attention mechanism),只关注商品本身。独立处理每个商品,不考虑商品之间的顺序依赖。 Variant 3 :直接使用CEG生成的内容Embedding,在训练阶段使用用户目标交互序列,在推理阶段只使用商品的文本描述作为输入。
在训练阶段,Variant 1 使用用户目标交互序列作为输入,Variant 2 和Variant 3 独立处理每个商品。
在推理阶段,这三种变体只使用一个商品的文本描述作为输入,独立输出Embedding。
损失和实际模型
实际的使用还是要预测cvr,因此训练时再加一个传统的关于CVR任务的MLP结构:
由此,损失包含主损失和辅助损失。
主损失(Main Loss)
主损失用于直接指导模型,利用用户和商品Embedding来预测用户对商品的偏好。主损失的目标是最小化推荐结果与实际用户行为之间的误差,从而提高模型的推荐准确度。通过模型的主塔计算,输入为用户Embedding和商品Embedding。正样本是用户实际与之交互的商品,负样本则是用户没有交互的商品。通过对比正负样本,模型能够更好地学习用户偏好的特征,因此损失为InfoNCE:
辅助损失(Auxiliary Loss)
辅助损失用于进一步提升模型性能,帮助模型更好地融合不同类型Embedding,是一个转换率(CVR)损失,交叉熵吧。
实验
H代表命中率(hit rate),R代表召回率(recall rate):
商品Embedding:
训练方式:
和SOTA比较:
三个商品塔:
PCH消融:
线上AB的AUC:
CVR提升:
冷启和长尾:
整体上就像曾经的ResNet、Attention、LSTM、GNN等,推荐领域紧跟时事,提一嘴Diffusion-Model,现在各家都在搞对比学习,为啥不给推荐序列加噪音呢??
关于互联网持续学习圈