【推薦算法工程師技術棧系列】推薦系統--熱榜召回


排名公式

Hacker News(帖子投票)

\[score = \frac{(P-1)}{(T+2)^G} \]

\(其中P = 文章獲得的票數( -1 是去掉文章提交人的票)\)
\(T = 從文章提交至今的時間(小時)\)
\(G = 比重,news.arc里缺省值是1.8\)

Hacker News

Reddit(帖子贊踩)

\[f(t_s, y, z)=\log_{10} z+\frac{y t_{s}}{45000} \]

\(其中t_{s}是發帖時間據網站成立的時間\)
\(y 是一個符號變量,表示對文章的總體看法。如果贊成票居多,y就是 +1;如果反對票居多,y就是-1;如果贊成票和反對票相等,y就是0。\)
\(z 表示贊成票超過反對票的數量。如果贊成票少於或等於反對票,那么z就等於1。\)

這種算法的一個問題是,對於那些有爭議的文章(贊成票和反對票非常接近),它們不可能排到前列。假定同一時間有兩個帖子發表,文章A有 1 張贊成票(發帖人投的)、0張反對票,文章B有 1000 張贊成票、1000張反對票,那么A的排名會高於B,這顯然不合理。
  結論就是,Reddit 的排名,基本上由發帖時間決定,超級受歡迎的文章會排在最前面,一般性受歡迎的文章、有爭議的文章都不會很靠前。這決定了 Reddit 是一個符合大眾口味的社區,不是一個很激進、可以展示少數派想法的地方。

Stack Overflow(問題的得分、回答的數目和該問題的瀏覽次數)

Stack Overflow

1)Qviews(問題的瀏覽次數)
某個問題的瀏覽次數越多,就代表越受關注,得分也就越高。這里使用了以 10 為底的對數,用意是當訪問量越來越大,它對得分的影響將不斷變小。

2)Qscore(問題得分)和 Qanswers(回答的數量)
  首先,Qscore(問題得分)= 贊成票-反對票。如果某個問題越受到好評,排名自然應該越靠前。
  Qanswers 表示回答的數量,代表有多少人參與這個問題。這個值越大,得分將成倍放大。這里需要注意的是,如果無人回答,Qanswers 就等於0,這時 Qscore 再高也沒用,意味着再好的問題,也必須有人回答,否則進不了熱點問題排行榜。

3)Ascores(回答得分)
  一般來說,"回答"比"問題"更有意義。這一項的得分越高,就代表回答的質量越高。
  但是我感覺,簡單加總的設計還不夠全面。這里有兩個問題。首先,一個正確的回答勝過一百個無用的回答,但是,簡單加總會導致,1個得分為 100 的回答與 100 個得分為 1 的回答,總得分相同。其次,由於得分會出現負值,因此那些特別差的回答,會拉低正確回答的得分。

4)Qage(距離問題發表的時間)和 Qupdated(距離最后一個回答的時間)
  改寫一下,可以看得更清楚:
  Qage 和 Qupdated 的單位都是秒。如果一個問題的存在時間越久,或者距離上一次回答的時間越久,Qage 和 Qupdated 的值就相應增大。
  也就是說,隨着時間流逝,這兩個值都會越變越大,導致分母增大,因此總得分會越來越小。

5)總結
  Stack Overflow 熱點問題的排名,與參與度(Qviews 和 Qanswers)和質量(Qscore 和 Ascores)成正比,與時間(Qage 和 Qupdated)成反比。

備注(tzg):分母中的Qupdated是相比上面HN,Reddit的創新點,對好久不更新的回答懲罰

牛頓冷卻定律

\[T=T_{0} e^{-\alpha\left(t-t_{0}\right)} \]

  • T(t)是溫度T的關於時間t的函數。微積分知識告訴我們,溫度變化(冷卻)的速率就是溫度函數的導數T'(t)。
  • \(T_{0}\)是文章的初始溫度,比如100
  • \(t-t_{0}為距離創建時間的小時數\)
  • 常數α(α>0)表示冷卻系數;如果你想放慢"熱文排名"的更新率,"冷卻系數"就取一個較小的值,否則就取一個較大的值。

