论文:
论文题目:《Learning to Build User-tag Profile in Recommendation System》
地址:https://dl.acm.org/doi/pdf/10.1145/3340531.3412719
本论文是wx用户画像团队发表在CIKM2020 上的一篇关于如何利用神经网络对用户进行画像建模,并把建模后对画像运用在推荐系统的文章。这篇论文主要介绍了微信看一看("Top Stories")中,如何进行用户对标签的兴趣建模,进而提升召回和推荐的效果。
一 、背景
用户画像是推荐系统中最重要的组件之一,在该系统中,使用人口统计信息(例如性别,年龄和位置)和用户行为信息(例如浏览和搜索历史记录)对用户进行了表示。 在用户画像的不同维度中,tag是一种可解释且广泛使用的用户兴趣表示。 本文提出了一种用户标签分析模型(UTPM),以使用深度神经网络将用户标签分析作为多标签分类任务进行研究。
到目前为止,应用于标签推荐问题的方法主要是协同算法,这些算法仅基于用户和标签之间的共现。 但实际上,这些方法无法充分利用多领域的用户信息来帮助发现用户的兴趣。 必须应用最新的深度模型来增强用画像建模的性能。
新闻推荐系统的架构图如下:
可以看到,整个推荐系统架构主要包含四部分,新闻画像层(news profile layer),用户画像层(user profile layer),召回层(recall layer)和排序层(rank layer)。在新闻画像层,对新闻相关的特征如标签,类别等进行提取。在用户画像层,对用户的基本画像特征和行为特征进行建模。这里很重要的一块是对用户偏好标签的预测,这里将用户点击过的文章对应的标签集合作为候选集,基于后文将要介绍的模型对这些标签进行偏好预测,并用于后续阶段。随后是召回层,有多种召回方式,包括基于标签的召回、基于协同过滤的召回和基于模型的召回。最后是排序层,可以使用更为复杂的模型对召回层得到的结果进行精确的排序,最后展示给用户。
图1中的蓝色虚线展示了构建用户标签画像的过程。首先,我们收集数据并在特征生成和标签组织步骤中对其进行处理(该过程在“实验”部分中进行了详细介绍)。然后,针对每个用户,在候选集选择步骤中收集用户阅读历史记录中的所有“点击的标签”(用户点击的新闻文章中的标签),并在模型训练步骤中计算出用户对这些标签的偏好。一个用户可以拥有数千个点击的标签。此外,在预测用户对看不见的标签的偏好时,候选对象可能包含大量标签。
在构建用户标签配置文件时,至关重要的是选择特征并学习特征交互,因为模型输入由来自多个字段的众多稀疏特征组成,如图1的左侧所示。在新闻推荐系统中,单击的文章是作为正样本;浏览但未单击的文章被视为否定样本。但是,直接将这种方法应用于标签会导致将单击的新闻文章中的标签视为肯定样本,这可能会产生问题,因为单击文章的用户可能只对其标签之一感兴趣。基于上述考虑,我们旨在回答以下两个问题:
•RQ1:如何自动选择有用的特征并了解不同领域内以及不同领域之间的相互作用?
•RQ2:如何从每条点击的新闻文章中了解用户对不同标签的偏好?
带着这两个问题,我们来接着往下看这篇文章吧。
二 、Model
2.1 Feature-input layer
这部分就是Embedding层,输入信息包含两部分:
1)用户阅读相关信息,例如点击过的标签,点击过类别和微信订阅帐户字段等
2)用户画像,例如性别和年龄段等信息
这些信息都是类别信息,有些是单值离散特征,有些是多值离散特征,比如用户点击过的标签和类别都是多值离散特征,离散特征首先会通过embedding层转换成相同长度的embedding向量。关于多值离散特征的embedding,有很多方法可以对多值离散特征进行embedding,比如直接使用 tensorflow里面这个函数就可以tf.nn.embedding_lookup_sparse,也可以采用avg/sum pooling等pooling方法,但是文章采取了其他方法,下面会说。
2.2 Attention-fusion layer
这里简单的提一下,在youtube推荐论文中,主要是采用concate的方式对所有不同field的特征进行操作,但是这样做有个问题就是不同特征的重要性是不一样,所以需要引入attention操作,这也是对问题一的回答。
首先,对于多值离散特征,比如用户点击过的tag,我们如果直接使用avg pooling操作是不行的,因为有些tag是比较重要的,有些对推荐的效果是没用的。所以,这里用一个query向量来进行attention操作:
其中,k表示第k的field,H表示这个field是多值离散特征,共有H个特征域,t代表这个tag的embedding。
通过计算ai,我们得到了每个tag的weight,然后我们利用这些weight得到最后的向量:
这里注意的一点是,所有的域共用query向量q1,但参数矩阵W则是每个域独有的参数。
这里你可能已经注意到了为什么有q1,没有q2?其实是有的,论文用了两个查询向量q1,和q2分别计算得到两个输出。这里不管是多值离散特征的merge,还是不同fields的特征之间的merge都是采用两个查询向量,注意了,q1和q2在不同的merge中都是共享的。
文章认为,与从具有不同查询向量的每个单独字段中学习相比,使用共享查询向量从不同字段的特征中学习有助于建立更鲁棒和准确的选择标准,尤其是对于具有稀疏特征的字段。 同样,我们可以通过第二个关注点来融合功能,以从实验中证明从不同方面学习功能。 最后,来自双头注意机制的两个合并的嵌入被concate到上层。
2.3 cross feature layer
特征的交叉在推荐系统中的重要性不言而喻,这一层的作用主要是对特征进行交叉。
直接看图:
加入上一层的输出是x,则特征交叉的计算是这样:
对于x中的每个维度的value,与其他维度的value进行相乘,再跟两个隐向量的内积相乘就得到了特征交叉的结果,最终的结果向量的维度是E(E-1)/2,假如x的维度是E。
是不是跟FM很像,其实确实在特征交叉的计算是一样的,跟FM不同的地方在于这里是保存了计算的结果作为向量来使用,而FM中没有保存。
ps:这里有个困惑,不知道为什么要把这里x的维度写成E,其实这里应该是2E,因为X是由两个维度为E的向量cat出来的。
2.4 fully connect layer
这里,将attention fusion layer的输出x和cross feature layer的输出c进行拼接,经过两层全连接网络得到最终的用户向量u。
2.5 predicting layer
我们先明确一点,我们的label是个啥,在之前我们也说过了,每个news都有很多的tag,如果我们把用户点击过的news的tag全部设置为正样本,把浏览未点击的news的tag全部设置为负样本是不行的,因为用户点击了一个news有可能只是喜欢其中的一个tag,所以这么做是不行的,那么wx的算法团队是怎么做的呢?
其中t是这个news的tag的embedding,也就是说我们把每一个 tag的映射成跟user向量u维度相同的向量,并且用他们的内积的sigmoid作为真正的预测值。
我们这里回顾一下word2vec里面的skip gram方法,在skip gram方法里面,也是使用中心词汇的向量跟win里面其他词汇的内积的值来计算sigmoid值的,我感觉这么做的原因是这样的,通过内积的计算,可以让user的向量u跟这个文章中的tag的embedding比较相近,也就是用户u跟tag的相关性是比较高的,跟skip gram的思想类似。
三、实验
模型的参数设置:
实验结果:
相比于其他模型,这个模型的各项指标都有所提高,总体上来看还是一篇比较简单不错的论文。