本文主体分以下三个大的部分。除此以外也会在最后用一小节展望下个性化资讯推荐的未来。
资讯推荐产品要解决用户需求很简单,一句就可以概括:为用户找到有趣的资讯。而做到这个需求就要做好两个关键点:
更进一步,如果将上述两个关键点展开,一个好的个性化资讯产品就要具备以下亮点:
1.时效性
这是所有资讯类产品共同的特性,而不仅仅是资讯推荐类产品。人们总是希望通过你的产品看到最近发生了什么,而不是很久之前的老新闻。
2.精准性
每天发生的事情有很多,对应的新闻稿子也非常多,如果每个都看,信息过载的问题会让人吃不消。你能否猜出我的兴趣,并精准地推荐感兴趣的新闻才是用户关心的,也是用户能直接感受到的体验。
3.丰富性
这点恰是很多用户最容易忽略的一个点。其实很多用户才不管这个资讯类产品是怎么推出来的,对于单个用户而言,其第一诉求必然是通过这个产品来了解世界,知道每天都在发生什么,所以新闻的丰富性是最最基本的。
4.排他性
谁都不想在周围朋友们讨论热点事件时,自己是个懵逼,什么都不知道。这点很关键,跟精准性和个性化看起来有点背道而驰,但人性天生就有求同的天性。没有同样的话题,生活将会失去太多色彩,不知道该和人交流什么。
6.高质量
7.合法性
人总是对非法的事情感兴趣,如黄赌毒之类。而对于被压抑的需求,则更是感兴趣,如色情之类。但一个伟大的产品,首先必须是一个合法的产品。所以,一切尽在不言中了。
要做到上一节提到的产品特性,有两条路可以走:人工运营和算法推荐。在类头条产品出现之前,请新闻方面专业人才来运营是最稳妥的方式。但人工运营成本越来越高,局限性越来越明显。走算法推荐的路,在张扬个性的年代,是一条必由之路。下表简要对比下两者的差别。
推荐算法应用在资讯类产品时有一些挑战,这也是资讯推荐能否做好的关键所在。
●可扩展性
推荐本质是建立user和item的关联,一般问题要么是user侧量级大,要么是item侧量级大,而资讯推荐是典型的“双大”场景。又由于是高度依赖个性化的场景,还不能简单地将某一侧大幅降维,所以可扩展性显得尤为重要。
●稀疏性
资讯的高度个性化自然而然的带来一个很棘手的问题就是稀疏性。举个最简单的例子,如果将user和item的点击行为用矩阵形式表示出来,会发现比一般问题更多的0项存在。而稀疏问题是一直困扰机器学习高效建模的一大难题。
●冷启动
每天都有大量的新闻产生,如何将如此多的新闻快速、合理地冷启动,尽快将高质量的新闻推给合适的用户是个大问题。
●时效性
●质量保证
●动态性
围绕上面这几个挑战,业界各大资讯类产品在做推荐时想出了各种招儿来解决,接下来,我们就梳理下业界经典的做法。这里以产品为主线,以具体要解决的问题为辅线来进行梳理,会集中介绍下GoogleNews、YahooToday、今日头条等产品的推荐算法,并着重介绍下深度学习在这个领域的最新进展。
●GoogleNews
GoogleNews是一款经典的资讯推荐产品,也是后来者竞相模仿的对象。2007年,GoogleNews在www上首次发表论文《GoogleNewsPersonalization:ScalableOnlineCollaborativeFiltering》公开资讯推荐技术。该论文的做法非常自然、简洁,从论文题目就能看出是CF的落地上线。Google是这样想的:鉴于大家都觉得CF是推荐领域公认的有效算法,那将其直接用在产品上效果自然也不会太差。
但经典的CF有个巨大的问题,无论是user-based还是item-based,当你要算任意两个user或者两个item之间相似度的时候,计算量会非常巨大。因为CF的计算量直接取决于特征维数和user、itempairs的数目,而资讯类产品这两个数目都非常巨大:
Google这篇论文的核心就是将CF改造为支持大规模计算的方法。
其原理也很简单:将用户事先分成群,再做user-basedCF时实际变成了(user)cluster-basedCF。这样在工程实现上就简化了很多,线上只需要记录每群用户喜欢什么(实际做法是用到了基于的内存key-value系统,key为资讯ID,而value则是资讯在用户群上的各种统计值)。一个用户来了之后,先找到其对应的群,再推荐这个群喜欢的资讯就好。而线下则借助Map-Reduce实现了MinHash、PLSI两种聚类分群算法,定时把最新分群结果推到线上。
结合前面总结的资讯推荐的挑战,可以看到该算法主要解决了可扩展性问题。我们也不难发现这个usercluster-based的算法也有一些明显的缺点:1)它不能解决新用户、新资讯的冷启动,因为没有行为数据来支撑CF运转;2)推荐精度不够高,没有做到真正的个性化。这是cluster-basedCF算法本身的特点决定的;3)实时性不够。用户聚类不能做到快速更新,这导致了对用户最新兴趣把握有不及时的风险。这些问题在GoogleNews的另一篇论文中得到了解决。
方法主要建模用户对当前某类新闻的感兴趣的程度,这取决于两个方面:用户对这类新闻的兴趣度以及当前某类新闻的热度。通过贝叶斯理论,这两个方面可以直接用如下公式联系在一起:
其中分子左半部分
●YahooToday
所谓的bilinearmodel的含义当你隐去一个自变量时,另一个自变量和因变量成线性关系。比如下式不考虑z时,s和x成线性关系;不考虑x时,s和z也成线性关系。进一步如果将用户和资讯的特征分为静态和动态两大类,则上式可写为:
最后一个等式后面的第一项是静态预测得分,第二项则是动态预测的得分。
稍微高大上一点的做法则是upperconfidencebound(UCB)策略:假设有K个新item没有任何先验,每个item的回报也完全不知道。每个item的回报均值都有个置信区间,而随着试验次数增加,置信区间会变窄,对应的是最大置信边界向均值靠拢。如果每次投放时,我们选择置信区间上限最大的那个,则就是UCB策略。这个策略的原理也很好理解,说白了就是实现了两种期望的效果:
深度学习篇
1)embedding技术。此时深度学习主要用来学习user/item的embedding也就是通常意义上的user/item的表示形式,每个user/item可以表示为一个向量,向量之间的相似度可以用来改善推荐。这里深度学习的重点是用来学习合理的表示;
YahooJapan的新闻推荐团队利用denoisingautoencode的技术来学习新闻的vector表示。Autoencode大家可能比较熟悉,它通过最小化变换前后信号的误差来求解,而denoising则是对输入随机加入一些噪声,再对其进行变换输出,最终是通过最小化加噪声后的输出和原始(不加噪声)输入之间的差异来求解。应用中不少结果表明,这种方法比传统的autoencode学习到的vector效果更好。具体示意图如下。
但这种方法是经典的无监督学习套路,直观来看和应用场景中要求相似新闻的vector也要尽量相似没有直接的关联(这里单单从优化目标来看,实际上由于语料的天然性质或者人们用语习惯,这个相似性的要求已经间接隐含在优化目标里了)。而新闻有很多人们编辑好或者其他模型产生好的类别信息,假如A、B新闻都是体育类,C是教育类的,通常意义上来讲A和B相似度是比A和C要高的。这是在训练深度学习时已知的先验知识,如果能把它加入到优化目标中,学习到的vector就能更好的表达相似度信息,于是有了下面的方法。
如图所示,通过在原始autoencode的优化目标中加入“同类新闻相似度大于不同类新闻相似度”这一项,我们就可以把先验知识作为约束加到模型中。YahooJapan的人实验证明了如此得到的vector确实能更好的表示(相似度信息)。
目前只介绍了如何得到item的vector,实际推荐中要用到的一般是user对一个item的兴趣程度,只有在得到uservector后才能通过算user和item的相似度来度量这个兴趣程度。那么如何得到user的vector呢?了解的同学可能能想到,既然我们已经得到了新闻的item的表示,想办法把他们传到user侧不就行了么?
确实如此,一种简单的做法是把用户近期点过的所有新闻的vector取个平均或者加权平均就可以得到user的vector了。但这种模式还有优化的空间:1)用户点击是一个序列,每次点击不是独立的,如果把序列考虑进去就有可能得到更好的表示;2)点击行为和曝光是有联系的,点击率更能体现用户对某个或某类新闻的感兴趣程度。鉴于这两点,我们很容易想到通过深度学习里经典的解决序列学习的RNN方法,Yahoojapan的人使用的就是一个经典的RNN特例:LSTM。训练时将用户的曝光和点击行为作为一个序列,每次有点或不点这样的反馈,就很容易套用LSTM训练得到user的vector,具体做法如下图所示。
对应的神经网络结构如下图所示。
作为国内当红的个性化推荐产品,今日头条技术经历了三个阶段:
1)早期以非个性化推荐为主,重点解决热文推荐和新文推荐,这个阶段对于用户和新闻的刻画粒度也比较粗,并没有大规模运用推荐算法。
任何一种算法都有其局限性,业务要结合自己产品的特点,选择合适的算法解决特定的小问题,融合各种算法解决一个大问题。另外要设计合理的实验和放量机制,以在有限的影响内,最大程度地利用真实的用户行为来修正算法判定的结果。比如,可以先放5%的流量来试探用户对新闻的兴趣,并用模型进行建模;再用15%的流量来修正模型的效果,进行优胜劣汰;最后将真正置信的推荐结果推送到全量用户。
个资讯消费是人的基本需求,个性化资讯推荐让我们能更好地消费资讯,享受生活的快乐。个性化资讯推荐还有很长的路要走,目前面世的产品仅仅迈出了第一步,看起来有模有样,实际上问题多多。例如被吐槽最多的一个问题:用户一天看了很多,但睡前闭目一想,记住的很少,对自己有用的更是凤毛麟角。这只是一个表象,背后其实暴露了很多现有推荐的问题。
要做好一个资讯推荐产品,不单单精准推荐技术需要演进,呈现形式、交互方式、产品形态、内容生态等等都需要去探索,最最重要的要想清楚以下几个本质问题:
加油吧,个性化资讯推荐!
1.桑赓陶,《把握市场、产品和技术的动态匹配——韩国三星电子公司产品开发战略演变的基本原则及其对中国企业的启示》
2.PersonalizedRecommendationonDynamicContentUsingPredictiveBilinearModels[www,2009]
3.GoogleNewsPersonalization:ScalableOnlineCollaborativeFiltering[www,2007]
5.ASurveyonChallengesandMethodsinNewsRecommendation[WEBIST,2014]
6.PersonalizedNewsRecommendationBasedonClickBehavior[www,2010]
7.AContextual-BanditApproachtoPersonalizedNewsArticleRecommendation[www,2010]
8.LearningDeepStructuredSemanticModelsforWebSearchusingClickthroughData
9.AMulti-ViewDeepLearningApproachforCrossDomainUserModelinginRecommendationSystems[MSResearch]