人民网>>传媒>>人民网奖学金
人民网>>传媒>>正文

基于Mahout的个性化新闻推荐的研究

马鹏飞、张志诚、瞿庆义、李江宁

2015年04月20日09:57  来源:人民网研究院  手机看新闻

       

    随着互联网时代的信息爆炸式增长,在网络上充斥着大量的信息和各种各样的新闻,面对海量的新闻信息,新闻媒体的传播方式受到了挑战,如何将用户需要和感兴趣的新闻推荐给用户成为亟待解决的问题,比如近一两年“今日头条”这个个性化新闻推荐应用的出现,促使网络新闻媒体做出自己的反应。

 

    目前国内各个网站在新闻推荐上逐渐有了一些尝试,如上图1.1所示,具体的实现各有不同,不难猜测其后台都是根据用户的一些信息进行分析和推荐,比如在人民网有昨日必读,点击榜,留言榜,热帖榜以及延伸阅读等版块,会根据用户的点击量和评论数目进行一些统计分析后将相应的新闻链接显示在页面上相应版面上,同时在点击某一篇文章后,在文章的页面上会显示出来延伸阅读,延伸阅读往往是对当前新闻相关联新闻的一些推荐,这些都是一种向用户推荐的行为。不过这些推荐并不是针对每个不同用户的,它面向的是所有可能浏览到这个页面的用户,也就是每个用户看到的都是一样的,并不是真正的个性化推荐。相对于来说,类似的像新浪新闻门户网站上有一个版块--“猜你喜欢”,由于目前新浪微博的普及,所以新浪可以从用户微博中提取相应的信息,做出一些新闻推荐,是个性化推荐的一种尝试。

    人民网作为国家重点新闻网站的排头兵,引导社会舆论,为广大网友沟通领导、传递民意的重要渠道,也需要适应现在互联网的最新变化,而新闻个性化推荐是时下互联网新闻媒体最为前沿的一部分。

    新闻信息的推荐核心是对用户信息的分析,包括新闻的浏览历史,评价,转发,收藏等系列的隐性信息的分析,这些的权重是有待我们确定的。难点之一就是目前互联网上需要进行分析的新闻信息是以往时代都不曾遇到过的海量数据,传统的单机算法已经不能适应这样海量数据的处理。本次课题选取时下流行的Mahout平台下的基于用户的推荐算法,Mahout平台依托目前流行的Hadoop大数据平台,可以应对海量数据的处理,利用Mahout下的一些算法尝试对用户的信息进行分析,进行新闻的推荐。针对人民网自身的特点来进行一些改进研究和探讨,从满足用户对个性化新闻的需求出发,提供一种人民网从事个性化新闻推荐的思路。

    近些年已经看到了推荐系统在电商网站上的实现,像Amazon、Netflix以及淘宝,它们基于浏览和交易历史,页面将产生一个认为对用户有吸引力的商品列表。这类推荐系统在上世纪九十年代已经出现,但直到现在它仍然是数据分析的专门研究领域。目前主要是有基于内容的推荐以及基于协同过滤的推荐。下面来重点介绍下基于item和基于user的两种推荐方法以及slope-one算法。

    基于物品的推荐算法给用户推荐用户之前喜欢的物品相似的物品,核心就是推断买A物品的人也会买B,这样的算法思想常见于电商购物平台,比如亚马逊、淘宝等,该算法思想建立在用户会对之前喜欢的物品相似的物品感兴趣,例如,如果人民网推荐一条军事类的新闻给你(因为你之前喜欢军事类的新闻),那么人民网在做类似于基于物品推荐的事情。这种推荐基于新闻的属性-主题。

    如果选用基于物品的推荐来对新闻进行推荐,需要决定新闻的哪些属性对推荐系统是有意义的、作用多少程度,比如新闻的主题、作者、来源、时间、人物、标题等。关于商品推荐的知识不能简单的应用于新闻领域,同样关于新闻的知识也不能简单的应用于其他的领域;比如,商品的规格参数属性对新闻推荐来说是没用的,而新闻推荐的主题对Pizza配料推荐是没什么帮助的。

    一个简单的item-based的推荐器,根据传入的DateModel和ItemSimilarity去推荐。基于Item的相似度计算比基于User的相似度计算有个好处是,item数量较少,计算量也就少了,另外item之间的相似度比较固定,所以相似度可以事先算好,这样可以大幅提高推荐的速度。其推荐流程可以分成三步:

    第一步,获取用户Ui喜好的item集合{It1…Itm}

    第二步,使用MostSimilarItemsCandidateItemsStrategy(有多种策略, 功能类似UserNeighborhood) 获取跟用户喜好集合里每个item最相似的其他Item构成集合 {Item1…Itemk};

    第三步,对{Item1...Itemk}里的每个itemj计算 Ui可能喜欢的程度值perf(Ui , Itemj) ,并把Item按这个数值从高到低排序,把前N个Item推荐给Ui。其中perf(Ui , Itemj)的计算公式如下:

    perf(Ui , Itemj) =   (1)

    其中 是用户Ui对Iteml的喜好值。

    基于用户的推荐是通过对用户曾经的历史数据进行分析从而推荐与用户行为相似的用户感兴趣的物品,其基本思想是用户对一些事物的评价相似那么可以推断他们拥有共同的兴趣爱好,它建立在用户间有某种相似性的基础上。

    这种算法在日常生活中很常见。当相似性度量比较可靠时,结果就可能会更好。比如两个好朋友都喜欢时事政治新闻的可能性,比任意两个人喜欢时事政治新闻的可能性要大得多。这里相似度的推断直接来自于对新闻的偏好。再比如果有两个陌生人但都同时喜欢一些相同的新闻,有理由相信他们都会喜欢对方的喜欢的其他新闻。相比只基于他们是好朋友来猜测其兴趣爱好更可靠。

    在算法上来看,基于用户的推荐,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。一个很简单的user-based模式的推荐器实现类,根据传入的DataModel和UserNeighborhood进行推荐。其推荐流程分成三步:

    第一步,使用UserNeighborhood获取跟指定用户Ui最相似的K个用户{U1…Uk};

    第二步,{U1…Uk}喜欢的item集合中排除掉Ui喜欢的item, 得到一个item集合 {Item0...Itemm}

    第三步,对{Item0...Itemm}每个itemj计算 Ui可能喜欢的程度值perf(Ui , Itemj) ,并把item按这个数值从高到低排序,把前N个item推荐给Ui。其中perf(Ui , Itemj)的计算公式如下:

    perf(Ui , Itemj) =       (2)

    其中 是用户Ul对Itemj的喜好值。

    slope-one算法是一种轻量级的协同过滤推荐算法,slope-one 假设两个物品的偏好值之间存在着某种线性关系,可以通过某个线性函数,例如y=ax+b,由物品X的偏好值估计出物品Y偏好值。

   slope-one推荐算法正是基于这一假设来运作和命名。slope-one推荐程序做了进一步的简化假设a=1,即斜率为1,现在只需要确定b=y-x,即物品两两之间偏好值的(平均)差异。

    slopeone算法适用于用户对item的打分是具体数值的情况。Slopeone算法不同于前面提到的基于相似度的算法,他计算简单快速,对新用户推荐效果不错,数据更新和扩展性都很不错,预测能达到和基于相似度的算法差不多的效果,很适合在实际项目中使用。

    基本原理:

 

    用户C对item2的打分可能是多少呢? slope one算法认为:所有用户对item1对item2的打分平均差值是:((4 - 5) + (3- 4)) / 2 = -1,也就是说人们对item2的打分一般比item1的打分要高1,于是Slope one算法就此猜测C对item2的打分是5 + 1 = 6。

    当然在实际应用中,用户不止A,B 两个,跟item2相关的item也不止item1一个,所以slopeone的预测公式如下:

    perf(Ui,itemj) =    (3)

    其中表示与, 用户Ui打过分的除itemj之外所有其他item集合,表示用户Ui对 itemk的打分。表示除Ui外所有其他用户对itemk和itemj打分差值的平均值。

     = (4)

     其中表示除Ui外其他所有用户的集合。

    slope-one与基于物品的推荐程序类似,它的性能不受数据模型中用户数目的影。它仅仅依赖于物品之间偏好值的平均差异,而这些差异值可以预先计算好。它的底层数据结构更新的效率很高:当一个偏好值发生了改变,只需要更新相关的差异值。在偏好值变化频繁的场合,这是一个优点。

 

    经过了解对比,人民网不同于其他像新浪、搜狐以及网易等商业网站,人民网是党政的媒体,在盈利上没有严格的要求,相比于其他网站,人民网背后有一只覆盖全国的专业的采编队伍和优秀记者群体,在供稿上有极大的便利性,很多新闻都是首发,每天每时每刻都可能有大量的供稿和新闻出现,所以要求推荐必须快速及时,这也是为什么选用在Mahout平台上构建新闻推荐的原因;

    其次作为党政的喉舌,人民网新闻的侧重点也偏向于民生时事政治,很多新闻以评论的形式出现,注重事件的深度分析,并有相应的专家讲解评论,注重理性思考,新闻中表达自己的立场,具有很强的权威性,起到舆论引导的作用,所以在推荐中也要考虑到这一点,对一些重点新闻加强比重,对一些不利于社会舆论的新闻进行筛选过滤;

    从用户的角度来说,人民网的用户集中在高学历、中青年人群,有强国社区和强国论坛等可以互动交流的平台,用户群体比较稳定,这也是随后可以选择基于用户推荐的原因之一;

    此外人民网的本地化上有些不足,本地化信息不够集中和明显,各个不同地域的人在浏览时不能很及时的看到本地可能会关注的新闻信息,所以可以在随后的推荐中针对本地化做些调整。

    如第二章中所述,基于物品的和基于用户的推荐各有所长,基于物品的推荐程序运行时间,随着物品的个数增长,而基于用户的推荐程序运行时间,随着用户数增长。鉴于人民网的用户群体较为稳定,而每天新闻更新的较多,所以基于用户的推荐算法更能带来性能的提升,所以本次课题选择了基于用户的新闻推荐。当然如果随后人民网以主题为单位进行新闻推荐,这样一来新闻主题的数目就远远小于用户的数量,那么选择基于物品的推荐则能带来性能的提升。

    在本次的课题中选择了Mahout平台上的基于用户的推荐算法,Mahout是 Apache Software Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。目前Mahout 已经提供了大量功能,特别是在集群和协同过滤方面

图3.1 Mahout基于用户推荐程序组件间关系示意图

    如上图3.1所示,Mahout基于用户推荐程序主要包含下面几个组件:

    DataModel:是对用户评分信息的封装以便Mahout进行处理。其支持从不同的存储环境中提取数据如关系型数据库、本地文件系统等。

    UserSimilarity:用于计算基于用户相似度。如果这里是基于物品的则这里便是ItemSimilarity,用于计算基于物品的相似度;

    Recommender:是对推荐的抽象封装,用于在实际应用中产生具体的推荐列表。

    UserNeighborhood:实现明确了给定用户最相似的一组用户。

    以新闻来说,这里新闻的编号可以是主题也可以是单个新闻编号,这次定义为新闻id。

    用户id, 新闻id, 打分

      1,        101,     5.0

      1,        102,     3.0

      1,        103,     2.5

 

      2,       101,     2.0

      2,       102,     2.5

      2,       103 ,    5.0

      2,       104,     2.0

 

      3,       101,    2.5

      3,       104,    4.0

      3,       105,    4.5

      3,       107,    5.0

 

      4,       101,    5.0

      4,       103,    3.0

      4,       104,    4.5

      4,       106,    4.0

 

      5,       101,    4.0

      5,       102,    3.0

      5,       103,    2.0

      5,       104,    4.0

      5,       105,    3.5

      5,       106,    4.0

     这里针对新闻不同于其他物品的特点,我们将新闻的一些隐性会影响到评分的部分进行了设定,包括新闻的浏览历史,评价,转发,收藏等,浏览分数0.5分、评价1分、转发1.5分、收藏2分,这些评分和其他可能影响的权重可以根据人民网的需要重新进行分配设定。实际应用中的数据会是海量的,这里为了便于理解分析,选取少量的样本数据来演示。

    对于用户1和用户5,他们都喜欢101编号的新闻,对102的喜欢弱一些,对103的喜欢更弱,可以认为他俩具有相同的兴趣;

    用户1和4,他们都喜欢101和103,没有信息显示用户4喜欢102,可以认为具有相同的兴趣;

    用户1和用户2,用户1喜欢101,但用户2讨厌101,用户1喜欢103而用户2不喜欢,这样看来两者的兴趣好像正好相反;

    用户1和3的交集很少,只对101有共同兴趣;

图3.2用户1-5与新闻101-107关系

    那在如上的情况下,问题就来了,应该给用户1推荐哪个新闻?这里可以首先排除的是101, 102或者103,因为用户已经购买,推荐系统需要发现新的事物。用户4、5与用户1类似,所以推荐一些用户4和5喜欢的书籍给用户1可能是不错的选择。这样使得104、105和106成为可能的推荐。在可能推荐的新闻集合中进行计算,104是最有可能的一个推荐,其偏好打分是4.5和4.0。

    下图展示了Mahout基于用户推荐组件间关系,各个模块之间的关系,以及初步的逻辑,箭头所示为组件刷新数据的次序。

图3.3基于用户推荐个组件之间的时序逻辑

    通过DateModel进行数据处理,进而通过UserSimilarity进行用户相似性打分,随后通过UserNeighborhood用户邻域限制计算出来相似的用户,随后Recommender根据其占的比例进行优先推荐。

 

     在推荐系统中,主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。本次将通过离线实验评测,抽取一部分数据评估这些参数下的推荐指标具体包括查准率(准确率)、查全率(召回率)。

    Precision:查准率,有的地方又叫准确率。查准率描述的是在靠前的结果中,正确结果所占的比例,就是推荐中被检索到的相关结果占被检索总体结果的比例,例如推荐了100个结果,其中真实相关的70个,准确率就是70%;

    Recall:召回率又叫做查全率,召回率描述的是在靠前结果中,包含了多少应该出现的结果,是推荐中被检索到的相关结果占相关结果的比例,比如真实相关的结果数目为100,但是本次推荐的结果中只包含其中的60个结果,那么查全率即为60%。

    在大规模数据集合中,这两个指标是相互制约的。当希望索引出更多的数据的时候,查准率就会下降,当希望索引更准确的时候,会索引更少的数据。

    RandomUtils.useTestSeed();

    DataModel model = new FileDataModel(new File(“intro.csv”));

    RecommenderIRStatsEvaluator evaluator =new GenericRecommenderIRStatsEvaluator();

    RecommenderBuilder recommenderBuilder = new RecommenderBuilder(){

    @Override

    Public Recommender buildRecommender(DataModel model) throws TasteException

    UserSimilarity similarity = new PersonCorrelationSimilarity (model)

    UserNeighborhodd neighborhood = new nearestNUserNeighborhood (2,similarity,model);

    return new GenericUserBasedRecommender(model,neighborhood,similarity);

    IRStatistics stats = evaluator.evaluate(recommenderBuilder,null,model,null,2

    GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,1.0);

    System.out.println(stats.getPrecision());//获得准查准率

    System.out.println(stats.getRecall());//获得查全率

    这里如果不调用RandomUtils.useTestSeed(),会看到不同的结果,因为训练数据和测试数据是随机选择的,而且这里选用的数据集也非常小,但是加入这个调用之后,结果就应该为:  

     0.75

     1.0

    即查准率为0.75,平均有75%的推荐结果是正确的、真实相关的;查全率为1.0,即被检索到的结果包含了所有的真实相关的结果。

    随着新闻信息的海量增长,传统的一些推荐算法虽然可以推荐出相应用户可能感兴趣的新闻内容,但是处理速度却无法满足需求,本文在Mahout平台上以基于用户的推荐算法为基础,进行了一些调试改进,即使数据量巨大也可以很快的计算出需要的结果,为人民网更好的对每天新产生的用户数据进行快速的分析和新闻推荐提供了一种可能。

     本次课题中选取的是基于用户的推荐来对新闻进行推荐,不过在不同的应用场合,也同样可以根究需求选择基于用户的推荐算法,比如当推荐的是一个主题而不是一个单独的新闻,这时新闻的主题(比如时事、政治、经济等等)个数远远小于用户的数量,这时选择基于物品的推荐并结合基于内容,这里的内容即指新闻的主题,不过这样推荐出来的是主题,结果没有单个新闻推荐那么精确;当然在一些适用场合可以选择基于物品和基于用户相互结合的方式,比如在上述的以主题为单位的推荐后,推荐的是一个新闻主题,而一个新闻主题下可能有许多新闻,这时候就可以基于用户再次对该主题下的新闻进行推荐,这样在基于用户推荐的时候,处理的是一个主题下的新闻,既减少了需要处理的数据量,同时经过两次的推荐,结果更为精确和可信,这也是未来人民网进行推荐的一种可能方向。

    从新闻推荐来说,面向的是广大的用户,不可忽视的是目前人民网作为一家原创居多的网络媒体,很多新闻都是原创和最及时的,这时同行业的转载也是一个很大的传播途径,所以随后人民网同时也可以面向同行业的新闻媒体进行新闻推荐,这样一来,可以拓宽新闻的传播途径和提高新闻的影响力。

 

参考文献

[1] 郭庆光.传播学教程.北京:中国人民大学出版社.2011.

[2] 欧文.Mahout实战 .北京:人民邮电出版社 .2014

[3] 项亮. 推荐系统实践. 北京:人民邮电出版社, 2012

[4] 樊哲.Mahout算法解析与案例实战.北京:机械工业出版社.2014

[5] G. Adomavicius,A. Tuzhilin, "Toward the next generation of recommender systems: A survey of the state-of-the-art and possible extensions," Knowledge and Data Engineering, IEEE Transactions on, vol. 17,pp. 734-749, 2005.

[6] T. White. Hadoop: The Definitive Guide. O’Reilly Media,2009.

[7]   Liang, T.,Yang, Y. Chen, D. & Ku, Y. A semantic-expansion approach to personalized knowledge recommendation. Decision Support System, 45(3),401-412. 2008.

[8]   Bobadilla, J., Serradilla, F.’ & Bernal, J. A new collaborative filtering metricthat improves the behavior of recommender systems. Knowledge-Based Systems,23(6), 2010,520 - 528.

[9]   Lei Li, Dingding Wang, Tao Li. SCENE: A Scalable Two-Stage Personalized News Recommendation System. Proceedings of the 34th international ACM SIGIR conference on Research and development in Information, NY, 2011,pl25-pl34.

(责编:王培志、唐胜宏)

我要留言

进入讨论区 论坛

注册/登录
发言请遵守新闻跟帖服务协议   

同步:分享到人民微博  

社区登录
用户名: 立即注册
密  码: 找回密码
  
  • 最新评论
  • 热门评论
查看全部留言

24小时排行 | 新闻频道留言热帖