p5模型详解

news2024/11/23 21:05:53

1.研究动机

推荐系统种类繁多,user、item特征集合可以共享,特定架构特定任务使得各任务间无法迁移。

语言可以描述万物,可以作为推荐系统的中间桥梁,受到prompt学习的影响,本文提出了text-to-text框架,称为p5模型。

p5将推荐任务置身于nlp大环境中,在个性化prompt的设计下,将各类任务转化为p5 nlp语言序列。将各类推荐问题转化为Text-to-Text Encoder-Decoder架构,建模成条件文本生成问题,并使用相同的语言模型损失来预训练,而不是每个任务用特定的损失函数。

训练使用instruction-based prompts,下游可以实现零少样本的泛化,泛化到其他领域或者未见过的item,以解决冷启问题。

2、p5模型的结构

2.1、p5模型对应的任务

常见的5类推荐任务(序列推荐、评分预测、推荐理由、评论、直接推荐)如下图所示:

 p5模型统一建模这5类任务,通过设计个性化prompt模版进行输入转换,转化为自然语言序列,作为encoder端的输入,再label进行prompt转化作为decoder的输出,通过seq2seq模型的损失函数进行预训练。下游应用时,给定目标输入,通过zero-shot的prompts模板进行输入转换,输入到encoder端进行编码,通过预训练好的decoder端进行解码,得到预测值,比如:下一次交互的item、评分、推荐理由、topK item ID等。

个性化prompts模板作为桥梁,沟通了推荐系统任务的原始样本(特征/label)到通用自然语言序列的转换。多任务预训练学习到了不同任务内特定的知识以及任务间的迁移知识。

2.2、p5模型模版构建

2.2.1、prompt三要素

每类任务都有对应的个性化prompts模板,每个prompt包含如下三大要素:

  • 输入模板(输入样本):input template,Encoder端输入。
  • 目标模板(label):target template,Decoder输出。
  • 关联的元数据(user/item特征):associated metadata,Encoder端{花括号}部分需要替换的内容。

个性化prompt是指prompt模板中融入了user/item的特征,不同的user,其prompt是不一样的。

2.2.2、不同模版设计方式

5种任务的不同设计模版

  • 评分预测任务:包含3类,(a)给定关于user和item的信息,直接预测评分(1~5);(b)预测user是否会对item产生评分,即:yes or no;(c)预测user对item是否喜欢(>4分喜欢,否则不喜欢)
  • 序列推荐任务:包含3类,(a)直接基于交互历史,来预测下一次交互;(b)给定交互历史和候选item集合,从中选出某个item作为预测结果;(c)给定交互历史以及某个item,预测这个item用户是否下一次会进行交互。
  • 推荐理由任务:包含2类,(a) 基于user和item的特征,直接生成推荐理由。(b) 将某个特征作为hint提示,生成推荐理由。
  • 评论任务:包含2类,(a)对长评论进行摘要生成。(b)给定评论,预测对应的评分。
  • 直接推荐:最常见的类型,类似TopK推荐。包含2类,(a) 预测是否要把某个item推荐给某个用户,yes or no。(b) 从候选集合中,选出某个item推荐给用户。

prompts任务推荐

五种任务的分类模版

评分预测任务

(a)给定关于user和item的信息,直接预测评分(1~5);

(b)预测user是否会对item产生评分,即:yes or no;

 

(c)预测user对item是否喜欢(>4分喜欢,否则不喜欢)

 

序列推荐任务

(a)直接基于交互历史,来预测下一次交互;

 

(b)给定交互历史和候选item集合,从中选出某个item作为预测结果;

 

(c)给定交互历史以及某个item,预测这个item用户是否下一次会进行交互。

 

推荐理由任务

(a) 基于user和item的特征,直接生成推荐理由。

可能由于直接为生成任务,故而没有相应的模版

(b) 将某个特征作为hint提示,生成推荐理由。

直接推荐

(a) 预测是否要把某个item推荐给某个用户,yes or no。

(b) 从候选集合中,选出某个item推荐给用户。

 

给定上述的prompts,很容易将推荐系统的原始输入数据转成input-target pairs,举几个从原始数据生成输入样本的例子。

如下图所示,最左侧是原始输入数据,包含user、item特征和推荐任务的label。中间是prompt模板,可以将花括号{}用具体的输入样本特征来替代,生成训练input-target pairs。右侧是target,用输入数据中的label来替换花括号。这样就能生成NLP任务encoder-decoder架构的输入-输出数据对。

3、模型结构

由于prompts的存在,所有任务的输入都巧妙地转换成了通用的自然语言序列,将各类任务之间的界限打破了,映射到统一的输入空间。在预训练的时候,将上述5种任务构造得到的input-target pairs全部混合起来喂给模型进行预训练。实际实现时,对每个raw data,会随机抽部分prompt模板进行输入样本的生成,保证泛化能力。在序列推荐和topK推荐的candidate items中,负样本会随机抽取。在这种多任务样本的预训练中,能够充分利用各类任务中蕴含的通用知识。下游应用时,即使是一些新颖、未见过的prompts或items,模型也能够很好地进行泛化和迁移。

