本文为 推荐系统专栏 的第十一篇文章,也是阿里三部曲 DIN、DIEN、DSIN中的最后一篇。
本篇的深度会话兴趣网络 DSIN,是将行为序列划分为多个 Session,然后针对每个 Session 去挖掘用户的兴趣以及兴趣变化趋势。
在真实场景中,用户短时间内浏览的商品往往比较相似,兴趣比较集中,所以以 Session 为粒度进行兴趣的提取会更加准确。
论文传送门:Deep Session Interest Network for Click-Through Rate Prediction
同 DIN 与 DIEN,DSIN 的创新主要集中在用户行为序列 Sequence 的建模上。模型结构如下:
该层为会话切分层,用于将行为 Sequence 划分为多个 Session。划分规则是:如果两个行为发生的时间间隔很长或者大于设定的阈值,就可以以此为分割点,这样划分得到的每个 Session 中的行为发生时间比较紧凑,用户的兴趣也会比较集中。
为了保证每个 Session 中行为数量一致,通常会使用截断处理或者 padding。
该层为会话兴趣提取层,这里使用 Transformer 中的一个 Encoder 单元进行兴趣的提取。因为 Transformer 抛弃了顺序输入的方式,所以模型不会自动考虑输入 Session 的相对位置信息,因此在输入之前需要对 Session 进行位置编码。
Bias Encoding:
跟一般的编码方式不同的是,这里不仅需要对每个 Session 进行位置编码,同时也需要对 Session 中的每个行为进行位置编码,该模块统称为 Bias Encoding。
BE 由三个一维向量累加得到,其中 W K W^{K} WK 为 K 维向量,用于区分 K 个 Session 的位置差异, W T W^{T} WT 为 T 维向量,用于区分每个 Session 中 T 个行为的位置差异, W C W^{C} WC 为 C 维向量,用于区分每个 C 维行为 embedding 不同维度的位置差异。
向量相加得到形状为 (K,T,C) 的 BE 矩阵,该形状和上层的输出 Q 是一样的,直接相加即可,这样每个会话、会话中的每个行为、行为 embedding 的每个位置都加上了偏置项。
Interest Extractor:
每个会话加上位置编码后,紧接一个 Transformer Encoder 单元进行兴趣提取。Encoder 单元结构不再赘述,由四层组成:多头注意力层 + LN层 + 两层全连接 + LN层。
Encoder 单元不会改变输入的形状,对于每个形状为 (T,C) 的会话,经过兴趣提取层后形状保持不变。
然后在第一维做 AveragePooling,将每个会话转换成一个 C 维向量 I I I,K 个会话就得到 K 个 I I I,表示每个会话上提取得到的兴趣表示。
该层为兴趣交互层,由双层双向 LSTM 构成,类似于 DIEN 中的双层 GRU,用于提取用户兴趣的变化趋势。
每时刻的隐状态 h 由前向、后向 LSTM 的隐状态 concat 得到,用于表示每时刻用户兴趣的变化趋势。
该层为兴趣激活层,以待推荐的 Item Profile 向量为 Query,分别计算兴趣序列 I I I 与兴趣变化序列 H H H 的重要性权重,突出关键兴趣的重要性。
X I X^{I} XI 为目标 Item,计算每个兴趣 I I I 的权重,然后加权累加得到 U I U^{I} UI。
同理,计算每个兴趣变化 H H H 的权重,然后加权累加得到 U H U^{H} UH。
最后将四部分向量横向拼接,输入全连接做最后的预测即可。
与其他经典模型的对比实验如下:
优点:
缺点:
下一篇预告: 推荐算法(十二)——多任务模型之专家网络 MMOE
推荐算法Github 仓库:
Recommend-System-tf2.0
希望看完此文的你,能够有所收获!