[本文鏈接:http://www.cnblogs.com/breezedeus/archive/2012/08/25/2655815.html,轉載請注明出處]
Facebook的新朋友關系中有92%來自於朋友的朋友(FOFs), 來自於Facebook的數據科學家Lars Backstrom在
eswc2011的talk
中介紹了他們是如何對FOFs進行排序,並最終為用戶產生朋友推薦的全過程。上不了videolectures.net的童鞋也可以在
http://vdisk.weibo.com/s/b9GAF
下載對應的slides。
下面這幅圖摘自演講slides,是整個FOFs推薦系統的一個流程圖。例如系統要為用戶Lars最終產生2個朋友推薦,那么操作步驟如下:
1. 首先獲得Lars的所有FoFs,比如包括Greg,Shelly等。
2. 然后針對Lars與每個FoF,獲得一些相關屬性,比如Lars與此FOF各自的性別、年齡,以及他們的共同朋友數量等等。
3. 利用上面獲得的屬性訓練模型(如Bagged Decision Trees,其訓練數據來自於之前用戶對推薦結果的反饋),並最終獲得Lars對每個FOF的分數,比如Score(Lars, Greg)=0.045,Score(Lars, Shelly)=0.021。這里的訓練因為數據量巨大,它的更新周期會比較長(如2天更新一次)。這里獲得的分數會被保存下來,作為一個特征被用在接下來的較輕量級的實時更新的重排序模型當中。
4. 在每次為用戶展示了一些候選推薦后,下次為此用戶的推薦就會考慮到此次展示的“后果”,比如直覺上對上次展示過的候選人要降低其排序分數等。所以在每次展示后,系統會利用一些簡單的特征(比如上一步獲得的分數值Score(Lars, Greg)=0.045,展示次數Impressions(Lars, Greg)=3,Greg的朋友數量等),使用Logistic Regression模型對候選人進行重排序。這個talk里沒有細講到底是每次展示后都重新訓練模型,還是只是重新獲得預測值;以及每次是對所有候選人進行重排序,還是只對上一步的TopN進行重排。如何在這些可能的選擇中進行選擇可能依賴於我們真實應用的需求,以及我們系統所能承受的計算量。Anyway,經過這一步的重排序,系統最終獲得了對Lars的Top2推薦:)。
5. 當然,用戶對推薦結果的反饋數據又會被用在第3步與第4步中的模型訓練當中,見圖中的虛線。