為什麼 IG 總是知道你要什麼?套牢 10 億月活躍用戶的推薦系統是關鍵推手

0
563
圖片來源:Pixabay from Pexels

近日,擁有 10 億月活用戶的 Instagram 分享了其內容推薦系統的關鍵內容,包括:Explore 基礎構建模塊的開發、元語言 IGQL 工具、Explore 系統框架等。

據官方數據,超過一半的用戶每月都會透過 Instagram Explore 來搜尋影片、圖片、直播和各種文章。那麽,如何從億級規模的實時推薦數據中選出最適合某個用戶的媒體內容呢?針對這樣的挑戰, Instagram 利用機器學習做了這樣的思考與操作。

拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
圖片來源:Facebook AI

Explore 基礎構建模塊的開發

在構建處理 Instagram 上每天上傳的大量照片和影片的推薦引擎時,我們需要滿足 3 個重要需求:

  • 大規模快速實驗的能力;
  • 獲得用戶興趣範圍內的更多訊息;
  • 一種高計算效率的方法來確保推薦建議既高質又新鮮(具備時效性);

因此,為了解決這 3 個需求,我們開發了一些基本工具,而這些技術正是實現最終推薦系統的關鍵。

工具一:運用 IGQL 實現快速叠代

構建最優推薦算法和技術是 ML 社區正在進行的一類研究。根據任務的不同,選擇合適系統的過程可能會有很大的不同。例如:一種算法可以有效地識別用戶的長期興趣,而另一種算法則可以更好地根據近期瀏覽內容進行推薦與建議。

圖片來源:雷鋒網

技術團隊透過反覆使用不同的算法,發現需要一種方法,既能讓我們有效地嘗試新的想法,又能輕鬆地將有潛力的想法應用到大規模系統中,而不必擔心 CPU 和內存使用之類計算資源的影響。

因此,我們需要一種定制的特定於領域的元語言,它能夠提供正確的抽象級別,並將一些候選算法進行集中聚合。

IGQL 正是為解決這個問題而創建的工具,它是一種專門用於在推薦系統中檢索候選對象的領域特定語言。經 C++優化後,IGQL 可在不犧牲可擴展性的情況下最大程度地降低延遲,從而減少計算資源消耗

IGQL 是經過靜態驗證的高級語言,工程師能夠以 Python 的方式來編寫推薦算法,並在 C++中快速而高效地運行它。除此之外,它還具有可擴展性和易用性。

user
.let(seed_id=user_id)
.liked(max_num_to_retrieve=30)
.account_nn(embedding_config=default)
.posted_media(max_media_per_account=10)
.filter(non_recommendable_model_threshold=0.2)
.rank(ranking_model=default)
.diversify_by(seed_id, method=round_robin)

在上面的代碼示例中,我們可以看到 IGQL 能夠有效提供高可讀性的語言,即使對於沒有廣泛使用該語言的工程師也能一目瞭然。

該工具有助於以一種原則性的方式組合多個推薦階段和算法。例如,我們可以在查詢中使用組合規則來輸出多個子查詢輸出的加權混合,從而優化候選生成器的集合。透過調整權重,我們就可以找到最佳用戶體驗的組合。

IGQL 使執行複雜推薦系統中常見的任務變得簡單,例如:構建組合規則的嵌套樹。IGQL 允許工程師更關注於推薦背後的機器學習和業務邏輯,而不是後台工作;例如:為每個查詢獲取正確數量的候選項。

該方法還提供了高度的代碼可重用性;例如:使用排序器就像為 IGQL 查詢添加單行規則一樣簡單。在多個地方添加它也很簡單,例如:帳戶排序和這些帳戶發布的媒體排序。

工具二:個性化賬戶的個性化媒體排序嵌入

人們在 Instagram 上公開分享數以十億計的高質量媒體內容,這些內容都屬於 Explore 上的合格內容。對於 Explore 中的眾多感興趣的社區來說,保持一個清晰且不斷發展的目錄樣式分類也是一個挑戰。因為社區的主題很多,從阿拉伯書法到模型訓練再到 slime 的都有,所以基於內容的模型很難理解如此多樣的興趣社區。

由於 Instagram 擁有大量基於特定主題的關注興趣的賬戶,比如:Devon rex cats 或 vintage tractors;因此我們創建了一個檢索通道。該通道關注的是賬戶級別的訊息,而不是媒體級別的訊息。

