吉吉于

【RecSys】推荐系统中所使用的混合技术介绍

在推荐系统实际运用中,各种混合技术是其中一项极为重要的核心技术。在工程实践中我们发现,混合技术对提升推荐效果、改进推荐系统的性能等都有重要意义,因此本文对该专题进行如下的一些总结和介绍。

引言

在这个信息爆炸的时代,消费者面临众多选择、未知的领域、过载的信息时,往往无所适从;然而与此同时,内容的生产者(例如商家)也在苦苦寻觅合适的用户,寻找最便捷的渠道,而解决这两类矛盾的最好工具就是推荐系统。

推荐系统缘起于搜索系统,在底层系统上两者有大量相通的技术,但是在相应用户需求和产生应用的场景上,推荐系统离用户更进一步:当用户的需求具体而明确时,他搜索;但当用户需求不明确或难以表达时,他需要推荐。另一方面,当用户需要找某个领域下公认的、热门的内容时,他搜索;但当用户需要找个性化的内容时,他需要推荐。很多场景下,用户的个性化需求是很难转化为简短明确的查询词的,例如"今天中午想找个附近的、符合我口味的、消费不贵的餐馆"这样的需求,非常常见但很难用查询词来表达清楚。推荐系统恰好可以填补这个空白,根据挖掘用户历史行为来将个性化的需求深入挖掘清楚,实现用武之地。

目前在电商、视频、文学、社交网络等等各类网站或应用中,推荐系统都开始扮演起一个越来越重要的角色。但是无论应用于什么系统,归根结底最关键的是必须保证高质量的推荐效果。

撇开产品、交互设计、基础数据等方面,如果从系统和算法的角度来看,混合推荐的思路是其中最为重要的部分。毫不夸张的说,在真实世界的应用中,无论产品规模的大或小、用户的多与少,只要是想要追求推荐效果的高水准,那么混合推荐一定是必不可少的一门绝技。原因为何?——下面来作个解释

为什么要有混合技术

推荐技术发展至今已经历了十余年,这期间众多的算法被提出并在业界运用,经过大量的实践,人们发现似乎没有任何一个方法可以独领风骚、包打天下,每种推荐方法都有其局限性,下面举些典型的例子说明:

基于物品的协同过滤(Item-based Collaborative Filtering)是推荐系统中知名度最高的方法,由亚马逊(Amazon)公司最早提出并在电商行业内被广泛使用。但基于物品的协同过滤在面对物品冷启动,以及数据稀疏的情况下效果急剧下降。同时基于物品的协同过滤倾向于推荐用户购买过商品的类似商品,往往会出现多样性不足、推荐惊喜度低的问题。

基于用户的协同过滤(User-based Collaborative Filtering)方法在推荐结果的新颖性方面有一定的优势,但是推荐结果的相关性较弱,且容易受潮流影响而倾向于推荐出大众性物品。同时新用户或低活跃用户也会遇到冷启动(Cold-Start)的棘手问题。

在多个推荐算法竞赛中,我们发现隐语义与矩阵分解模型(Latent Factor Model)及其各种改进升级方法(包括SVD++等)是推荐精度最好的单一模型方法,但当数据规模大时其运算性能会明显降低,同时基于MF的方法依赖全局进行计算信息,因而很难作增量更新,导致实际工程中会遇到不少困难。另外,隐语义模型还存在调整困难、可解释性差等问题。

基于内容的推荐算法(Content-based Recommendation)是最直观的推荐算法,这种方法实现简单,不存在冷启动问题,应对的场景丰富,属于"万金油"型打法。但在一些算法公开评测中,基于内容的方法效果都是垫底的之一。同时该算法依赖内容的描述程度,往往受限于对文本、图像或音视频内容进行分析的深度。

基于统计思想的一些方法,例如Slope One,关联规则(Association Rules),或者分类热门推荐等,计算速度快,但是对用户个性化偏好的描述能力弱,实际应用时也存在各种各样的问题,在此不多赘述。

怎样混合是个问题

解决各种推荐方法"硬伤"的一条最好的解决途径就是混合技术——它的思路非常明确,俗称"三个臭皮匠顶个诸葛亮"——即综合运用各种方法的优势、扬长避短,组合起来成为一个效果强大的系统。

道理虽然简单,但是怎样组合才能真正发挥威力?联想到一个有趣的电影片段:周星驰的喜剧电影《国产零零漆》中,神志不清的特工达文西"发明"了一个"要你命3000"的武器,这个"超级武器霸王"把一堆街头武器——"西瓜刀、铁链、火药、硫酸、毒药、手枪、手榴弹、杀虫剂"——用绳子绑在一起,但是完全没有作用,被对手一枪击毙。

