查看原文
其他

预训练语言模型解决推荐任务,还能这么用!

张君杰 RUC AI Box 2022-12-14
© 作者|张君杰
机构|中国人民大学
研究方向|推荐系统


    本文针对近期利用预训练语言模型解决推荐任务的工作进行了简要介绍,梳理其背后的技术脉络,旨在帮助推荐系统相关研究人员快速熟悉和掌握相关的最新研究进展,如有遗漏或错误,欢迎大家指正。文章也同步发布在AI Box知乎专栏(知乎搜索 AI Box专栏),欢迎大家在知乎专栏的文章下方评论留言,交流探讨!

引言:长期以来,推荐系统和自然语言处理技术相互影响,相互促进。例如一些工作利用文本信息来增强用户和商品的表示;一些工作将用户的历史交互序列视为自然语言中的文本序列,并用语言建模的方法提升推荐的性能。随着预训练语言模型的不断发展,其参数量越来越大,存储的知识也越来越多。一些工作利用预训练语言模型学习通用的表示;一些工作逐渐尝试用自然语言的形式描述推荐任务,并通过设计prompt,利用预训练语言模型解决推荐任务。本文整理了近期这方面的一些工作和进展。欢迎大家批评指正,相互交流。
论文列表

1. Towards Universal Sequence Representation Learning for Recommender Systems

KDD 2022 | 我们离通用预训练推荐模型还有多远?推荐系统的通用序列表示学习模型 UniSRec
本文指出传统序列推荐模型因为商品 ID 在域/平台间不共享而存在着迁移性差和商品冷启动的问题。为此,本文提出了一种新的序列表示学习方法 UniSRec,希望打破显式建模商品 ID 带来的限制,通过编码商品文本并生成迁移性强的通用商品表示,并进一步在多个域上预训练来学习到通用序列表示。
UniSRec基于商品文本学习可迁移的商品表示。具体来说,首先使用预训练语言模型(PLM)学习文本表征。
由于不同领域的文本表征可能会形成不同的语义空间(即使文本编码器相同),本文提出使用参数白化网络混合专家网络(MoE)增强的适配器模块来将原始的文本表示转换至适用于推荐任务的通用的语义空间。
由于不同的域通常对应着不同的用户行为模式,简单地把这些不同领域的序列混合起来使用并不会取得很好的效果。为此本文提出了两种基于对比学习的任务用于预训练,进一步促进不同域之间的融合与适配。
1. 序列-商品对比任务。简单来讲就是给定序列,预测下一时刻的商品。对于一个给定的序列,它的下一时刻商品为正例。与传统的 next item prediction 任务不同,在本任务中UniSRec使用 in-batch 的多个域的商品作为负例,希望可以增强不同域的通用表示的融合与适配。
2. 序列-序列对比任务。第二个任务本文设计了一个序列级别的自监督任务来增强预训练。使用两种启发式的数据增强策略,来为一个序列生成负例。具体来说,对于一个商品序列,随机丢弃掉原始序列中的商品或者商品文本中的单词来构造正例,而负例则是 in-batch 的多个域的其他序列。
在预训练后,当需要适配新的推荐场景时,UniSRec选择只微调MoE增强的适配器的参数。作者发现提出的 MoE 增强的适配器可以快速适配到未见过的领域,将预训练模型与新领域的特征进行融合。根据新的推荐场景中商品 ID 是否可用,设置了两种微调方式,命名为归纳(Inductive)与转导(Transductive)
归纳场景针对新商品频繁涌现的推荐场景。作者认为此时传统的基于商品 ID 的模型可能并不适用。由于 UniSRec 天然不依赖于商品 ID,因此其可以为新商品学习通用文本表示。这时我们可以按如下概率预测商品:

转导场景针对近乎所有商品都在训练集出现的场景。此时在学习通用文本表示的基础上,同时学习商品 ID 表示。并简单将通用文本表示和 ID 表示加和并进行预测:

2. Language Models as Recommender Systems: Evaluations and Limitations

本文提出通过将推荐任务改写为语言建模的任务,从而利用预训练语言模型解决推荐任务。简单来说,本文将用户的历史交互序列改写成一段文本描述(例如:item sequence:to text sequence: A user watched:
Now the user wants to watch ___ ,  其中  ___  为), 并利用语言模型填写,从而解决推荐任务。
作者希望利用PLM来解决推荐系统中的两个关键问题:Zero-shot Recommendations,Data Efficiency. 对于推荐系统来说,具备在没有训练样本的情况下,做出正确推荐的能力非常重要。而PLM因其庞大的参数存储了大量的知识,所以作者相信可以用PLM来提升模型在zero-shot场景下的表现。除此以外,PLM在预训练阶段学到的通用知识也可以通过添加prompt等方法,适应到大量的下游任务中。因此作者认为PLM也可以作为data-efficient recommender systems来使用。
具体来说,给定用户历史交互序列,首先将所有的item映射到其对应的单词描述 ,并利用prompt  将item序列转换成文本序列 .  然后以multi-token inference的方式,用语言模型估计出下一个item的概率分布,即聚合item描述中每一个token的概率分布:
这也有两种计算方式:
实验表明,在zero-shot场景下,模型的表现要优于随机推荐的baseline,但仍存在较大的语言偏差,即语言模型总是试图预测一些通用的token,来使得生成的句子更流畅,而非预测更与item描述相关的token. 经过微调之后,尽管相比于zero-shot场景,语言偏差有了一定的减小,性能也有了较大提升,但仍然要弱于传统的序列推荐模型GRU4Rec

