重磅整理!推荐系统之深度召回模型综述(PART I)

2020-11-09 15:01:40 浏览数 (1)

NewBeeNLP原创出品 公众号专栏作者@一块小蛋糕 知乎 | 推荐系统小筑

最近读完了李航、何向南的《Deep learning for matching in search and Recommendation》,文章思路清晰,总结详实到位,值得一再翻阅,就想借这篇文章结合自己最近一年多的推荐召回工作内容,总结一下推荐系统中的深度召回模型,论文因篇幅限制,很多模型并未详细介绍,因此本文补充了一些内容。

这篇综述文章现在好像不好下载,很多同学私信我,一个个发邮箱不太方便,现在大家可以直接在NewBeeNLP公众号后台回复『DLM』下载。

匹配(matching)是衡量用户对物品的兴趣的过程,也是推荐召回中的工作内容。机器学习中是以learning to match的方式根据输入表示和标记数据学习一个匹配函数。而深度学习在其发展过程中以强大的表示学习和泛化能力加上算力提升、数据规模暴涨都使得深度模型在推荐召回中大放异彩。

本系列文章的总结思路是将推荐中的深度召回模型根据学习内容分为两大类:「表示学习类」「匹配函数学习类」

  • 表示学习类召回模型中根据输入数据的形式和数据属性又可以分为无序交互行为类序列化交互行为类多模态内容类连接图类
  • 匹配函数学习类模型则包括双路匹配函数多路匹配函数的学习。

由于篇幅限制,本系列将分成多篇文章分享,欢迎持续关注!

1 基于表示学习的匹配

1.1 无序行为的表示学习

首先是无序行为上的表示学习,传统的矩阵分解以用户的交互历史表示用户,即每一维代表一个物品的multi-hot向量,形成打分矩阵,利用one-hot 的ID向量再经过一层线性映射得到用户和物品的表示。而在深度学习中则是依靠深度模型学习到用户和物品的表示,常用的方法有MLP方法Auto-Encoder方法Attention方法

MLP方法

YouTubeDNN

2016年YouTube提出的深度推荐模型,将每个类别特征都映射为一个Embedding向量,像观看过的视频、搜索过的词项这种序列特征使用平均池化得到序列Embedding;将所有Embedding和连续特征拼接后送入三层MLP得到最终打分。

认为MLP可以发挥其近似任何连续函数的优势学到特征Embedding间的交叉,但这种模型是把特征交叉信息编码进MLP的隐藏单元,并不能显式的区分出哪个交叉对预测更重要。而且2018年Beutel等人证明MLP实际上很难学习到乘法操作,而乘法操作是捕获特征交叉信息的重要方式。

MV-DNN (Multi-View Deep Learning Model)

2016年微软的MV-DNN是基于DSSM(双塔)的跨领域(多塔)构建用户表示的模型。模型提出假设:在一个领域内相似的用户在另一个领域内也相似,比如app下载领域相似的用户可能也具有相似的文章阅读喜好。MV-DNN可以很好的将user和item的大量特征编码到隐语义空间,通过兴趣匹配模型学习从user到item的映射关系。既解决了新用户的冷启动问题,同时由于以大量用户行为做特征,利用跨多个域的行为来补充用户信息,对用户兴趣表示也更加精准。该方法对新用户推荐提升明显。

由于深度模型需要处理大规模训练数据的大规模特征,文中提出了几种可行的降维方法:

  • 「top 特征」:选择最频繁的topk个feature,并且用tf-idf过滤掉停用词特征
  • 「k-means」:将特征聚类,相似特征聚到同一个类簇中,并将类簇信息表示为新的特征Y。原有特征为N个,聚簇个数为K,特征的维度将从所有特征o(N)降维到类簇个数o(K)。特征处理阶段,新特征Y(y1,y2,...,yi,...,yk-1,yk)具有K个维度,每个维度的值为属于该类簇的特征出现次数加和,最后对Y进行归一化处理。合适的类簇个数对特征表达能力十分重要。小的类簇个数会导致非常多的内容聚簇在一起,从而导致特征被稀释。文中的特征数有3.5M,尝试聚簇个数10K个,即平均每个类簇包含350个特征
  • 「LSH」:通过一个随机矩阵将输入特征映射到一个低纬度向量表示,同时在新的空间中保持pairwise cos距离关系。为了保证准确性,文中设定Y的维度k=10000,和k-means维度相同。由于LSH的k个维度是随机映射,彼此相互独立,很适合进行并行计算。
  • 「缩减训练样本规模」:压缩训练样例,每个用户的训练样例数只压缩为一个。文中具体做法是将同一用户所有训练样本的各维度特征进行分数平均,最终一个用户得到一个训练样本,从而减小user-item pair。由于训练样本的表示变化,评估方式也会变化。目标函数将改为最大化用户特征和平均特征的相似度
