SIGIR'2023 Generative Sequential Recommendation with GPTRec

Generative Sequential Recommendation with GPTRec

来源:SIGIR 2023

摘要:顺序推荐旨在预测序列中的下一个项目。最近,基于transformer的SASRec和BERT4Rec等模型,已经在顺序推荐中取得了最先进的结果。然而,这种方法也有其局限性。首先,项目id数量可能比语言模型中的词汇数量大很多倍。其次,这些模型所使用的经典Top-K推荐方法可能对复杂的推荐目标不是最优的,包括辅助目标,如多样性、覆盖率或一致性。生成语言模型的最新进展激励我们重新审视生成方法来解决这些挑战。本文提出了基于GPT-2架构的GPTRec顺序推荐模型。GPTRec可以通过使用一种新的SVD标记算法将项目id分解为子id标记来解决大型词汇表问题,并达到较好的效果。本文还提出了一种新的Next-K推荐策略,它考虑到已经推荐的项目,逐个生成推荐。Next-K策略可用于生成复杂的相互依赖的推荐列表。

1. nextK策略与topK策略

    现有的顺序模型通常使用分数排名的方法来生成推荐(我们也称之为Top-K策略)。这种方法的问题是,项目是独立得分的,相似的项目很可能有相似的分数。在这种情况下,模型的输出很可能是由类似类型的项所主导的,这可能是次优的,有时向用户显示不同类型的项会更好。Top-K策略的基本问题是,它假设每个项目都可以独立于其他推荐的项目进行评分,然而这一建议在现实中并不一定能够得到保证。

    因此,作者提出了一种生成式的Next-K策略,即逐项生成推荐。在这种情况下,当模型在位置𝐾中生成推荐时,它已经知道在位置1..𝐾−1中推荐了哪些项目,并可以相应地调整结果。更正式地说,项目得分不仅取决于用户和项目,还取决于以前的推荐:𝑓(𝑢𝑠𝑒𝑟,𝑟𝑒𝑐𝑜𝑚𝑚𝑒𝑛𝑑𝑒𝑑_𝑖𝑡𝑒𝑚𝑠,𝑖𝑡𝑒𝑚)→𝑠𝑐𝑜𝑟𝑒。该模型迭代地评分所有项目(不包括已经推荐的项目),以生成建议,并将得分较高的项目添加到𝑟𝑒𝑐𝑜𝑚𝑚𝑒𝑛𝑑𝑒𝑑_𝑖𝑡𝑒𝑚𝑠列表中。算法2用伪代码的形式说明了该策略。因为Next-K策略考虑了已经推荐的项目,所以它可能会解决经典Top-K策略的问题,如缺乏多样性。


图1 NEXT-K策略

    Next-K策略的一个限制是它的计算成本更高:它需要为用户生成完整的分数分布𝑘次,而Top-K策略只需要每个用户一个推理。另一个问题是,评分函数现在有了更多的输入参数(即考虑了已经推荐的项目),因此训练这样的函数可能具有挑战性。总之,在本节中,作者描述了一个流行的Top-K推荐策略,并确定了该策略的局限性。

2. Tokenisation

    现有的基于transformer的顺序推荐模型,如SASRec和BERT4Rec使用项目id作为基本单位,然而,正如前面所讨论的,当项目数量很大时,这种方法会导致过大的嵌入表,这很难容纳到单个GPU中。

    语言模型,如BERT 和GPT-2 ,通过将整个单词分解为子单词token来解决类似的问题。子单词标记化的示例策略包括Word Piece encoding(由BERT使用)和Byte-pair encoding的字节对(由GPT家族使用)。受此想法的启发,作者希望将项目划分为子项,以减少内存占用,详细的方法在第3节中说明,这里先来看看文本中的 subtokenisation方法。