3. Personalized Prompt Learning for Explainable Recommendation

本文提出,已有的可解释推荐的工作大多通过LSTM,GRU或者未预训练的Transformer来生成解释,而没有使用强大的预训练语言模型。作者认为,对于推荐系统来说,User、Item IDs显然是非常重要的信号,但却与预训练模型中的单词不在同一个语义空间中。这便是将预训练语言模型引入可解释推荐的困难之处。为了解决这个问题,受prompt learning的启发,本文提出了两种解决方案:离散提示学习和连续提示学习,并提出通过sequential tuning和recommendation as regularization两种训练策略,解决连续提示和预训练模型不在同一个语义空间的问题。
  • 离散提示学习
为了解决ID和语言模型不在同一个语义空间的问题,一个很直接的想法就是用一些离散的token来表示ID,比如item的一些特征。将这些离散的单词作为prompt,也即所谓的离散提示学习。
具体来说,给定一个user u(或item i),我们可以获得训练集中所有与其相关的item的特征对于每一个user-item对,我们可以将其特征分为两组:user,item相关的特征和其余的特征显然前者包含了user,item共同的特征,因此具有更多的信息。此时离散prompt即为
而模型的输入即可表示为 ,其中 为离散prompt, 为需要生成的解释。
模型通过NLL loss进行优化,即:
  • 连续提示学习
尽管使用离散提示的思路是可行的,但是从ID到离散特征词的转换必然会损失信息。考虑到prompt并不必须是自然语言,也可以是向量等soft-prompt,为此,本文提出直接用user,item embedding作为soft prompt,即所谓的连续提示学习。然而,这种随机初始化的embedding仍然与已经训练好的预训练模型不在同一个语义空间中。本文提出了两种训练策略来解决这个问题:
1)Sequential Tuning Strategy:
首先冻结语言模型的参数 , 单独优化连续提示,当趋于收敛时,再同时优化

2)Recommendation as Regularization
本文提出引入了评分预测任务作为正则项。作者认为评分包含了user和item间的交互信息,因此可以使用评分来学习更好的user和item表示。
通过引入这两种学习策略,即可将连续提示对齐到预训练模型的语义空间中,从而进行连续提示学习。

4. Recommendation as Language Processing (RLP): A Unified Pretrain, Personalized Prompt & Predict Paradigm (P5)

本文指出,对于不同的推荐任务往往需要设计任务相关的模型架构和训练目标。因此很难将一个任务学到的知识和表示迁移到另一个任务当中,限制了模型的泛化能力。然而不同的推荐任务往往共享相同的用户-商品集合,并具有共同的特征。因此作者认为通过一个通用的框架来融合这些推荐任务,可以迁移不同任务间隐含的通用知识,不仅可以提升各项任务的性能,也可以改善模型的泛化能力。
为了解决这些问题,考虑到语言可以灵活的描述各项任务和问题,本文提出了一种灵活、通用的text-to-text框架:Pretrain, Personalized Prompt, and Predict Paradigm(P5). 通过设计一系列涵盖了不同推荐任务的个性化提示,并将所有的如用户-商品交互,商品元数据和用户评论等数据转换成相同的输入-输出文本对的形式,使得P5可以以sequence-to-sequence的形式,联合学习不同的推荐任务。
在这样的通用框架下,P5具有如下几个优点:
1. P5利用个性化模板将所有的推荐任务转换成了自然语言处理的任务,得益于自然语言足够灵活,且可以在文本模板中表达各种特征,P5不需要设计特征相关的编码器,从而可以充分利用隐含在不同任务训练语料中的丰富语义和知识。
2. P5将各类推荐任务融合进了一个统一的text-to-text encoder-decoder架构,可以将不同的任务视为相同的条件文本生成任务。在这种情况下,可以利用相同的语言模型的损失来统一训练这些任务,而不再需要设计任务相关的结构和目标函数。
3. 得益于训练时使用 instruction-based prompts,在泛化到新的个性化模板或者未见过的商品时,可以具有较好的zero-shot表现。
本文针对不同的推荐任务,设计了不同的个性化prompt,如:
  • 评分预测任务:1)给定用户和商品的信息,直接预测对应的评分。2)给定用户,商品和评分,预测用户是否会给商品打这个评分。3)给定用户和商品,预测用户是否喜欢该商品。
  • 序列推荐任务:1)给定用户历史交互序列,直接预测下一个商品。例如:2)给定用户历史交互序列和候选商品集合,从中预测出可能的下一个商品。3)给定用户的历史交互序列和商品,预测该商品是否会被交互。
  • 解释生成任务:1)给定用户和商品信息,直接生成解释文本。2)给定某个特征词作为提示,生成解释文本。
  • 评论相关任务:1)评论摘要。2)给定评论,预测相关评分。
  • 直接推荐任务:1)预测是否向用户推荐商品。2)从候选商品集合中选出最合适的商品来推荐。
