近日,擁有10億月活用戶的Instagram分享了其內容推薦系統(tǒng)的關鍵內容,包括:Explore基礎構建模塊的開發(fā)、元語言IGQL工具、Explore系統(tǒng)框架等。
據(jù)官方數(shù)據(jù),超過一半的用戶每月都會通過Instagram Explore來搜索視頻、圖片、直播和各種文章。那么,如何從億級規(guī)模的實時推薦數(shù)據(jù)中選出最適合某個用戶的媒體內容呢?針對這樣的挑戰(zhàn),Instagram利用機器學習做了這樣的思考與操作,雷鋒網(wǎng)AI開發(fā)者將其編譯如下。
Explore基礎構建模塊的開發(fā)
在構建處理Instagram上每天上傳的大量照片和視頻的推薦引擎時,我們需要滿足三個重要需求:
大規(guī)??焖賹嶒灥哪芰Γ?/span>
獲得用戶興趣范圍內的更多信息;
一種高計算效率的方法來確保推薦建議既高質又新鮮(具備時效性);
因此,為了解決這三個需求,我們開發(fā)了一些基本工具,而這些技術正是實現(xiàn)最終推薦系統(tǒng)的關鍵。
工具一:運用IGQL實現(xiàn)快速迭代
構建最優(yōu)推薦算法和技術是ML社區(qū)正在進行的一類研究。根據(jù)任務的不同,選擇合適系統(tǒng)的過程可能會有很大的不同。例如:一種算法可以有效地識別用戶的長期興趣,而另一種算法則可以更好地根據(jù)近期瀏覽內容進行推薦與建議。
技術團隊通過反復使用不同的算法,發(fā)現(xiàn)需要一種方法,既能讓我們有效地嘗試新的想法,又能輕松地將有潛力的想法應用到大規(guī)模系統(tǒng)中,而不必擔心CPU和內存使用之類計算資源的影響。
因此,我們需要一種定制的特定于領域的元語言,它能夠提供正確的抽象級別,并將一些候選算法進行集中聚合。
IGQL正是為解決這個問題而創(chuàng)建的工具,它是一種專門用于在推薦系統(tǒng)中檢索候選對象的領域特定語言。經(jīng)C++優(yōu)化后,IGQL可在不犧牲可擴展性的情況下最大程度地降低延遲,從而減少計算資源消耗。
IGQL是經(jīng)過靜態(tài)驗證的高級語言,工程師能夠以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能夠有效提供高可讀性的語言,即使對于沒有廣泛使用該語言的工程師也能一目了然。
該工具有助于以一種原則性的方式組合多個推薦階段和算法。例如,我們可以在查詢中使用組合規(guī)則來輸出多個子查詢輸出的加權混合,從而優(yōu)化候選生成器的集合。通過調整權重,我們就可以找到最佳用戶體驗的組合。
IGQL使執(zhí)行復雜推薦系統(tǒng)中常見的任務變得簡單,例如:構建組合規(guī)則的嵌套樹。IGQL允許工程師更關注于推薦背后的機器學習和業(yè)務邏輯,而不是后臺工作;例如:為每個查詢獲取正確數(shù)量的候選項。
該方法還提供了高度的代碼可重用性;例如:使用排序器就像為IGQL查詢添加單行規(guī)則一樣簡單。在多個地方添加它也很簡單,例如:帳戶排序和這些帳戶發(fā)布的媒體排序。
工具二:個性化賬戶的個性化媒體排序嵌入
人們在Instagram上公開分享數(shù)以十億計的高質量媒體內容,這些內容都屬于Explore上的合格內容。對于Explore中的眾多感興趣的社區(qū)來說,保持一個清晰且不斷發(fā)展的目錄樣式分類也是一個挑戰(zhàn)。因為社區(qū)的主題很多,從阿拉伯書法到模型訓練再到slime的都有,所以基于內容的模型很難理解如此多樣的興趣社區(qū)。
由于Instagram擁有大量基于特定主題的關注興趣的賬戶,比如:Devon rex cats或vintage tractors;因此我們創(chuàng)建了一個檢索通道。該通道關注的是賬戶級別的信息,而不是媒體級別的信息。
通過構建帳戶嵌入,我們能夠更有效地識別哪些帳戶在局部上彼此相似。我們使用類似word2vec的嵌入框架Ig2vec來推斷帳戶嵌入。通常,word2vec嵌入框架會根據(jù)單詞在訓練語料庫中句子的上下文來學習單詞的表示。Ig2vec將用戶與之交互的帳戶id(例如:來自用戶喜歡的帳戶媒體)視為句子中的一個單詞序列。
通過應用與word2vec中的類似技術,我們可以預測一個人在應用程序的給定會話中可能與之交互的帳戶。如果一個人在同一個會話中與一系列帳戶交互,那么與來自不同Instagram帳戶范圍的隨機帳戶序列相比,它更有可能是局部一致的。這有助于我們識別出與此相關的賬戶。
我們定義了兩個帳戶之間的距離度量——嵌入訓練中使用的同一個帳戶——通常是余弦距離或點積?;诖?,我們做了一個KNN查找,以找到嵌入中任何帳戶的局部相似帳戶。我們的嵌入覆蓋了數(shù)百萬個賬戶,并使用Facebook最先進的近鄰檢索引擎FAISS作為支持檢索的基礎設施。
Ig2vec預測賬戶內容相似性的功能演示
對于每一個版本的嵌入,我們訓練一個僅根據(jù)嵌入預測一組帳戶主題的分類器;通過將預測主題與保留集中帳戶的人工標記主題進行比較,我們就可以評估嵌入如何捕獲主題相似度。
檢索與某個特定用戶以前感興趣帳戶所類似的帳戶,有助于我們以一種簡單而有效的方式為每個人聚焦到一個更小的、個性化的排序清單。因此,我們能夠利用最先進和計算密集型的機器學習模型為每個Instagram社區(qū)成員服務。
工具三:蒸餾模型預選相關候選項
在我們用Ig2vec去根據(jù)個人興趣確定最相關的賬戶之后,我們需要一種方式對這些賬戶進行排序,使其對于每個人都充滿新鮮感與趣味性。這需要在每個人每次滾動Explore頁面時預測出最相關的媒體。
我們通過一個深層神經(jīng)網(wǎng)絡,對每一個滾動操作評估500個媒體片段。雖然這需要大量的資源;但當其對每個用戶評估越多,我們就越有可能從這些的內容中找到最好的、最個性化的媒體推薦。為了能夠最大化每個排序請求的媒體數(shù)量,我們引入了一個排序蒸餾模型(可參考:https://arxiv.org/abs/1809.07428),幫助在使用更復雜的排序模型之前對候選項進行重新排序。
排序問題的排序蒸餾
該方法是通過訓練一個超輕量級的模型,從中學習并使其盡量接近主要排序模型。我們從更復雜的排序模型中記錄其所具有的特征和輸出候選項;然后用有限的特征集和簡單的神經(jīng)網(wǎng)絡模型結構對蒸餾模型進行訓練以復制結果。其目標函數(shù)則是優(yōu)化NDCG排序(排序質量的一種度量)損失超過主要排序模型的輸出;然后使用蒸餾模型中排序靠前的推薦作為后期高性能排序模型的排序候選。
通過建立蒸餾模型的模擬行為,可以最大限度地減少對多個參數(shù)的調整以及在不同排序階段維護多個模型的需要。利用這一技術,我們可以有效地評估一組更大的媒體集,以便在控制計算資源的同時,找到在每個排序請求中最相關的媒體內容。
如何構建Explore?
在創(chuàng)建了便于實驗、有效地識別人們的興趣并產生有效和相關的預測的關鍵構建模塊之后,我們必須在生產中將這些系統(tǒng)結合起來。利用IGQL、賬戶嵌入和蒸餾模型技術,我們將Explore推薦系統(tǒng)分為兩個主要階段:候選生成階段(也稱為尋源階段)和排序階段。
階段一:候選生成階段
首先,我們利用人們以前在Instagram上互動過的賬戶(例如:喜歡或收藏了某個賬戶中的媒體內容)來識別人們可能感興趣的其他賬戶,我們稱之為種子賬戶(種子賬戶通常只是Instagram上類似或相同興趣賬戶的一小部分)。
然后,我們使用帳戶嵌入技術來識別類似于種子帳戶的其它帳戶;最后根據(jù)這些帳戶,我們就可以找到這些帳戶發(fā)布或參與的媒體內容。
該圖展示了Instagram Explore的一個典型推薦內容源
人們在Instagram上接觸賬戶和媒體的方式有很多種(例如:關注、喜歡、評論、保存和分享)。也有不同的媒體類型(例如:照片、視頻、故事和直播),這意味著我們可以使用類似的方案來構建各種來源。利用IGQL會使得這個過程變得非常簡單——不同的候選源只需要表示為不同的IGQL子查詢即可。
通過不同類型的信息來源,我們能夠找到成千上萬的符合條件的候選項。為了確保推薦的內容既安全又適合許多年齡段的全球探索社區(qū),我們使用了各種標記來篩選出我們可以確定為不符合推薦條件的內容,然后再為每個人建立符合條件的媒體推薦。除了阻止可能違反規(guī)則的內容和錯誤信息外,我們還利用機器學習系統(tǒng)來幫助檢測和過濾垃圾郵件等內容。
然后,對于每一個排序請求,我們?yōu)閭€人識別出了數(shù)千個符合條件的媒體,并從符合條件的推薦中抽取500個候選項,然后將候選項發(fā)送到下游的排序階段。
階段二:候選項排序
當有500名候選項可供排序時,我們使用了三階排序基礎模結構來幫助平衡排序相關性和計算效率之間的權重。三個排序階段如下:
第一階段:蒸餾模型模仿其他兩個階段的組合,具有最小的特征;從500個候選項中選出150個質量最高、最相關的候選項;
第二階段:利用具有完整的稠密特征集的輕量級神經(jīng)網(wǎng)絡模型,再從第一階段的150個候選項中選擇出符合條件的50個最高質量和最相關的候選項;
第三階段:利用具有完整的稠密和稀疏特征的深度神經(jīng)網(wǎng)絡模型,從第二階段的50個候選項中選出25個質量最高、最相關的候選項。
用來平衡排序相關性和計算效率之間的權衡的三階排序基礎模結構
如果第一階段的蒸餾模型按照排序順序模仿其他兩個階段,我們如何確定下兩個階段中最相關的內容呢?
因此,我們選擇預測人們在每個媒體上采取的個人行為,無論是像「喜歡」和「收藏」這樣的積極行為,還是像「少看這樣的帖子」(SFPLT)這樣的消極行為;均使用多任務多標簽(MTML)的神經(jīng)網(wǎng)絡來預測這些事件,因為共享多層感知器(MLP)允許我們對來自不同行為的共同信號進行捕捉。
當前推薦模型架構示例
我們使用一個算術公式(即值模型)來結合對不同事件的預測,以捕獲不同信號的突出性,從而決定內容是否相關。具體而言,即使用一個加權的預測值之和,比如:[w_like*P(like)+w_save*P(save)-w_negative_action*P(negative action)]。如果我們認為一個人在Explore中保存一個帖子的重要性高于他們喜歡的帖子,那么「保存」行為的權重應該更高。
Explore也利用了用戶新興趣與過去興趣之間的平衡關系,在價值模型中加入一個簡單的啟發(fā)式規(guī)則,以提高內容的多樣性。具體而言,模型通過添加「懲罰」因子來降低來自同一媒體或同一種子帳戶帖子的排序,因此在Explore推薦中,很難看到來自同一個人或同一種子帳戶的多個帖子;而且這種推薦方式會隨著你遇到更多來自同一作者的帖子而加強。
我們根據(jù)每個排序候選項的最終價值模型得分,以迭代的方式對最相關的內容進行排序。其中,離線回放工具連同貝葉斯優(yōu)化工具也會有助于我們在系統(tǒng)優(yōu)化過程中高效地調整價值模型。
原文地址:
https://ai.facebook.com/blog/powered-by-ai-instagrams-explore-recommender-system