TAGNN论文解读——SRGNN的进阶版本

谁说我不能喝 提交于 2020-11-01 03:30:15

hi各位大佬好,我是菜鸟小明哥(其实我也是大佬,哈哈,都是大佬)。

SRGNN已经初步完成实际应用,效果还好,有用的参考来这里。据说原paper大佬已经更新换代了GNN,也就是TAGNN,望文生义就是“他的GNN”,我啥时候发个“WOGNN”,也就是“我的GNN”,hehe。本文依旧粉丝可见,年底回馈粉丝福利。(不喜欢我翻译的就别看,看过了又瞎BB,你是闲的蛋疼吗?),代码在此paper在此

真正意义上的序列推荐SRGNN算上一个,从序列到序列,无需考虑用户的id,当然要记住是哪个用户的点击序列,不然怎么给他推(infer阶段)。

For Video Recommendation in Deep learning QQ Group 277356808

视频推荐深度学习加这个群

For Visual in deep learning QQ Group 629530787

视觉深度学习加这个,别加错

I'm here waiting for you

别加那么多,没必要,另外,不接受这个网页的私聊/私信!!!

 1-抛出问题,提出解决方案

基于会话的推荐应用很广,但他们的那些方法将会话压缩为一个固定的向量表达,而没有考虑预测的目标item。这种固定的向量将会限制推荐模型的能力,也就是目标item的多样性和用户的兴趣。因此提出目标注意力图模型用于会话推荐。在TAGNN中,目标意识的注意力自适应激活不同用户的兴趣,关于多样的目标item。学习到的兴趣向量表达随不同的目标item变化,极大第提升了模型的表现能力。此外,TAGNN利用gnn的能力在会话中捕获丰富的item转换(transition),试验证实方法有效。

2-问题定义和推导会话图

在会话推荐中,匿名的会话可以表示为一个时间顺序的列表s=[v_s,i]_{i=1}^{s_n},定义V={v_i}_{i=1}^{m}作为所有用户点击的item集合。对于给定会话s,会话推荐的目的就是预测下个行为.模型产生一个所有item的概率有序列表,最后top-k用做推荐。

在模型中将每个会话直接表示为会话图G_s=(V_s,\varepsilon _s,A_s),其中的三个参数分别定义为节点集合,边集合,邻接矩阵。在图中每个节点代表一个item,v_{s,i}\in V,每个边代表用户访问item的连续性,比如(v_{s,i-1},v_{s,i})(v_{s,i-1},v_{s,i})表示用户先访问前者,后访问后者,【i可视为时间上的概念,注意,作者用v表示item】。定义As为两个邻接矩阵A_{s}^{out},A_{s}^{in}的拼接,表示会话中item之间的两个方向的关系,两个邻接矩阵分别表示出边和入边连接的权重。

概图如下:

【再次注释:会话就是用户在一段时间内的点击序列,如图中就是两个用户的额点击序列,会话中item之间的连接关系构成会话图,经过gnn网络及注意力(何谓注意力?此处明显可以望文生义得到,边连接越多的item重点关注,大众看的东西可能和你看的东西是相同的,这种情况会不会推出来的全是热点部分(马太/长尾啥的)?关于是否是热点及小的debias方法,可以查看我之前的博文:1如何评价这种偏;2debias即gnn中的做法)处理后再经过线性转换到预测层softmax,其中Target item虚线表示正反向传播,即预测结果与实际结果对比,是一个学习过程】

3-学习item Embedding

将每个节点转换到统一的embedding空间,最终得到每个item的d维度向量表示。这样就可以用item的embedding表示每个会话s,gnn产生节点表示能够将图拓扑做得很好,这样模型能够拟合复杂item连接。paper采用ggnn(门图网络)学习节点表示。网络更新规则:

其中t是训练步,A_{s,i}是矩阵As第i行,H和b分别是权重和偏置,[v_{1}^{t-1},...,v_{s}^{t-1}]是会话中节点向量的list,z和r分别是重置和更新门,\sigma是sigmoid函数,\bigodot表示每个元素的点乘。

对于每个会话图,ggnn模型在邻节点之间传递信息,更新门和重置门决定什么信息保留,什么去掉。【说到这里,一个常见的面试题来了,LSTM是啥玩意,GRU是啥子,和经典的RNN有啥子区别,和CNN啥区别,哪里好了,哪里不好?既是送分题,又是送命题】

