一、背景
序列化推荐系统通过探索用户的交互顺序,以此基于他们最近所做过的事情的上下文预测他们的下一个动作。之前有马尔可夫链以及循环神经网络RNN和Self Attention可以解决类似的问题。
但是大多数序列化推荐模型都有一个简化的假设,即这些模型都将交互历史视为一个有顺序的序列,没有考虑这个序列中交互物品之间的时间间隔(即只是建模了时间顺序没有考虑实际上的时间戳)。
本文提出的模型叫TiSASRec (Time Interval Aware Self-Attention for Sequential Recommendation), 不仅考虑物品的绝对位置,还考虑序列中物品之间的时间间隔。
二、内容回顾
self-attention
首先这个文章定位是在self-attention机制上。得说清楚self-attention的研究的对象和解决的问题。
说self-attention一定要谈到SASRec[1]这个文章,该文章是2018年发表在ICDM会议上的论文,主要是针对的是召回的工作,提出SASRec序列推荐模型。作者受到Transformer启发,采用自注意力机制来对用户的历史行为信息建模,提取更为有价值的信息。最后将得到的信息分别与所有的物品embedding内容做内积,根据相关性的大小排序、筛选,得到Top-k个推荐。
Self-attention的意义:对于下一次的物品推荐,依赖于用户行为序列的各个物品的权重是不同的,这与“推荐场景有关”(context上下文),因为当用户物品交互较少时:在一个稀疏数据集下,用户行为较少,行为相隔时间可能相差几天,甚至几个月,那么“此时相近时间的历史物品信息表现得更为重要”;相反,当用户物品交互频繁时:在一个密集型数据集下,用户行为多,例如在电商场景下,那么“相近的物品信息就不是非常重要”。例如,对于某个用户,他在电商场景的一个Session中,行为是:手机--电脑--衣服---鼠标---裤子,那下一个用户感兴趣的是电子产品、服装都有可能,上述历史行为都很重要。即,不同环境下(数据集),模型的self-attention机制关注的重点是不同的(这就是这个图的目的)。
位置感知
在 transformer中并没有包含RNN或CNN模块,因此它对物品位置是不能感知的,为了解决这个问题,提出了两个办法:
① 第一种办法是在输入中添加位置编码,这个编码可以是确定性函数或者是一个可学习的位置嵌入; ② 另一种解决方案是使用相对位置表示,也就是将两个输入元素之间的相对位置建模成成对关系。
受到第二种用相对位置的self-attention的启发,本文结合了绝对位置和相对位置去设计一个时间感知的self-attention,以此建模物品的位置和时间间隔。这应该是本文的动机。
上图解释的是在给定用户的商品序列的前提 下,如果设置不同的时间间隔,那么得到的结果也是不同的。
三、优化处理
1. 时间特征处理
特征样例如下:
item_id |
position_id |
timestamp_value |
item_1 |
1 |
1 |
item_2 |
2 |
5 |
item_3 |
3 |
10 |
经过处理后的 timestamp_value:
item_1 |
item_2 |
item_3 |
|
item_1 |
0 |
4 |
9 |
item_2 |
4 |
0 |
5 |
item_3 |
9 |
5 |
0 |
最终形成的模型输入特征如下:
-
item-embedding
我们为物品创建一个embedding 矩阵,d是latent dimension。因为我们固定了物品序列的长度为n,所以如果长度大于n,那我们通过embedding look-up操作截取前n个物品 的embedding,然后将他们堆叠在一起, 形成
我们使用两个不同的可学习的位置嵌入(positional embedding)矩阵分别对应self-attention中的keys和values,通过学习,可以得到
同样地,我们也为相对时间间隔学习两个embedding 矩阵,分别为:
2. Time Interval-Aware Self-Attention
受相对位置self-attention机制的启发,我们提出考虑序列中两个物品之间的不同时间间隔以扩展self-attention。但是,只考虑时间间隔也是不够的,因为用户交互序列中可能出现在同一个时间戳有多个交互实例的情况,在这种情况下,模型将变成没有任何位置或关系信息的self-attention,所以我们还要考虑序列中物品的位置。
对一个固定长度为n的输入序列计算一个新的序列
,这里
的每个元素
计算公式为:
这里的特征输入由三个部分组成,一个是,代表 item 的向量特征经过线性变换后,得到的 value 向量,
代表 item-i 和 item-j 之间的时间间隔嵌入后的向量,并且经过线性变换得到 value 向量。
代表 item-j 的位置特征嵌入后的向量,并且经过线性变换得到 value 向量。
将三个向量相加后,乘上相应的注意力进行加权和后,得到更新向量
的计算本质上是对
使用了激活函数 softmax,所以注意力权重的计算是怎么去计算
和上面的 value 的计算逻辑是一样的,只是改用 key 向量进行计算。将相加结果和
进行内积。
代表是item-i 的 query 向量。
原文始发于微信公众号(风物长宜 AI):TiSASRec:时间序列优化之时间间隔感知
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论