本文由云+社区发表web
做者:腾讯技术工程算法
导语:最近几年来,深度学习在推荐系统领域中取得了很多成果,相比传统的推荐方法,深度学习有着本身独到的优点。咱们团队在QQ看点的图文推荐中也尝试了一些深度学习方法,积累了一些经验。本文主要介绍了一种用于推荐系统召回模块的深度学习方法,其出处是Google在2016年发表于RecSys的一篇用于YouTube视频推荐的论文。咱们在该论文的基础上作了一些修改,并作了线上AB测试,与传统的协同召回作对比,点击率等指标提高明显。网络
为了系统的完整性,在介绍主模型前,本文先对传统推荐算法和召回算法作一些简单的介绍和总结,并指出深度学习方法相对于传统方法的优点所在,而后再进入本文的主题——深度召回模型。架构
1. 推荐系统算法概述ide
按照使用的数据类型来分,推荐算法能够分为两大类:函数
第一类是基于用户行为数据的推荐算法,一般也叫作协同过滤;协同过滤又分为memory-based和model-based这两类。其中,memory-based协同过滤的表明算法有基于用户的UserCF,基于物品的ItemCF,它们的特色是用行为数据直接计算user-user或item-item的类似度[1]。Model-based协同过滤的表明算法主要是一些隐变量模型,例如SVD、矩阵分解MF[2, 3]、主题模型pLSA、LDA[4]等,它们的特色是用行为数据先计算出user和item的隐向量,而后经过这些隐向量计算user-user或item-item间的匹配度去作推荐。工具
在实践中,咱们除了能拿到用户的行为数据之外,一般还能够拿到用户和物品的画像数据,好比性别、年龄、地域、标签、分类、标题、正文等,在一些文献中,这些行为之外的数据被称为side information。传统的协同过滤是不考虑side information的,若是把side information和行为数据结合使用,应该会提高推荐的准确率。这种同时使用行为数据和side information的算法都属于第二类算法。性能
在第二类算法中,最多见的模型就是CTR模型。CTR模型本质上是一个二分类的分类器,用得比较多的是LR、xgboost[10]、lightGBM[11]等分类器。其中,行为数据和side information被用于构造训练样本的特征和类标。分类器完成训练后,经过预测user点击item的几率,能够把topK几率最大的item做为推荐结果推送给用户。比起纯行为的协同过滤,使用了side information 的CTR模型一般会取得更好的推荐效果。而整个CTR模型取胜的关键,在于如何结合side information和行为数据构造出具备判别性的用户特征、物品特征以及交叉特征;学习
近五年来,基于深度学习的CTR模型逐渐发展起来,在很多应用场景下取得了比传统CTR模型更好的效果。相比于传统的CTR模型,深度CTR模型有着本身独到的优点,主要体如今以下几个方面:测试
**(1)特征的整合能力:**深度学习经过使用embedding技术,能够将任何分类变量转化为具备语义结构的低维稠密向量,很容易把分类变量和连续变量结合在一块儿做为模型的输入,比传统方法使用one-hot或multi-hot表示分类变量的方式更方便有效,特别适合于web推荐这种分类变量比较多的场景;
**(2)自动交叉特征的能力:**深度学习经过神经网络强大的非线性拟合能力,能够从原始输入数据中自动学习用户和物品的交叉特征,能更深层次地匹配用户与物品,从而提升推荐准确率。经过自动学习交叉特征,大大下降了特征工程的工做量;
**(3)端到端的学习:**传统CTR模型会把特征构造和模型训练分开,先作数据预处理、特征构造或特征学习,而后给模型训练。这些事先构造或学习好的特征,并不必定最适合用来拟合当前模型。而在深度学习中,输入数据不须要作过多的预处理或特征学习,特征学习和模型训练是同时进行的,学到的特征也是最适合拟合当前模型的,学出来的模型的泛化能力一般会更好一些。因为不须要专门学习特征,所以也提升了开发模型的效率。
**(4)完善的计算平台和工具:**模型建得再漂亮,最后也得能求解出来才能在实际中发挥真正的做用。对于深度学习来讲,一些现有的计算平台(如TensorFlow)使得模型求解变得很是容易。研究者只须要把精力放在模型的设计和调优上,不须要推导复杂的求解公式。模型的求解由TensorFlow等工具的自动微分技术完成,大大下降了模型实现和落地的难度。
因为以上缘由,基于深度学习的CTR模型受到了普遍关注,在最近几年内发展很快,并在很多业务中取得了显著的成果。
2.召回模型
推荐系统在架构上通常分为两层:召回层和排序层。
其中,召回层主要负责从全体物品中快速筛选出跟用户兴趣相关的物品池子,大大缩小物品的范围,为排序作准备。在资讯类产品的推荐场景下,召回物品一般还须要知足时新性。因此在资讯类推荐场景中,召回模型要知足以下几点:
(1)高效性:要在很短的响应时间内完成物品的召回;
(2)相关性:要尽量召回那些匹配用户兴趣的物品;
(3)时新性:新上线的物品,也要能被召回,以确保最新的内容也有曝光的机会;
2.1传统召回模型
以图文推荐为例,经常使用的召回方式是经过用户历史点击的文章去关联类似文章做为召回,其中,按照所用数据的不一样,又分为按内容召回和协同召回。
内容召回:
(1)根据用户画像中的标签、分类,召回具备相同或类似标签、分类的文章;
(2)使用文章的标题或正文,经过word2vec、glove等方法求出文章的标题向量或正文向量,经过计算向量的余弦类似度召回内容上类似的文章。
协同召回:
(1)可使用jaccard公式直接计算两篇文章的用户重合度做为这两篇文章的行为类似度;
优缺点:
以上这两类召回方法,都有各自的优势和缺点。
第一种方法的优势是能够召回最新的文章。缺点是可能会出现召回内容过于集中或兴趣漂移等问题。对于向量化方法,容易出现“点过什么就召回什么”的现象,下降了推荐的多样性。对于直接用标签或分类来召回,可能会召回相关性不高的文章,下降召回的准确性。
第二种方法在必定程度上解决召回内容过于集中和兴趣漂移的问题,可是由于依赖于行为数据,因此只能召回训练数据中包含的文章,没办法召回最新的文章。为了召回新文章,就必须每隔一段时间从新计算一遍。因此它召回的文章作不到真正意义的时新。
为了解决以上两种方法存在的缺点,咱们使用了深度学习的方法去作召回,充分利用用户的画像信息去深度匹配用户兴趣和文章,同时保证能够召回最新的文章。业界中用深度学习作召回比较成功的是Google在YouTube视频推荐中使用的召回方法[9],但它并不考虑召回内容是否时新这一点,因此为了让这个方法也能召回最新的item,咱们对YouTube深度召回模型作了一些修改,让它既能召回深度匹配用户兴趣的文章,也能保持召回文章的时新性。“此外,因为YouTube召回模型使用的是用户向量直接匹配文章向量的召回方式,所以经过使用向量索引系统,很容易知足从大量文章中快速召回候选集的性能要求。”
2.2深度召回模型
为了表述上的简洁,我把Google提出的这个用于YouTube视频推荐的深度召回模型简称为YouTube召回模型。在讲述模型以前,先讲一下深度CTR模型中通常都要使用的两个基本网络结构:embedding层和全链接层。
Embedding层
深度CTR模型的输入一般会包含各类不一样的分类变量,例如用户画像里的标签、一级分类、二级分类等。这些分类变量的取值每每比较多,好比标签,它的取值可能就有几十万个,若是用one-hot或multi-hot方式来表示标签,则会产生几十万维的高维稀疏向量。在深度CTR模型中,对这些取值特别多的分类变量一般都会使用embedding方法,将其表示为一个低维稠密的向量,而后输入到网络中。这个低维稠密向量被称为这个分类变量的embedding,把分类变量转化为embedding的那一层网络称为embedding层。下图给出了一个例子,讲述了如何使用embedding方法将用户画像中的标签表示为一个低维稠密向量。
图1 用embedding方法表示分类变量的例子
首先,咱们初始化一个lookup table,这个lookup table是一个矩阵(能够是事先选了好固定不变的,也能够是从数据中学习,不断迭代更新的),矩阵的行数为分类变量的取值数,在这个例子中就是标签总个数,矩阵的列数是低维稠密向量的维数(事先指定)。假设标签总个数为1万,那么lookup table就有1万行,其中第i行是编号为i的标签对应的embedding。在上图例子中,用户有两个标签,编号分别为308和4080,对应权重为0.7和0.3,求embedding时首先将第308行和第4080行的向量拿出来,分别记为
,而后以0.7和0.3为权重加权求和这两个向量,就获得了用户标签的embedding,即
事实上,用以上方法求embedding,跟用输入分类变量one-hot或multi-hot后获得的高维稀疏向量乘以lookup table,获得的结果是同样的,不一样的只是用查表求和的方式来作这个矩阵乘法会高效得多。因此从本质上说,求embedding作的是线性降维。
全链接层
全链接层是多层感知器(multiple layer perceptron, MLP)中的基本结构,定义了第l层到第l+1层的非线性映射关系,它的主要做用是使模型具有非线性拟合能力,或者说学习特征交叉的能力。图2给出了一个从第l层到第l+1层的全链接示意图。
图2 第l层到第l+1层的全链接示意图
Youtube召回模型的网络结构
YouTube召回模型根据user的点击历史和画像,计算user对item库里每一个item的喜欢的几率,返回topK几率最大的item做为召回列表。从本质上说,YouTube召回模型是一个超大规模的多分类模型,每一个item是一个类别,经过用户画像计算出用户特征做为模型输入,预测用户最喜欢的topK个类别(topK个item)。
在图文主feeds召回这一场景中,用户的输入主要为如下几种类型的数据:
(1)用户的点击历史,包括阅读、点赞、评论、收藏、biu过的文章;
(2)用户的兴趣画像,包括用户的标签、一级分类、二级分类等;
(3)用户的人口统计学特征,包括用户的性别、年龄等;
(4)用户的上下文信息,包括用户的地域信息、访问推荐系统时的时间段等;
这里有一点须要注意的,就是咱们模型里文章的lookup table是由文章正文分词的word2vec向量构成的,在训练过程当中不更新。在YouTube召回模型的原始论文里,item是视频,item的lookup table是学习出来的。可是在图文推荐场景下,若是文章的lookup table是学习获得的话,那就没办法召回最新的文章了,只能召回那些训练样本中出现过的文章,知足不了时新文章推荐的需求。为了能召回新文章,咱们修改了原模型,直接用文章的word2vec向量构造文章的lookup table,其中文章的word2vec向量由文章的词向量加权求和获得,而词向量则是事先用word2vec学好固定下来的。每入库一篇新文章,咱们均可以经过该文章的词向量加权求和获得它的word2vec向量,而后存起来,YouTube模型在线召回时,不管是计算用户兴趣向量仍是计算内积,均可以实时获取到每篇文章的向量,包括最新文章,从而能够知足时新文章召回的需求。
图3 YouTube深度召回模型的网络结构
训练阶段:
以用户全部的side information和点击行为数据做为训练样本,最大化以上这个总似然函数,即可以学习出全部lookup table、DNN网络权重和偏置。
预测阶段:
优化算法:
因为这个模型里的softmax须要对库中全部文章进行,文章数量通常都在几十万这个量级,直接优化是不可行的,会很是耗时,因此实际计算中会采用专门针对这种超大规模多分类问题而设计的优化算法,这类算法的名字叫作candidate sampling,其中用得最普遍的是噪声对比估计(NCE,Noise-Contrastive Estimation),它将点击样本的softmax变为多个二分类logistic问题。因为softmax具备sum-to-one的性质,最大化点击样本的几率必然能致使最小化非点击样本的几率,而二分类logistic则没有这个性质,因此须要人为指定负样本,NCE就是一种根据热度随机选取负样本的技术,经过优化NCE损失,能够快速地训练获得模型的全部参数。在实践中,咱们采用了TensorFlow提供的函数tf.nn.nce_loss去作候选采样并计算NCE损失。
3.实验和分析
实验设置
为了验证YouTube深度召回模型是否比传统的召回方法更有效,咱们作了线上的AB测试实验。其中,深度召回模型离线训练完成之后,将其用于服务端作在线召回,对比的召回方法是基于文章的协同过滤。
训练样本
(1)用户向量计算:
用户最近一段时间的点击历史,包括阅读、点赞、评论、收藏、分享过的文章;
用户最近一段时间的兴趣画像,包括用户的标签、一级分类、二级分类以及对应权重;
用户的人口统计学特征,主要为用户的性别、年龄;
用户的上下文信息,主要为用户的地域信息、当前时间;
(2)正样本选取:
用户在画像统计时间点后一天点击过的文章;
(3)文章向量:
计算用户向量和正样本涉及到的全部文章的word2vec向量;
(4)样本量:
对用户抽样,用于训练的用户数抽样到千万级别,样本总数达到亿级别;
实验结果抽样分析
在上线实验前,咱们作了抽样分析。也就是随机抽取若干用户,获取他们的历史点击文章,而后看看 YouTube召回模型和协同过滤模型分别召回了什么文章,主观上去看一下哪一个召回更符合用户的历史点击。如下是某个用户的case分析:
从这个用户的历史点击文章能够看出,他的兴趣点有娱乐类、社会类和科技类。协同召回和YouTube召回基本都能召回这些类别相关的文章。相比而言,协同召回的文章在内容上会比较类似,YouTube召回的文章不只有内容类似的,并且还有主题相关的,在多样性和推广性上会更好一些。好比说,对于协同召回,历史点击了漫威的复联4,召回就有漫威的文章,历史点击了马云,召回也有马云。而对于YouTube召回,“点什么就召回什么”这种现象会少不少,召回的文章既保持了相关性,同时又有必定推广性。好比说,“复联4”召回“疯狂的外星人”,虽然它们不是同一个系列的电影,可是都是新电影。也许该用户并非特别关心漫威的电影,而只是关心一些新电影,YouTube模型可能识别到了用户的这一兴趣趋向,召回了“疯狂的外星人”。因此主观上会有一种在相关性上作推广的感受。
然而,以上case分析只是主观上的感觉,并且抽样分析不能表明整体。最可靠的仍是经过线上的AB测试来评估召回算法,看可否提升线上的核心指标。
在线评估指标
在线AB测试实验的评估指标是算法的点击数、曝光数、点击率以及文章覆盖度。AB测试实验的对照组用的是基于Item的协同过滤算法,即ItemCF,经过jaccard计算item-item类似度,根据用户历史点击过的文章召回类似文章。实验组是YouTube深度召回模型。在ranker档位相同的状况下,实验组和对照组在点击数、曝光数和点击率上的对好比下:
点击率对比
曝光数对比
点击数对比
从在线指标上能够看到,YouTube深度召回的曝光数稍低于协同召回的曝光数,可是点击率会明显高于协同召回的点击率。YouTube召回模型的曝光数大约是协同召回曝光数的80%,但平均点击率比协同召回的平均点击率有大约20%的相对提高。说明YouTube深度召回模型召回的文章比协同召回更能匹配用户的兴趣。
此外,YouTube召回模型在推荐内容的多样性和文章覆盖度上也比协同召回更好一些,在线实验统计结果显示,在推荐出去的去重文章总数上,实验组比对照组的多2%左右,这个数据间接反映了YouTube召回比协同召回找到了更多匹配用户兴趣的文章。
小结
(1)本文介绍了一种基于深度学习的召回模型,并将其与传统召回方法进行了实验对比;
(2)在线实验代表, YouTube召回模型召回文章的点击率显著高于协同过滤召回文章的点击率,说明YouTube召回模型经过画像数据学到了更准确的用户兴趣向量,匹配到更多符合用户兴趣的文章,体现出深度学习模型在特征整合利用和自动学习交叉特征上的优点;
(3)由于YouTube召回模型在计算用户向量时采用的是word2vec预训练的文章向量,而每篇文章入库时均可以计算出其word2vec向量,所以YouTube召回模型可以召回最新入库的文章,作到真正的时新召回。
参考文献
[1]项亮. 推荐系统实践. 北京: 人民邮电出版社, 2012.
[2]KorenY, Bell R, Volinsky C. Matrix factorization techniques for recommender systems.Computer, 2009 (8): 30-37.
[3]HuY, Koren Y, Volinsky C. Collaborative filtering for implicit feedback datasets.ICDM, 2008: 263-272.
[4]BleiD M, Ng A Y, Jordan M I. Latent dirichlet allocation. Journal of machineLearning research, 2003, 3(Jan): 993-1022.
[5]ZhangS, Yao L, Sun A. Deep learning based recommender system: A survey and newperspectives. arXiv preprint arXiv:1707.07435, 2017.
[6]Mikolov,Tomas & Chen, Kai & Corrado, G.s & Dean, Jeffrey. EfficientEstimation of Word Representations in Vector Space. Proceedings of Workshop atICLR. 2013.
[7]MikolovT, Sutskever I, Chen K, et al. Distributed representations of words and phrasesand their compositionality. NIPS.2013: 3111-3119.
[8]PenningtonJ, Socher R, Manning C. Glove: Global vectors for word representation. EMNLP.2014: 1532-1543.
[9]CovingtonP, Adams J, Sargin E. Deep neural networks for youtube recommendations. RecSys.2016: 191-198.
[10]Chen T, Guestrin C. Xgboost: A scalable tree boosting system. SIGKDD. 2016:785-794.
[11]Ke G, Meng Q, Finley T, et al. Lightgbm: A highly efficient gradient boostingdecision tree. NIPS. 2017: 3146-3154.
此文已由腾讯云+社区在各渠道发布
获取更多新鲜技术干货,能够关注咱们腾讯云技术社区-云加社区官方号及知乎机构号