基于投票的热门计数算法策略

类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中,

典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。

 

一.Hacker News的排序算法

 

Hacker News是一个主题社区,用户可以为主题投票,根据得票数,系统自动统计出热门文章排行榜。

同时主题发表时间也会对排名产生影响,新发表的主题比旧的主题更容易得到好的排名。

 

Hacker News的排名算法是这样实现的:

 

(p – 1) / (t + 2)^G

其中,

  P表示帖子的得票数,减去1是为了忽略发帖人的投票。

  T表示距离发帖的时间(单位为小时),加上2是为了防止最新的帖子导致分母过小(之所以选择2,可能是因为从原始文章出现在其他网站,到转贴至Hacker News,平均需要两个小时)。

  G表示"重力因子"(gravityth power),即将帖子排名往下拉的力量,默认值为1.8。

 

从这个公式来看,决定帖子排名有三个因素:

第一个因素是得票数P。

在其他条件不变的情况下,得票越多,排名越高。

 

第二个因素是距离发帖的时间T。

在其他条件不变的情况下,越是新发表的帖子,排名越高。或者说,一个帖子的排名,会随着时间不断下降。

 

第三个因素是因子G。

它的数值大小决定了排名随时间下降的速度。

G值越大,排名下降得越快,意味着排行榜的更新速度越快。

 

二.Reddit的排序算法

 

Reddit 是Digg类型网站,国内类似的社区有花瓣网等。

和Hacker News不同,和Reddit允许用户投反对票,

算法如下图:

 

 

1.文章提交时间对排名的影响

 

文章提交时间对排名的影响可以总结为以下几点:

提交时间对排名影响巨大,越新的文章排名会越高

文章排名得分不会随时间的流逝而降低,但新文章会比老文章获得更高的分。这跟Hacker News的排名算法有很大区别,它的得分会随时间流逝而降低。

下图表现的是具有相同支持和反对的票数,但时间不同的文章的排名得分情况:

 

 

2.使用对数改变不同范围内的权重计算值

 

Reddit在算法中使用了对数函数来强化前几票的份量:

前10个赞成票的份量和后面100个的份量,以及再后面1000票的份量是相同的,以此类推

下面是效果图:

 

 

3.反对票对排名的影响

Reddit对反对票使用了简单的加减方法,这种计算方式实际上是有问题的,

一篇文章的的’得分‘定义如下:

up_votes – down_votes

最后的结果就是类似下图:

 

这种计算方式会对既有很多赞成票,又有很多反对票的文章(比如很有争议的文章)带来重大影响,它们可能会比那些只有很少赞成票的文章获得分数更低。

 

 

三.典型的文章/评论等投票计数算法

 

可以考虑使用类似规则引擎的机制去计算权重,在项目中封装独立的模块用于计算热门评论的加权得分,得到列表展现顺序。

 

1.影响列表排序结果的因素

 

(1)需要计算的维度

发布时间,点赞数,评论数,内容丰富度(如商品评论等)

 

(2)可以扩展引入计算的维度

用户权重(星级用户/认证用户等)

 

2.不同权重对展现结果的影响

 

(1)发表时间

最新的发表的主题的权重大于一段时间以前发表的内容,这个维度的影响可以通过改变对应的时间因素上的因子等调节。

 

(2)点赞和点踩数目

点赞数越多,位置越靠前,点踩数越多,排序位置越靠后,同时不同时间间隔的点赞操作会占权重不同,比如五分钟以内的10个点赞大于一小时以内的20条点赞。

 

(3)评论数目及最近一段时间的评论活跃度

评论数目越多,位置越靠前,同时近期被评论越多,活跃的主题占据的位置会越靠前。

 

(4)内容丰富度

其他纬度类似的情况下,内容越丰富,权重应该越高。

 

3.计算策略

 

针对上面的几个维度,可以分别整理对排序结果有正面和负面影响的因素,可以使用乘法和加法结合,通过设置不同的因子来调节权重。

 

内容参考:

Hacker News和Reddit的算法:

https://moz.com/blog/reddit-stumbleupon-delicious-and-hacker-news-algorithms-exposed

