文献来源:Recommendation as Language Processing (RLP): A Unified Pretrain, Personalized Prompt & Predict Paradigm (P5)
期刊会议:RecSys '22: Proceedings of the 16th ACM Conference on Recommender Systems
本文只是对原文章做的一个初步阅读与理解,如有错误的地方,还请多多指点。想了解更多请原读原文。
一、摘要
目前,不同推荐任务(eg: rating prediction, sequential recommendation,review summarization,direct recommendation
)需要在具体架构上进行训练目标,无法进行泛化。比如 sequential recommendation
无法应用到 review generation
上。为了解决这个问题,作者提出了 P5
方法,该方法可以将多个推荐任务统一在一个框架中。由于自然语言的丰富信息可以帮助 P5
捕获更深层的语义进行个性化推荐,因此在 P5
中所有数据都被转换成了自然语言,并且 P5
中的多个推荐任务共用一个数据集和损失函数。当应用到下游时,P5
通过自适应的个性化 prompts
来实现“千人千面”,进而实现零样本或少样本泛化,省去微调工作。
可以整合的前提:由于推荐任务通常共享一个共同的用户-项目池,并且具有重叠的上下文特征,所以有希望将更多的推荐任务合并到一个统一的框架中,使它们能够隐式地传递知识,从而使它们能够相互受益,并能够泛化到其他看不见的任务中。
二、介绍
P5
有三点优势:
P5
将多个推荐任务整合到一起,推荐任务可以被改成NLP
任务。不需要设计特定于特性的编码器,P5
可以利用训练语料库中丰富的语义和知识;P5
将所有个性化任务当作文本生成问题。(P5
将多个推荐任务集成到 一个共享的文本到文本编码器到解码器的架构中使用相同建模损失训练,不需要设计特定的架构和目标函数);- 使用基于指令的提示进行训练的
P5
,当泛化到新领域中 ,有足够的零样本能力,一定程度上可以解决冷启动问题。
三、P5架构
3.1 个性化 prompt
模板
每类任务都有对应的个性化 prompt
,每个 prompt
包含如下元素:
- 输入模板:
Encoder
端输入; - 目标模板:
Decoder
端输出; - 关联的元数据:
Encoder
端{ }中需要替换的内容。
所谓的个性化prompt是指
prompt
模板中融入了user/item
的特征,不同的user
,其prompt
是不一样的。比如:user
侧用ID、性别、年龄等特征来表达,这些特征取值不一样时,prompt
就也不一样。同时,item
特征变化时,模型的预测输出也会发生相应的变化,即:user
对不同item
的偏好是不一样的。
每一类推荐任务都有多个类别:
rating task
: ①给定user和item,直接预测得分;②给定 target item,预测 yes or no;③预测user是否喜欢item。sequential task
:①基于交互历史预测next item
;②基于交互历史从candidate set
预测一个item
;③基于交互历史预测target item
是否被user
接受。explanation task
:①直接生成user/item
的解释性答案;②基于特征词作为提示生成解释。review task
:①总结评审意见,形成较短的评审标题; ②根据给定的评论预测相应的评分。direct task
:①预测是否给user
推荐item
;②从candidate set
中选择最合适的item推荐给user
。
如上图所示,左侧是原始输入数据,包含 user
、item
特征和推荐任务的 label
。中间是 prompt
模板,可以将花括号 { }
用具体的输入样本特征来替代,生成训练 input-target pairs
或下游 zero-shot
的个性化 prompt
。右侧是 target
,用输入数据中的 label
来替换花括号。这样就能生成NLP任务encoder-decoder架构的输入-输出数据对。
下面为实验中设计的个性化 prompts
格式:
D.1 Task Family 1: Rating Prediction
Prompt ID: 1-1
Input template: Which star rating will user_{{user_id}} give item_{{item_id}}? (1 being lowest and 5 being highest)
Target template: {{star_rating}}
D.2 Task Family 2: Sequential Recommendation
Prompt ID: 2-1
Input template: Given the following purchase history of user_{{user_id}}: {{purchase_history}} predict next possible item to be purchased by the user?
Target template: {{next_item}}
D.3 Task Family 3: Explanation Generation
Prompt ID: 3-1
Input template: Generate an explanation for user_{{user_id}} about this product: {{item_title}}
Target template: {{explanation}}
D.4 Task Family 4: Review Related
Prompt ID: 4-1 Input template: Write a short sentence to summarize the following product review from user_{{user_id}}: {{review}}
Target template: {{summary}}
D.5 Task Family 5: Direct Recommendation
Prompt ID: 5-1 Input template: Will user_{{user_id}} likely to interact with item_{{item_id}}?
Target template: {{answer_choices[label]}} (yes/no)
3.2 P5架构
由于提示模板,所有预训练数据共享统一格式的 input-target token
序列,打破了不同任务之间的界限。
模型架构上采用 Transformer blocks
构成了的 Encoder-Decoder
框架。
-
输入层:
Encoder
层的输入包含了三部分:Token Emb
:输入token
序列表示为 X = [ x 1 , ⋯ , x n ] X = [ x_1 ,\cdots, x_n] X=[x1,⋯,xn];Position Emb
:获取token
在序列中的位置;Whole-word Emb
:指示子词token
是否来自同一个原始词。
另一种选择是用一个独立的额外令牌(例如,
<item_7391>
)来表示每个用户/项目。然而,当存在大量用户和项目时,这可能会产生大量额外的令牌。 -
Encoder层:
在获取了输入嵌入 e = [ e 1 , ⋯ , e n ] e = [e_1,\cdots, e_n] e=[e1,⋯,en] 后输出它们的语境化表示 t = [ t 1 , ⋯ , t n ] = ε ( e ) t = [ t_1 ,\cdots, t_n] = \varepsilon( e ) t=[t1,⋯,tn]=ε(e) -
Decoder层:
根据已经 生成了序列 + 上下文表示关系 t 来预测下一个y
P θ ( y j ∣ y < j , x ) = D ( y < j , t ) P_\theta(y_j | y_{< j}, x) = D( y_{< j} , t) Pθ(yj∣y<j,x)=D(y<j,t) -
预训练学习目标:
L θ P 5 = − ∑ j = 1 ∣ y ∣ l o g P θ ( y j ∣ y < j , x ) L^{P5}_\theta=-\sum^{|y|}_{j=1}logP_\theta(y_j | y_{<j},x) LθP5=−j=1∑∣y∣logPθ(yj∣y<j,x) -
下游任务应用:
对于rating
,explanation
,review
任务,只需使用贪心算法进行解码;
对于sequential
和direct
任务,采用
C = [C1, ··· , CB] = Beam_Search( D, t, B)
输出item list
D:Decoder;t:Encoder输出序列;B:搜索窗口大小
四、实验结果
P5
模型采用的是预训练 T5 checkpoints
,并创造了两个版本的 P5
,分别是 P5-S
和 P5-B
(参数量不同)。对于每类推荐任务,最后个 prompt
用于零样本评估。
通过实验可以发现:
P5
整合的五种推荐任务再三个数据集上的表现与baselines
相比,相当或者更好。- 零样本泛化到新领域中,
P5
能够捕获不同用户的评分偏好和特征词,然后将它们与从先前领域学到的知识进行整合,从而生成合理的解释。
- 在模型大小上,当数据集较大时
P5-B
的性能更好,而较小的数据集上,P5-S
的性能更好。 - 针对
prompt
规模,实验发现更多数量的高质量个性化提示通常可以帮助P5
在各种推荐任务上取得更好的性能,尤其是在无提示的零样本任务上。
- 个性化
prompt
实现的方法的影响,也就是在输入层的Whole-word Emb
的两种实现方法。在sequential
任务或者Tokp-K
任务中存在大量用户和项目,当为每一个额外的token
学习一个独立的个性化表示时,会造成大量的额外tokens
和embeddings
,从而使性能下降。而在rating
,review
等任务中,用户和项目较少,因此性能和P5-S
相比差不多甚至更好。
五、总结
作者提出了一个新方法叫做 P5
,P5
可以将多种推荐任务统一成一个框架,并通过设计个性化prompt
,将预训练中所有的原始数据全部转成相同的格式 input-target pairs
,因此 P5
可以在一个完全的自然语言环境挖掘更深层的语义信息。根据实验数据,P5
和 baselines
相比,可以达到差不多甚至超过 baselines
的水准。此外还表现一定的零样本能力,一定程度上可以解决冷启动的问题。
参考:
最近NLP领域的prompt,能以什么方式运用到推荐/搜索场景中呢?
[硬核总结]通过个性化prompt结合语言建模与用户行为——基于LLM的零样本推荐系统