DMF(Deep Matrix Factorization)

2017年的DeepMF从用户对物品的评分矩阵中直接构建交互矩阵,采用DSSM的双塔结构,每个塔都用MLP从交互矩阵的multi-hot向量中学习到对应的表示。即

p_u=MLP_1(y_{u*}), q_i=MLP_2(y_{*i}) , f(u,i)=cosine(p_u, q_i)=frac{p_u^T q_i}{||p_u||^2 ||q_i||^2}

模型的损失函数使用了规范化的交叉熵损失:

L=-sum_{(i,j)in Y^ bigcup Y^-} (frac{Y_{ij}}{max(R)} loghat{Y}_{ij} (1-frac{Y_{ij}}{max(R)}) log(1-hat{Y}_{ij}))

用max(R)即评分矩阵中的最大值对评分值做规范化。

Auto-Encoder 方法

Auto-Encoder是个单隐层神经网络,主要利用其隐层学习低维特征表示或者利用重建层填充交互矩阵的空白值。

AutoRec(Autoencoders Meet Collaborative Filtering)

CDAE(Collaborative Denoising Auto-Encoder)

CDAE是AutoRec的改进版本,使用隐式反馈数据对用户的偏好建模做topN推荐。CDAE以用户u的所有评分作为输入(即user-based autoRec模型)通过一层神经网络编码得到用户的隐藏表示,再通过一层神经网络还原用户的交互行为(隐式反馈)。

与简单的item-based auto-Rec不同在于CDAE在编码得到隐藏表示时加入了用户特征,语义上更丰富。同时为了使模型更具鲁棒性,CDAE对输入的用户评分向量引入随机噪声(可通过maskout或dropout或增加高斯噪声实现)防止模型学习到相等函数。模型结构如下图所示,输入层有I 1个节点,I是所有的物品数,还有一个是用户u的side information;中间隐层有K个节点,最后一个是bias,与输入层是全连接,将输入映射到低维空间中得到低维表示;输出层则是将低维表示重新映射到原始输入空间,通过最小化重建损失和参数的L2正则学习模型参数,同时使用负采样提高训练效率。

Mult-VAE(Variational Autoencoders for Collaborative Filtering)

2018年Netflix基于隐式反馈数据,提出Mult-VAE模型使用多项式似然变分自编码器解决变分推断用于推荐时参数过多的问题。推导过程比较复杂,篇幅限制,感兴趣的同学可以参考论文。

Attention方法

FISM => NAIS (Neural Attentive Item Similarity)

ACF (Attentive Collaborative Filtering)

arg min_{U,V,P,Theta}sum_{(i,j,k)in R_B} -lnsigma{ (u_i sum_{lin R(i)}alpha(i,l) p_l)^T v_j - (u_i sum_{lin R(i)} alpha(i,l) p_l)^T v_k} lambda(||U||^2 ||V||^2 ||P||^2)
hat{R}_{ij} = (u_i sum_{lin R(i)} alpha(i,l) p_l)^T v_j$,展开后:$hat{R}_{ij} = u_i^T v_j sum_{lin R(i)} alpha(i,l) p_l^T v_j

第一部分是隐空间模型,第二部分是近邻CF模型。

b(i, l, m) = w_2^T phi (W_{2u} u_i W_{2x} x_{lm} b_2) c_2$, $beta (i,l,m) = frac{exp(b(i, l, m))}{sum_{n=1}^{|{x_{l*}}|} exp(b(i, l, n))}
a(i, l) = w_1^T phi (W_{1u} u_i W_{1v} v_l W_{1p} p_l W_{1x} overline{x}_l b_1) c_1$,$alpha (i, l) = frac{exp(a(i, l))}{sum_{n in R(i)} exp(a(i, n))}

DIN (Deep Interest Network)

2018年9月****认为直接对用户行为历史做sum-pooling或average-pooling不能体现用户兴趣的多样性,因此提出DIN引入local-activation,以待预测物品与用户历史行为的相关性做权重来动态生成用户表示。

上图左侧是原有的深度推荐网络(Base Model),通过sum-pooling用户行为历史的方式生成用户表示,而右侧DIN模型中将这部分替换成由activation unit层生成权重再求加权和的方式生成用户表示。这个activation unit层的结构和常规Attention的操作不完全一致,这里是将user的embedding和广告商品的embedding及二者外积拼接后接入Dice激活函数,再经过一层线性层得到activation权重,没有softmax操作,即不限制注意力分值加和为1,论文中的观点是这样能保持用户兴趣的强度。这里作者还有三个创新点:

0 人点赞