大家應該都有類似的經驗:跟朋友聊天說你想要去哪裡玩或是想要買東西,之後Facebook就會推一個類似的廣告給你。這個東西不只是出現在FB,也有很多人在使用淘寶的時候發生了類似的故事。
所以Facebook到底是怎麼知道我們喜歡甚麼東西的呢?這背後其實屬於一個Ranking System(排序系統),也是推薦演算法的其中一個類目。順帶一提,這也是我當初面試Facebook時的ML Design Interview題目,如果有計畫面試Facebook ML工程師的同學可以參考一下這篇。
這篇文章會分為幾個段落:
- 推薦系統的經典演算法
- EdgeRank: Facebook早期的推薦系統
- 2021 的 Facebook 推薦系統
- 用實驗驗證 Facebook 推薦演算法是否包含竊聽內容
推薦演算法 Recommendation Algorithm
推薦演算法是一種預測系統,預測受推薦的用戶(User)對被推薦內容(Item)的喜好長度或偏好程度。在SNS還在通訊軟體時代時,推薦演算法就已經被大量用在商品推薦上。
目前的推薦演算法總共可以分為以下幾種:
- Collaborative filtering:協同過濾
- Content-based filtering:基於內容過濾
- Hybrid recommender systems:混合推薦方法
Collaborative Filtering 協同過濾
協同過濾是一種很合直覺的推薦方法,可以分為2種:User-based與Item-based。簡而言之,User-based的推薦邏輯是「推薦給相似的人」,Item-based的推薦邏輯則是「推薦相似的東西」。
User-based:推薦你跟你相似的User喜歡的東西。我們只要能夠評估User之間相似度,就可以簡單地用彼此喜歡的東西來互相推薦,比方說:
如果UserA與UserB的相似度高,那麼演算法就更可能把UserB喜歡的東西推薦給UserA。
Item-based:喜歡Item A的人,通常也會喜歡Item B。與上面類似,我們要計算的是Item之間的相似度。最簡單的計算公式如下:
只要ItemA與ItemB相關性夠高,如果有User喜歡ItemA,就更可能把ItemB也推薦給他。
總結一下,協同過濾的方法主要著重在User與Item之間的相似度關係,而相似度關係可由一連串的「User X喜歡Item Y」所表示。但是對User與Item本身的屬性其實並不是很關心。
協同過濾面對一個很大的問題:cold-start(冷啟動)。對於那些比較曝光度低的Item,無論是Item-based或是User-based都不會把這個Item推薦給你。而且很可能經過很長的時間,這個Item依然還是冷門的。順帶一提,這種冷門Item被在搜索/推薦領域被稱為long-tail Item。
Content-based Filtering 基於內容過濾
Content-based的方法主要會關注Content:「對Item的具體描述」。
Content可以說是Item的內容,以衣服類目在電商平台為例,Content可以包含各级類目(日用品-衣服-上衣-帽T)、價格、風格(運動、時尚)等等。Content也可以說是一組標籤,用以描述這個Item的切確內容,也可以用來發覺與這個Item相似的內容。
基於機器學習的發展,甚至有很多以前不能被提取的Content也可以被提取出來了,例如圖片。從圖片中提取特徵的問題被稱作Image Representation:如何提取一個高維度的向量(又被稱為Embedding)來描述一張圖,同時 Embedding 的距離可以直接視為相似度。這種方法在人臉識別裡面廣泛被使用。
去年AI大神何愷明甚至推出了無監督學習Sim-CLR,可以不須標注提取Image Representation。除了圖片,文字也可以拿來提取出關鍵訊息。例如從商品描述中提取關鍵訊息。例如Keyword Extraction, Named Entity Recognition等等。
有了各種Content訊息之後,就可以利用簡單的機器學習方法,例如SVM或ANN訓練一個簡單的回歸網路,來給予每個Item一個Rank值,Rank值越高的則越值得被推薦。這種方法也不存在冷啟動的問題。
順便提供幾個GitHub,Rapid Automatic Keyword Extraction:
還有無監督視覺特徵 SimCLRv2:
Hybrid Recommender Systems 混合推薦方法
大部分的系統不會採用某一種特定的方法,而是把User-Based, Item-based, Content-based等等方法都組合起來使用,這種就是混合推薦方法。例如Facebook早期使用的EdgeRank就是其中一種。
EdgeRank: Facebook 的早期推薦系統
EdgeRank是Facebook在2013以前的推薦系統。EdgeRank的邏輯很簡單,給予一個新的Post一個加權分數,分數越高的就更值得被推在上面。這個公式包含三個因素:Affinity, Weight, Recency:
- Affinity指的是用戶與其他人的關係,Affinity越高的Post會越容易被看見。這個數值對每個用戶都是不同的。比方說,如果你與某個好友設定為家人或男女朋友,那們你們的Affinity可能會更高。Affinity也會參考你的過往行為,如果你常常跟某個好友/粉專常常留言或按讚,這個好友/粉專的Affinity也會提高。
- Weight指的是這則Post本身的重要性。重要性可以由以往這則Post的回饋程度來看,例如:讚數、閱覽數、分享數。對於大部分的User來說,同一個Post的Weight都是相同的。
- Recency指的是時間的加權。越新發出的Post會擁有較高的Recency,並且隨著時間慢慢減少。這個權重可以確保新的Post有更高的機率會被其他人看見。
EdgeRank的消失
隨著Facebook不斷的改版更新,還有用戶習慣不斷地更新,開始出現了很多個維度的問題是EdgeRank沒有考慮在內的,例如Post的內容。現在的Post包含了文章、圖片、影片、連結,而大部分的用戶對於不同的Post類型也有不同的喜好度。例如圖片類型的Post更容易被用戶觀看,而喜歡連結的用戶也會點擊大部分的的Post。
2021的 Facebook 推薦系統
現在Facebook推薦系統變得更複雜,而且網路上查到每篇文章說的都不太一樣。這邊我以Tech@Facebook的官方文章加上自己的理解為主。
根據Tech@Facebook,整個Ranking分為三個階段:
- Inventory:就是蒐集用戶網路裡面所有的New’s Feed。這部分包含很多,例如朋友發的文章、關注的粉專等等。
- Inventory Processes:這部分是由Inventory的內容轉化而成的。我們之前在Content-based Filter提到了幾種提取Content的方法,包含文章、圖片、影片都能提取。其中不同類型的Post也有不同的提取方法,例如圖片可以分為小孩、寵物、風景等等,而文章可分為遊記、食譜、心情文等等。也因為不同類型的Post需要不同的機器學習模型來提取特徵,因此這裡面採用的方法在圖中被標示為Multitask Model。
- Contextual Pass:會經過兩個步驟來決定每個Post的Ranking。首先會根據用戶的歷史習慣來評估Inventory中甚麼內容是很可能與用戶產生互動的,例如:點讚、留言、分享等。如果演算法認為這個Post你不會有任何回應,這個Post很可能會被移除。之後,系統只會留下Top-N的Post來做Ranking給分,這部分的給分會考量到你與發文者的互動程度、Post的熱門程度、並且加入的Inventory Process中提取的內容特徵,來提供更精細的Ranking。這兩個步驟是推薦搜索領域的通用步驟,在中國業內又被分別稱為「召回」與「排序」。
在Ranking問題裡面,這些問題都屬於監督學習的一部份。因為我們可以把用戶的歷史紀錄拿來做為訓練Data,並且預測對於某個Post對用戶的重要程度。詳細可以觀看Facebook Engineer的影片描述。
Facebook的推薦算法會包含監聽內容嗎?
2018四月公聽會的時候,Mark Zuckerberg直接否定過這個說法,並說這是陰謀論。更早在2016的時候,Facebook就發表過文章來駁斥這個說法:
當然,作為一個正常的CEO是不可能會說出自己的APP具有監聽功能。因此坊間也民間機構做了比較客觀的實驗,比方雲端資安公司Wendera:
他們做的實驗很簡單:準備兩個房間,一個24小時撥放Youtube的寵物食品撥放清單的「語音房」,另一個則是對照組「安靜房」 。這個實驗持續三天,並且持續觀察電量的消耗以及雲端傳送的資料大小。除了Facebook,他們同時測試了IG, Chrome, SnapChat, Youtube, Amazon。
實驗做完後,沒有任何一個App出現寵物食品相關的廣告或資訊。同時這幾個App在iOS與Android上面的雲端傳輸消耗都小於語音助理(Hey Siri, OK Google)的消耗。電量消耗上,語音房與安靜房的消耗差距也是微乎其微。
小結
推薦系統是一套很複雜的體系,其中也包含了各種類型的內容感知,例如圖像、影片、文章等等。雖然很複雜,但是Tech@Facebook也提到了他們並不是採用一個超強的機器學習模型來預測Ranking,而是將問題拆成了很多小的階段並且分別解決。
事實上,在阿里內部也跟一些負責廣告推薦算法的人聊過,推薦算法通常不會使用特別複雜的模型,而是在特徵提取上下功夫。實務上,提取特徵的部分可能會涉及好幾個不同的模型與策略,但是最後的Ranking方法往往是相對簡單的模型,例如MLP。
這其中的原因可能有兩個:第一,Garbage in garbage out,更好的特徵提取往往比改善模型有效;第二,推薦系統是線上比較大量且高頻的計算系統,不適合佈署過重的模型,否則可能會導致Server爆炸或是反應過慢,也會導致更新維護困難。