GPTRec的生成顺序推荐
from: SIGIR'23
该论文提出了基于GPT-2架构的序列推荐模型,即GPTRec。GPTRec使用基于SVD分解的SVD Tokenisation算法将item ID分解为item子ID来解决item embedding表过大问题。同时,提出了一种Next-K推荐策略,来解决Top-K推荐策略不灵活问题。实验结果表明,使用商品子ID的GPTRec可以在减少embedding表40%的情况下,与SASRec模型的性能相当。此外,使用Next-K推荐策略的GPTRec生成的推荐结果在NDCG@10指标上与SASRec相当,为未来研究提供了强有力的起点。
摘要
基于Transformer的模型,如SASRec和BERT4Rec,取得了最先进的结果。在这些模型中,项目id替换语言。然而,这种方法有局限性。
1)首先,项目id词汇表可能比语言模型中的词汇表大很多倍。
2)其次,这些模型使用的经典Top-K推荐方法对于复杂的推荐目标,包括多样性、覆盖率或一致性,可能不是最优的。
本文提出了基于GPT-2的GPTRec顺序推荐模型。GPTRec可以通过使用用户-项目交互矩阵的新的SVD token算法,将项目id划分量化项目为子id token来解决大型词汇表问题。
本文还提出了一种新的Next-K推荐策略,该策略在考虑已经推荐的项目的情况下,逐项生成推荐。Next-K策略可用于生成复杂的相互依赖的推荐列表。
我们在MovieLens-1M数据集上使用GPTRec进行了实验,嵌入表减少40%,效果和SASRec相当。同时,GPTRec在MovieLens-1M上使用Next-K推荐策略生成的推荐在NDCG@10上与SASRec的质量相当,这意味着该模型可以作为未来研究的有力起点。
1.简介
在架构上,GPTRec与现有的SASRec模型相似。然而,GPTRec支持Next-K推荐策略,从而实现更灵活的目标。此外,GPTRec可以使用子项标记化,这有利于降低GPU内存消耗。GPTRec还使用与SASRec相比不同的损失函数(交叉熵而不是二进制交叉熵);从经验上看,我们证明这种变化是有益的。我们在MovieLens-1M数据集上评估了GPTRec,并展示了生成技术解决所讨论挑战的可行性。我们观察到,尽管我们没有针对Next-K一代专门调整GPTRec,但它实现了类似于SASRec的强大排名质量(NDCG@10 : GPTRec 0.105 SASrec 0.108 )。我们还观察到,将SVD Tokenisation与GPTRec一起使用可以将嵌入表大小减少40%,同时实现与SASRec相当的排名(两者都具有NDCG@10 0.108)。简而言之,我们将本文的贡献总结如下:
1.我们提出了一种新的Next-K推荐策略,作为传统Top-K推荐的替代方案,并通过证明GPTRec在Next-K生成模式下可以获得与SASRec类似的结果来证明其可行性。
2.我们提出了一种新的基于SVD的子项目标记化和逐个标记的项目生成方法。我们展示了减少嵌入表大小的潜力。我们还表明,我们的方法可以实现与SASRec类似的结果,同时嵌入表所需的存储空间更少。
3.我们提出了基于GPT-2体系结构的生成序列推荐模型GPTRec。我们表明,它实现了与基于Transformer的模型类似的结果(优于SASRec,与BERT4Rec相当)。然而,与BERT4Rec相比,GPTRec是一个生成模型,使用SVD Tokenisation来提高内存效率,并且使用Next-K生成策略更灵活。
4.我们确定了拟议方法的局限性,并确定了在未来工作中克服这些局限性的策略。
论文的其余部分组织如下:第2节涵盖了与生成顺序推荐相关的现有工作;第3节讨论了现有Top-K推荐策略的局限性,并提出Next-K作为替代方案;在第4节中,我们介绍了GPTRec;第5节将GPTRec与现有的基于Transformer的模型进行了比较;第6节涵盖GPTRec的实验评估;第7节包含了进一步工作的方向、相关IR任务的影响以及结论性意见。
2.相关工作
2.1语言模型对顺序推荐系统的适应性
最近,许多推荐模型采用了Transformer架构的变体,该架构最初也是为寻址机器翻译而设计的。例如,两个最流行的基于Transformer的顺序推荐器是(i)SASRec,它使用Transformer模型的解码器部分,并被训练为将项目的输入序列向左移动一个元素(在语言模型中,该任务也称为语言建模任务,LM)和(ii)BERT4Rec,相比之下,被训练以从序列中恢复masked项(这被称为掩蔽语言建模,MLM)。
其他更新的基于Transformer的序列模型包括DuoRec、CBiT、ALBERT4Rec和许多其他模型。虽然这些工作稍微改变了体系结构或通过额外的训练任务增强了模型,但它们都共享一个Transformer编码器或一个TransformerDecoder作为其体系结构的主要组件。尽管在排名NDCG@K指标方面取得了最先进的结果,但这些模型采用的Top-K推荐策略不够灵活,无法优化多样性或偶然性等其他指标;当目录中的项目数量高时,这些模型还受到高GPU要求的影响。这些问题和生成模型的最新进展促使我们应用生成方法进行顺序推荐。
2.2.预训练的文本生成模型
大型语言模型,如T5和GPT-3的出现表明,预训练的文本生成模型可以作为通用的问题解决器,并可以应用于一大类任务。
这一点在最近的作品中得到了特别的推荐。例如,P5模型使用文本生成直接将项目和用户ID生成为文本字符串。M6 Rec模型直接生成项目标题作为推荐。TIGER引入了语义id的概念,其中项目被表示为从其附带信息(如产品类别)派生的一组令牌。虽然使用预先训练的模型进行推荐是一个有趣的研究方向,但它与我们的不同。事实上,这些模型依赖于预先训练的模型的存在,这些模型封装了关于世界的知识(包括关于推荐领域的知识),因此,可以被视为具有辅助信息的推荐系统。相反,我们不依赖任何辅助信息,而是研究一种更经典的顺序推荐,其中模型唯一可用的数据是交互序列。这使我们能够更好地理解生成方法的特性,并将其与辅助信息可用性的好处脱钩。
虽然本文关注的是顺序推荐任务,但所讨论的问题与Generative IR的更广泛领域有关。事实上,在Generative IR任务中,它直接为给定查询生成文档ID(docids),在最近的Generative IR出版物中,大量的docid(项目的等价物)和将原子文档id拆分为token的技术经常被提及为中心问题之一。最近的一些论文专门关注亚文档标记化,并启发我们开发一种类似的推荐系统技术。本文中描述的基于SVD的标记化(或者更广泛地说,基于嵌入的标记化)可以适用于IR领域,并有助于解决IR中的缩放问题。复杂的相互依存搜索结果也是IR研究的一个活跃领域,例如,包括结果多样性和公平性。本文提出的Next-K策略可以帮助解决这些问题。
总之,现有的基于Transformer的顺序推荐模型在排名指标方面实现了高质量,但它们不灵活,无法针对其他指标进行优化,并且对GPU内存要求很高。另一方面,最近的工作显示了预先训练的语言模型在顺序推荐问题上的潜力。然而,它们依赖于附带信息和预先存在的知识,而这些信息并不总是可用或可靠的。为了解决客观灵活性问题,在下一节中,我们提出了一种next-K推荐策略,作为Top-K的替代方案,专门设计用于与生成模型良好配合。然后,我们在第4节中描述了GPTRec,它可以利用Next-K策略,并可以使用SVD Tokenisation来减少GPU内存消耗。
3.Top-K和Next-K
在本节中,我们讨论了经典的Top-K推荐方法(BERT4Rec和SASRec)及其基本局限性,并为生成模型提出了一种新的Next-K替代方法。
3.1.Top-K策略
推荐系统的最终目标是向用户提供可能引起用户兴趣的项目列表。解决这一问题的最典型方法是Top-K推荐策略。在该策略中,推荐模型𝑓 (𝑢𝑠𝑒𝑟,𝑖𝑡𝑒𝑚) → 𝑠 返回估计的相关性得分𝑠 每个(𝑢𝑠𝑒𝑟,𝑖𝑡𝑒𝑚) 配对(在顺序推荐的情况下,𝑢𝑠𝑒𝑟 实际上被表示为一系列交互)。为特定用户生成推荐𝑢, 推荐系统使用模型𝑓 生成所有项目相关性得分,然后选择𝑘得分最高的项目作为推荐。算法1使用伪代码说明了这种策略。
Top-K策略的根本问题是,它假设每个项目都可以独立于其他推荐项目进行评分。然而,当建议需要相互依存时,Top-K战略失败了。例如,存在一个问题:如果用户最近购买了一台咖啡机,他们很可能会购买咖啡豆作为下一次购买。因此,向用户推荐咖啡豆是一个很好的策略。然而,出售的咖啡豆可能有许多不同的变体。每种变体都可能有很高的推荐分数,所以大多数推荐项目都是咖啡豆。这导致了重复的推荐(只推荐1-2种咖啡就足够了)和对用户其他兴趣的糟糕表达。多样化的重新排序方法,如MMR和多方面可以解决冗余和多样性问题,但它们带来了复杂性增加、计算增加和训练困难等挑战。此外,这些方法可能需要广泛的超参数调整来实现最佳性能。训练一个具有相互依存的模型会更有效,而不是重排。
Top-K推荐系统可能无法解决的其他问题包括互补商品推荐(例如,我们可能想推荐彼此合身的时尚商品)、偶然发现(有时我们想帮助用户发现新商品,但前提是我们已经推荐了他们感兴趣的商品),以及覆盖范围(我们可能希望确保我们的建议能够很好地覆盖系统的目录)等。我们现在引入Next-K推荐策略,能够解决这些问题。
3.2.Next-K策略
Next-K是推荐策略,推荐系统决定在𝑘位置推荐什么,只有在位置1..𝑘 −1生成之后建议。更正式地说,项目得分不仅取决于用户和项目,还取决于以前位置的推荐:𝑓 (𝑢𝑠𝑒𝑟, 𝑟𝑒𝑐𝑜𝑚𝑚𝑒𝑛𝑑𝑒𝑑_𝑖𝑡𝑒𝑚𝑠,𝑖𝑡𝑒𝑚) →𝑠𝑐𝑜𝑟𝑒. 该模型迭代地对所有项目(不包括已经推荐的项目)进行评分以生成推荐,并将得分最高的项目添加到𝑟𝑒𝑐𝑜𝑚𝑚𝑒𝑛𝑑𝑒𝑑_𝑖𝑡𝑒𝑚𝑠 列表。因为Next-K策略考虑了已经推荐的项目,它可能会解决经典的缺乏多样性和用户兴趣代表性差的Top-K策略问题。
Next-K策略的一个局限性是计算成本更高:它需要生成K次,而Top-K策略每个用户只需要一次推理。另一个问题是,评分函数也有更多的输入参数(即,除了用户id和项目外,它还考虑了已经推荐的项目),因此训练这样的函数可能具有挑战性。
4 GPTRec
4.1.架构
生成顺序推荐GPTRec利用了GPT-2架构,该架构基于Transformer模型的解码器部分。对GPT-2中的原始Transformer模型进行了一些小的修改,例如:
1.将归一化层移动到Transformer块的开始;
2.利用缩放残差权重实现修正初始化;
3.采用可学习的位置编码而不是基于正弦的编码。
4.2.Tokenisation
类似于现有的基于Transformer的顺序推荐模型,如SASRec和BERT4Rec,GPTRec可以在原始GPT模型中使用项目ID而不是tokens。我们将此称为token-per-item模式。然而,如第1节所述,当目录中的项目数量很大时,这种方法会导致庞大的嵌入表,很难放入单个GPU中。
语言模型,如BERT和GPT-2,通过将整个单词拆分为子单词标记来解决类似的问题。子词标记化的示例策略包括Word Piece encoding(由BERT使用)和Byte-pair encoding(由GPT家族使用)。受此想法的启发,GPTRec还可以将项目拆分为子项目,以减少内存占用。在这种情况下,每个项目都使用t个tokens来表示,其中t个tokens中的每一个都可以从v个备选方案中选择。我们称之为multi-token-per-item 模式。
作为一种将项目分解为子项目tokens的简单启发式算法,我们提出了一种基于SVD的Tokenisation算法。图1展示了该算法的主要三个步骤。
首先(图中的步骤1),SVD Tokenisation 算法构建用户-项目交互矩阵M,并使用𝑡的潜在分量对该矩阵进行了截断的SVD分解:
𝑈 是用户嵌入的矩阵,𝐸 是项嵌入的矩阵,∑为对角线上具有𝑡个最大奇异特征值的对角线矩阵。因此,用户嵌入和项目嵌入都有𝑡个潜在组件。
在图1的步骤2中,项目嵌入𝐸 归一化,使得每个嵌入维度都在[0..1]区间内,并添加少量高斯噪声以确保没有两个项目具有相同的嵌入(如果完全相同的用户与两个项目交互,则可能发生相同的嵌入)。在我们的实验中,我们使用均值为零、标准偏差为的高斯噪声,这比嵌入值本身的尺度小几个数量级(归一化后它们在[0..1]范围内)。之后,SVD Tokenisation将项目嵌入的每个维度量化到𝑣个值中;量化嵌入中的每个值表示项目的最终表示中的一个token。
最后,(图1的步骤3)算法用偏移 量化嵌入的维数𝑣 ∗ (𝑖 − 1) 以确保项目表示的每个维度都有其范围(即,第一个维度由令牌表示[0..𝑣 − 1] ,第二个维度由令牌表示[𝑣 .. 2𝑣 − 1] 等等)
算法3用伪代码说明了这个过程。模型现在只需要存储t×v个嵌入,而不是每个项目存储一个嵌入。
4.3训练目标和损失函数
根据GPT-2,作者使用具有交叉熵损失的语言建模目标来训练模型。语言建模方法将标记序列的概率因子化𝑆 = {𝑠1.𝑠2...𝑠𝑛} (在GPTRec中,𝑠𝑖 表示项目或子项目令牌)作为条件概率的乘积:
然后使用最大对数似然原理从等式(2)导出损失函数:
类似于GPT-2,𝑝(𝑠𝑖|𝑠1.𝑠2.𝑠𝑖−1) 被建模为softmax(·)操作第 模型的输出,因此总体而言,模型被训练为将其输入向左移动一个令牌。模型预测的最后一个令牌是没有出现在输入序列中的新令牌。这种移位的序列可以反馈到模型中,这使我们能够实现Next-K推荐方法,以提高灵活性,并利用多令牌包围模式来提高GPU效率。
4.4使用GPTRec生成推荐
4.4.1 Top-K,one-token-per-item.
GPTRec支持Top-K推荐策略。在最简单的情况下,当一个项目对应于一个token时,推荐的生成与SASRec类似。GPTRec输出概率分布𝑝(𝑠𝑖|𝑠1.𝑠2.𝑠𝑖−1) 序列中每个位置的下一个标记,这意味着最后一个概率分布对应于序列中下一个最有可能的项目。在这种生成模式中,GPTRec使用最后一个概率分布作为项目得分,并应用标准的Top-K得分(见第3.1节和算法1)
4.4.2 Top-K,multi-token-per-item.
GPTRec支持的下一代策略是具有多token的Top-K生成。在这种情况下,模型使用标准GPT-2自回归生成输出𝐾候选项:每次,模型预测下一个token的概率分布,然后从分布中采样一个token。该token被添加到输入序列的末尾,并且该过程重复,直到模型生成𝑡 token,其中𝑡是每个项目的token数。在生成候选者之后,模型使用等式(2)所描述的链式规则对候选者进行评分。最后,该模型将标准的Top-K策略算法1应用于项目集,假设任何未作为候选生成的项目都具有-∞分数。
请注意,使用此过程,某些生成的序列可能与任何有效的项目id都不对应;该模型忽略这些无效序列。一些生成的候选者也可能重复。在实践中,这意味着候选人的数量𝐾 与所需的推荐项目数量相比,必须选择的项目数量相对较高;例如,我们使用𝐾 = 50,尽管我们只需要十个项目就可以生成推荐。
4.4.3 Next-K,one-token-per-item。
在这种情况下,使用Next-K过程生成推荐列表(算法2)。在每次迭代中,模型将用户交互的顺序与已经生成的推荐的顺序连接起来,并生成下一个最有可能的项目。Next-K策略也相当于语言模型中的贪婪搜索token生成策略。
请注意,在这种情况下,训练目标与生成过程有些不一致。事实上,该模型被训练来预测下一个token,而不是下k个token。因此,我们预计随着𝐾增长,质量下降。 为了使训练程序与Next-K生成程序保持一致,该模型需要更高级的训练目标,例如InstructGPT[16]论文中描述的强化学习技术。然而,这些技术需要一个已经可以生成一些合理序列的模型。因此,在本文中,我们检验了为Top-K生成训练的模型是否可以在Next K模式中返回有意义的建议,并为未来的工作留下强化学习微调。
5 GPTRec与SASRec和BERT4Rec的比较
在本节中,我们将GPTRec与两个最流行的基于Transformer序列模型进行比较,即SASRec和BERT4Rec。SASRec是与GPTRec最相似的模型。事实上,这两个模型都使用Transformer架构的解码器部分,并被训练为将输入序列向左移动一个元素。然而,GPTRec与SASRec的不同之处在于使用交叉熵损失(也称为Softmax损失),而SASRec是使用二进制交叉熵损失进行训练的。交叉熵损失的使用直接来源于最大对数似然原理。相反,SASRec使用的二进制交叉熵是一种启发式方法,如我们在第6节中所示,与交叉熵损失相比,其表现不佳。另一方面,BERT4Rec使用交叉熵损失,但它使用掩蔽语言建模任务(MLM;也称为Cloze或项目掩蔽),该任务与下一个项目预测任务不太一致。BERT4Rec与GPTRec的不同之处还在于BERT4Rec使用Transformer的编码器部分,而SASRec和GPTRec使用解码器部分。
第二,SASRec只支持one-token-per-item模式下的Top-K推荐。相比之下,GPTRec还支持multi-token-per-item模式以减少内存占用,以及Next-K推荐策略,该策略可用于使用强化学习等技术学习更高级的推荐目标。
总之,与现有模型相比,GPTRec在multi-token-per-item模式下训练时,GPU内存效率更高。它还允许使用Next-K生成策略生成更灵活的推荐。表3的左侧还描绘了这些模型的显著特征。在下一节中,我们对GPTRec进行了实验评估,将其与SASRec和BERT4Rec进行了比较,并对其在每项多token和next-K生成模式下的性能进行了实验研究。
6.实验
实验结果表明,使用商品子ID的GPTRec可以在减少embedding表40%的情况下,与SASRec模型的性能相当。此外,使用Next-K推荐策略的GPTRec生成的推荐结果在NDCG@10指标上与SASRec相当,为未来研究提供了强有力的起点。