模型使用了T5预训练模型,预训练阶段的各个推荐任务共同的优化目标即为
因此,各项推荐任务即可由one model,one loss, one data format联合优化。

5. M6-Rec: Generative Pretrained Language Models are Open-Ended Recommender Systems

与P5类似,本文关注于怎样基于预训练语言模型,设计一个统一的基础模型,来解决推荐系统中不同领域不同任务。
本文指出,工业界推荐系统逐渐变得越来越复杂,它可能涉及不同的领域,不同的任务。然而现在的主流方法仍然是针对每个任务设计单独的算法。因此作者认为构建一个统一的,支持开放领域和任务的基础模型是很有必要的。首先,在基础模型上的改进可以直接改善所有的下游领域和任务。其次,这样一个预训练的基础模型可以减少对任务相关数据的需求,这有利于处理一些数据稀疏的场景。最重要的是,它可以极大的减少计算资源的消耗。
为此,本文基于已有的生成式预训练语言模型M6,提出了M6-Rec,并将推荐系统中的任务转换成了语言模型可以处理的语言理解或语言生成任务。具体来说,M6-Rec将用户的行为数据转换成了纯文本,例如:“A male user in Beijing, who clicked product X last night and product Y this noon, was recommended product Z and did not click it. ” 。类似的,为了获取更好的泛化能力,M6-Rec并没有使用item ID,而是使用item相关的文本对其进行表征。并针对不同的下游任务,设计了不同的模板:
  • 1. 评分任务:[BOS′] ... [EOS′] [BOS] ... [EOS]

[BOS′] 和 [EOS′]中的文本用来描述用户相关的特征,并输入至M6的双向编码区域。而[BOS] 和[EOS]中的文本则用来描述候选商品相关的特征以及用户商品之间的交互特征,并输入至M6的自回归区域。随后M6-Rec使用[EOS]位置的最后一层向量作为样本的表示,通过将该表示输入至分类器,来优化评分任务。
2. 生成任务:
[BOS′] . . . [EOS′] [BOS] The user now purchases a product of category “. . . ” named “. . . ”. Product details: . . . The user likes it because . . . [EOS]
1)对于解释生成任务,推断时,在输入文本中加入‘because’,并将模型生成的文本作为本次推荐的解释。
2)对于个性化商品设计任务,要求模型根据用户属性和历史交互,预测出“ a product of category __ named __ ”。这可以用来识别用户可能感兴趣的关键词。
3. 检索任务:
User:[BOS′] . . .  [EOS′] [BOS] [EOS]
Item:   [BOS′] [EOS′] [BOS] . . . [EOS]
对于检索任务,M6-Rec首先将用户相关的信息输入至[BOS′],[EOS′]中,并将[EOS′]的最后一层表示作为用户向量;将商品相关的信息输入至[BOS],[EOS]中,并将[EOS]的最后一层表示作为商品向量。通过优化 
来调整模型。
为了减小推荐系统的推理延迟,本文在late interaction的基础上提出了multi-segment late interaction. 简单来说,M6-Rec会提前计算和缓存Transformer前L'层的结果,而在用户请求到达时,再实时的计算后L-L‘层的结果。值得注意的是,在计算前L’层结果时,并不是在完整的输入中计算,而是会先将这些输入分成若干个段,分别计算。例如,当输入为“Male. Clicked X. Clicked Y. Will click Z?”时,会先分块为 “Male. ”, “Clicked X. ”, ”Clicked Y. ”, and “Will click Z?”,并分别计算,缓存。当遇到输入为“Female. Clicked Y. Will click Z?”,即可直接读取 “Clicked Y. ”和“Will click Z?” 的结果。
总结
本文针对近期利用预训练语言模型解决推荐任务的工作进行了简要介绍。从这些文章中我们可以看出,随着大模型的不断发展,存储的知识越来越多,其能力也越来越强悍。通过将推荐任务描述成语言模型可以建模的自然语言处理任务,可以将预训练语言模型有效地应用到推荐领域当中,解决推荐任务。这也是自然语言处理和推荐系统的进一步融合。

更多推荐



一文速览跨域推荐系统中的图神经网络






KDD 2022 | 通过知识增强的提示学习实现统一的对话式推荐




8个扩展子包!RecBole推出2.0!



点击下方“阅读原文”前往知乎专栏
↓↓↓


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存