圖片來源:雷鋒網

透過構建帳戶嵌入,我們能夠更有效地識別哪些帳戶在局部上彼此相似。我們使用類似 word2vec 的嵌入框架 Ig2vec 來推斷帳戶嵌入。通常,word2vec 嵌入框架會根據單詞在訓練語料庫中句子的上下文來學習單詞的表示。Ig2vec 將用戶與之交互的帳戶 id(例如:來自用戶喜歡的帳戶媒體)視為句子中的一個單詞序列。

透過應用與 word2vec 中的類似技術,我們可以預測一個人在應用程序的給定會話中可能與之交互的帳戶。如果一個人在同一個會話中與一系列帳戶交互,那麽與來自不同 Instagram 帳戶範圍的隨機帳戶序列相比,它更有可能是局部一致的。這有助於我們識別出與此相關的賬戶。

我們定義了兩個帳戶之間的距離度量──嵌入訓練中使用的同一個帳戶──通常是餘弦距離或點積。基於此,我們做了一個 KNN 查找,以找到嵌入中任何帳戶的局部相似帳戶。我們的嵌入覆蓋了數百萬個賬戶,並使用 Facebook 最先進的近鄰檢索引擎 FAISS 作為支持檢索的基礎設施。

拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
Ig2vec 預測賬戶內容相似性的功能演示。
圖片來源:Facebook AI

對於每一個版本的嵌入,我們訓練一個僅根據嵌入預測一組帳戶主題的分類器;透過將預測主題與保留集中帳戶的人工標記主題進行比較,我們就可以評估嵌入如何捕獲主題相似度。

