推荐系统论文阅读(四十四)-微信看一看(RALM):look-a
论文:
论文题目:《Real-time Attention Based Look-alike Model for Recommender System》
论文地址:https://arxiv.org/pdf/1906.05022v1.pdf
召回模型有很多类型,包括i2i,u2i,gcn等等,但是u2u的模型我们在之前好像没有介绍过,今天我们就来看一下微信发表在kdd上,用look-alike模型来缓解马太效应的论文吧,这篇论文是一篇模型相对简单,但是工程给一些trick都比较抽象的论文,一起来看看吧。
一 、背景
做推荐系统的人都知道在推荐系统领域中的一个常见的现象“马太效应”,这里简单的解释一下,以微信看一看场景为例,每天都有几百万的新的新闻或者短视频被生产到平台上,但是只有那些热门的新闻容易被曝光,进而有更多的机会成为训练样本,无论是用传统的ItemCF模型还是dl模型,这些热门item都会造成我们的推荐系统偏向于这些item,而那些高质量冷门的item并不会曝光。马太效应会导致推荐系统越来越趋于那些热门的item,这就让用户在浏览的时候体验很不好,因为系统就缺失了多样性和推荐一些冷门高质量item的能力。
这里我提一个在传统协同过滤方法中的一个trick,userCF可以用于解决item冷启动问题,itemCF可以解决user冷启动问题。所以呢,微信看一看团队用的就是userCF的思想来解决item冷启动的问题。其实在广告投放领域,用look-alike的base模型是可以筛选出跟种子人群相似的人群去投放广告的,look-alike模型的思想是:Look-alike 是广告领域流行的一类方法,其核心思想是针对某个 item,先根据历史行为圈定一部分种子用户,然后通过模型寻找与种子用户相似的人群,为他们推荐该 item。look-alike 充分利用了 item 的所有行为信息,因此在定向挖掘长尾内容受众上具有独特的优势。但是在看一看这种咨询场景下,我们对于实时性的要求是比较高的,这里有一定的差异的:
1.内容时效性要求高,一条新闻投放资讯生命周期一般不超过一天。
2.候选集更新频率高,一天可能有几十上百万条新内容出现。
为什么传统的look-alike不能直接用的我们这种实时性比较强的场景下呢,主要是因为几点:
1.传统的look-alike模型需要训练出user/item embedding然后在计算相似度,而训练样本需要花费一定的时间去积累
2.在看一看新闻推荐领域中,新闻的实时性是很关键的,由于需要积累样本,所以实时性没法得到满足
所以呢,这篇论文主要就为了解决一下三个问题来建模的:
1.进行种子人群的受众用户扩展
2.保证推荐系统的多样性和准确性
3.确保实时性,也就是能在线预测
带着上面的几个问题和思路,我们直接来看一下模型结构吧。
二 、模型结构
RALM的模型主要是分成两个阶段进行训练,第一部分主要是为了进行user embedding的表示建模,第二部分是进行look-alike模型的训练,也就是受众扩展的模型。
整体的系统如下:
2.1 User Representation Learning
要准确的建模出user embedding,RALM采用了改进的youtubeDNN模型。
从图中我们也可以看到相比于youtube的方式,RALM进行了改进,改进的地方在于:
原来不同field的特征经过embedding后,都是直接concat后送到mlp里面,在RALM里面,则是加了attention。文章中也分析了直接concat带来的缺陷:与用户相关性强的特征(如感兴趣的标签)会导致过拟合,而与相关性较弱的特征(如购物兴趣)所产生的影响则有限,甚至产生负面影响。所以,不能进行直接从concat操作。结果,该模型无法在多领域特征上全面学习,并且缺乏推荐结果的多样性。
Attention merge layer.
作者认为无论是强特征还是弱特征都会给模型的训练带来影响,但是影响的程度不一样,这里我们可以联想到另一个结构,SEnet,这个结构也可以用来计算特征的重要性。但是RALM是用attention的思想来计算特征重要性的。
其中u是用户向量,w2是特征的embedding,然后就是进入加权求和到mlp层了,后面到训练就跟youtube的方法一样了,这里就不再赘述了。
2.2 Look-alike Learning
论文对于item特征的建模是比较有意思的,我们在开头的时候也说了,这篇论文主要的思想是userCF,所以呢这里对于item特征的构建就是直接用点击过这个item的user 的embedding来组成,而这部分用户也被论文定义为seed users,也就是种子人群用户,我们建模的目的是计算这些种子人群用户跟目标用户之间的相似度,但是这里我有个疑问:训练样本是如何构建的?
接着来看我们的模型结构,也是经典的双塔模型,但是有三个地方我们需要解释一下,分别是离线的k-means,还有local attention和global attention。
2.2.1 Local attention
这部分跟din中的attention思想一样,主要是用target user来激活seed users,直接看公式吧:
2.2.2 K-means
如果一个item有很多个seed users,那么上面计算attention的时间成本和计算次数也会变得非常大,所以这里采用了聚类的思想,采用的是k-means的思想来对所有对seed users进行聚类,聚类后,我们用类中心来表示这个seed user,然后我们只需要计算k次attention score就可以了。
注意,这里k-means是离线计算的,还有,需要每隔几个batch就重新聚类一次,目的是为了让模型更好的适应不同的seed users,同时减少聚类带来的信息损失。
2.2.3 Global attention
相比于local attention更关注个体信息,用户群体还有共性的、与自身组成相关的全局信息。因此我们引入 global attention unit 来捕获这部分群体信息。
global attention的思想是用self-attention来做,让seed users中不同的user交叉一下。
最后,我们得到两部分seed users的向量表示,我们将其相加:
该任务是个多分类问题(目标用户属于哪一个种子用户群),但是为了模型的训练效率,采用的是随机负采样的方式来生成负样例,点击item的种子用户做正例,随机采负例。
最后loss为多个二分类交叉熵:
三、实验结果
本文就介绍到这里了,其实关于这篇论文,我个人感觉用这种基于用户行为的模型来解决长尾问题有点怪怪的,说实话这种问题业界主要还是用策略跟规则居多?不知道为什么在这个场景下这么有效。