会员登录|免费注册|忘记密码|管理入口 返回主站||保存桌面|手机浏览|联系方式|购物车
搜索与推荐中的深度学习匹配:推荐篇
2024-12-29IP属地 湖北0

这个tutorial确实不错Deep Learning for Matching in Search and Recommendation,我很喜欢,好像一个博士论文一样,将这两个领域梳理得很清楚。

之前写过搜索篇 搜索与推荐中的深度学习匹配:搜索篇,现在继续推荐篇。

搜索,推荐和广告其实是机器学习在工业界最好的落地。而且容易拿到由用户的行为来表示的海量的标注数据,而且这三者要不可以赚钱,要不可以增加流量,往往是公司的核心业务。

其实这篇tutorial主要讲推荐模型的,而实际上推荐就是一个匹配问题,所以标题才叫推荐里的深度学习匹配。另外,由于广告和推荐的技术很像,所以对广告技术感兴趣的人也可以看看这篇tutorial。

本篇blog的提纲:

推荐系统是由系统来根据用户过去的行为、用户的属性(年龄、性别、职业等)、上下文等来猜测用户的兴趣,给用户推送物品(包括电商的宝贝、新闻、电影等)。推荐一般是非主动触发的,和搜索的主动触发不一样(搜索一般有主动提供的query);也有小部分情况,用户有提供query:例如用户在电商里搜索一个商品后,结果页最底下推荐给用户的商品,这种情况算是有提供query。

搜索一般是想尽快的满足用户,而推荐是更多的是增加用户停留时长。

推荐系统涉及到的两大实体:user和item往往是不同类型的东西,例如user是人,item是电商的宝贝,他们表面上的特征可能是没有任何的重叠的,这不同于搜索引擎里的query和doc都是文本:

正是由于user和item不同类型的东西,所以推荐里匹配可能比搜索里的更难。

接下来是,推荐系统里的传统匹配模型的介绍。

先简单的提一下推荐算法的分类:

协同过滤(CF)是推荐里最通用、最著名的算法了。

CF的基本假设是:一个用户的行为,可以由跟他行为相似的用户进行推测。

协同过滤一般分为user-based和item-based、model-based三类方法。user-based和item-based、model-based的协同过滤的算法的思想通俗的讲,就是:

CF要解决的问题用数学化的语言来表达就是:一个矩阵的填充问题,已经打分的item为observed data,未打分的是missing data:

矩阵填充一般是用SVD分解来解决:

SVD就是在解决以下问题:

svd有以下缺点:

MF(matrix Factorization,user-based CF)

user和item分别用一个embedding表示,然后用户对item的偏好程度用这两个embedding的内积表示:

使用L2-loss(其它loss也可以)和正则:

Factored Item Similarity Model(Kabbur et al., KDD’14),FISM

这个论文是用user作用过的item的embedding的和来表示user,item用另一套embedding下的一个embedding来表示,最后两者的内积表示user对该item的偏好。

这个模型也叫item-based的CF,因为把括号里的东西展开后,其实就是找用户作用过的item和item[j]的相似度。

SVD++:

很简单,另外用一个user的embedding,和上述的FISM的方法,融合来表示user。这曾经是netflix比赛中连续三年效果最好的单模型。

FM: Factorization Machines (Rendle, ICDM’10)

这个模型的最大的特点就是每一个特征都用要一个低维度的隐向量来表示(一般是10维左右),其实就是现在说的embedding;可以自动的做2阶的特征组合(自己和自己不组合);并且很多其它的模型都是FM的特例。

当只有两个输入的时候:userID和itemID,FM就等价于MF(matrix factorization):

如果输入包含两个变量:1. 用户的历史作用过的item 2. 要预测的item的ID,那么FM也是包含了FISM模型的(Factored Item Similarity Model):

而如果再加上user的embedding,那就包含了svd++。所以mf,fism和svd++都是fm的特例

而实践证明用打分预测来解决推荐系统的排序问题,效果不好。可能的原因:

所以一般用pairwise的ranking来解决推荐的排序问题:

接下来我们介绍一下推荐系统里的深度学习匹配模型。

和搜索里的深度学习匹配模型一样,推荐里深度学习匹配模型也主要分两大类:

此类方法,tutorial也大概分为两类:

这类方法是仅仅建立在user-item的交互矩阵上。

首先,简单复习一下MF,如果用神经网络的方式来解释MF,就是如下这样的:

输入只有userID和item_ID,representation function就是简单的线性embedding层,就是取出id对应的embedding而已;然后matching function就是内积。

Deep Matrix Factorization (Xue et al,IJCAI’17)

用user作用过的item的打分集合来表示用户,即multi-hot,例如[0 1 0 0 4 0 0 0 5],然后再接几层MLP,来学习更深层次的user的embedding的学习。例如,假设item有100万个,可以这么设置layer:1000 * 1000 ->1000->500->250

用对item作用过的用户的打分集合来表示item,即multi-hot,例如[0 2 0 0 3 0 0 0 1],然后再接几层MLP,来学习更深层次的item的embedding的学习。例如,假设user有100万个,可以这么设置layer:1000 * 1000 ->1000->500->250