牛頓冷卻定律

威爾遜區間

\[\frac{p+\frac{1}{2 n} z_{1-\alpha / 2}^{2} \pm z_{1-\alpha / 2} \sqrt{\frac{p(1-p)}{n}+\frac{z_{1-\alpha / 2}^{2}}{4 n^{2}}}}{1+\frac{1}{n} z_{1-\alpha / 2}^{2}} \]

置信區間的實質,就是進行可信度的修正,彌補樣本量過小的影響。如果樣本多,就說明比較可信,不需要很大的修正,所以置信區間會比較窄,下限值會比較大;如果樣本少,就說明不一定可信,必須進行較大的修正,所以置信區間會比較寬,下限值會比較小。威爾遜區間很好地解決了小樣本的准確性問題。

  • \(p表示樣本的"贊成票比例"\)
  • n表示樣本的大小
  • \(z_{1-\alpha / 2}\)表示對應某個置信水平的z統計量,這是一個常數,可以通過查表或統計軟件包得到。一般情況下,在95%的置信水平下,z統計量的值為1.96。

結論:可以看到,當n的值足夠大時,這個下限值會趨向p。如果n非常小(投票人很少),這個下限值會大大小於p。實際上,起到了降低"贊成票比例"的作用,使得該項目的得分變小、排名下降。

備注(tzg) 威爾遜區間的優勢就是它的缺點,導致總體偏向頭部,而尾部的新內容因為樣本量較少所以很難排上去

IMDB算法(貝葉斯算法,電影評分)

\[WR = \frac{v}{v+m} * R + \frac{m}{v+m} * C \]

  • WR, 加權得分(weighted rating)
  • R, 該電影的用戶投票的平均得分(Rating)
  • v, 該電影的投票人數(votes)
  • m, 排名前 250 名的電影的最低投票數
  • C, 所有電影的平均得分

梅西法(BCS體育賽事)

\[X^T Xr=X^T y \]

  • \(X^TX構造為如下矩陣,對角元素就是隊伍i完成的比賽場數;i,j每有一個比賽/評價,非對角元素ij和ji位置的值減一。\)
  • \(針對X^Ty的第i個元素就是隊伍i所有比賽獲得的分差之和。\)
    這里簡單分析下\(X^TX\)是一個n階對稱方陣,也是一個對角陣,並且每一列線性相關。
    為了讓r有唯一解,往往需要給\(X^TX\)\(X^Ty\)增加一行0,表示每個隊伍所有評分總和為0.

總結:梅西法看中的是評分的分差,利用它給出不同項目的打分,進而排名。

科利法(Netflix電影評分)

\[Cr=b \]

  • 𝐶的主對角線上為隊伍i完成的比賽場數+2,i,j每有一個比賽/評價,非對角元素ij和ji位置的值減一。
  • \(b_{i}=1+0.5(w_{i}-l_{i})\),其中\(𝑤_𝑖\),\(l_𝑖\) 為獲勝場數和落敗場數。

總結:科利法以傳統的勝率模型為基礎,考慮了對手的強弱來修正補償。

馬爾可夫法(PageRank網頁排名)

雜記

1.熱榜涉及需要考慮的幾點因素

榜單的更新頻率,推新內容為主,還是推熱內容,還是兩者的折中;時間和熱度的換算

2.熱榜的幾種分類

按用戶細分,比如性別,年齡,地域,機型渠道,活躍度等等
按內容細分,比如新舊內容,長短時效,圖文視頻,內容分類等等
按行為細分,比如一段時間的評點贊轉藏關注等等

附錄

https://www.oschina.net/news/26960/ranking-base-on-vote
https://www.cnblogs.com/tbqjxjkwg/p/10836746.html
https://blog.csdn.net/feitongxunke/article/details/52077812


免責聲明!

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



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