Advertisement

《Neural Atentive Session-based Recommendation》论文阅读

阅读量:

山大学者于2017年发表了一篇短文,在之前的文献中仅探讨了用户的行为序列特征(即未能充分重视用户的主属性需求),这可能引入了行为随机性的影响;因此提出了神经注意力推荐机(NARM)模型。

我只研究它模型相关的东西,介绍和相关工作就不细看了

Model

在这里插入图片描述

在要预测第t+1时刻的点击行为:

1、

主要包含两个解码器:整体解码器(global encoder)和详细解码器(local encoder)。其中整体编码器通过GRU模型对整个序列进行扫描,并提取最终的状态信息来用于捕捉用户的整个行为轨迹:全局编码器 通过GRU模型对整个序列进行扫描,并提取最终的状态信息来用于捕捉用户的整个行为轨迹:

在这里插入图片描述

局部编码器(如) 通过另一个GRU模型对序列进行扫描,并将其长期兴趣与其所有隐状态的加权和相关联。

在这里插入图片描述

其中 αtj 表示第t个商品(题目)和第j个商品的注意力分值(相关性权重)

在这里插入图片描述

最终的序列表示:

在这里插入图片描述

2、

将CT及其候选项目的嵌入维度设置为一致,并将其输入到解码器中进行点乘运算以计算它们之间的相似性

在这里插入图片描述

最后通过一个softmax计算每个候选物品被点击的概率,并以交叉熵损失作为优化目标。

在这里插入图片描述

以上就是整体的模型概述,接下来是代码实现

Code

1.全局

复制代码
    hidden = self.init_hidden(seq.size(1))  # 初始化隐藏层
    ht = hidden[-1]  # 找到最后一个的隐藏层
    c_global = ht # 全局编码器,最后一次行为的隐状态(最相关),表示用户的序列行为

2.local

复制代码
    c_local = torch.sum(alpha.unsqueeze(2).expand_as(gru_out) * gru_out, 1)  # 局部解码器以所有隐状态的加权和,表示用户长期兴趣:

3.embing

复制代码
    c_t = torch.cat([c_local, c_global], 1)
    c_t = self.ct_dropout(c_t)

4.内积

复制代码
    item_embs = self.emb(torch.arange(self.n_items).to(self.device))
    scores = torch.matmul(c_t, self.b(item_embs).permute(1, 0))

5.softmax

全部评论 (0)

还没有任何评论哟~