论文链接:https://arxiv.org/pdf/2204.11067v1.pdf
SIGIR 2022 维持于同一表征空间下的会话推荐
本文在session-based recommendation领域解决了一个痛点问题,即在同一batch下,每个session的长度恒定,如diginetica数据集下长度都为50,可是session平均的长度却不到5。因此有大量的空白被0填充,在转为session embedding vector的时候没有相应变成了0。
这一个问题还是比较明显的,在我刚开始做sequential recommendation这一块时,发现了每个user的embedding vector有一部分是完全相同,我还怀疑过embedding不会被训练,hhh。
总而言之,赵鑫老师组的这篇对我挺有启发意义的。未来可以试着做一些对抗攻防,因为session领域训练依靠的知识还是比较少的。假如我在item embedding中加入点噪声,那么我猜就直接干掉这个模型了。(这是可以说的吗)
1 导读
Session-based recommendation指的是用户在匿名情况下根据短期的点击序列来预测下一次点击的推荐系统。然而,非线性encoder学习得到的每一session的embedding vector是和item的embedding vector不在同一表征空间,因而导致结果不正确。因此,本篇文章设计了CORE框架,将item embedding线性组合作为session的embedding,并且提出一种鲁棒距离测定方法,防止过拟合。
2 方法
首先,每个商品映射到统一embedding空间,hi=Emb(vi)∈Rd表示商品vi的embedding;然后,通过编码器Encoder编码序列中的商品embedding得到会话embeddinghs=Enconder([hs,1,...,hs,n])∈Rd;最后预测下一个商品y^=Decoder(hs)∈Rm,其中m为商品数。
2.1 表征一致编码
本节目的是将会话编码到商品embedding空间中,缓解会话和商品表征不一致问题。由于大多数现有编码器采用直接堆叠在输入商品embedding上的非线性编码器(例如,RNN 或 Transformer),因此编码的会话embedding与商品不在同一表征空间中。一个自然的想法是是否可以移除商品embedding上的非线性激活函数,并将会话编码为商品embedding的线性组合。
本节提出了一个表征一致的编码器(RCE),它的输出会话embedding是会话中商品embedding的加权总结。线性组合保证会话embedding总是与商品在相同的embedding空间中。使用深度神经网络来学习会话embedding中的每个商品的权重,公式如下
此处的DNN()可以采用以下两种方式
2.1.1 通过平均池化学习权重
采用平均池化层作为 DNN,即
这种方式忽略会话中商品的顺序,以及每个商品的重要性。
2.1.2 通过Transformer学习权重
像SASRec一样,使用L层自注意力块作为DNNs,表示如下,其中
F∈Rn×d′,d′是最后一层自注意块的前馈网络的输出维度。然后可以得到归一化的权重α ,w为可学习参数。
2.2 鲁棒的距离度量
会话被编码为商品embedding的线性组合并通过衡量embedding空间中商品的距离进行解码,商品embedding直接参与embedding之间的距离计算,容易导致过拟合。因此,本节提出一种鲁棒的方法来测量统一表征空间中的距离,以防止过拟合。
引理 1. 给定会话embeddinghs和商品embedding{hv|v∈V},当使用点积衡量embedding距离时,优化交叉熵损失与优化边距为2的 ( - 1)-tuplet 损失近似成正比[1]。
根据上述引理,可以从三个方面提高距离度量的鲁棒性。
- 首先,不同推荐场景的数据分布可能会有很大差异,固定的边距是不合适的。因此,将固定边距 2 替换为可控的超参数 以适应不同的场景。
- 其次,直接在候选商品embedding上使用 Dropout。
- 第三,通过余弦距离度量距离,以更好地对齐和统一商品embedding。
根据以上三点可以设计如下损失函数,其中h'表示经过dropout得到的商品embedding。
3 结果和想法
本文在session-based recommendation领域解决了一个痛点问题,即在同一batch下,每个session的长度恒定,如diginetica数据集下长度都为50,可是session平均的长度却不到5。因此有大量的空白被0填充,在转为session embedding vector的时候没有相应变成了0。
这一个问题还是比较明显的,在我刚开始做sequential recommendation这一块时,发现了每个user的embedding vector有一部分是完全相同,我还怀疑过embedding不会被训练,hhh。