self-attention已经广泛使用在序列化推荐中,但是存在复杂度较高且过度参数化的问题,并且由于隐式位置编码的缘故,会使模型在对items之间的关系错误建模。这篇来自微软的论文《Lighter and Better: Low-Rank Decomposed Self-Attention Networks for Next-Item Recommendation》提出了LightSans去解决这些问题。该模型把用户历史行为序列映射成潜在的兴趣,通过这种方式在线性时间和空间“限制”了用户历史行为序列的长度,缓解了过度参数化的问题。
LightSANs
LightSANs假设用户历史上有过的交互的items可以被分类为不超过k类(k是一个很小的定值),基于这个假设,用户历史行为的items都需要和k个潜在的兴趣做交互(论文里叫item-to-interest),避免了item之间的交互,使得模型参数变少。然后该模型还提出了decoupled位置编码去描述位置直接的相关性。关于LightSANs的细节见下图:
Item-to-Interest Aggregation:
有了每个items可以归类为k个兴趣中的一个的假设,我们就可以用一个可学习的function,把n*d的序列映射成k*d,如下公式所示:
通过这种方式把item集合聚成k个向量表达,有效的降低了attention矩阵的大小。因为兴趣更能表达用户的倾向,attention的weights就能更精确的描述不常见的items。
Item-to-Interest Interaction:
简单来说,就是把self-attention中的K和V替换成我们上一步聚合的k个兴趣,如下式所示:
当然,这里也用了multi-head,i表示head ID。
Decoupled Position Encoding:
传统的position embedding,就是每个位置的item embedding直接加上position embedding,然后描述两个位置item的关系如下式:
展开就是:
论文提到上式的最后两项并没有那么合理,描述item到position的关系是有问题的,限制了模型的挖掘序列关系的能力.所以该文提出了下式对序列之间位置的关系进行编码:
这样做序列位置之间的关系就被显式的指定,避免了对item-position直接关系的编码,提高了模型的表达能力.loss函数也很简单,就是用的交叉熵损失.
实验
从实验上看,该模型不仅效果好,性能还和彪悍,同时也节约内存.
参考文献
1、Lighter and Better: Low-Rank Decomposed Self-Attention Networks for Next-Item Recommendation
"轻量"且"优秀"的序列推荐模型