论文: Learning from History and Present: Next-item Recommendation via Discriminatively Exploiting User Behaviors
发表在KDD 2018上,科大的论文。本来想搞一个一手的中文稿,结果一作说是直接用英文写的,我就挑拣着硬翻好了...有些黑体的问题过段时间补充在文末。
“学习历史和现在:判别性地学习用户行为进行下一个物品推荐”。
摘要:现代电子商务中,用户行为包含很多信息,例如消费习惯、动态偏好等。session-based推荐越来越流行,但是现存工作主要探索短期行为,没有考虑长期稳定的兴趣。本文提出BINN(行为密集神经网络?),结合用户的长期兴趣(历史)和短期行为(现在)来进行next-item 推荐。BINN包括两个部分,一是Neural Item Embedding, 二是Discriminative Behaviors Learning。用了两个数据集,天池和京东。
1. introduction
目前的推荐系统有两种范式:
1. General Recommenders :大多是从交互中挖掘用户或物品之间的静态关联。比如协同过滤、因子分解什么的。 这些工作考虑了用户物品之间的特定关系,但是没有考虑在序列交互中的用户偏好。
2. Sequential Recommenders:基于序列模式挖掘或者transition建模。比如不可见用户信息,只能根据session内行为推荐。这些工作考虑了短期的决策过程(当然就没怎么利用历史了,但是人家都不可见用户信息了,本来也利用不了吧...又当然,这不重要...)。
显然了,历史和现在都是有用的,例子:
看图就知道,只考虑长期偏好不行,只考虑短期兴趣也不行,综合起来就很棒,说的就是BINN。
本文主要就是提出了BINN,同时利用历史和现在的行为,搞出了state of the art的效果,顺便提了一嘴用户冷启动(不是重点)。
2. 相关工作
这部分就是介绍下现存工作,按照上面说过的逻辑,主要分为两种,general和sequential,general其实说的就是传统的模型,sequential就避不开rnn了,这里不细说了。
3. BINN: behavior-intensive neural network
3.1 准备和概览
问题定义:personalized next-item recommendation
就是对于给定u,根据他的历史行为S_u, 以及所有用户的行为H,预测他下次操作(点击、收藏、购买啥啥的)的item。S_u里,x是item,b是behavior;H里,有n个S,表示n个user。
framework:
上面介绍里也说了,可以分成两部分,一个是A:embedding部分,一个是B:学习部分;B又可以分成两部分,一个是Session的,CLSTM学短期,一个是preference的,Bi-CLSTM学长期。
3.2 A: Neural Item Embedding
这部分是为了搞出一个对item的统一表示。
顺序推荐器的先前工作总是使用1-of-N编码或在深度学习架构中添加额外的嵌入层来表示itemitem。然而,对于大型电子商务平台中的一系列物品,一方面,1-of-N编码网络可能花费过长的时间,并且由于高稀疏性所以总是无法很好地优化。另一方面,添加额外的嵌入层可能会使网络在某种程度上失去性能。而且,这两种方法都无法揭示用户交互中隐含的itemitem的顺序相似性。(Next-item Recommendation via Discriminatively Exploiting User Behaviors)
万物皆可embedding,w2v牛逼。这里更进了一步,提出一个w-item2vec,相比普通的i2v,考虑进去了item的frequency当做权重。用的是skip-gram,看图看得出来。word2vec不细说了,自己搜一下,可以参考 通俗理解word2vec 、 NLP之--Word2Vec详解 - 郭耀华 - 博客园。
改造之后的i2v实际上只是增加了frequency权重:
这里小提示一点,1-sigma(x)=sigma(-x)
优化目标
上面(5)里大K是S_u的长度,E是负采样数,也就是(4)里的小k遍历的。但是这里的theta为什么这样加呢?【问题1】
3.3 Discriminative Behaviors Learning
一个用户的决策过程被当前动机和历史偏好影响,当前动机要考虑全部行为(包括展示之类的),历史偏好考虑正向行为(只展示什么的就不算了),在电商里,点击也要算在“当前动机”里,但是点了没买就不要算到历史偏好里了。
3.3.1 Session Behaviors Learning
其实就是说t和i是不是一个session里的事
这里为啥是t-i呢?【问题2】
contextual lstm:
具体的有没有个图啥的?【https://www.jianshu.com/p/9dc9f41f0b29】【注1】这里的行为向量是one-hot的(对应CLSTM里的单词的topic)。最后用h_t-1 作为user当前动机的表示。
3.3.2 Preference Behaviors Learning
不同于短期的,长期偏好波动要小很多,C-LSTM可能不大好用了,于是就用双向的。
公式跟前面没啥差别,就是加了方向而已,状态concat起来,最后均值池化:
3.3.3 在SBL和PBL后面接一个全连接,就可以得到d维的item表示,就是对next-item的预测。
3.4 模型学习和测试
上面的DBL是联合学习的,用MSE做loss,用adagrad优化:
预测过程几乎显然,既然3.3.3可以得到d维预测,那与3.2里的emb搞一个相似度就好了。
4. 实验结果
4.1 数据
过滤行为少于10的user和频次小于5的item
按时间9/1分割训练测试集
在训练集里没出现过的item和user都在test里删掉了。这些删掉的user后面用来看了冷启动的效果。
4.2 基线方法
S-POP :recommends the item with the largest number of interactions by the target user. 推荐跟当前用户交互最多的那些item。(感觉有点弱啊)
BPR-MF:a widely used matrix factorzation methods, 优化的是pairwise ranking objective function via SGD.
Item-KNN: 找用户刚刚消费的item的最近邻。用什么找最近?【问题3】
GRU4Rec:uses the basic GRU with a TOP1 loss function and session-parallel minibatching。https://www.cnblogs.com/daniel-D/p/5602254.html
GRU4Rec Concat :similar with GRU4Rec. Differently, do not use the session-partition, and the users’ interaction sequences are fed to the GRU4Rec independently as a whole. 什么意思?【问题4】
HRNN Init : a hierarchical RNN for personalized crosssession recommendations, which is based on GRU4Rec and adds an additional GRU layer to model information across the user’s sessions for tracking the evolution of the user’s interest.
HRNN All : similar with HRNN, but the user representation generated by an additional GRU layer is used for initialization and propagated in input as each step of the next session.
参数:所有rnn偶像隐层节点都是100,学习率0.1。BINN的emb是64维。
4.3 评估标准
都是越高越好:
recall@20 前20个item不分先后,只看正确的比例。
MRR@20 Mean Reciprocal Rank ,就是“正确结果的排序的倒数的平均值”,排序超过20的算0.
4.4 结果
4.4.1 item emb可视化
w-i2v表现比i2v好,大概是因为考虑进了frequency。京东的效果看起来比天池好,分界清晰,可能是因为京东数据更稠密。
4.4.2 推荐表现
天池:1. BINN最屌。2.看mrr指标,rnn之间的比较可以看出,考虑了个性化信息的更好。(binn,hrnn > gru) 3. p-pop表现不错,因为啥?We guess a possible reason is that users’ interactions on Tianchi have a high degree of repetitiveness and this dateset has a large amount of item candidates when making recommendations. That fact makes the generation of “non-trivial” personalized recommendations (i.e., P-POP) very challenging [27].【问题5】
京东: 1. BINN还说最屌,rnn的明显好于传统的。2. 没有个性化信息的反而更好(gru-concat>hrnn),说明不合适的个性化策略不大好。
京东效果好于天池。可能是,京东比天池的交互多、user多、item少。
4.4.3 用户冷启动
没有行为的时候BINN推荐不了,所以从新用户的第二个item开始看效果。第二个怎么看?有多少算多少,直到达到10开始按10算?【问题6】
刚开始的时候BINN退化成CLSTM,因为没有行为。随着交互增多,效果变好。
深度模型表现不错。
BINN厉害吧。
4.4.4 用户历史的长度
对于RNN模型来说,用户历史的长度是否有影响?
这一段感觉有点不明所以...最后就说确实长度有影响,感觉看图表现也不怎么明显啊。【问题7】
【问题1】frequency这么添加一方面是强调被点击越多的item权重越大,另一方面就是方便梯度求解。
【问题2】这个公式是判断i的操作是否属于一个session中,i不是预测的,预测的是t+1时刻的. (公式D_SBL的“含义”应该是“SBL”的功能?判断“i的操作是否属于一个session”有什么意义呢?)(D函数是一个判别器,判断哪些是需要输入的)
【问题3】item-knn是用什么计算的相似度?w-i2v的emb吗还是别的什么?相似度计算不是item2vec,是完全不考虑序列关系的相似度计算,计算集合中商品同时出现的概率。
【问题4】GRU4Rec的两个版本应该是训练方式的不同吧,具体没有去更详细的了解。
【问题5】效果好是因为商品种类太多了,而每个商品的被点击次数较少,导致简单的方法反而效果非常好(当然,这也是我们对结果的分析后的一种猜测)
【问题6】训练的时候我们默认设置了一个最小的值,这是为了方便模型的训练,其实也可以通过mask来控制训练的长度。这里我们是模拟用户交互过程,一轮推荐是建立在知道用户之前的交互序列的基础上的,也就是说我们推荐了一个item 1然后用户点了另一个item2,那么这一个item2就应该看作新一轮的输入。也因此,MSE损失函数中t是从ts+1到|S_u|而不是只有ts+1。
【问题7】用户长度这一块确实没啥一致性结论,这个结果我没有详细分析,一方面是因为不是所有的用户点击序列都是很长的,就导致其实这个长度分析不是很稳定.
【注0】pbl长度是动态的,可观测样本之前的都算。意味着,假如用户历史行为有m个,那么进入SBL的有10个(一个session),进入PBL的有m-10个(假如都符合要求)。pbl这部分也有自己的判别函数,符合要求的才是输入,不符合的就不是。
【注1】这里用的是加入peephole-connection的LSTM。CLSTM跟LSTM没啥区别,只是“输入”多了一个Topic向量,对应本文中的behavior vector,看公式也可以看出来。CLSTM本来是用在nlp的。
以上部分问题为原作者回答,部分为我自己理解。感谢作者解答疑惑,感谢飞妹帮我联系作者。