在实际应用中,从系统、算法、结果、处理流程等不同的角度,都有一些具体的混合策略。下面依次从不同的角度来进行介绍。

多段组合混合推荐框架

推荐系统一方面要处理海量的用户、物品的数据,一方面要实时相应线上用户的请求,迅速的生成结果并返回。在这里存在一个矛盾是,离线数据挖掘(例如常见的Hadoop系统)虽然擅长处理大量数据,但运算周期长(小时级或天级)、实时推荐能力差,而在线系统由于要迅速(例如几十毫秒)计算出推荐结果,无法承担过于消耗资源的算法。

Online nearline offline

图1:Netflix的Online-Nearline-Offline混合推荐系统

在业界实际部署时,解决此类常见问题的流行方法是采用三段式混合系统:即Online-Nearline-Offline Recommendation(在线-近线-离线)三层混合机制。曾经举办过著名的国际推荐竞赛的Netflix公司,在所公开的后台推荐系统架构中,即采用了该混合系统(如图1)。

其中Online系统直接面向用户,是一个高性能和高可用性的推荐服务,在这里通常会设计有缓存(Cache)系统,来处理热门的请求(Query)重复计算的问题。而当Cache不命中的情况下,Online推荐运行一个运算简单可靠的算法,及时生成结果。Online系统后是Nearline系统,这个系统部署在服务端,一方面会接收Online系统发过来的请求,将Online计算的一些缓存结果,采用更复杂的算法重新计算并更新后更新缓存。另一方面Nearline是衔接Online和Offline系统的桥梁,因为Offline结果往往会挖掘长期的、海量的用户行为日志,消耗的资源大、挖掘周期长,但是Offline推荐系统计算所得的结果质量往往是最高的,这些结果会通过Nearline系统输送到线上,发挥作用。

另外一个不可忽视的问题是用户反馈的及时收集,并及时用于调整推荐结果。挖掘用户的反馈对调整推荐结果有莫大的帮助,但这个调整往往越及时越好,否则用户很容易对结果不满意而流失。这个点击挖掘和反馈的功能往往由Nearline推荐系统来承担,因为该系统收集前端反馈比较方便,又可以保证适当的处理时长。

加权型混合推荐技术

上面介绍了从系统架构的角度如何进行混合。而从算法的角度来看,则最常用的是采用加权型的混合推荐技术,即将来自不同推荐算法生成的候选结果及结果的分数,进一步进行组合(Ensemble)加权,生成最终的推荐排序结果。

具体来看,比较原始的加权型的方法是根据推荐效果,固定赋予各个子算法输出结果的权重,然后得到最终结果。很显然这种方法无法灵活处理不同的上下文场景,因为不同的算法的结果,可能在不同的场景下质量有高有低,固定加权系统无法各取所长。所以更好的思路是设置训练样本,然后比较用户对推荐结果的评价、与系统的预测是否相符,根据训练得到的结果生成加权的模型,动态的调整权重。

 Ensembles

图2:加权混合技术能明显提高推荐精度

加权混合的模型有很多,除了简单的线性模型外,常用的有回归模型(Logistic Regression)、RBM(Restricted Boltzmann Machines)、GBDT(Gradient Boosted Decision Trees),这三种混合模型在推荐算法竞赛中大放异彩,在2009年结束的Netflix百万美元推荐竞赛中,优胜队伍将充分运用和多种加权混合模型的优势,组合后的算法推荐精度非常高。获胜队的Yehuda Koren在论文The BellKor Solution to the Netflix Grand Prize中对此有非常详细的介绍。另外值得一提的是台湾大学推荐团队,他们通过混合甚至二次混合的方式(如图2),将众多单独推荐算法的结果进行最合理的加权组合,在最近几届的KDD Cup数据挖掘竞赛中所向披靡,经常取得极为优异的推荐效果。

分级型混合推荐技术

尽管上述加权组合型混合推荐技术有非常高的精度,但系统复杂度和运算负载都较高。在工业界实际系统中,往往采用一些相对简单的方案,其中分级型混合推荐技术就是一类思想简单但效果也不错的方法。这种混合推荐技术根据不同的推荐场景,将不同的推荐算法按照效果优劣进行层次性划分。在对应的推荐场景下,优先采用高可信度的推荐算法生成的结果,然后依次采用后续方法生成结果。

在各种推荐场景中,Top-N推荐是最为常见的一类。这种推荐应用有时需要展示较多的推荐结果,而此时一种推荐算法的结果往往不够丰富,通常会采用分级型的混合技术,通过事先的数据挖掘,优先将推荐精度高的算法结果先列出,然后用依次用其他方法的结果递补。不同的推荐算法往往在精度(Precision)和召回(Recall)之间有所折衷,因此优先列出高精度结果,长尾部分则采用高召回的结果进行补足,能兼顾对推荐结果数量和质量的两种需求。

