在电子商务、个性化阅读、社交网络(媒体)以及共享经济高速发展的今天,发现用户的需求、了解用户的行为并为用户筛选出最相关的信息和产品已经是互联网服务的一个核心环节。
互联网上的信息是海量的:YouTube用户每分钟上传超过400小时的视频;微信上超过1000万个公众账号每天产生丰富的自媒体内容;Instagram用户每天贴出超过800万照片;Snapchat用户每天生成5亿多“故事”(Story),全部看完需要158年……类似的例子数不胜数。因此,在帮助用户寻找信息,帮助服务商寻找客户的环节,推荐系统扮演了举足轻重的地位。
一方面,推荐系统从互联网应用的配角成为了诸如雅虎、LinkedIn和Netflix等大型网站的主角,为用户和系统交互提供各类个性化服务。时至今日,已经很难想象一个新的互联网应用没有利用推荐系统来优化用户体验。
另一方面,从早期的协同过滤(Collaborative Filtering)算法到由Netflix大赛所推动的隐语义模型(Latent Factor Models),再到更加复杂的深度学习模型,推荐系统的技术已经在过去十多年里有了长足的进步。推荐系统的最终目标也从准确预测用户的喜好,逐渐演变成在用户、模块以及系统中达到动态平衡,使得整个系统健康运行。
本文尝试从历史的角度,剖析人工智能技术在推荐系统中的应用,探索前沿课题以及未来的发展方向,让读者能够了解到技术发展的宏观过程。
“人工”和“非智能”时代
在算法及模型在推荐系统领域占有统治地位之前,据有领域知识(Domain Knowledge)的专业编辑往往充当“人工推荐系统”的角色,主观选择并推送出用户可能喜欢的内容。“人工推荐”的好处在于能够高质量地定制内容。很多传统内容媒体(如《纽约时报》、《华尔街日报》)的核心竞争力就是依靠一批高水平编辑精心撰写和推荐内容,从而能够常年吸引了大批订户。
今天,微信公众号所呈现出的自媒体现象,本质上也是“人工推荐”在移动互联网时期的再次蓬勃发展。后来,一些优秀推荐系统,比如雅虎首页的“今日模块”(Today Module),将“人工”和“机器算法”相结合,在编辑们每天优选出一百篇左右高质量文章的基础上,由系统采用“联系上下文的多臂老虎机”(Contextual Multi-Armed Bandit)算法平衡Exploitation与Exploration,极大地提升了推荐效果。由此可见,“人工”和“机器算法”的协调使用常常能够弥补彼此的不足。
实际上,早期的推荐系统更多依靠一些从直觉引导出的简单模型或者算法。
比如基于信息检索(Information Retrieval)的推荐思路,把用户信息当作是查询词组(Query),用各类信息来把待推荐物品(Item)表达成“文档”(Document)。于是,推荐最相关的一组物品的问题就被转换成了信息检索里的寻找最相关文档的问题。
再比如,早期的协同过滤算法有两个核心思路。
其一,就是为一个用户A找到一群类似的用户,从这些类似的用户里寻找可以推荐的物品;
其二,就是两个用户都喜爱物品A,那么系统就把原本只有其中一个用户喜欢的物品B推荐给另一个用户。
后面这个思路常常被称为Item-Item协同过滤,是非人工智能时代行之有效的推荐算法,也是亚马逊(Amazon)购物系统早期使用的经典算法。
“人工”或“非智能”推荐的一些弊端让它们已不能适应现代互联网应用的需求。比如,这两种方案都很难明确“优化目标”。推荐的效果只能通过长期的经验获取而不能有一个系统的方法论来引导系统不断进步。其次,一个成熟的推荐系统需要考虑很多复杂的因素,如时间因素、突发事件因素或者新用户、新物品因素,而这两种方案都无法把诸多方面的因素系统性地糅合到推荐结果中去。因此,使用更加灵活的框架来解决推荐问题成为了很多工程师和研究者在21世纪最初几年的一大课题。
机器学习时代
2006年到2009年的Netflix Prize大赛在推荐系统的发展史上是一次里程碑式的事件。为了方便竞赛,Netflix把推荐电影的问题简化为预测电影评分的准确度,为方便应用人工智能技术提供了台阶。这次大赛至少为推荐系统的长远发展带来了三个成果。而这三个成果都与人工智能的子领域机器学习有着密切关系。
第一个成果,就是以矩阵分解(Matrix Factorization)为基础的机器学习算法最后脱颖而出,赢得了冠军。矩阵分解的成功主要有三个方面的原因:
第一,观测到的评分矩阵(Rating Matrix)过于稀疏,采取“降维表示”(Dimension Reduction)能够有效地增强模型的“泛化能力”(Generalization);
第二,把用户的评分分解成为用户偏好向量和物品偏好向量的点积,直观易懂;
第三,分解的目标函数直接优化评分准确度,从而能够更好地利用大量数据,优化得到用户和物品偏好。
在此基础上,矩阵分解框架也很容易加入各种建模元素,使得模型能够更加充分地表达数据。
因此,矩阵分解以及其更广义的形式隐语义模型成为了此后多年推荐系统研究的有力武器。数年之间学术界和工业界产生了数百篇关于这个方向的研究成果,并且多个顶级学术会议的最佳论文都授予这类模型的相关应用。
第二个成果,就是机器学习的另一个工具——集成学习(Ensemble Learning)被各参赛队伍广泛地应用于提高参赛成绩。集成学习的基本思路是学习多个不同的模型(或相同模型的不同参数),然后再学习另外一层模型来融合不同底层模型之间的预测结果。这个方法的流行使得参赛队伍在关注单个模型效果的同时,也开始探索如何能够更有效地利用优势互补的不同模型,从而达到整体更优。这一思路也在工业界推荐系统中得以发扬光大。
比如,一些复杂的子系统往往只负责推荐结果的某一方面,而最后整体系统则由一个相对简单的模型来学习各个子系统之间的结果融合。较为典型的实际系统应用是Facebook对“新闻流”(News Feed)的建模:底层采用各个子系统所收集的信号,然后通过Gradient Boosted Decision Tree(GBDT)学习高层次的特性,最后用简单的线性模型学习高层次特性的组合。总而言之,集成学习在Netflix大赛之后成为了机器学习在推荐领域乃至整个数据科学领域非常重要的工具。
第三个成果,则是各类推荐系统大赛在Netflix大赛之后陆陆续续举办,进一步吸引各方研究人员投入到改进推荐系统算法和实践的工作中,甚至不久之后催生了专业的数据科学比赛公司Kaggle。而数据挖掘和机器学习类的顶级会议KDD在2011年和2012年连续两年举办的KDD Cup比赛的主题均与推荐系统有关,这一举动把以推荐系统为背景的数据科学比赛推向了高潮。
除了这三个成果以外,在这段时期,推荐系统的研究和开发还有三个趋势。
第一,隐语义模型与复杂的概率图模型(Probabilistic Graphical Model)特别是话题模型(Topic Model)结合起来,能够把现实问题中的各类假设方便地设计到模型中去。这类模型的一大优势是既可以做评分预测,又可以同时对文本内容建模,使得通过内容来进行推荐的效果得到较大提升。此方向代表作有话题模型的领军人物、哥伦比亚大学统计学和计算机科学教授David Blei的学生Chong Wang的KDD 2011最佳论文。
第二,推荐系统和信息检索特别是Learning To Rank技术的结合,为直接优化返回结果列表而不是预测单个物品的评分提供了可能性。这方面的代表作有卡内基梅隆大学教授Alex Smola等人在NIPS 2007年发表的CofiRank以及Steffen Rendle在UAI 2009年发表的BPR。
第三,因为应用场景的需要,张量分解(Tensor Factorization)、多矩阵协同分解(Collective Matrix Factorization)以及分解机(Factorization Machine)等技术先后被开发出来。这类模型的特点是它们都尝试在一个通用的框架下把更多元化的信息融合进来,使得推荐结果能够基于除了评分以外更为广阔的数据。
除此以外,推荐系统技术也与社交媒体、多媒体数据如图像、音频和视频结合,成为了互联网信息提供商的基础设施。
准人工智能时代
机器学习时代推荐系统研发的核心是如何提高针对单一问题的算法方案的准确度,而忽视了人机交互的时间性和系统性,从而很难对变幻莫测的用户行为以及瞬息万变的外部环境进行完整的建模。典型问题之一就是推荐系统容易产生千篇一律的结果。
比如,一个用户喜欢娱乐新闻,于是推荐系统就反复推荐娱乐类文章;另一个用户平时不那么关注足球,在世界杯期间了解了一些比赛结果,系统就误以为这个用户喜欢足球,从而开始推荐类似信息。虽然不少学者和工程师都尝试在经典的框架下通过改进算法来规避这些因素以提高推荐结果的质量,但本质上,基于监督学习(Supervised Learning)的大多数推荐模型都很难彻底解决这类问题。人工智能在推荐系统领域应用的重要任务,就是把推荐系统不再看作是一次一次推荐结果的运行片段,而当做是一个人机交互的整体行为,从而在时间维度上达到系统和用户的动态优化。
在这方面探索的一个主要研究方向与Netflix大赛几乎同时期开始。当时在雅虎研究院工作的John Langford、Lihong Li和Deepak Agarwal开始探索如何把人工智能技术的另一方向——强化学习(Reinforcement Learning)的一些算法应用到推荐系统的场景中来。强化学习和监督学习的最大区别在于,强化学习算法常常代表一个“回路系统”(Feedback System),用户和系统通过交互来达到某个目标的最优化。系统和用户的交互流程,不再是“一锤子买卖”,而是在时间的维度上通过一系列结果,来达到一个系统与用户的动态平衡。
前面提到的雅虎首页“今日模块”的推荐工作就较早采用了强化学习。
最开始的模型是一个简单的“多臂老虎机”(Multi-armed Bandit)算法Epsilon-Greedy,对于每个页面请求,系统以较大的概率选择当前点击率最高的文章显示给用户,而以较小的概率随机在一百多篇文章中选择一篇来显示。Epsilon-Greedy的优点是非常容易实现,也和很多在线系统的A/B Testing环境吻合,所以至今仍然是简单情况下做强化学习的首选。
后来,Epsilon-Greedy被一类特定的“联系上下文的多臂老虎机”算法LinUCB所取代。LinUCB的基本思想是对每个文章的点击率的估计及其置信区间同时建模,然后每次选择点击率的估计值与其标准差的和最大的那个文章。于是LinUCB能够较好地平衡显示用户已经喜欢的某类文章和对其他没怎么看过的类别的文章,从而引导用户对未知类别的探索。
在实际系统中,LinUCB比Epsilon-Greedy表现出了更加稳定的效果,之后成为雅虎诸多推荐系统中的基准系统(Baseline)。Deepak Agarwal从雅虎跳槽到LinkedIn之后则更进一步,使用基于贝叶斯方法(Bayesian Methods)的汤姆森采样(Thompson Sampling)来估计点击率,替代了LinUCB的置信区间估计。这类算法的特点是随机性更强,参数估计更加稳定化,并且应用在LinkedIn的广告推荐中达到了更好的效果,为LinkedIn的广告系统提供了更加健康的环境。从雅虎新闻推荐到LinkedIn的首页信息流推荐,在物品集合不太多的情况下(在几百个物品这个范围内),“联系上下文的多臂老虎机”技术已经被证明对系统和用户的长期交互流程优化有显著效果。此后,在这方面的研究工作如雨后春笋般出现。
然而,在更加复杂的线上大规模推荐系统实践中,“联系上下文的多臂老虎机”算法并没有受到垂青,很多产品并不愿意接受这类算法。原因是,这类算法在理论中有很美的证明和数学性质,但在现实操作中往往有不可逾越的产品体验障碍。比如,大多数此类算法因为在最开始的一段时间里并不熟悉和了解用户,于是算法会倾向于多Exploration一些物品从而达到了解用户的目的。
因此,这段时期里,用户可能会面对不少没那么相关的物品。在学术论文的假设中,只要度过了这段时间,算法就能够比较好地学习到用户的偏好,提供更加“靠谱”的推荐结果。然而,这种假设场景在现实中是不成立的。新用户或者是黏性不高的用户,往往使用产品的频度并不高。这些用户在少有的几次使用中发现一些不那么相关的推荐结果后,很有可能会永久地放弃产品。而另一方面,高度黏性的用户才可能有容忍度看一些不那么相关的推荐结果。所以,从这个例子看来,现有的理论和算法与实际应用还有不小的距离,而“联系上下文的多臂老虎机”算法所带来的模型更新还远没有给推荐系统带来真正的“智能”。
与强化学习类似的另一种思路则是从控制论或系统论的角度来看待推荐系统,为用户和系统的回馈闭合系统建模。University College London的Tamas Jambor等人于2012年的WWW会议上发表论文,率先阐述了如何设计PID控制器(原始思路来自控制论)来稳定推荐系统的运行使其能够保持推荐高质量内容。
在此基础上,Weinan Zhang等人在2016年的WSDM会议上把类似的思路扩展到了广告系统的实时竞价上,展示了相关算法的稳定性和优化性。尽管把控制论引入推荐系统研究是对把推荐系统看做是用户系统整体系统优化这一思想的进一步推动,且具有开创精神和建设性意义,然而这个思路在现代工业级推荐系统中还鲜有应用。不过,强化学习与控制论之间的内在逻辑联系,很可能会为下一个阶段这一方面的研究提供新的思路。
所以,不管是强化学习还是控制论,从大背景来看,虽然利用人工智能技术改善推荐系统的研发和探索方兴未艾,但目前的主流算法和模型还远没有让推荐系统达到“自动驾驶汽车”或者“无人机”的“智能”程度。
人工智能时代的前哨站
从2006年开始的深度学习(Deep Learning)浪潮对整个人工智能领域产生了颠覆性影响,不少学者和公司也开始尝试采用深度学习模型解决传统模型很难甚至无法解决的问题。
第一类探索包括利用深度学习模型替代传统模型在已知问题上提高推荐效果,如看能否利用深度学习的模型替代矩阵分解。比较新的代表工作有香港科技大学的Hao Wang等人(论文发表在KDD 2015)以及Simon Fraser University的Yao Wu等人(论文发表在WSDM 2016),都尝试扩展Stacked Denoising Auto-encoder来提高评分预测的精准度。
更加简单的思路,则是利用深度学习技术来提取高层次(High Level)特征(Feature),然后和传统模型融合以提高推荐系统的整体性能。
这一思路可以在短时期内不改变现有的推荐框架,又可以最大限度地利用深度学习技术现有的优势,所以很受工业界的青睐。
比如很多公司(公开的有Google、LinkedIn、雅虎等)都开始利用神经语言模型(Neural Language Model)来提取文字特性,从而能够更好地表达文字信息。
再比如音频和视频推荐问题,因为近期深度学习在这些媒体上的成功应用,推荐比以前变得相对容易。典型应用就是YouTube采用深度学习来提取视频特征,有效地推荐用户喜爱的视频。总体说来,这类探索容易实现,可以视为机器学习时代的自然扩展。
第二类尝试主要是利用深度学习技术探索以前不容易解决的一些问题。如著名的音乐播放平台Spotify利用递归神经网络(Recurrent Neural Network)来预测下一首推荐的歌曲,取得了不错的在线效果。递归神经网络的特点是能够把长距离的依赖关系给很自然地表达在模型中, 而传统基于矩阵分解的方法则比较难以抓住这样的特征。
与此类似的场景是西班牙Telefonica Research学者在ICLR 2016发表的论文,应用递归神经网络来对整个用户会话(Session)进行建模,从预测用户对单个物品的喜爱到预测用户在整个会话中的行为。所用方法在Netflix数据集上,推荐精度明显好过传统方法。另外,Google DeepMind组最近也开始把深度强化学习(Deep Reinforcement Learning)的思想扩展到推荐系统领域。
前文提到传统的“联系上下文的多臂老虎机”算法目前最好的应用场景还在于几百到几千这个数量级的物品池(Item Pool),对于大量的物品池还没有很好的解决方案。DeepMind最新发表的一篇技术报告尝试对非常大的离散选择空间(Discrete Action Spaces)问题提出解决方案,成为解决这类问题的一个有意义的尝试。
随着AlphaGo的成功,深度强化学习成为当下非常火热的研究方向。然而这个方向的算法离真正的生产应用还有不小的距离,主要的障碍在于强化学习在推荐系统中的一般应用还并没有完全普及,有产品和技术方面的鸿沟需要解决。
总体来说,深度学习在推荐系统领域的应用依然在初级阶段。不管是算法还是解决问题的思路,均没有从根本上改变机器学习时代和准人工智能时代的推荐系统研发。
真正的人工智能不仅需要更加灵活强大的模型,也需要科研人员对推荐系统的问题范畴有更进一步的思考,从更加准确预测用户的喜好,提升到如何优化用户、系统、市场(Market Place)的整体健康。
比如,很多互联网应用,都在内容推荐的页面上插入很多广告内容。传统上这些子系统都是分开设计和实现的,它们之间的依赖关系很模糊,最后的用户体验也不稳定。如何在广告利润和整体用户体验之间平衡是很多推荐系统需要考虑的问题。
另外,用户在一个应用中的整体体验是由一系列的行为组成的,在此之上,用户还有更高层次的需求。比如在一个电子商务网站上,用户除了希望快捷地买到合适的东西,可能还希望了解到时尚的信息,以及与有类似兴趣的朋友交流。优化单一目标的推荐系统是无法满足如此复杂的需求的。如何挖掘出用户的潜在需求,如何整体优化这些目标,是推荐系统迈向智能系统的一个重要步骤。
结语
人工智能技术对于推荐系统的影响是巨大的。从人工推荐到深度学习模型,在日新月异的技术浪潮中,推荐系统已经成为了诸多互联网应用的基石。过去十多年的研究和开发,使得这个领域迅猛发展,推动了人工智能很多方向的前进。从现实来看,推荐系统要成为智能系统,还有很长的路要走。我们需要站在更高的维度来看待和思考推荐系统,提出更加具有挑战的问题,基于这些问题才能引领我们去革新方法论,创新出一整套能够大幅度丰富用户体验与提高产品价值的推荐系统理论与实践。