Reddit排名算法工作原理

http://www.vaikan.com/how-reddit-ranking-algorithms-work/

时间: 2025-01-26 20:05:20

基于投票的热门计数算法策略的相关文章

如何实现基于C4.5的Adaboost算法

问题描述 如何实现基于C4.5的Adaboost算法 现有的Adaboost算法只能对二类分类,而基于决策树的集成如何更新权重 解决方案 参考:http://www.docin.com/p-595686917.html

IBM Java Toolbox for i实现三种基于IBM i的身份验证策略

对于从事IBM i平台的应用开发者而言,用户身份验证是保证程序安全性的最基本功能之一.作为访问与操 纵IBM i平台上数据与资源的Java API,IBM Java Toolbox for i从编程的角度,实现了各种用户身份验证策 略,可简单.高效地解决程序的安全性问题.本文将从Web应用的角度,结合具体样例,指导IBM i Web应用程 序开发者如何使用IBM Java Toolbox for i实现不同的身份验证策略.有关IBM Java Toolbox for i的基础知 识,请参见另一篇

基于先验方向的pca算法

问题描述 基于先验方向的pca算法 假如存在一个已知的方向,在其正交方向寻找一个能最大程度反映原有信息的方向,怎么实现?

matlab仿真程序,基于均匀线阵的music算法。随这snr的变化rsme情况

问题描述 matlab仿真程序,基于均匀线阵的music算法.随这snr的变化rsme情况 clear all clc tic %%%%参数设定 M=8; N=128; doa=[0 20 40]/180*pi; P=length(doa); f0=1000; c=1500; lambda=c/f0;d=lambda/2; snr=-10:2:30; PP=zeros(length(snr),361); %%%%%%%阵列流型A %%%%%%% for k=1:P A(:,k)=exp(-j*2

matlab 编程 ...-求个有效的基于matlab 的去雾算法,谢谢大神了!

问题描述 求个有效的基于matlab 的去雾算法,谢谢大神了! 基于matlab 的去雾算法,毕设做雾霾天气下交通标志的检测,去雾算法总是做不好,希望大神可以帮帮忙啊 解决方案 求matlab大神的帮助,拜托拜托 解决方案二: http://download.csdn.net/detail/fih21/9527777

层次聚类-道路网络中基于边的静态聚类算法的C语言实现

问题描述 道路网络中基于边的静态聚类算法的C语言实现 如何表示多条边以及边与边交点,然后就是聚类算法的实现过程,最好是single-link实现

有关基于项目的协同过滤算法的预测值计算问题

问题描述 有关基于项目的协同过滤算法的预测值计算问题 有个疑问,比如项目有100个最近邻居,但是目标用户对这100个邻居中的极少部分有评分,比如只对5个项目有评分,但是大部分论文中计算预测值时是这么计算的:,我将未评分值先简单置为0,那么分母就是所有相似度之和,分子却只是那5个目标用户有评分项的加权和,结果通常很小,与实际值相差很大,我想那个分母是不是只用包括最近邻居中用户已评分项的相似度? 解决方案 我刚计算预测值时分母只累加了已评分项的相似度,邻居300左右时MAE值达到最优值为0.75,正

基于物品的协同过滤算法(ItemCF)

最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法-基于物品的协同过滤算法. ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通过分析用户的行为记录来计算用户的相似度.该算法认为物品A和物品B相似的依据是因为喜欢物品A的用户也喜欢物品B. 基于物品的协同过滤算法实现步骤: 1.计算物品之间的相似度 2.根据物品的相似度和用户的历史行为记录给用户生成推荐列表 下面我们一起来看一下这两部是如何实现的: 一.计算物品之间的相似度

基于粒子群和模拟退火算法的混合算法,在Matlab2015中数据量化怎么实现?

问题描述 基于粒子群和模拟退火算法的混合算法,在Matlab2015中数据量化怎么实现? 基于粒子群和模拟退火算法的混合算法,在Matlab2015中数据量化怎么实现? 解决方案 http://www.docin.com/p-679137566.html