得到最后的user和item的embedding后,用cosine计算他们的匹配分:

这个模型的明显的一个缺点是,第一层全连接的参数非常大,例如上述我举的例子就是1000*1000*1000。

AutoRec (Sedhain et al, WWW’15)

这篇论文是根据auto-encoder来做的,auto-encoder是利用重建输入来学习特征表示的方法。

auto-encoder的方法用来做推荐也分为user-based和item-based的,这里只介绍user-based。

先用user作用过的item来表示user,然后用auto-encoder来重建输入。然后隐层就可以用来表示user。然后输入层和输出层其实都是有V个节点(V是item集合的大小),那么每一个输出层的节点到隐层的K条边就可以用来表示item,那么user和item的向量表示都有了,就可以用内积来计算他们的相似度。值得注意的是,输入端到user的表示隐层之间,可以多接几个FC;另外,隐层可以用非线性函数,所以auto-encoder学习user的表示是非线性的。

Collaborative Denoising Auto-Encoder(Wu et al, WSDM’16)

这篇论文和上述的auto-encoder的差异主要是输入端加入了userID,但是重建的输出层没有加user_ID,这其实就是按照svd++的思路来的,比较巧妙,svd++的思想在很多地方可以用上:

简单总结一下,基于Collaborative Filtering的做representation learning的特点:

而Auto-Encoder的方法可以等价为:

用MLP来进行representation learning(和MF不一样的是,是非线性的),然后用MF进行线性的match。

这类方法是建立在user-item interaction matrix + side info上的。

Deep Collaborative Filtering via Marginalized DAE (Li et al, CIKM’15):

这个模型是分别单独用一个auto-encoder来学习user和item的向量表示(隐层),然后用内积表示他们的匹配分。

DUIF: Deep User and Image Feature Learning (Geng et al, ICCV’15)

这篇论文比较简单,就是用一个CNN来学习item的表示(图像的表示),然后用MF的方法(内积)来表示他们的匹配分:

ACF: Attentive Collaborative Filtering(Chen et al, SIGIR’17)

这篇论文主要是根据SVD++进行改进,使用两层的attention。

输入包括两部分:

两个层次的attention:

attention weight由下述式子做归一化后得到:

其中u表示用户的向量,x[l][m]表示物品的第m部分的特征

然后使用svd++的方式计算用户的方式,只是这里的item部分不是简单的加和,而是加权平均:

这个论文是采用pairwise ranking的方法进行学习的,整个模型的结构图如下:

模型采用pairwise ranking的loss来学习:

CKE: Collaborative Knowledge Base Embedding (Zhang et al, KDD’16)

这篇论文比较简单,其实就是根据可以使用的side-info(文本、图像等),提取不同特征的表示:

对上述方法做一个简单的总结(基于Collaborative Filtering+side info的一些方法介绍(representation learning)):

Neural Collaborative Filtering Framework (He et al, WWW’17)

这篇论文是使用NN来学习match function的通用框架:

这篇论文的模型就是将user的embedding和item的embedding concat到一起,然后用几层FC来学习他们的匹配程度。

MLP在抓取多阶信息的时候,表现并不好

很不幸的是,MLP效果并没有比内积好。有一篇论文证明了,MLP在抓取多阶的信息的时候,表现并不好:

这篇论文要说的是,即使是二维的1阶的数据,也需要100个节点的一层FC才能比较好的拟合;而如果是2阶的数据,100个节点的一层FC拟合得非常差,所以MLP在抓取多阶信息上并不擅长。不过个人总体上觉得这篇论文的说服力不够。

NeuMF: Neural Matrix Factorization (He et al, WWW’17)

这篇论文其实是MF和MLP的一个融合,MF适合抓取乘法关系,MLP在学习match function上更灵活:

user和item分别用一个单独的向量做内积(element-wise product,没求和)得到一个向量v1;然后user和item分别另外用一个单独的向量,通过几层FC,融合出另外一个向量v2,然后v1和v2拼接(concat)到一起,再接一个或多个FC就可以得到他们的匹配分。

NNCF: Neighbor-based NCF(Bai et al, CIKM’17)

这篇论文主要是将user和item的neighbors信息引入。至于user和item的neighbor怎么挖掘,就有很多算法了,包括直接和间接的neighbors。例如两个用户同时购买过某个商品,他们就是neighbor等。

底层是用户的向量和item的向量的element-wise dot的结果拼接上另外两个向量:

效果:

Deep NCF效果要远远比MF好;而NeuMF要比普通的MF效果要好,说明加了MLP来做match function learning要比简单的内积效果要好。

ONCF: Outer-Product based NCF (He et al, IJCAI’18)

上述的模型,user向量和item向量要不是element-wise product,要不是concat,这忽略了embedding的不同维度上的联系。一个直接的改进就是使用outer-product,也就是一个m维的向量和n维的向量相乘,得到一个m*n的二维矩阵(即两个向量的每一个维度都两两相乘):

其中也包含了内积的结果。