交叉调和技术

交叉调和技术有些类似西方酿造威士忌(Whisky)酒的过程——将纯麦威士忌、谷物威士忌、或者不同产地、口味的陈酿进行一定比例的调配后最终成品。交叉调和推荐技术(Blending Recommendation)的主要动机是保证最终推荐结果的多样性。因为不同用户对同一件物品的着眼点往往各不相同,而不同的推荐算法,生成的结果往往代表了一类不同的观察角度所生成的结果,交叉调和技术将不同推荐算法的生成结果,按照一定的配比组合在一起,打包后集中呈现给用户。

交叉调和技术需要注意的问题是结果组合时的冲突解决问题,通常会设置一些额外的约束条件来处理结果的组合展示问题。另外我们发现为了让用户更多的注意到结果的多样性,对不同类型的推荐结果辅以展示不同的推荐理由,往往能获得更多收益。

瀑布型混合方法

瀑布型(Waterfall Model)的混合方法采用了过滤(Filtering)的设计思想,将不同的推荐算法视为不同粒度的过滤器,尤其是面对待推荐对象(Item)和所需的推荐结果数量相差极为悬殊时,往往非常适用。

在瀑布型混合技术中,前一个推荐方法过滤的结果,将输出给后一个推荐方法,层层递进,候选结果在此过程中会被逐步遴选,最终得到一个高精确的结果。设计瀑布型混合系统中,通常会将运算速度快、区分度低的算法排在前列,逐步过渡为重量级的算法,这样的优点是充分运用不同算法的区分度,让宝贵的运算资源集中在少量较高候选结果的运算上。

推荐基础特征混合技术

数据是推荐系统的基础,一个完善的推荐系统,其数据来源也是多种多样的。从这些数据来源中我们可以抽取出不同的基础特征。以用户兴趣模型为例,我们既可以从用户的实际购买行为中,挖掘出用户的"显式"兴趣,又可以用用户的点击行为中,挖掘用户"隐式"兴趣;另外从用户分类、人口统计学分析中,也可以计算出用户兴趣;如果有用户的社交网络,那么也可以了解周围用户对该用户兴趣的投射,等等。另一方面,从物品(Item)的角度来看,也可以挖掘出不同的特征。

不同的基础特征可以预先进行组合或合并,为后续的推荐算法所使用。这样处理的优点是将推荐算法切分得比较清楚,这样将一个整体的推荐问题,分解为特征的抽取、组合、使用等各个环节的优化问题,在进行个性化推荐时较为适用。

推荐模型混合技术

和特征合并的技术不同,多模型的合并技术在模型计算阶段,将整个模型作为第二种算法的输入。这种组合方式,事实上形成了一种新的独立的推荐模型。例如在进行基于用户的协同过滤计算的时候,在计算相邻用户的距离的基础上,可以进一步根据用户的属性内容(Content)信息、采用基于内容的推荐的思想,进一步生成相似用户的候选结果;或者利用用户的社交网络信息(Social Network)来扩展相邻用户集合。这种在算法设计阶段而不是特征利用或推荐结果合并阶段的混合技术,被成为推荐模型混合技术。

这种技术往往适用于数据稀疏或质量较差时,单个推荐模型结果都比较差的情况。此时对多个较差的模型的最终结果进行合并无法获得满意的结果(因为候选结果都比较差),因此提前在模型计算阶段进行算法思路的合并,这样能提前召回好的结果,提升推荐效果。

整体式混合推荐框架

除了上述的系统架构、特征、算法、推荐结果等等角度的推荐融合技术,还有很多的内容是没有包括的,例如从商业逻辑的角度来分析,商家往往有一些特定的推荐需求或者推荐规则,需要对算法生成的结果进行调整。亦或者从交互设计的角度来看,推荐结果的展示方式等都有所不同;一些特殊的应用场景可能需要强调地域、时间等信息,对应的推荐挖掘方法和展现都有特殊的要求,这个时候对结果的混合往往要从整个产品的角度来进行设计和处理,从而能够满足不同的需要,这些可以被纳入整体式的混合推荐框架中考虑。

讨论和小结

推荐效果是一个推荐系统是否能获得成功的生命线,而混合推荐技术是其中最为重要的一个环节。在各种实际应用中,广大的研发工程师在处理很多问题时,往往都从直觉出发在不同程度的使用各种混合推荐技术,也解决了很多实际问题,取得了很好的效果。本文从理论角度对此进行了梳理,希望能帮助大家提升对推荐系统的领悟和理解。心中装着进行混合的意念,并理论联系实际,对开发一个成功的推荐系统会有莫大的帮助。

转载请注明:于哲的博客 » 【RecSys】推荐系统中所使用的混合技术介绍