推荐算法炼丹笔记:阿里序列化推荐算法ComiRec

作者:十方  
公众号:炼丹笔记  

Controllable Multi-Interest Framework for Recommendation

1.ComiRec与众不同之处

该论文是阿里在2020年发表在KDD的论文,解决的是序列化推荐的问题,用user以往的行为序列去推荐user接下来最感兴趣的item。这篇论文,认为之前很多序列化推荐方法都最终产生一个user emb去item emb空间中检索出最相关的item,而user在一段时间内,是有多种兴趣的,应该要映射到多个emb去检索。

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第1张图片

如上图所示,Emma点击了3大类的item,分别是首饰,包包,化妆品,推荐的时候也应该推荐这3大类的商品。

2.问题定义

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第2张图片

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第3张图片

3.多兴趣序列推荐框架

当有了用户行为序列后,获得多兴趣向量的方法有很多,论文主要介绍了两种,一个是动态路由方法(ComiRec-DR),另一个是self-attention(ComiRec-SA)方法。

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第4张图片


如上图所示,模型的输入就是用户行为序列(和用户有交互的itemID seq)。ItemID seq输入到Embedding Layer里,然后再输入到Multi-Interest Extraction模块中,获得多个兴趣向量,最后取离样本label(single Item ID)最近的兴趣向量计算softmax损失。Serving阶段,每个兴趣向量召回Top-N Items,然后输入到Agrregation Module,最终平衡准确性和多样性召回Top-N的items。

4.动态路由方法

提到动态路由算法,不得不提到胶囊网络。我们知道,每个神经元的输出多半是个概率,或者是激活的程度,是一个标量,那么有没有可能一个神经元包含其他属性呢,从而达到提升网络表达能力的效果。胶囊网络就是如此,可以用向量来代替单个神经元的标量。一个胶囊就是一个向量,表示特定类型实体的各个参数。输入为较为低层次的胶囊:

v2-a2afb287be9351edb30da79b69fdd2e5_b.jpg

其中,n表示胶囊的个数,k表示每个胶囊内向量的维数,对应到ComiRec-DR中,n表示序列的长度,k表示每个item emb的维数。

v2-d7d8b6c8ddf1e3eef8cf8562a78af42f_b.jpg

这一步大家可以理解为,item空间和兴趣空间建立联系。然后做预测向量的加权求和:

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第5张图片

由算法进行学习的。最终胶囊网路的输出,也不是用传统的Relu这样的激活函数,而是用的非线性函数squashing,为了确保短向量可以被压缩至接近0的长度,长向量压缩至接近1的长度,并且保证方向不变,看下squashing长啥样:

v2-932a96a8df31d5de5edf576fbe6f2c75_b.jpg

各位聪明的读者已经发现,我们指定最终层j的数量(最终胶囊的数量),即为最终兴趣的个数。这样论文就完美的把Comi和胶囊网络完美结合了,最后通过动态路由算法学习参数即可。下图是动态路由算法的伪代码:

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第6张图片

v2-c8150ad83d212a2e11c99398ac5c7b77_b.jpg

5.Self-Attentive方法

这个方法相对于动态路由方法,就特别容易理解了。用了self-attention的机制,给定一个矩阵H(d * n),n表示用户序列的长度,d表示每个item的纬度,我们用下式计算attention值:

v2-b4ddeb17670ca555492610ee4f633808_b.jpg

W1是da* d的矩阵,W2是da * k的矩阵,我们知道最终A是n * k的矩阵,最后通过attention矩阵聚合用户序列,计算出Vu:

v2-ed754d04256f81c6bfee68784a06bda0_b.jpg

Vu是d * k的矩阵,表示k个兴趣,每个兴趣是d维向量。

6.模型训练

模型训练通过找到和目标item (ei)最接近的兴趣向量(vu),然后用softmax计算出目标item的概率,最后累加logloss。因为负例数量庞大,论文提到进行采样处理。

v2-373a2034aeee829b8ab112b05ceab20c_b.jpg

v2-718cc3853d54fb765ceb6b16ae7ab283_b.jpg

v2-8324233ee1a4c17ee8cf620d16c54198_b.jpg

7.Aggregation Module

在获得多个兴趣向量后,每个向量都能ANN检索出top-N个item,怎么聚合这些item呢?一个思路就是按点积排序后取top,这是提升推荐系统准确率很有效的方法,但是考虑到多样性,就出现了下式:

v2-7b1931ec6db2557f1361e24ea6cdb72d_b.jpg

公式比较简单,同时考虑了user和item的关系,还有item和item直接的关系。user和item关系越强,f越大,item直接关系越少,g函数越大,所以我们要最大化Q,就可以平衡准确率和多样性。

8.结论

看实验结果,我们看到在亚马逊和淘宝数据集上,ComiRec都效果优于很多算法,同时我们还看到在淘宝数据上,多样性确实提高了,十方目前也在探索该算法在广告推荐领域的应用,欢迎大家加入炼丹笔记一起交流学习。

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第7张图片

推荐算法炼丹笔记:阿里序列化推荐算法ComiRec_第8张图片

weixin.qq.com/r/XSjP1zr (二维码自动识别)

你可能感兴趣的:(炼丹笔记,算法,python,机器学习,人工智能,深度学习)