V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzlettle
V2EX  ›  设计

大家谁能想出个算法来公正的排名出一个文章提交网站的作者排名。

  •  
  •   zzlettle · 2012-08-19 16:23:56 +08:00 · 3700 次点击
    这是一个创建于 4464 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想制作一个内容共享,提交的网站。
    类似reddit这样的,我在上面设置了让每个人选择like 和dislike的按钮。
    这样在一个规定的周期内,比如一个星期内,提交文章质量最高的作者排名。
    我找到些文章介绍文章排名的算法,比如reddit文章排名的公式我也看过介绍。http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_reddit.html
    但对于提交内容的作者我也要找个好的算法来排名他们的贡献。大家有什么好的想法。因为我打算根绝作者的排名来奖励他们,这样才能鼓励更多的人来提交他们找到的内容发表在我网站上面。但要找个比较公平的算法。然后一个周期过后,我把奖品发给排名前3的作者后,然后大家重新再来。

    不知道大家有没有这方面的研究。
    37 条回复    1970-01-01 08:00:00 +08:00
    qiayue
        1
    qiayue  
       2012-08-19 16:48:04 +08:00
    发给前三的文章的作者不就行了
    binux
        2
    binux  
       2012-08-19 16:58:44 +08:00   ❤️ 1
    你把上面那个算法的对象换成作者不就完了
    zzlettle
        3
    zzlettle  
    OP
       2012-08-19 18:57:14 +08:00
    @qiayue
    @binux 感觉那个只是让文章排在最前面,所以加入了时间的因素。
    但作者的话,应该纯粹根据他的文章质量,大家喜好的程度来评判,所以不能把时间因素加入就进去。
    大家有没有一个公平,公开的算法,来体现作者的排名。
    zzlettle
        4
    zzlettle  
    OP
       2012-08-19 19:00:54 +08:00
    如果大家没有什么好的想法,有谁知道国外有什么论坛,就是这样大家讨论数学算法的地方,看看别人有是好的算法。
    我可以根据需要,把like dislike变成5星的评分机制也可以。
    binux
        5
    binux  
       2012-08-19 19:52:04 +08:00
    @zzlettle 那样就热门的作者就总是热门了,既然有周期,那么时间肯定需要考虑
    zzlettle
        6
    zzlettle  
    OP
       2012-08-19 21:56:56 +08:00
    好吧,我再说的详细点。
    打个比方,我需要每个星期根据作者的贡献对排名第一的人发1000块钱。
    贡献当然是他的文章,大家喜欢。根据大家对他的投票,计算出来。但不能简单的只是票数的总和,因为我总觉得要考虑各方面的因素。
    比如有的人只写了一篇文章,但这篇文章质量非常高。他因为这篇文章得票100.
    但有的人其实就是到处share的东西,一个星期内到处找那种流行的东西,搞笑的图片什么的,一共找了100篇文章,就算每个只的一票,他也一共有100票,但显然不公平。
    所以我希望能找出个比较公平的算法,考虑到单个文章的质量,也兼顾那种到处找人们喜欢的东西分享到我的网站,贡献了大量内容的人。

    每个星期一次结算,得分最高的人才能给1000块钱。
    zzlettle
        7
    zzlettle  
    OP
       2012-08-19 22:02:08 +08:00
    算法其实很重要的,对于搜索引擎们来说那个命根,其实对于一个文章发布的网站,找准个文章还有发布者的排名的算法也很重要。如果有人能够设计个合理的算法,我愿意出钱来酬谢。
    cheshirecat
        8
    cheshirecat  
       2012-08-19 22:06:19 +08:00
    真正要做得好,需要类似 PageRank,或者根据投票的人自身从前的得票情况决定他的投票力。

    但是除非真的做到很复杂,否则都会有漏洞可以钻。最好还是加入人工管理员的因素。
    zzlettle
        9
    zzlettle  
    OP
       2012-08-19 22:09:31 +08:00
    人工当然也要管理,但最好有个公式,这样我人工干预的也会少。
    zzlettle
        10
    zzlettle  
    OP
       2012-08-19 22:14:40 +08:00
    投票的人我无法控制,因为投票的人是大量的网站注册用户,我只能保证每个人只能一篇文章投一次票
    cheshirecat
        11
    cheshirecat  
       2012-08-19 22:22:25 +08:00
    最简单这样呗:投票的威力再按照投票者本身从前的得票数加权。

    用户A:从前得过1000票。
    用户B:从前得过10票。
    用户C:从前得过50票。

    文章1:用户A赞。实际得票:log(1000) = 3。
    文章2:用户B和C赞。实际得票:log(10) + log(50) = 2.69897。
    zzlettle
        12
    zzlettle  
    OP
       2012-08-19 22:44:46 +08:00
    @cheshirecat 投票者本身从前的得票数加权 这个怎么来的
    zzlettle
        13
    zzlettle  
    OP
       2012-08-19 22:50:23 +08:00
    @cheshirecat 对投票者本身的权重这个要考虑,然后其实我还考虑了,网站发展的规模的因数。
    比如开始可能网站只有100个人,和后期有1万人的规模时候,这个排名也会有不同。

    比如同样一篇高质量的文章,规模小的时候,全部人都投票也只会有100票,但这么高比率的赞成票,说明了质量很高,但如果有人大量转载流行搞笑的东西,没篇文章得几票,他大量的发这样的文章,总数加起来也能有很多票。
    cheshirecat
        14
    cheshirecat  
       2012-08-19 22:52:35 +08:00
    @zzlettle 没错。所以最终只能变成类似 PageRank 的问题。然后变成算法和各种邪恶用户的长期斗争。
    013231
        15
    013231  
       2012-08-19 22:52:50 +08:00
    @zzlettle 作者得分 = 該作者的文章1票數**2 + 文章2票數**2 + 文章3票數**2 ...
    **2是指平方.
    zzlettle
        16
    zzlettle  
    OP
       2012-08-19 22:57:12 +08:00
    @013231 这么设计是什么意思了
    zzlettle
        17
    zzlettle  
    OP
       2012-08-19 22:59:47 +08:00
    @013231 个人感觉,要考虑投票人本身的权重,达人的投票权重跟一个的过路的投票权重要有区分,然后要考虑到单个文章的质量,不能光靠量来取胜。
    zzlettle
        18
    zzlettle  
    OP
       2012-08-19 23:02:10 +08:00
    大家帮忙想想,还要考虑些什么因素,来判别作者的排名。
    ryon
        19
    ryon  
       2012-08-19 23:17:14 +08:00
    除了公平和公正,你还得考虑服务器计算能力。这类的计算会涉及太多的查询导致页面加载的体验糟糕。anwsion目前按照stackoverflow的计算方式计算热门问题,发现还是需要实时计算,没有独立的服务器,在数据量大的时候往往会让访问用户崩溃。
    zzlettle
        20
    zzlettle  
    OP
       2012-08-19 23:50:45 +08:00
    @ryon 如果真的是这样的话,要么改进服务器,要么显示排名的时候,单独一个页面,出结果的页面慢点应该能介绍,内容文章页面的现实速度要快。
    binux
        21
    binux  
       2012-08-20 00:02:57 +08:00
    既然你不想给发了100篇文章的人1000块钱,这表明你自身就存在取舍
    是发了100篇文章的人贡献大,还是发了一篇100人赞的人贡献大

    这不是一个算法问题,你不能要求算法给出答案
    而是,你是怎么想的,你觉得谁贡献大。然后去设计这个算法,然后照着你的目标调整它
    zzlettle
        22
    zzlettle  
    OP
       2012-08-20 00:07:40 +08:00
    @binux 是的,是个取舍问题。因为我希望有高质量的原创文章,不希望转载大量没什么意思,搞笑的东西。原则是希望人们到这里来后,有新东西,也要有放松的东西。不偏重某一方。
    zzlettle
        23
    zzlettle  
    OP
       2012-08-20 00:09:14 +08:00
    @binux 所以我不排斥转载的东西。关键是让真正的读者能喜欢我的网站,最终目的是人们来了还想来。
    013231
        24
    013231  
       2012-08-20 00:42:58 +08:00
    @zzlettle 這個設計是爲了給優質文章更高的得分, 以解決你所說的大量低質文章湊分問題.
    至於投票人的權重, 可以用類似PageRank的算法, 文章得分高的人票權更高.
    zzlettle
        25
    zzlettle  
    OP
       2012-08-20 04:42:39 +08:00
    @013231 能给个设计好的公示算法吗
    cheshirecat
        26
    cheshirecat  
       2012-08-20 08:59:41 +08:00
    @013231 这个想法不错。

    举个例子解释一下:
    用户A发了10个帖子,每个得5分。最终得分 = 5^2 + 5^2 + .... = 250。
    用户B发了1个帖子,得了20分。最终得分 = 20^2 = 400。

    可以自行调整幂次。感觉 1.7 比较适合。事实上有最优解,不过计算量比较大。
    cloudream
        27
    cloudream  
       2012-08-20 18:51:47 +08:00
    给每个作者一个adsense频道。按adsense广告收入排,如何?
    zzlettle
        28
    zzlettle  
    OP
       2012-08-20 20:16:51 +08:00
    @cloudream 你怎么知道他们有adsense账户了。收入这个东西,难度谷歌会公布出来让外人知道吗。
    zzlettle
        29
    zzlettle  
    OP
       2012-08-20 20:27:46 +08:00
    我觉得要考虑投票者的权重,等于要找出那些在某个主题上的达人。如果这个人在这个方面的文章大家都喜欢,他的听众人数可以用来当个参考。达人在他熟悉的方面的投票要高于一般人。但也不能太高,也许有的人本事高,但他们不喜欢发表文章。毕竟人民的眼光是雪亮的。
    binux
        30
    binux  
       2012-08-20 21:05:54 +08:00
    不管你用什么算法,肯定有破解办法

    要么就简单来
    计算一个周期内一个作者所有文章 获得的唯一用户的赞的总数,这表明了一个作者的作品对于读者的覆盖面
    同时一定程度去除了一个作者发大量文章的影响: 这样的作者有更大可能获得重复用户的赞

    如果你要PR,那么不应该以作者的水平当作读者的水平
    可以通过读者赞过的文章最终排名,提供给读者一个"品味"的反馈,以此作为权重
    zzlettle
        31
    zzlettle  
    OP
       2012-08-21 01:41:50 +08:00
    @binux 是一个新的思路。你这个等于是在考量喜欢这个作者文章的读者人数。但很可能你会发现相差很近。如果网站初期读者规模不大,这个差距会更小,更难衡量。其实我也不反对转摘这种形式,只要有人喜欢,小众的也要满足。
    013231
        32
    013231  
       2012-08-21 03:54:47 +08:00   ❤️ 1
    @zzlettle
    文章得分 = 所有like的用户票權之和 - 所有dislike的用户的票權之和
    用户得分 = 该用户所有正分文章文章得分的平方和 - 该用户所有負分文章文章得分的平方和
    用户票權 = 1 + log(该用户所有文章的like數 + 1)
    zzlettle
        33
    zzlettle  
    OP
       2012-08-21 08:04:33 +08:00
    @013231 能介绍下 用户票权的算法意义吗
    binux
        34
    binux  
       2012-08-21 09:54:12 +08:00
    @zzlettle 不会的,第一不是所有人每天都来,第二初次访客数量还是比较大的
    013231
        35
    013231  
       2012-08-21 14:06:34 +08:00
    @zzlettle 普通用户票權爲1. 發表過文章且獲得好評的用户具有更高票權.
    票權公式可以修改一下:
    用户票權 = 1 + log(该用户所有文章like數的平方和 + 1)
    zzlettle
        36
    zzlettle  
    OP
       2012-08-21 14:10:25 +08:00
    @binux 确实,我现在也觉得你这个思路很对。
    首先就应该定个基调,什么样的作者才叫好的作者。
    评价作者发布文章的质量好坏的原则我认为是越多的人认为好,这个才叫好。翻译过来就是大众认可的,才叫正真的好。

    就是说,如果一定时期,某个人发布的所有文章受到越多的不同的人的肯定,那他的文章是得到大部分人的肯定。就算他只发布了少量文章,但每篇文章都能得到广泛的大比率用户的肯定,这样的文章才算是高质量的。他的贡献就大,如果哪个作者每篇文章只得到很少数量的用户肯定的作者,就算他发布的数量很大,按道理来说他的贡献很小,搞不好还是发垃圾的人。

    等于我要兼顾单篇文章的投票数,如果都是写受大众喜爱的文章的作者,这样就要比他们发表的文章数量了。等于单篇文章的质量和总共的数量都要兼顾。

    这个数学公式应该怎么设计比较好了。
    zzlettle
        37
    zzlettle  
    OP
       2012-08-21 14:13:09 +08:00
    @013231 因为我还考虑到每个人的专长不同。如果这个人在汽车方面的文章得到大家的认可,他在汽车主题上的文章投票应该权重高,但他显然不应该对美食这种类型的文章投票也权重高。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1598 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:02 · PVG 01:02 · LAX 09:02 · JFK 12:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.