基於投票的熱門計數算法策略


類似基於投票的熱門計數算法普遍應用在熱門文章,熱門評論等場景中,
典型的比如網易和今日頭條的評論區,國外比如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.計算策略

針對上面的幾個維度,可以分別整理對排序結果有正面和負面影響的因素,可以使用乘法和加法結合,通過設置不同的因子來調節權重。
 
 
內容參考:
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM