内容社区如何做文章排序及StackOverflow问答排名算法

来源:互联网 发布:黑社会2知乎 编辑:程序博客网 时间:2024/06/12 20:32
       对于一个以内容为主的社区,围绕各种话题,每天都会产生大量文章,随着用户的不断参与,很多文章会不断被浏览、评论、转发或者点赞,逐渐由一篇平淡文章变为热门文章,让更多人阅读。那么这些文章如何精准的呈现给用户呢,如果总是呈现在首页,那么新发布的文章必然会被挤压。增加“最热”、“最新”两个分类,是很多社区的做法,包括csdn也是这么做的,但是总觉得用户体验一般。有没有什么排序算法,可以将最热和最新的文章客观、合理的排序后都呈现在一个页面,感觉这样用户体验比较好。当然,除了最新、最热两个分类,现在还有一种所谓根据用户阅读习惯做智能推荐的方式。写到这里忍不住吐槽一下网易新闻客户端的头条功能,真是让人无语。所谓智能推荐,感觉很差,让人很烦,为此我还在客户端提交了问题反馈。比如,我在网易头条里阅读了一篇《中国唯一一个以皇帝年号命名的城市》,结果下次再打开网易新闻客户端,头条里就出现了一篇《中国唯一一个以道士命名的城市》,这就是所谓的智能推荐,推荐的都是噪音。这里顺便说一下csdn的博客排名机制,目前排名只是单一按积分排序。博客积分是通过浏览量来算的,每100次浏览,会增加1个积分。比如写一篇android/ios/h5开发的相关文章,浏览量很快过百,但是写一篇图像算法相关文章,可能几天下来浏览量都不会过百。这是由于文章受众群体基数不一样,图像算法工程师肯定要比移动端开发工程师少。所以,对于在csdn写小众技术博客的博主,这样的积分获取及排名方式多少是有些不科学的。
       好了,还是说说文章排序的问题。其实相关排序算法很多,下面整理一下StackOverflow网站的排序算法,文章摘录自:
       https://www.biaodianfu.com/stackoverflow-ranking-algorithm.html
       https://meta.stackexchange.com/questions/11602/what-formula-should-be-used-to-determine-hot-questions

       StackOverflow的排序共分为两类,1个是问题排序,1个是答案排序。这里主要介绍的是关于热门问题的排序。
                                      
       在分析问题前可以先考虑下,如果是你来做这个排名算法需要考虑哪些因素?
       1问题的投票人数,StackOverflow允许用户投反对票,所以这里可以使用绝对投票数,即正面票-负面票数量。绝对数越高问题越热门。
       2问题浏览量,或是有效浏览量,有效浏览量可以建立一个停留时间的阀值去衡量。浏览的越多则越热门。
       3问题的答案数,理论上说答案越多则问题的越热门,但这也并不绝对,有些好的问答可能只有一个好的答案。
       4问题答案的认可数,即是否存在一个被大量认可的答案。这里存在两种情况,被提问者认可或被其他访问者投票。多少的投票量可以认为是问题答案被认可也是需要考虑的问题。
       5问题的提问时间和问题的最后答复时间,问题的受欢迎程度应该是随时间变长而变得不热门。
       6提问者的声望和回答问题的声望,声望越高的问题肯定质量越到,越值得去推荐。
       在08年8月23日的时候,StackOverflow的创始人 Jeff Atwood曾经公布了一个热门问题的排名算法,具体为:
                          
       此算法目前是否还继续使用或者是否改变不得而知。下面我们详细介绍下问题排名中涉及到的变量。
       1Qviews(问题的浏览次数)
       — log(Qviews)*4
       某个问题的浏览次数越多,就代表越受关注,得分也就越高。这里使用了以 10为底的对数,用意是当访问量越来越大,它对得分的影响将不断变小。
       2Qscore(问题得分)和 Qanswers(回答的数量)
       — (Qanswers * Qscore)/5
       Qscore(问题得分)= 赞成票-反对票。如果某个问题越受到好评,排名自然应该越靠前。Qanswers 表示回答的数量,代表有多少人参与这个问题。这个值越大,得分将成倍放大。这里需要注意的是,如果无人回答,Qanswers 就等于0,这时 Qscore 再高也没用,意味着再好的问题,也必须有人回答,否则进不了热点问题排行榜。
       3Ascores(回答得分)
       — sum(Ascores)
       一般来说,”回答”比”问题”更有意义。这一项的得分越高,就代表回答的质量越高。但是简单加总的设计还不够全面。这里有两个问题。首先,一个正确的回答胜过一百个无用的回答,但是,简单加总会导致,1个得分为 100 的回答与 100 个得分为 1 的回答,总得分相同。其次,由于得分会出现负值,因此那些特别差的回答,会拉低正确回答的得分。
       4. Qage(距离问题发表的时间)和 Qupdated(距离最后一个回答的时间)
       — ((Qage+1) – ((Qage – Qupdated)/2)) ^ 1.5
       Qage 和 Qupdated 的单位都是小时。如果一个问题的存在时间越久,或者距离上一次回答的时间越久,Qage 和 Qupdated 的值就相应增大。也就是说,随着时间流逝,这两个值都会越变越大,导致分母增大,因此总得分会越来越小。
       总结:Stack Overflow 热点问题的排名,与参与度(Qviews 和 Qanswers)和质量(Qscore 和 Ascores)成正比,与时间(Qage 和 Qupdated)成反比。
       关于上述的答案是否合理的,是否可以再改良,答案是肯定的,如果是你你会怎样去推荐热门问答呢?


1 0
原创粉丝点击