作为2021年的第一篇原创,首先祝大家在新的一年里身体健康,万事顺意。今天给大家介绍的是腾讯发表的一篇论文《Future-Aware Diverse Trends Framework for Recommendation》。推荐系统中的用户体验非常重要,而推荐多样性是其中比较关键的一环。论文提出了一种提升多样性的推荐系统框架FAT(future-aware diverse trends (FAT) framework),其核心思路是根据与用户最近行为相似用户的行为来建模用户未来可能的多样化兴趣演化趋势,接下来一起学习一下。
1、背景
基于用户历史行为序列来预测用户下一个可能交互的物品,方法有多种,如基于马尔可夫链、YoutubeDNN、DIN、MIMN等方法。但是,上述所有的方法都仅仅考虑用户过往的行为,忽略了对用户兴趣在未来演进趋势的考虑。
用户的兴趣往往是多样且不断变化的,仅考虑用户过往的行为可能导致推荐结果多样性欠缺,时效性较差,如下图中上半部分,用户的历史行为中包括美国历史、人物传记等,那么推荐的结果往往局限于这几类中,不仅多样性较差,同时没有及时发现用户兴趣可能的演进趋势。
为解决上述问题,论文提出了一种未来感知的多样化趋势推荐框架FAT,其核心思想是根据与用户最近行为相似用户的未来行为来建模用户可能的多样化兴趣演化趋势,并进行推荐。如下图中的下半部分,同样喜欢美国历史或者人物传记的用户,可能还会喜欢其他类别的内容,通过FAT,这些内容将同样会推荐给用户,提升推荐系统的多样性和时效性。
再用一个例子简单介绍下论文的建模思路,假设今天我买了一本《机器学习》,同样买过《机器学习》的用户,部分继续深入研究,买了《深度学习》,部分想要补充下对应的代码能力,买了《深入浅出python》,还有部分用户觉得有些难度,转向学习数据分析,买了《利用python进行数据分析》。模型通过建模这些用户后续的行为,来发现我未来可能的多样的兴趣演化趋势,在推荐时,不仅会进一步推荐机器学习相关的内容,深度学习、python和数据分析的内容也会推荐给我。
接下来,稍微详细介绍下FAT框架的具体实现。
2、FAT介绍
FAT框架如下图所示:
可以看到,主要包含三个模块,Sequential Modeling、Future-Aware Diverse Trends Capture Module和Time-Interval Activation Layer,接下来对这几部分进行介绍。这里提一下,论文中的符号有些混乱,所以本文不涉及过多公式的介绍。
2.1 模型输入
模型输入主要包含三部分,分别是用户历史行为序列Iu,相似用户行为序列Tu和待推荐物品的特征Fi。这里重点介绍下相似用户行为序列的获取。
首先,需要对用户进行一个过滤,假设用户历史行为序列中最后一个物品为a(也可以用最后多个物品进行过滤,但论文中提到仅使用最后一个物品效果就可以了),那么历史行为中没有a物品的用户将被过滤掉,仅保留与物品a交互过的用户,随后,使用皮尔逊相关系数计算保留的用户与当前用户的相关性,保留相关性最高的N个用户作为相似用户。最后将相似用户与物品a交互后的行为序列进行截取,作为模型输入。
感觉有点绕,咱们举个简单的例子,如两个相似用户的行为序列是{c,a,b,d,e},{f,b,a,t,g},那么得到的相似用户行为序列分别是{b,d,e}和{t,g}。
2.2 Sequential Modeling
序列建模使用LSTM,对用户历史行为序列和相似用户的行为序列进行建模,得到用户历史偏好向量和相似用户的偏好向量。这里不再过多介绍。
2.3 Future-Aware Diverse Trends Capture Module
这一模块的主要功能是从相似用户的序列中挖掘用户多样化的兴趣演化趋势,通过胶囊网络进行建模。胶囊网络在MIND中曾经介绍过,这里简单回顾下。
有关胶囊网络,下面的图可以帮助你快速理解(图片来源于知乎:https://zhuanlan.zhihu.com/p/68897114):
可以看到,胶囊网络和传统的神经网络较为类似。传统神经网络输入一堆标量,首先对这堆标量进行加权求和,然后通过非线性的激活函数得到一个标量输出。而对胶囊网络来说,这里输入的是一堆向量,首先对这组向量进行仿射变换,然后进行加权求和,随后通过非线性的"squash"方程进行变换,得到另一组向量的输出。
2.4 Time-Interval Activation Layer
这一模块使用时间感知的注意力机制来计算每个趋势的权重,捕捉每个趋势的时效性,得到用户u的未来偏好向量Fu。Fu的计算公式如下:
其中tu代表趋势向量,Ti代表推荐目标物品i的时间,Ttr代表趋势中每一个物品的交互时间。这里比较奇怪的一点是,如何计算每个物品属于哪一个趋势?论文这里没有说明。
2.5 Prediction
得到未来偏好向量Fu和用户历史行为序列建模的输出向量hu,两部分进行拼接得到用户最终的偏好向量(拼接的话向量长度就不对了吧,感觉应该是对位相加更为合理),基于如下的公式计算物品i的预测得分:
至于模型如何训练,论文没有过多介绍。
3、实验结果
这一部分看一下论文的实验结果,首先是FAT与base模型的对比:
随后看一下在多样性指标上的表现:
多样性指标的计算公式如下,即推荐的N个物品中两两品类不同的占比:
可以看到,FAT模型在推荐准确性和多样性上,都优于base模型。
4、总结
这里再谈一下个人的感觉,FAT框架类似于基于用户和基于物品的协同过滤的融合,依据用户历史行为进行推荐类似于基于物品的协同过滤,即给用户推荐和历史行为物品相似的物品;而趋势挖掘部分,则像是基于用户的协同过滤,购买过相同物品的用户还喜欢什么物品。论文创新点不错,但是涉及到的很多细节没有详细介绍,感兴趣的同学可以找来原文进行阅读。关注公众号“小小挖掘机”,后台回复【FAT】即可获取论文。