2.1 Byte-pair encoding

    最原始的分词方法是按空格分token(也就是word粒度)。该方法的缺点在于:word粒度考虑的是根据单词整体在语料中的共现建vocabulary,因此:1、不能很好地处理缺失词以及稀缺词(生疏词),也就是OOV(out of vocabulary)问题。2、不利于模型学习到相同word的不同时态,以及不同词缀之间的关联。比如:模型学到的“old”, “older”, and “oldest”之间的关系无法泛化到“smart”, “smarter”, and “smartest”。

    针对上述问题,Subword(子词)模型方法横空出世。它的划分粒度介于词与字符之间,比如可以将”looking”划分为”look”和”ing”两个子词,而划分出来的"look",”ing”又能够用来构造其它词,如"look"和"ed"子词可组成单词"looked",因而Subword方法能够大大降低词典的大小,同时对相近词能更好地处理。

    一种典型的Subword方法是Byte-Pair Encoding(BPE),BPE获得Subword的步骤如下:1)准备足够大的训练语料,并确定期望的Subword词表大小;2)将单词拆分为成最小单元。比如英文中26个字母加上各种符号,这些作为初始词表;并在词表的末尾添加后缀“</w>”。3)在语料上统计单词内相邻单元对的频数,选取频数最高的单元对合并成新的Subword单元;4)重复第3步直到达到第1步设定的Subword词表大小或下一个最高频数为1.

    得到Subword词表之后,需要对输入模型的句子中的单词进行编码,编码流程如下:1)将词典中的所有子词按照长度由大到小进行排序;2)对于单词w,依次遍历排好序的词典。查看当前子词是否是该单词的子字符串,如果是,则输出当前子词,并对剩余单词字符串继续匹配。3)如果遍历完字典后,仍然有子字符串没有匹配,则将剩余字符串替换为特殊符号输出,如”<unk>”。4)单词的表示即为上述所有输出子词。

3. GPTRec

3.1 结构

    GPTRec是为生成顺序推荐而设计的,它使用了GPT-2架构,而GPT-2又基于transformer模型的解码器部分。GPT-2对transformer模型有一些小的修改,如:1)将层标准化移动到transformer的开始;2)利用比例残差权值实现修正的初始化;3)使用可学习的位置编码,而不是基于线性的编码。本文对结构没有改动,因此也没有详细赘述。

3.2 Tokenisation策略


图2 SVD标记化算法

   作者提出了一种基于svd的标记化算法。图2说明了该算法的主要三个步骤。首先(图中的步骤1),SVD标记化算法构建了一个用户-项目交互矩阵𝑀,并使用𝑡的潜在分量对该矩阵进行了截断的SVD分解:


式1 SVD分解

    式中,𝑈为用户嵌入矩阵,𝐸为项目嵌入矩阵,Σ为对角线上具有𝑡个最大奇异特征值的对角线矩阵。因此,用户嵌入和项目嵌入都有𝑡个潜在组件。

    在图2的第2步中,对项目嵌入𝐸进行归一化,使每个嵌入维都在[0..1]区间内,并添加少量高斯噪声,以确保没有两个项目具有相同的嵌入(如果完全相同的用户与两个项目交互,可能会发生相同的嵌入)。之后,SVD标记化将项目嵌入的每个维度量化到𝑣个值中;量化嵌入中的每个值代表项目最终表示中的一个标记。直观地说就是将项目嵌入根据预先设定的v值进行分桶,比如图中设定v为2,则将嵌入中第一列的值分桶到0,1和2中(0.2和0.1分类到0,0.4分类到1或者2(因为有噪声),0.5分类到2),同理第二列的值也分桶到0,1和2中。

    最后,(图2的第3步)算法用𝑣∗(𝑖−1)抵消了嵌入的第i维偏移,以确保项目表示的每个维度都有其标记范围(即第一个维度用标记表示[0..𝑣−1],第二个维度用标记表示[𝑣..2𝑣−1],以此类推。

    算法3用伪代码说明了这个过程,通过以上处理,该模型现在只需要存储𝑡×𝑣大小的嵌入。


图3 SVD标记化伪码


图 4 不同v和t下的优化效果

    存储嵌入所需的GPU内存量并不依赖于目录中项目的总数;这类似于固定大小的标记词汇表如何通过在语言模型中组合不同的标记来表示数百万个不同的单词。例如,正如我们前面提到的,为10M项目存储嵌入表需要超过10GB的GPU内存。然而,使用𝑡=8和𝑣= 2048以多项标记模式为同一数据集嵌入一个表只需要16MB的GPU内存(仅为原始嵌入表大小的0.16%)。图4说明了对几个可用的推荐系统数据集的类似计算和SVD标记化算法的不同配置。

3.3 训练目标和损失

    根据GPT-2 ,作者使用具有交叉熵损失的语言建模目标来训练模型。该方法将一个标记序列的概率分解为𝑆={𝑠1,𝑠2,…𝑠𝑛}作为条件概率的乘积:


式2

    然后,利用最大对数似然原理,由公式(2)推导出损失函数:


式3

    其中,p()由softmax进行计算,像语言模型一样,这样的策略使GPTRec能够实现Next-K推荐方法。

3.4 生成推荐策略

1)Top-K生成,每个项目只有一个标记。GPTRec支持Top-K推荐策略。在最简单的情况下,当一个项对应于一个标记时,建议的生成类似于SASRec。GPTRec输出序列中每个位置的下一个标记的概率分布𝑝(𝑠𝑖|𝑠1,𝑠2,..𝑠𝑖−1),这意味着最后一个概率分布对应于序列中的下一个最有可能的项。在这种生成模式下,GPTRec使用这最后的概率分布作为项目评分,并应用标准的Top-K评分。

2)Top-k生成,每个项目多标记。GPTRec支持具有多标记项的Top-K任务。在这种情况下,模型使用标准的GPT-2自回归生成输出𝐾候选项:每次,模型预测下一个标记的概率分布,然后从该分布中抽取一个标记。这个标记被添加到输入序列的末尾,并重复这个过程,直到模型生成𝑡标记,其中𝑡是每个项目表示中的标记的数量。在生成候选项后,模型使用公式(2)所描述的链规则对候选项进行评分。

3)Next-k生成,每个项目只有一个标记。在这种情况下,推荐列表是使用Next-K过程(算法2)生成的。在每次迭代中,该模型将用户的交互序列与已经生成的推荐序列连接起来,并生成下一个最有可能的项目。

4 实验

4.1 整体效果


图5 不同模型在Movielens上的效果对比

   图5表现了不同模型在Movielens上的效果对比,以及GPTRec使用NextK策略的效果。 可以看出,GPTRec-TopK的结果与SASRec和BERT4Rec的结果相似,如NDCG@10为0.146,优于SASRec的结果(0.108,+35%),但与BERT4Rec的结果相比(0.152,-4%)相当。通过召回@10指标测量的结果也遵循相同的模式: GPTRec的召回@10达到0.254,略低于BERT4Rec的结果(0.282),但优于SASRec的结果(0.199)。总的来说,我们可以说GPTRec-TopK的结果与BERT4Rec相当,并且优于SASRec。观察GPTRec-TopK比SASRec表现更优,当GPTRec在具有Top-K生成策略的单项标记模式下使用时,它与SASRec的主要区别是损失函数(GPTRec中的交叉熵vs。SASRec中的二值交叉熵),这证实了交叉熵损失对于下一个项目的建议更好。另外,可以看到GPTRec-NextK的性能比其他模型更差。这并不奇怪:我们认为该方法可能需要更复杂的调优技术,如强化学习,以便在下一代k模式中表现良好。然而,从表中可以看出,该模型实现的NDCG@10与SASRec的非常相似,这意味着该模型可以作为进一步调优的强起点。

4.2 多标记数的消融实验


图6 多标记令牌的效果对比
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容