然后就得到一个mn的矩阵,然后就可以接MLP学习他们的匹配分。但是由于m*n比较大,所以这样子是内存消耗比较大的:

使用CNN来处理上述的outer-product的二维矩阵,可以起到大大节省内存的效果:

效果上,ConvNCF要比NeuMF和MLP都要好:

Overview of Translation-based Models

MF-based的model是让user和他喜欢的item的向量更接近:

而translation-based的模型是,让用户的向量加上一个relation vector尽量接近item的向量:

TransRec (He et al, Recsys’17):

这篇论文的主要思想是,item是在一个transition空间中的,用户下一次会喜欢的item和他上一个喜欢的item有很大关系。

这篇论文要解决的下一个物品的推荐问题,利用三元关系组来解决这个问题:<user, current item, next item>,主要的思想是:

那么用户喜欢下一次物品的概率和下述式子成正比:

Latent Relational Metric Learning(Tay et al, WWW’18)

这个论文主要是relation vector通过若干个memory vector的加权求和得到,然后采用pairwise ranking的方法来学习。

首先和attention里的k、q、v类似,计算出attention weight:

其中p和q分别是user和item的向量。然后对memory vector进行加权求和得到relation vector(该论文中用了6个memory vector):

推荐里的特征向量往往是高维稀疏的,例如CF中feature vector = user_ID + item_ID。对于这些高维稀疏特征来说,抓取特征特征之间的组合关系非常关键:

对于feature-based的方法来说,能抓取特征的交互作用和关系非常重要。

Wide&Deep (Cheng et al, Recsys’16)

这个模型主要是将LR和DNN一起联合训练,注意是联合训练,一般的ensemble是两个模型是单独训练的。思想主要是:

Deep Crossing (Shan et al, KDD’16)

这篇论文和wide&deep的主要差别是加了残差连接:

Empirical Evidence (He and Chua, SIGIR’17):

这篇论文主要想说明两点:

NFM: Neural Factorization Machine(He and Chua, SIGIR’17)

这个模型主要是,将FM里的二阶特征组合放到NN里,后面再接几层FC学习更高阶的特征组合。具体方法是:两两特征进行组合,即进行element-wise dot,得到一个K维的向量,然后所有组合的K维向量进行加和,得到一个K维的向量,往后再接几个FC,模型结构图如下:

效果上,该模型完爆了之前没有手工做特征组合的模型和FM:

AFM: Attentional Factorization Machine(Xiao et al, IJCAI’17):

这个模型主要是针对FM的不同特征的组合的结果的简单加和,变成加权平均,用attention来求权重(有利于提取重要的组合特征;NFM是使用MLP来学习不同特征组合的权重,且没有归一化的过程):

模型的整体结构图如下:

效果上,不带隐层的AFM就能干掉带一层隐层的NFM。如果增加隐层,AFM的效果能进一步提升:

DeepFM (Guo et al., IJCAI’17):

这一篇论文主要是将wide&deep的LR替换成FM,FM可以抓取二阶的特征组合关系,而DNN可以抓取更高阶的特征组合关系:

对上述的feature-based的方法做个简单总结:

· wide&deep是手工进行组合

· FM-based的模型是自动进行组合

Deep neural networks for youtube recommendations:

这一部分是我自己添加的,我觉得讲到推荐的话,这篇论文还是值得讲一讲的。这篇论文中有很多实践的干货,值得好好琢磨琢磨。

一个top-n推荐的系统一般也分两个排序阶段:

整个推荐系统的架构图如下:

对于粗排模型:

采用分组全连接:

什么叫分组全连接呢?例如对特征分组,有两组特征是:1.用户过去14天点击过的视频的ID 2.用户过去3天观看时间超过2分钟的视频的ID,每一组特征内的ID的embedding加和,那每一组内都是一个全连接,每一组加和后都到一个定长的K维向量,如果有N组特征,就会一个定长的N*K维的特征,然后再接若干层FC,就可以预测用户对该视频的偏好程度。分组全连接的思想,有点像CNN里的局部连接。上述的Deep Matrix Factorization是全连接,第一层全连接的参数可能很大。

那么这篇论文的粗排具体是怎么做的呢?主要是以下几点:

那么通过这个模型,user和item的embedding都得到了,那么就可以用CF的方法,用内积计算出他们的匹配分,用来做粗排(召回)。所以上述的tutorial里的架构图才把粗排模型叫Collaborative Filtering Models。

对于精排模型,也是使用分组全连接的模型:

这篇tutorial总算撸完了,收获非常大。总体上,个人感觉推荐的深度学习模型比搜索的、NLP的要简单一点点。

总体上,不管是搜索还是推荐,匹配模型都主要分两大类:

另外,svd++的思想很强大,很多nn的模型都是借鉴svd++来改进的;而svd++又是FM的一个特例,FM的威力也不可小觑。

1. Deep Learning for Matching in Search and Recommendation

http://www.comp.nus.edu.sg/~xiangnan/sigir18-deep.pdf

2. 搜索与推荐中的深度学习匹配:搜索篇