檢索與某個特定用戶以前感興趣帳戶所類似的帳戶,有助於我們以一種簡單而有效的方式為每個人聚焦到一個更小的、個性化的排序清單。因此,我們能夠利用最先進和計算密集型的機器學習模型為每個 Instagram 社區成員服務。(在 IG 經營個人品牌,未必就得出賣靈魂!5個不討人厭的自媒體行銷法

工具三:蒸餾模型預選相關候選項

在我們用 Ig2vec 去根據個人興趣確定最相關的賬戶之後,我們需要一種方式對這些賬戶進行排序,使其對於每個人都充滿新鮮感與趣味性。這需要在每個人每次滾動 Explore 頁面時預測出最相關的媒體。

我們透過一個深層神經網絡,對每一個滾動操作評估 500 個媒體片段。雖然這需要大量的資源;但當其對每個用戶評估越多,我們就越有可能從這些的內容中找到最好的、最個性化的媒體推薦。為了能夠最大化每個排序請求的媒體數量,我們引入了一個排序蒸餾模型,幫助在使用更複雜的排序模型之前對候選項進行重新排序。

拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
排序問題的排序蒸餾。
圖片來源:雷鋒網

該方法是透過訓練一個超輕量級的模型,從中學習並使其盡量接近主要排序模型。我們從更複雜的排序模型中記錄其所具有的特徵和輸出候選項;然後用有限的特徵集和簡單的神經網絡模型結構對蒸餾模型進行訓練以複製結果。其目標函數則是優化 NDCG 排序(排序質量的一種度量)損失超過主要排序模型的輸出;然後使用蒸餾模型中排序靠前的推薦作為後期高性能排序模型的排序候選。

透過建立蒸餾模型的模擬行為,可以最大限度地減少對多個參數的調整以及在不同排序階段維護多個模型的需要。利用這一技術,我們可以有效地評估一組更大的媒體集,以便在控制計算資源的同時,找到在每個排序請求中最相關的媒體內容。

如何構建 Explore?

在創建了便於實驗、有效地識別人們的興趣並產生有效和相關的預測的關鍵構建模塊之後,我們必須在生產中將這些系統結合起來。利用 IGQL、賬戶嵌入和蒸餾模型技術,我們將 Explore 推薦系統分為兩個主要階段:候選生成階段(也稱為尋源階段)和排序階段

拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
Explore 系統框架。
圖片來源:Facebook AI

階段一:候選生成階段

首先,我們利用人們以前在 Instagram 上互動過的賬戶(例如:喜歡或收藏了某個賬戶中的媒體內容)來識別人們可能感興趣的其他賬戶,我們稱之為種子賬戶(種子賬戶通常只是 Instagram 上類似或相同興趣賬戶的一小部分)。

然後,我們使用帳戶嵌入技術來識別類似於種子帳戶的其它帳戶;最後根據這些帳戶,我們就可以找到這些帳戶發布或參與的媒體內容。

拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
該圖展示了 Instagram Explore 的一個典型推薦內容源。
圖片來源:Facebook AI

人們在 Instagram 上接觸賬戶和媒體的方式有很多種(例如:關注、喜歡、評論、保存和分享)。也有不同的媒體類型(例如:照片、影片、故事和直播),這意味著我們可以使用類似的方案來構建各種來源。利用 IGQL 會使得這個過程變得非常簡單──不同的候選源只需要表示為不同的 IGQL 子查詢即可。

透過不同類型的訊息來源,我們能夠找到成千上萬的符合條件的候選項。為了確保推薦的內容既安全又適合許多年齡段的全球探索社區,我們使用了各種標記來篩選出我們可以確定為不符合推薦條件的內容,然後再為每個人建立符合條件的媒體推薦。除了阻止可能違反規則的內容和錯誤訊息外,我們還利用機器學習系統來幫助檢測和過濾垃圾郵件等內容。

然後,對於每一個排序請求,我們為個人識別出了數千個符合條件的媒體,並從符合條件的推薦中抽取 500 個候選項,然後將候選項發送到下游的排序階段

階段二:候選項排序

當有 500 名候選項可供排序時,我們使用了 3 階排序基礎模結構來幫助平衡排序相關性和計算效率之間的權重。3 個排序階段如下:

  • 第一階段:蒸餾模型模仿其他兩個階段的組合,具有最小的特徵;從 500 個候選項中選出 150 個質量最高、最相關的候選項;
  • 第二階段:利用具有完整的稠密特徵集的輕量級神經網絡模型,再從第一階段的 150 個候選項中選擇出符合條件的 50 個最高質量和最相關的候選項;
  • 第三階段:利用具有完整的稠密和稀疏特徵的深度神經網絡模型,從第二階段的 50 個候選項中選出 25 個質量最高、最相關的候選項。
拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
用來平衡排序相關性和計算效率之間的權衡的三階排序基礎模結構。
圖片來源:Facebook AI

如果第一階段的蒸餾模型按照排序順序模仿其他兩個階段,我們如何確定下兩個階段中最相關的內容呢?

因此,我們選擇預測人們在每個媒體上採取的個人行為,無論是像「喜歡」和「收藏」這樣的積極行為,還是像「少看這樣的貼文」(SFPLT)這樣的消極行為;均使用多任務多標籤(MTML)的神經網絡來預測這些事件,因為共享多層感知器(MLP)允許我們對來自不同行為的共同信號進行捕捉。

拥有 10 亿月活跃用户的 Instagram 是怎么设计内容推荐系统的?
當前推薦模型架構示例。
圖片來源:Facebook AI

我們使用一個算術公式(即值模型)來結合對不同事件的預測,以捕獲不同信號的突出性,從而決定內容是否相關。具體而言,即使用一個加權的預測值之和,比如:[w_likeP*(like)+w_save*P(save)-w_negative_action*P(negative action)]。如果我們認為一個人在 Explore 中保存一個貼文的重要性高於他們喜歡的貼文,那麽「保存」行為的權重應該更高。

Explore 也利用了用戶新興趣與過去興趣之間的平衡關係,在價值模型中加入一個簡單的啟發式規則,以提高內容的多樣性。具體而言,模型透過添加「懲罰」因子來降低來自同一媒體或同一種子帳戶貼文的排序,因此在 Explore 推薦中,很難看到來自同一個人或同一種子帳戶的多個貼文;而且這種推薦方式會隨著你遇到更多來自同一作者的貼文而加強。(如何在 Instagram 行銷高價產品?媒體公司社長:「CREEP」是關鍵字

我們根據每個排序候選項的最終價值模型得分,以叠代的方式對最相關的內容進行排序。其中,離線回放工具連同貝葉斯優化工具也會有助於我們在系統優化過程中高效地調整價值模型。

資料來源:Facebook AI

文:楊鲤萍

發表評論

請輸入您的評論!
請在這裡輸入您的名字