在目前Instagram大約10億使用者中,超過一半的人每月都通過Instagram Explore來搜尋視訊、圖片、直播和各種文章。可以預見,為這些使用者構建服務基礎的推薦引擎,需要負責整理上傳到Instagram的數十億條內容,這是個工程上的大難題,尤其是這些內容還是實時生成的。
在近日發表的一篇部落格文章中,Facebook首次揭開了Explore內部的執行機制。Facebook稱,Explore是個由三部分組成分級漏斗,使用自定義查詢語言和建模技術,目前已提取了650億個特徵,每秒可以做出9000萬次模型預測。而且,這些還只是冰山一角。
在開始構建內容推薦系統之前,開發團隊已經使用大量工具進行了大規模實驗,並獲得關於使用者關注興趣的強烈訊號。研究人員使用的首款工具是IGQL,這是一種元語言,能夠提供對候選演算法進行集中聚合所需的概要資訊。
Facebook表示,經C++優化的IGQL可在不犧牲可擴充套件性的情況下最大程度地降低延遲,減少計算資源的消耗。工程師能夠以“類似Python”的方式編寫推薦演算法,並補充了帳戶嵌入元件,可以識別區域性高度相似的配置檔案,並將其作為帳戶級資訊的檢索流程的一部分。
上圖:ig2vec預測賬戶內容相似性的功能演示
Ig2vec框架將使用者與之互動的Instagram帳戶視為句子中的單詞序列,通知使用者可能與之互動的模型預測。(與隨機帳戶相比,會話中進行互動的一系列帳戶在區域性上的連貫性更高。)同時,Facebook的AI會搜尋最近鄰域檢索庫(FAISS)來查詢數百萬個帳戶進行訓練。
Facebook表示,在Explore中基於興趣對賬戶進行排名,需要預測與每個賬戶相關度最高的內容,生成輕量級排名提煉模型,該模型在將候選賬戶傳遞給更復雜的排名模型之前,會對賬戶進行預選。利用較複雜模型的特徵和輸出的候選輸入的知識,較簡單的模型會嘗試通過直接(和間接)學習來儘可能近似主排名模型。
Explorer執行包括兩個階段:候選內容生成階段(也稱為“採購”階段)和排名階段。
在生成階段,Explore會挖掘使用者以前與之互動過的帳戶,以識別感興趣的“種子帳戶”。這些賬戶只是興趣相同的帳戶的一小部分,但與“興趣相同”賬戶篩選結合使用,可以更高效地識別區域性相似的帳戶。
瞭解可能吸引使用者的帳戶是哪些,這是確定哪些內容可能會被篩選出來的第一步。IGQL允許將不同的候選內容源表示為不同的子查詢,這樣Explore就可以在多種型別的內容源中為普通人找到成千上萬的合格候選內容。
上圖所示為一個典型的Explore推薦內容源
為了確保推薦內容的安全,適合所有年齡段的使用者,系統利用訊號來過濾可能不符合要求的內容。在為每個使用者建立推薦列表之前,會由演算法進行檢測,過濾垃圾郵件和其他內容。
根據Facebook最新的社群標準執行報告的內容,這套過濾系統非常有效。在2019年第三季度,Facebook刪除了涉及自殘內容數量達到84.5萬條,其中主動檢測到79.1%,在過去四個季度中,Facebook刪除了超過99%的兒童裸體色情內容和剝削職位。
對於每個“explore”排名請求,系統將從數千個取樣樣本中選擇500個候選,並將結果送至排名階段(即上文所說的第二階段)。這個階段由三部分的基礎架構組成,旨在實現內容相關度和計算效率的平衡。
在排名階段的第一階段,濾過模型以最少的特徵數量模擬其他階段的組合。它從500個最優質和最相關的候選內容中選出1個,然後,具有完全密集特徵集的模型(第二階段)會選擇前50個候選內容。最後,另一個具有全特徵的模型將選擇25個最佳候選內容,這些候選內容將填充至“explore”網格中。
上圖:當前最終通過模型架構的圖示
有時,首次濾過模型會按照內容排名順序模仿其他兩個階段的模型。這是個修補程式,實際是一種多工,多層演算法,可以預測人們可能對相關內容做出的行為。
比如點“喜歡”或“收藏”之類的“積極”行為,以及點“不再檢視這類內容”等“消極”行為。演算法會使用值模型公式進行預測,以獲取行為的集中程度,然後加權和確定使用者行為的重要程度,比如“儲存”帖子和“喜歡”帖子的重要性孰高孰低。
為了在新內容和現有內容之間保持“豐富的平衡”,Explore團隊制定了一條規則,以促進內容多樣性:新增懲罰因子,這一規則降低了來自同一作者或種子帳戶的帖子的排名,因此使用者不會在資源管理器中看到來自同一個人或同一種子帳戶的多個帖子。
Facebook表示:“我們以代際方式根據每個排名候選內容的終值模型得分,對相關度最高的內容進行排名。”Explore的最激動人心的部分之一是尋找新的有趣方式來幫助社群發現Instagram上最有趣和最相關的內容。我們還在不斷繼續開發Instagram Explore。無論是新增新格式的媒體,還是不同主題的帖子(比如購物帖),都是很有趣的體驗。”