论文:
地址:https://arxiv.org/pdf/2102.09267.pdf
论文题目:《Sparse-Interest Network for Sequential Recommendation》
之前我们介绍过mind这篇文章,通过胶囊网络来实现对用户多兴趣的建模,今天我们来介绍一篇也是多兴趣的论文,但是不同于mind生成多个兴趣向量,SINE只在中间过程生成多概念兴趣,最后还是会统一形成一个向量。
一 、背景
用序列推荐的方式来实现召回,一般的做法是用self-att或者gru等序列建模的方式来对用户的点击序列生成一个向量表示这个用户,然后跟item向量进行内积来训练。然而,从经验分析中,我们发现用户的行为序列通常包含多个概念上不同的item,而统一的嵌入向量主要受最近频繁操作的影响。因此,如果概念上相似的item在最近的交互中不占主导地位,它可能无法推断下一个首选item。为此,另一种解决方案是用多个嵌入向量来表示每个用户,这些向量编码用户意图的不同方面。然而,最近关于多兴趣嵌入的工作通常考虑通过聚类发现的少量概念,这可能无法与实际系统中的大量item类别相提并论。
也就是说,我们对序列进行聚类/伪聚类,形成多个类,在分别对几个类别进行建模,这就建模出多个兴趣向量。比如说我们把序列中的裙子,衣服,裤子分成三类,然后显式的去建模这三个子序列,形成多个兴趣向量由于表示user。但是用户的多兴趣这个概念是难以定义的,也就是说我们对于seq如何划分成概念上的兴趣比较难,其次,如何定义概念上的兴趣K这个参赛也是个麻烦。
基于以上的问题,本文提出了一种新颖的稀疏兴趣网络(SINE)用于序列推荐来解决这些问题。 SINE 可以学习大量的兴趣组并以端到端的方式捕捉用户的多个意图。 SINE的稀疏兴趣提取模块从大量兴趣组中自适应地推断用户的交互兴趣并输出多个兴趣嵌入。 聚合模块能够动态预测用户的下一个意图,这有助于显式地捕获 Top-N 项目推荐的多兴趣。
接下来我们就来介绍下SINE的具体结构吧。
二 、SINE模型
2.1 模型的输入
其中N是序列的长度,M是总的item数。
2.2 Sparse-Interest Framework
首先,在一般的序列推荐模型中,我们使用一个函数将用户的点击序列进行编码:
在SINE中,我们需要先定义好L个概念兴趣:
其中D是向量的维度,我们的目标是从L个兴趣向量中提取K个向量:
2.2.1 Concept activation
首先,我们计算出序列中每个位置的权值,这部分使用self-attention:
其中a的维度为[n]
得到,每个位置的权值后,我们进行weight suming得到用户的表示向量:
得到zu后,我们需要对兴趣向量矩阵C进行topk索引,索引出最相关对K个兴趣:
也就是在C中找到内积排名前K的向量,最后用sigmoid(内积)对这K个向量进行激活。
2.2.2 Intention assignment
在推断出当前的概念原型 C 之后,我们可以根据他们与原型的距离来估计与他/她的行为序列中每个项目相关的用户意图,具体的计算如下:
Pk|t表示序列中第t个位置跟第k个兴趣向量的匹配程度。
2.2.3 Attention weighting
我们得到第t个位置跟第k的匹配程度后,还需要反过来计算一次t对k的重要程度:
目的是估计位置 处的item对于预测用户的下一个意图至关重要的可能性。
2.2.4 Interest embedding generation.
最后我们进行聚合:
这里,我们就得到了表示用户u对于兴趣点k的表示向量
3.3 Interest Aggregation Module
我们在前面得到了用户u对所有兴趣点的表示向量后,还是需要跟mind一样,最后得到一个用户综合考虑K个表示兴趣向量的最终向量:
其中:
最后我们还是用weight sum求和得到最后的用户向量:
3.4 Model Optimization
采用softmax进行优化
优化成sample softmax loss后进行整个模型的训练。