欢迎来到天天文库
浏览记录
ID:28857852
大小:119.00 KB
页数:6页
时间:2018-12-14
《reddit排名算法如何能工作》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案Reddit排名算法如何工作本文是如何黑客新闻排名算法工作的续作,研究Reddit的新闻和评论排名系统如何工作。Reddit的算法非常容易理解和实现,稍后我会作进一步讲解。本文的第一部分侧重于新闻排名,第二部分侧重于评论排名。Reddit的评论排名算法很有意思,提出这个想法的家伙是xkcd的作者——兰德尔芒罗。深入理解新闻排名算法Reddit是用Python编写的开源系统,整站代码可以自由获得(代码在这里)。他们的排序算法使用Pyrex(一种用来编写PythonC扩展的语言)实现。之所以用Pyrex是出于效率
2、的考虑,我已经把他们的Pyrex实现重写成纯Python,这样更易于阅读。热度排名(默认新闻排名算法)是这样实现的:#Rewrittencodefrom/r2/r2/lib/db/_sorts.pyxfromdatetimeimportdatetime,timedeltafrommathimportlogepoch=datetime(1970,1,1)defepoch_seconds(date):"""Returnsthenumberofsecondsfromtheepochtodate."""td=date-epoch
3、returntd.days*86400+td.seconds+(float(td.microseconds)/1000000)defscore(ups,downs):returnups-downsdefhot(ups,downs,date):"""Thehotformula.Shouldmatchtheequivalentfunctioninpostgres."""s=score(ups,downs)order=log(max(abs(s),1),10)sign=1ifs>0else-1ifs<0else0seconds
4、=epoch_seconds(date)-1134028003returnround(order+sign*seconds/45000,7)热度排名算法的数学描述看起来像这样(我从SEOmoz的摘来的,但我怀疑他们是那本书的作者):精彩文档实用标准文案提交时间的影响新闻排名中的提交时间可作如下考虑:l提交时间对排名有很大的影响,新提交的新闻排在前面l评分不会随着时间的推移而下降,但新的新闻会得到比旧新闻更高的分数。这种方法和HackerNews不同,HackerNews的评分会随着时间的推移而下降。“顶”和“踩”的次数相
5、同、提交时间不同的评分情况,如图所示:对数标度Reddit的热度排名使用对数函数,前面的投票比后面的投票有更高的权重。大概像这样:精彩文档实用标准文案前10个“顶”和接下来100个“顶”拥有一样的权重,而这100个“顶”又和接下来1000个“顶”有相同的权重,依此类推……不使用对数标度法的情形会是这样:“踩”的影响Reddit是有“踩”的几个网站之一。正如代码中所描述的,一条新闻的“评分”定义为:“顶数”-“踩数”用图来表示:这对“顶”和“踩”都很多的新闻影响很大,因为它们会排在评论往“顶”一边倒的新闻后面。这可以解释为
6、什么kittens(以及其他争议性不大的新闻)排名如此之高:)Reddit新闻排名总结l提交时间是一个非常重要的参数,一般较新的新闻会比旧新闻的排名更高l前10个”顶“相当于接下来的100个顶。例如,有10个”顶“的新闻和有50个“顶”的新闻排名差不多。l有争议(“顶”和”踩“数目相当)的新闻,得到的评分比“顶”数占优势的新闻较低。精彩文档实用标准文案Reddit的评论排名如何进行Reddit最好的排名算法是xkcd的兰德尔芒罗提出来的。关于此事,他写了一篇精彩的博客:reddit新的评论排名系统此文用非常好懂的方式解释
7、了排名算法,值得一读。摘要如下:l使用热度算法来给评论排名并不明智,因为它似乎严重偏向早期发表的评论l在评论系统中,您想把最有价值的评论排在前面,而不管它的提交时间l早在1927年,EdwinB.Wilson就提出了名为“威尔逊评分区间”的解决方案,威尔逊的评分区间可理解成“置信度排名”l置信度排名法把投票数作为一个假定的全民投票统计样本——类似民意调查。《如何不使用平均分进行排序》详细描述了置信度排名,强烈推荐阅读!深入理解评论排名Rreddit的置信度排名算法实现在_sorts.pyx中,我把它的Pyrex实现用纯P
8、ython重写了一遍,同时删除了缓存相关的优化:#Rewrittencodefrom/r2/r2/lib/db/_sorts.pyxfrommathimportsqrtdef_confidence(ups,downs):n=ups+downsifn==0:return0z=1.0#1.0=85%,1.6=95%pha
此文档下载收益归作者所有