3.1、模型整体架构

模型架构上采用了家喻户晓的Encoder-Decoder结构,核心组成是Transformers。

 实际使用时,采用了T5预训练模型[5]。

3.2、embedding输入层

Encoder的输入包括3个部分,token emb, position emb, whole-word emb,遵从类似BERT的输入范式。

  • token emb,输入token序列表示为:,经过embedding。
  • position emb,位置嵌入,建模位置和次序信息。
  • whole-word emb,这个是文中提出的,主要为了解决可能把user/item侧的个性化特征切碎的问题,加入了整体的word表征。比如:item_7391是ID为7391的item,加个整体的embedding。实现上类似position emb,按顺序预留一个word idx embedding矩阵,根据输入中的需要进行查表。

三者加起来后作为Encoder的输入。这个部分实际上通过transformer来建模中蕴含的user特征、item特征、user/item交互特征。

3.2、encoder

采用的是transformers,可以对输入序列做双向attention。得到表征后的embedding序列,

 

3.3、Decoder

自回归decoder,允许对输入序列、已经解码的输出端序列做attention,并预测下一步的token。即:

 

3.4、loss损失函数

预训练的学习目标是label tokens的负对数似然损失,训练样本是所有5种推荐任务混合起来的样本。

 

模型层面非常简洁,用one data format, one model, one loss来建模multi-task。

4、下游任务预测

对于序列任务

预训练完后,可以直接应用在下游任务中,做zero-shot和few-shot。对于评分预测/推荐理由/评论任务,采用贪心算法进行解码即可。序列推荐和topk推荐通常需要输出一个item list,采用beam search来产生潜在topk结果。BeamSearch形式化如下:

BeamSearch输入为Decoder,Encoder的输出序列t和搜索的窗口大小B,输出预测的topk序列C。

预测方式

两种预测方式,一种是使用和预训练一致的prompt模版,另一种是使用一种新的prompt模版,体现预训练模型的泛化能力

后者实际上就对应着模型的强大泛化能力,比如给一个新的item和描述元信息,让模型来预测,实现item的冷启动;或者给定一个其它domain的测试样本做映射,让模型来预测,实现了跨域迁移学习。非常巧妙。

5、实验对比

5.1、数据集

对四个真实世界的数据集进行了广泛的实验。 Amazon数据集是从 Amazon.com 平台收集的,其中包含用户对 29 类产品的评分和评论。在本文中,我们采用其中三个来评估我们的方法,即运动和户外、美容以及玩具和游戏

5.2、实验对比

比如评分预测的MF、序列推荐的GRU4REC、BERT4REC等。预训练模型采用的是T5,包括base和small两个checkpoint,分别对应P5-B和P5-S。比如实验中的P5-S(1-6)代表用small T5版本的预训练模型做参数初始化,用第1~6种prompts做样本生成。各类任务对比实验指标如下:

5.2.1、评分任务的对比

rmse(Root Mean Squard Error):均方根误差

MAE :MAE(平均绝对误差)

 

5.2.2、序列推荐任务的对比

Caser(卡瑟):将顺序推荐视为马尔可夫链并采用 卷积神经网络来模拟用户兴趣。

HGN:采用分层门控网络来学习用户行为 长期和短期的信息

GRU4Rec :利用 GRU 对用户点击历史序列进行建模

BERT4Rec :模仿 BERT风格的掩码语言建模并学习用于序列推荐的双向表示

FDSA:通过self-attention 模块focus on序列转化

SASRec:在序列推荐模型中采用自注意力机制,该模型调和马尔可夫链和基于 RNN 的方法的属性。

S3-Rec: 利用self-supervised(自监督)目标来帮助 顺序推荐模型更好地发现不同item及其属性之间的相关性。

 

5.2.3、推荐理由任务的对比

5.2.4、评论任务

评论预测

评论总结

 

5.2.5、直接推荐

参考文献

P5 | NLP模型一统推荐系统? 谈新型推荐系统建模范式 (P5 | NLP模型一统推荐系统? 谈新型推荐系统建模范式)

https://arxiv.org/pdf/2203.13366.pdf 论文地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【openGauss数据库配置运行参数】--略有小成

【openGauss数据库配置运行参数】--略有小成 🔻 一、查看参数值🔰 1.1 使用SHOW命令查看🔰 1.2 使用pg_settings视图查看 🔻 二、openGauss的六类GUC参数🔻 三、重设运行参数🔰 1.3 重设参数的几种方式&…

5.0、Java_IO流 - IO流类的基本体系结构

