前言
文章发表在2020年RecSys会议,提出了一个SSE-PT(随机共享Embedding的个性化Transformer)模型。论文将SASRec作为靶子,在各个方面(个性化、精度、收敛速度等)进行对比,展现了模型的优越性。并且,对于处理长序列时,提出了一种策略。本篇分享笔记是第二次阅读论文时写下的,很多地方提出了自己的思考与讨论。
本文约2.6k字,预计阅读10分钟。
概要
整篇论文指向了SASRec模型最大的一个问题:「非个性化」。这是作者的动机,因此提出了一个SSE-PT的个性化模型,模型主要是以Transformer模型作为主要的框架,加入了作者2019年自己提出的「Stochastic Shared Embeddings」正则化技术,组成了整个模型。其中,我认为本文还有两个关键的点是:
如何使模型具有个性化?
如何去处理长序列的情况?
文章在方法和实验中,证明了SSE-PT模型的有效性,以及个性化的体现。
模型
作者提出的SSE-PT模型受两部分内容启发:
Transformer模型;
一个新的正则化技术stochastic shared embeddings(SSE,随机分享embedding),与论文是同一作者;
接下来对于序列推荐的定义、SSE-PT模型结构、SSE和SSE-PT++进行解释与讨论。
序列推荐
对于 个用户,每个用户都包含一个历史浏览物品子集。假设 个用户的物品历史序列为:
其中序列 包含用户 的最近 个历史物品。
序列推荐的目标是去学习一个对所有 个物品中最重要的 个物品的个性化排序。
SSE-PT结构
以下是整个模型的整体结构,如下所示:
Embedding Layer
首先定义用户、物品的Embedding映射矩阵 ,其中 分别表示用户、物品的embedding维度。
其次定义一个「可学习」的位置编码(positional encoding)表, ,其中 。
因此我们可以将一个输入序列 表示为:
其中 表示 时刻的物品embedding与用户 的embedding进行拼接。
【注】作者在这里解释,与SASRec的不同之处是,加入了用户embedding,增加了一种个性化,其实SASRec中也考虑过在最终用户表示中加入user embedding,不过发现没有提升性能。对于是否这种方法是否增加了个性化,文章似乎并没有验证,个性化作者是认为归功于SSE。
Transformer Encoder
作者采用了 个blocks【self-attention + fully connected】,与SASRec相同。
Prediction Layer
在时间 ,用户 对物品 的预测概率为:
其中 为sigmoid函数,而 表示Transformer编码层最后得到的用户表示与物品的表示(本文是用户 的embedding与物品 的embedding进行拼接)作「内积」计算得到的分数【常规做法】:
【注】作者指出,此处的
与
与使用的是另一个Embedding矩阵,即与Transformer的输入并「不共享」,而SASRec是进行共享的。作者在实验中发现最终的结果比共享要好。为了进行区分,一个叫做input embedding
,另一个叫做output embedding
。
Objective function
依旧是采用一个二元损失函数,对于每一个正样本,都相应的采样一个负样本 ,最终的目标函数为:
正则化技术---Stochastic Shared Embeddings
本文最重要的创新就是采用了SSE正则化技术(毕竟是作者自己提出来的,自产自销...)。并且,作者认为,「对随机共享嵌入(SSE)正则化的应用是个性化成功的关键」【没理解为什么】。简单的阐述下SSE的主要思想:
❝SSE的主要思想是在SGD中将Embedding内容以事先定义好的概率 随机替换为另一个Embedding内容,从而使Embedding层具有正则化的效果。
❞
作者认为,如果没有SSE,现有的所有著名的正则化技术,如layer normalization,dropout和weight decay都会失效,不能防止模型在引入用户Embedding后出现严重的过拟合。
【注】因为没有具体看SSE的原文,所以没大理解上述提到的内容(翻译)。
SSE具有SSE-Graph和SSE-SE两个版本。SSE-SE在三个地方使用到,input/output user embedding
(采用相同的概率)、input item embedding
和output item embedding
,概率分别为
。实验中,作者发现,user embedding
和output item embedding
是有效的,而input item embdding
则是当序列很长时(超过100)才有效。
长序列处理---SSE-PT++
对于很多序列模型,处理序列的长度是有限的,并且序列越长,模型的时间复杂度更高(SSE-PT的时间复杂度为 。作者假设,SSE-PT模型只能处理最长为 的序列。那么对于的序列如何进行处理?
当然是减少历史序列物品的数量。最简单的方式就是对于每个序列开始的索引( )进行一个平均采样,那么就会得到一个序列 ,其中 。虽然从 均匀地采样起始索引可以适应长序列的长度,但是这样没有考虑长序列中近期物品的重要性。
因此,作者提出,使用一个超参数---采样概率 ,即:
均匀采样 为起始索引,序列为的概率为 ;
使用最近 个物品 的概率为 ;
以上其实是对长序列如何进行采样的一种「策略分析」,为了与SSE-PT模型进行区分,对于处理长序列的模型,作者将其命名为SSE-PT++。
【注】简单来说,对于长序列来说,如何对序列进行采样,才能保证其中对于预测下一次交互的物品有帮助的信息尽可能的不丢失。我之前考虑的是,常规做法不应该直接取最近 个物品来处理长序列么?但是这样处理似乎也不妥,虽然近期的物品很重要,但是更早的序列也会对预测下一个物品产生作用。这让我想起了Caser模型,采用跳跃的方式来预测下一个物品,这是有意义的。所以现在认为作者采取的策略也是本文的一个亮点。后面的结果也证明了这个观点,并不是采样概率为 的结果最好:
实验
「数据集」
「评价指标」:
Recall与NDCG。评估时,与SASRec一样,采用100个负样本和1个正样本。
「实验结果」:
可以看到,相对于SASRec模型,本文的SSE-PT模型还是有很大的性能提升。
「注意力的可视化分析」:
为了证明SSE-PT模型是一个个性化的,作者通过Attention机制的可视化进行了说明,也是本文实验比较有意思的一个点。
由于图比较大,很难看清楚,这里直接口述。文章举例一个用户,在早期喜欢看各种各样不同风格的电影,但是到了后期(最近),集中于戏剧和惊悚片。特别是戏剧,在最近的10部电影中,有9部都是。作者提到,对于人来说,很容易给他推荐戏剧类型的电影,那么对于机器的推理呢?
【注】其实这也是有一些序列推荐模型,例如STAMP强调的,短期兴趣的重要性。
对于SSE-PT,推荐了3部戏剧和2部惊悚片,并将它们混合在一起。特别的,作者提到:
❝有趣的是,最受欢迎的推荐是《奥赛罗》,就像最近被热映的《理查三世》一样,它也是根据莎士比亚的戏剧改编的,这种依赖性也反映在关注的分量上。——有意思
❞
而SASRec无法提供个性化,它推荐各种动作片、科幻片、喜剧片、恐怖片和剧情片,但没有一种符合物品要求。虽然这个用户在过去已经看过所有这些类型的电影,但他们不再看这些了。
【注】其实上述观点也在一些文章中表现出来了,即「SASRec很难捕捉短期兴趣」,这也是其存在的一个缺陷,不过本文以实验的方式表现出来了。
对于其他实验的分析,例如SSE-SE参数、收敛速度的比较,Ablation Study可以查看原文,文章的实验还是做得很完整的。
总结
现在想来,整篇文章针对的是SASRec模型不具有个性化,即没有考虑用户的短期兴趣,那么如果像AttRec那样,对于最近的 个物品进行自注意力提取短期兴趣呢?当然,本文最大的亮点还是采用了SSE正则化技术,确实提高了模型的性能,但是有点不大理解,为什么文章说SSE是模型个性化成功的关键。文章对于长序列处理的策略是有效的,并且实验做的很精彩,值得借鉴。
点分享
点点赞
点在看