首页 > 代码库 > 黄聪:博客园的积分和排名算法探讨,积分是怎么计算的?(转)

黄聪:博客园的积分和排名算法探讨,积分是怎么计算的?(转)

我们先来看看现行规则,用公式表示为:
-------------------------------------------------------------------
BlogScore = BeRead + 10 * BeComment + 50 * Comment

BlogScore:博客积分
BeRead:个人博客所有随笔和文章的阅读数之和
BeComment:个人博客被评论总数
Comment: 个人所发表的评论总数
-------------------------------------------------------------------
我从这个公式看出了几个问题:
1.发表随笔和文章本身不会为博客带来积分,但不发表文章,BeRead和BeCommented将永远为0
2.发表一篇评论可以直接加50分
3.被阅读10次等于被评论一次的积分

首页问题
这里,首先联想到是讨论已久的“首页问题”,上首页对文章有什么直接的好处呢?通常首页文章的BeRead值会比较大,一般1000左右。值得注意的是不同类型和质量的文章其BeRead值差距并不是太大,根据我的经验每篇首页文章的阅读数大约在500~3000这个区间范围,最多相差5,6倍。而BeComment值则相差很大,少的有几乎为0的,普通文章4,5次,多的则达可到300次以上,相差上百倍,如果再乘上系数10,就更为可观。

文章质量问题
因 此,那些吸引眼球、引起争议的文章会为博客带来巨大的积分。我们常常看到首页上一些非技术文章门庭若市;一些高质量的技术文章,反而只有寥寥几篇回复。 一个好的技术博客,应该鼓励产生高质量的原创技术文章,这才是它的核心价值,而并不是仅仅是像门户网站一样赚取人气。那么应如何区分文章的质量呢?当然, 最直接的方式就是读者反馈。现在博客园已经有了【推荐】和【反对】的反馈功能,不妨利用起来作为积分计算的参考依据。有了这个参数,就能区别对待不同质量 的文章,让高质量的文章为作者带来更多的积分。至于具体实现,我还没有一个很好的模型,只能随便想个简单的,比如定义文章质量因子:

QualityFactor = log(max(1, 推荐数 - 反对数))

在计算积分的时候可以考虑把评论数或阅读数乘上这个质量因子。


PersonRank vs PageRank
在互联网上,如果一个网页被很多其它网页所链接,说明它受到普遍的承认和信赖,那么它的排名就高,这就是Google PageRank算法的核心思想。PageRank把链接视为源对目标网页的投票,而这张票的分量是和源网页自身的PageRank相关的。下面是一个简单的示意图:

这在博客园内有类似的情况,博客园有MVP,有排名靠前的著名人物,他们的文章常常会得到大家的追捧,而普通新手的影响力则一时难以与他们相比。这就说明, 博客或者说作者,与互联网的网页有类似之处,是有Rank之分的,当然这个Rank是动态变化的。如果把评论看成是对文章的投票,而这张票的分量与投票者自身的影响力相关,这就可以产生类似PageRank的PersonRank。假设园内某MVP评论某篇文章,一般来讲他的评论应该比普通评论更有分量。当然,这里还应该考虑正面评价和负面评价因素,如果他持推荐意见,应该加分,如果他持反对意见则不应该加分。

马太效应
什么是马太效应?举个热门新闻算法的例子,越是热门新闻大家越是去点,越去点它就越热门,形成一个恶性循环。如果算法不好,热门或许就会永远热门下去。同样的道理,在博客园里面,积分高的作者的文章越是热门,越是热门他的积分就越来越高。那么应该如何避免马太效应,鼓励新人辈出呢?常见的方式有两种,一是衰减机制,比如,一月前的文章产生的积分应该乘上一个衰减系数(比如0.9),从而使近一个月的文章产生的积分所占权重变大,这样就避免成名后坐吃山空的现象,真实地反映出作者近段时间的贡献;二是log函数,对点击数和评论数取log以后再作为积分,让积分的增长变得平滑,避免极端大的分值出现。

一时兴起,随便想了这么多,抛砖引玉,大家见仁见智!再次声明,本文是纯学术探讨,不构成对博客园的任何改动建议。