5.0、Java_IO流 - IO流类的基本体系结构 Java 为我们提供了多种多样的 IO 流,我们可以根据不同的功能以及性能要求挑选合适的 IO 流; 下图为 Java 中 IO 流类的基本体系结构(这里只列举出一些常用的类,详情可以参考 JDK API 文档&…

闭门造轮(LVGL_1)

参考的课程: 全志韦东山的课程:https://www.100ask.net/p/t_pc/course_pc_detail/column/p_61c5a317e4b0cca4a4e8b6f1?product_idp_61c5a317e4b0cca4a4e8b6f1 例程1_// 基础对象(lv_obj),"Hello, LVGL!" void lvgl_demo(void) …

用平衡因子实现-AVL树

目录 AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转左单旋(parent->_bf 2 && cur->_bf 1)a,b,c当高度为0a,b,c当高度为1a,b,c当高度为2a,b,c当高度为...... 右单旋(parent->_bf -2 && cur->_bf -1)a,b,c当高度为0a,b,c当高度为1a,b,c当高…

UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流

程序化内容生成框架(Procedural Content Generation Framework,下文简称PCG)可谓是UE5.2版本中最令人瞩目的新技术之一,老王也是在第一时间就关注了这个技术,以前尝试过用Houdini来实现UE5中的程序化内容生成,感觉还是很蹩脚的,毕…

无线发射功率

无线电发射功率 无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去。电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈…

Linux系统编程(再论execve)

文章目录 前言一、execve的第三个参数二、进程空间三、命令行参数规范四、optstring规则的扩展定义总结 前言 本篇文章我们继续来研究一下execve这个系统调用,上篇文章已经讲解了前两个参数的意义了,那么这篇文章就来讲解一下第三个参数的具体含义。 一…

三分钟学习一个python小知识4-----------我的对python中numpy的理解, 我列举了关于numpy常用的10个例子来深入理解numpy

这里写目录标题 1、NumPy是什么2、NumPy的常见应用---必须掌握2.1.创建一个数组2.2.数组的属性2.3.取数组中的元素2.4.数组的运算2.5.数组的转置2.6. 数组的索引和切片2.7. 数组的重塑2.8. 数组的广播2.9. 数组的聚合操作2.10. 数组的排序 总结 1、NumPy是什么 NumPy是专门用于…

vue+elementui实现app布局小米商城,样式美观大方,功能完整

目录 一、项目效果在线预览 二、效果图 1.首页效果图 2.分类,动态分类商品数据根据所属分类动态切换 3.购物车,动态添加购物车(增、删、改、查) 4.我的 5.登录注册 6.商品详情 7.搜索(动态模糊搜索、搜索历史…

12---整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…

文件上传漏洞-用骗子的角度分析

(一)文件上传漏洞 文件上传漏洞,发送在用户上传文件功能中,很多网址都对上传的文件格式进行限制,但是被攻击机者找到漏洞,把木马、病毒进行上传,然后控制服务器。对上传的文件格式不是不限制&a…

MySQL实战解析底层---为什么这些SQL语句逻辑相同,性能却差异巨大

目录 前言 案例一:条件字段函数操作 案例二:隐式类型转换 案例三:隐式字符编码转换 前言 在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句对这些语句使用不当的话,就会不经意间导致整个数据…

动态规划V (85、91、97)-最近都开始摆烂

CP85 最大矩形 题目描述: 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 学习记录: 对每一个地方都去统计最大举行的话,会有很多多余的计算,题…

windows操作系统线程结构体

上一篇我们介绍了进程结构体,这节我们介绍下线程结构体:ETHREAD。还是去windbg里面去看一下这个结构体的长相: 依旧是一大堆成员,我们只关注一些比较重要的结构体成员。在进程结构体中的第一个成员是一个子结构体Pcb,在线程结构体中&#xff…

【Simulink】基于FCS-MPC的带阻感负载的三相逆变器控制(Matlab Function)

之前写过三相并网逆变器FCS-MPC的博客 👉【Simulink】基于FCS-MPC的三相并网逆变器控制(Matlab Function) 应用的对象是并网的,用一个电压源(Three-Phase Programmable Voltage Source)模拟交流电网。 本篇…

6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(7)

0.briefly speaking 之前我们研究过Xv6中的陷阱机制,并搞懂了系统调用的全部流程,接下来我们以UART和console为研究对象,深入研读一下Xv6内核中有关设备中断驱动的代码,并对UART、shell、console、键盘、显示器等设备的协同运作过…

【算法总结】——排列型回溯

文章目录 排列型回溯例题1——46. 全排列例题2——N皇后 分析回溯时间复杂度的另一种技巧 排列型回溯 相比于组合,排列型回溯对于元素的顺序是有要求的。 为了告诉回溯下面还可以选择哪些数字,可以: 记录已经被选择的数字用一个集合存储还…

【Linux】16. 动静态库

1. 库概念的引出 但是如果只是单纯的将多个.o文件提供给使用者,那么如果.o文件过多链接就会变得非常复杂,于是我们考虑将所有的.o文件打包给使用者提供一个库文件即可。 库的本质就是.o文件的集合 2. 动静态库概念 在之前的学习过程中我们认识到动静态…

免费:5000个高清视频素材 (个人免费版权,含9个利基)

免费:5000个高清视频素材 (个人免费版权,含9个利基) 嘿!你喜欢制作视频吗?总是在寻找一些酷炫的素材,但又担心会侵犯版权吗?别担心,我有一个超级好消息要告诉你!现在,我…

代码随想录算法训练营第39天 | 62.不同路径 + 63.不同路径 II

今日任务 目录 62.不同路径 - Medium 63.不同路径 II - Medium 62.不同路径 - Medium 题目链接:力扣-62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器…