4-构建目标意识embedding【直译的,target目标,aware意识】

之前的工作捕获用户的兴趣仅仅使用会话间item表达,在我们模型中,一旦得到每个item的节点向量,经进行构建目标embedding,自适应的考虑历史行为中关注的目标item的相关性。定义目标item为所有的候选item去预测。通常,用户的行为,推荐的item只能匹配用户一部分的兴趣【也就是EE的问题了,参考我之前的知乎回答】为了拟合这个过程,设计一个新的目标注意力机制计算软注意力分数(在会话中所有的item上关于每个目标item)。

首先引入局部目标注意力模块计算会话s中所有item的注意力分数。一个非线性转换通过一个权重W参数话,W用于每个节点-目标对。采用softmax对self-attention分数norm

 最终对每个会话s,用户的兴趣到目标item v_t可以表示为

获得的目标embedding表示用户的兴趣随不同的目标item变化。

5- 生成会话embedding

在当前会话s中探索用户的短长期喜好,使用s中的节点表示。两个与用户目标embedding一起的表达将会用于拼接产生更好的会话embedding。

局部embedding:用户最终的行为可以视为短期喜好——作为一个局部embedding

全局embedding:表示用户的长期喜好——全局的embedding,通过聚合所有涉及到的节点向量得到。采用另一个软注意力机制描述最终点击的item和s中每个涉及到的item之间的依赖关系:

 会话embedding:通过线性转换将目标embedding,局部embedding,全局embedding得到会话的embedding,对于每个目标item都会有不同的会话embedding

 6-做推荐

得到所有item的embedding和会话的embedding后,通过item embedding和会话embedding内积计算得到每个目标item的推荐分数。接下来,使用softmax得到最终的输出概率:

【WOC,y定义为s中的下一个行为,应该是多少个点击序列就有多少个吧,不然咋给每个用户推荐啊,别告诉我,这个会话内的用户推的都一样。。。。。。。。。。】

交叉熵损失函数:

 

 7-试验设置

【今天看了优酷的新版本,WOC,竟然有了推荐功能,看起来也不错,我就点了几个,似乎很厉害啊,我就看了一个泰剧短片,然后我就搜了下这个名字,也有正片,这种推荐不错,有没有个性化我不知道,是在《精选》页面的】

为了公平对比,去掉了频次小于5的item,去掉了item少于2的session。为生成训练集和测试集,最后一天/一周的会话作为测试。对于一个会话,可以生成一系列输入和标签,例如:一个会话s=[v_{s,1},...,v_{s,s_n}],可以分为([v_{s,1}],v_{s,2}),([v_{s,1},v_{s,2}],v_{s,3})......列表后面的是label

对比方法有很多,包括item-knn,BPR,MF,NARM等等,当然肯定还有SRGNN

评价指标为P和MRR topk20

超参数设置,embedding维度为100,LR为0.001,衰减因子为0.1(每三次训练),batch_size为100(是不是有点小啊),L2惩罚项为1e-5,优化器为Adam

8-消融研究(Ablation Studies)

【这个破玩意单词不要以为多么复杂,它就是个初中物理中学的控制变量法,我至今还记得物理老师说,小车从斜坡上下滑。。。。。。。,一切高大上都不复杂,除非提出这个研究的人自己都解释不清楚,能将自己研究的东西言简意赅的讲出来,这才是真正的懂了,做到这点,面试不会太差】

设计4个模型变体观察模型效果,分别是只有局部embedding——TAGNN-L,采用avg的全局embedding——TAGNN-Avg,注意力全局embedding——TAGNN-att,局部embedding+注意力全局embedding——TAGNN-L+att,下图是效果:

很显然,混合embedding策略是最佳的,也就是论文提出的方法。TAGNN-L仅仅用了最后一个item作为会话的表达,说明最后的item对用户最终的行为有很大影响。Avg是最差的,这就说明用户的行为是多样性的,不能平均。

敬请期待我的代码解读,拜拜。

 

回头望,从未懂开口讲爱你,

放下你,已是再会无期。

但常伴心扉,柔情全属你。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!