Facebook Edgerank 的演算法是什麼?


(目前可以公開的情報)

Edgerank 是幾年前外界對Facebook Newsfeed上的新鮮事排序演算法的稱呼。

至於是怎麼算的,這其實可以出成一道面試題,不妨以知乎為例。題目就是,你覺得應如何對知乎的新鮮事排序?

具體問題描述:
知乎用戶劉看山,他關注了100個人,30個專欄,10個話題。在他打開知乎的一瞬間,將有100個最新動態等著他,你要怎麼給這100個新鮮事排序?
當然,作為知乎官方,你掌握著幾乎所有知乎用戶的信息,包括劉看山的。他經常給誰點贊,經常關注哪個話題下面的問題,這些你都知道。
哦,對了,你只有50毫秒時間。超過50毫秒劉看山就會不耐煩了。

你該怎麼辦?

0. 這些新鮮事對用戶而言質量各有高低
如果你讓劉看山自己看一遍這100個新鮮事,他大概能說出自己更喜歡哪個,更不喜歡哪個。比如,他更喜歡張佳瑋的答案,張公子的回答他基本都會點開看。他不太喜歡抖機靈的回答,即使贊同數很高他也只是掃一眼就過去。
我們要做的,就是用模型化的語言描述這件事。

1. 確定一個變數作為優化目標
這個變數,要能反映新鮮事的質量。一組常用的變數就是互動數:點開,贊同,感謝。好的新鮮事應該能吸引到更多的互動,這樣的新鮮事也更應該排在前面。
當然另一方面,用什麼變數來定義成功其實不是一個簡單的問題。Twitter的創始人之一 Evan Williams 就曾發文警告用單一變數定義成功的危險性。我們在這裡也可以考慮其他信號,比如說,被很多用戶點選「沒有幫助」的新鮮事很可能質量不高,又或者用戶花了很長時間在上面的新鮮事很可能質量不錯。於是,「沒有幫助」數和閱讀時長也可以成為我們的優化目標之一。

2. 預測用戶在哪個新鮮事上更可能觸發我們的目標變數
或者說,在哪個新鮮事上劉看山更可能點開/贊同/收藏/分享/長時間閱讀,在哪個新鮮事上更可能選不再顯示/沒有幫助,前者要排高點,後者排低點。
這就是機器學習(Machine Learning)派上用場的時候了。具體用什麼演算法是個開放性問題。可以是Logistic Regression,可以是SVM,還可以是別的,各有各的特點。(真要是做ML的面試題,這裡會和選手展開討論一下)
演算法不重要,那什麼重要?Feature。這就是知乎資料庫里的那些數據的作用了。劉看山之前贊過張公子幾次,這個回答被總共看了幾次並贊了幾次,這些都是feature。從歷史看未來。Feature是強大的模型的關鍵。


3. 故事還沒有結束
學術上,這個模型已經差不多成型了。然而在實際應用中,很多問題還應付不了。比如說:

  • 劉看山看到張公子贊了別人的一個回答,大概讀了下,沒意思,就過去了。後來劉看山所關注的張小北也贊了這個回答。這時候這個新鮮事要怎麼排序?
  • 劉看山出遠門一周沒上知乎,回來一上知乎1000個新鮮事可以排序。好不容易排完了,劉看山看了10個就關瀏覽器了。一個小時之後劉看山再上知乎的時候,之前剩下的990個新鮮事你要怎麼辦?

你會發現,這個問題,與其說是演算法,不如說是涉及產品本身的決策。所以說,好的ranking engineer都是半個PM (還有半個Data Scientist和半個Growth Hacker)。


樓上有親歷者在回答, 也順便貼下前幾年自己研究時寫的一點東西: 亂彈 EdgeRank


Feed/ranking 內部似乎不叫edge rank。內部工具迭代比較快,需求比較多,可獲取的用戶數據和方法很牛逼,計算流程很先進,計算器很強大。當然,基本理念就是上面所說的ML的方法罷了。我相信提取feature 做變換然後放入trainer 中regression , 最後排序這種事情學ML的都知道一點。但如何快速穩定可擴展的做到這一點,如何搞achitecture倒是很難。也有一些專門的數學家討論比較牛逼的演算法,做一做實驗,最後的改進比較有限。最好的總是最簡單的~


這個有意思,要好好想想


&<集體智慧編程&>&<推薦系統&>&<推薦系統實踐&>

都在這三本書里了


圖有node有edge, 儂想看啥汝不知。
內容用戶feature牽,中有edge相鉤連。
edge自當有權重,communicability咋算隨便弄。

貴乎大言談rank, u know nothing about my interest.
search engine做不好,其他網站少link.
what i read is what u show me, what u learn from it is all about artifact.

編不下去了。。。上面也是瞎講的。。。
我不知道edgerank是啥,這個是根據一樓的回答猜的。。。輕噴。。。


Facebook edgerank包含三種:
1,親密度:大概是指用戶與其他人的互動關係,互動越多親密度越大,在信息流中會展示更多的與其相關的內容。
2,邊緣權重:包含兩種:1,互動因素。2,內容因素。
針對不同的因素,Facebook會根據一定時間的監測數據進行一個評級,哪個評級高,所展示的信息流排名就越高
3,時間衰減:隨著時間的推移,人們對某項事物或人物,它的話題數就越少,Facebook就會降低他們的排名,將新熱點呈現給大家。
此文轉載於眾幫跨境公眾號,關註:zhongbanger,專註海外營銷


推薦閱讀:

對網傳一道詭異的邏輯問題的解答表示強烈質疑!?
DES 演算法的設計思路是什麼?
有關餘數的簡單方法,不知道是新發現還是已知?
初級程序員,該如何提高?
理論上可以通過除窮舉法以外的方法破解不可逆的加密演算法嗎?

TAG:Facebook | 演算法 |