【文献阅读五】RLP: A Unified Pretrain, Personalized Prompt & Predict Paradigm (P5)

P5提出了一种统一的推荐框架,将多种任务转化为NLP形式,通过共享编码器和解码器处理,个性化prompt帮助实现跨任务泛化和零样本推荐,提升冷启动性能。

文献来源: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 来实现“千人千面”,进而实现零样本或少样本泛化,省去微调工作。

可以整合的前提:由于推荐任务通常共享一个共同的用户-项目池,并且具有重叠的上下文特征,所以有希望将更多的推荐任务合并到一个统一的框架中,使它们能够隐式地传递知识,从而使它们能够相互受益,并能够泛化到其他看不见的任务中。

二、介绍

F 1
P5 有三点优势:

  1. P5 将多个推荐任务整合到一起,推荐任务可以被改成 NLP 任务。不需要设计特定于特性的编码器,P5 可以利用训练语料库中丰富的语义和知识;
  2. P5 将所有个性化任务当作文本生成问题。(P5 将多个推荐任务集成到 一个共享的文本到文本编码器到解码器的架构中使用相同建模损失训练,不需要设计特定的架构和目标函数);
  3. 使用基于指令的提示进行训练的 P5,当泛化到新领域中 ,有足够的零样本能力,一定程度上可以解决冷启动问题。

三、P5架构

3.1 个性化 prompt 模板

每类任务都有对应的个性化 prompt,每个 prompt 包含如下元素:

  • 输入模板:Encoder 端输入;
  • 目标模板:Decoder 端输出;
  • 关联的元数据:Encoder 端{ }中需要替换的内容。

所谓的个性化prompt是指 prompt 模板中融入了 user/item 的特征,不同的 user,其 prompt 是不一样的。比如:user 侧用ID、性别、年龄等特征来表达,这些特征取值不一样时,prompt 就也不一样。同时,item 特征变化时,模型的预测输出也会发生相应的变化,即:user 对不同 item 的偏好是不一样的。

每一类推荐任务都有多个类别:

  1. rating task: ①给定user和item,直接预测得分;②给定 target item,预测 yes or no;③预测user是否喜欢item。
  2. sequential task:①基于交互历史预测 next item;②基于交互历史从 candidate set 预测一个 item;③基于交互历史预测 target item 是否被 user 接受。
  3. explanation task:①直接生成 user/item 的解释性答案;②基于特征词作为提示生成解释。
  4. review task:①总结评审意见,形成较短的评审标题; ②根据给定的评论预测相应的评分。
  5. direct task:①预测是否给 user 推荐 item ;②从 candidate set 中选择最合适的item推荐给user

F 2
如上图所示,左侧是原始输入数据,包含 useritem 特征和推荐任务的 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 框架。
F 3

  1. 输入层:
    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>)来表示每个用户/项目。然而,当存在大量用户和项目时,这可能会产生大量额外的令牌。

  2. 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)

  3. 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θ(yjy<j,x)=D(y<j,t)

  4. 预训练学习目标:
    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=1ylogPθ(yjy<j,x)

  5. 下游任务应用:
    对于ratingexplanationreview任务,只需使用贪心算法进行解码;
    对于 sequentialdirect 任务,采用
    C = [C1, ··· , CB] = Beam_Search( D, t, B)输出item list

D:Decoder;t:Encoder输出序列;B:搜索窗口大小

四、实验结果

T 2
T 3
T 4
T 5
T 6
T 7
P5 模型采用的是预训练 T5 checkpoints,并创造了两个版本的 P5,分别是 P5-SP5-B(参数量不同)。对于每类推荐任务,最后个 prompt 用于零样本评估。

通过实验可以发现:

  1. P5 整合的五种推荐任务再三个数据集上的表现与 baselines 相比,相当或者更好。
  2. 零样本泛化到新领域中,P5 能够捕获不同用户的评分偏好和特征词,然后将它们与从先前领域学到的知识进行整合,从而生成合理的解释。
    T 9F 4
  3. 在模型大小上,当数据集较大时 P5-B 的性能更好,而较小的数据集上,P5-S 的性能更好。
  4. 针对 prompt 规模,实验发现更多数量的高质量个性化提示通常可以帮助 P5 在各种推荐任务上取得更好的性能,尤其是在无提示的零样本任务上。
    F 5
  5. 个性化 prompt 实现的方法的影响,也就是在输入层Whole-word Emb的两种实现方法。在sequential 任务或者 Tokp-K 任务中存在大量用户和项目,当为每一个额外的 token 学习一个独立的个性化表示时,会造成大量的额外 tokensembeddings,从而使性能下降。而在 ratingreview 等任务中,用户和项目较少,因此性能和 P5-S 相比差不多甚至更好。
    F 6

五、总结

作者提出了一个新方法叫做 P5P5 可以将多种推荐任务统一成一个框架,并通过设计个性化prompt,将预训练中所有的原始数据全部转成相同的格式 input-target pairs,因此 P5 可以在一个完全的自然语言环境挖掘更深层的语义信息。根据实验数据,P5baselines 相比,可以达到差不多甚至超过 baselines 的水准。此外还表现一定的零样本能力,一定程度上可以解决冷启动的问题。

参考:
最近NLP领域的prompt,能以什么方式运用到推荐/搜索场景中呢?
[硬核总结]通过个性化prompt结合语言建模与用户行为——基于LLM的零样本推荐系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值