生成式召回的早期尝试 —— SASREC 精读笔记

文章链接:https://arxiv.org/pdf/1808.09781

机构:UCSD

发布时间:2018

Copyright (c) Wang-Luning. All Rights Reserved.

SASRec(Self-Attentive Sequential Recommendation,2018)利用Transformer来高效地捕捉完整历史序列中的重要依赖信息。其将用户行为序列视为一个句子来处理,自动学习序列中每个物品与序列中其他物品的相关性,然后基于这些相关性预测用户下一个可能交互的物品。

image-20260112144535788

通过一个Embedding矩阵MR|I|×d将序列Su中的各个物品映射成d维向量,其中Msi表示物品si的embedding向量。考虑模型的最大输入长度n,截取最近的n个物品的embeddings,得到输入序列的embedding矩阵ERn×d,其中Ei=Msi。然后,引入可学习的位置embedding PRn×d并加到原embedding上,得到最终的序列输入表示E^

E^=[Ms1+P1Ms2+P2Msn+Pn]

接下来通过若干个Attn-FFN层,其中Attn层采用的是单向因果注意力。最后一个block输出的第t个物品的表征向量为Ft,在prediction layer中,希望找到和该表征向量最相似的物品向量,体现为位置t的表征向量Ft和物品库中第i个物品的embedding向量Mi的内积(这里复用了输入侧的embedding):

ri,t=FtMiT

ot是序列中t位置期望的输出物品,则希望尽可能最大化Ft和它的embedding的内积得分rot,t,同时最小化和其他负样本embedding的内积得分rj,t。采用BCELoss来计算序列Su每个位置的loss并将它们进行累加得到总loss:

L=SuSt[1,2,,n][log(σ(rot,t))+jSulog(1σ(rj,t))]

作者同样尝试了将用户画像embedding加到输出表征Ft上,得到最终输出表征用于计算内积分数ru,i,t=(Uu+Ft)MiT,从而显式地引入用户本身的信息,但实验发现效果并没带来提升,可能是因为模型已经考虑了用户所有的行为,不再需要用户本身的额外信息。

 综上可见,SASRec本质上是把Transformer当做了一个序列建模工具,相当于双塔模型中的用户塔,通过建模用户的历史行为序列,来抽象出表征用户兴趣的向量,而做召回时仍然使用的ANN策略,使用用户向量和物品向量做匹配。如果要从生成式的视角来看的话,也可以看做模型生成的是“下一个物品的表征向量”(因为学习目标就是让生成的向量和ground truth物品向量尽可能相似),因此这么看的话勉强也可以称作“生成式召回”,但这和后边TIGER那种真的直接生成下一个物品的SID的范式是不同的,因为无论如何它还是需要传统的ANN来召回物品。