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