譯者 | 朱先忠
審校 | 重樓
簡介
目前推薦系統(tǒng)中最重要的模型類型之一是雙塔神經(jīng)網(wǎng)絡。它們的結構如下:神經(jīng)網(wǎng)絡的一部分(塔)負責處理有關查詢的所有信息(用戶、上下文),而另一部分處理有關對象的信息。這些塔的輸出內容是嵌入,然后這些嵌入進行乘法運算(點積或余弦運算,正如我們在論文中已經(jīng)討論過的方式)。
在一篇關于YouTube的非常好的論文中,可以找到最早提到應用此類網(wǎng)絡進行推薦的文章之一。我稱這篇文章為經(jīng)典之作,因為它提出了最適合應用于推薦領域的神經(jīng)網(wǎng)絡模型。
圖片來自論文《Deep Neural Networks for YouTube Recommendations》(適用于YouTube推薦的深度神經(jīng)網(wǎng)絡)
這種網(wǎng)絡的特征有哪些呢?具體來看,它們與矩陣分解非常相似,矩陣分解實際上是一種特殊情況,只將user_id和item_id作為輸入。然而,如果我們將它們與任意神經(jīng)網(wǎng)絡進行比較,對延遲交叉的限制(直到最后一層才允許來自不同塔的輸入融合)使兩個塔網(wǎng)絡在應用中非常高效。要為單個用戶構建推薦,我們僅需要計算一次查詢塔,然后將此嵌入與文檔的嵌入相乘,文檔的嵌入通常是預先計算的。這個過程非??臁?/span>
此外,這些預先計算的文檔嵌入可以被組織到ANN(人工神經(jīng)網(wǎng)絡,是研究生物學上的神經(jīng)網(wǎng)絡,又叫生物神經(jīng)網(wǎng)絡,詳見:https://en.wikipedia.org/wiki/Nearest_neighbor_search)索引(例如,HNSW圖算法:https://github.com/nmslib/hnswlib)中,以快速找到好的候選者,而不必遍歷整個數(shù)據(jù)庫。
有興趣的讀者可以參考文章《Similarity Search, Part 4: Hierarchical Navigable Small World (HNSW)》(相似性搜索,第4部分:分層導航小世界(HNSW))。其中,分層導航小世界(HNSW)是一種先進的算法,適用于在高維空間中進行高效人工神經(jīng)網(wǎng)絡搜索的數(shù)據(jù)結構和算法,可以有效地找到近似的最近鄰。文章地址是:
https://towardsdatascience.com/similarity-search-part-4-hierarchical-navigable-small-world-hnsw-2aad4fe87d37?source=post_page-----fdc88411601b--------------------------------。
我們可以通過計算用戶部分來獲得更高的效率,不是針對每個查詢,而是異步計算,并具有一定的規(guī)律性。然而,這意味著犧牲了對實時歷史和上下文的考慮。
塔樓本身可能相當復雜。例如,在用戶部分,我們可以使用自注意力機制來處理歷史,這導致了個性化的轉換。但是,實行延遲交叉限制的代價是什么呢?它會影響質量。在同樣的注意力機制中,我們不能使用我們目前希望推薦的項目。理想情況下,我們希望關注用戶歷史記錄中的類似項目。因此,具有早期交叉的網(wǎng)絡通常用于排名的后期階段,此時只剩下幾十或幾百個候選者,而具有后期交叉的網(wǎng)絡(雙塔)則用于排名的早期階段和候選者生成。
(有一個純粹的理論論點認為,針對不同查詢的文檔的任何合理排序都可以通過足夠維度的嵌入進行編碼。此外,NLP中的解碼器實際上遵循相同的原理,只為每個令牌重新計算查詢塔。)
損失函數(shù)與負采樣
一個令人特別感興趣的問題是用于訓練兩個塔網(wǎng)絡的損失函數(shù)。原則上,他們可以用任何損失函數(shù)進行訓練,針對不同的結果,甚至對不同的頭部有多個不同的結果(每個塔中有不同的嵌入)。然而,一個有趣的變體是在批量負例上進行softmax損失訓練。對于數(shù)據(jù)集中的每個查詢文檔對,在softmax損失中,同一小批中的其他文檔與同一查詢一起用作負例文檔。這種方法是一種非常有效的困難負例挖掘形式。
但是,重要的是要考慮對這種損失函數(shù)的概率解釋,這一點并不總是得到很好的理解。在經(jīng)過訓練的網(wǎng)絡中,在下面公式中,
得分的指數(shù)不是與給定查詢的文檔的先驗概率成比例,而是與查詢特有的PMI(Pointwise Mutual Information,點間互信息:https://en.wikipedia.org/wiki/Pointwise_mutual_information)成比例。這種模型不一定會更頻繁地推薦更受歡迎的文檔,因為在訓練過程中,它們按比例更頻繁地顯示為負例文檔。使用得分作為一個特征可能是有益的,但對于最終排名和候選生成來說,這可能會導致非常具體但質量較差的文檔。
谷歌在一篇論文中建議在訓練期間通過logQ校正來解決這個問題。另一方面,我們通常在應用階段而不是在訓練期間通過簡單地乘以文檔P(d)的先驗概率來解決這個問題。不過,我們從未比較過這些方法,這確實是一個有趣的比較。
隱式正則化:連接ALS和現(xiàn)代神經(jīng)網(wǎng)絡
有一種協(xié)作過濾算法被稱為隱式ALS(IALS)。我以前已經(jīng)提到過了。在前神經(jīng)網(wǎng)絡時代,它可以說是最流行的算法之一。它的顯著特點是有效地“挖掘”負例:所有沒有交互歷史的“用戶-對象”對都被視為負例(盡管權重比實際交互小)。此外,與實際挖掘不同的是,這些負例不會被采樣,而是在每次迭代中全部使用。這種方法被稱為隱式正則化。
這怎么可能呢?給定合理的任務大?。ㄓ脩艉蛯ο蟮臄?shù)量),應該有太多的負例,即使列出它們也需要比整個訓練過程更長的時間。該算法的美妙之處在于,通過使用MSE損失和最小二乘法,可以在每次完全迭代之前分別為所有用戶和所有對象預計算某些元素,這足以執(zhí)行隱式正則化。通過這種方式,該算法避免了二次方大小。(更多細節(jié),請參閱我當時最喜歡的一篇論文)。
幾年前,我思考是否有可能將隱式正則化的美妙想法與更先進的雙塔神經(jīng)網(wǎng)絡技術相結合。這是一個復雜的問題,因為存在隨機優(yōu)化而不是全批量,并且不愿意恢復到MSE損失(至少對于整個任務;特別是對于正則化,這可能沒問題),因為它往往會產生較差的結果。
我想了很久,終于想出了一個解決辦法!幾周來,我一直很興奮,急切地期待著我們將如何用這種方法代替批量負樣。
然后,當然(在這種情況下經(jīng)常發(fā)生),我在一篇論文中讀到,三年前一切都已經(jīng)得到解答。再次,是谷歌的貢獻。后來,在關于logQ校正的同一篇論文中,他們證明了具有批內負樣的softmax損失比隱式正則化效果更好。
這就是為什么我們不再浪費時間來測試這個想法的原因。
我們真的需要推薦模型的負采樣嗎?
畢竟,我們曾經(jīng)使用過推薦印象的真實例子,如果用戶沒有與它們互動,這些可以被視為強負例的典型。(這里不考慮推薦服務本身尚未推出而且還沒有印象的情況。)
這個問題的答案并不那么瑣碎;這取決于我們打算如何準確地應用訓練后的模型:用于最終排名、候選生成,或者僅僅作為輸入到另一個模型的特征。
當我們只根據(jù)實際印象訓練模型時會發(fā)生什么?出現(xiàn)了相當強烈的選擇偏差,模型只學會很好地區(qū)分那些在特定上下文中顯示的文檔。對于未顯示的文檔(或者更準確地說,查詢文檔對),該模型的性能會差得多:它可能對某些文檔預測過高,而對其他文檔預測過低。當然,這種影響可以通過在排名中應用探索來減輕,但通常這只是部分解決方案。
如果以這種方式訓練候選生成器,它可能會生成過多的文檔來響應查詢,這些文檔在這種情況下從未見過,而且它高估了對這些文檔的預測。在這些文檔中,通常都是無用的信息。如果最終的排名模型足夠好,它會過濾掉這些文檔,而不會向用戶顯示它們。然而,我們仍然不必要地在它們身上浪費候選名額(而且可能根本沒有留下任何合適的文檔)。因此,候選生成器應接受訓練,使其了解大部分文檔庫質量較差,不應推薦(作為候選提名)。針對此問題,負采樣是一個很好的方法。
在這方面,最終排名的模型與候選生成非常相似,但有一個重要的區(qū)別:它們從錯誤中吸取教訓。當模型因高估某些文檔的預測而出錯時,這些文檔會顯示給用戶,然后可能被包括在下一個訓練數(shù)據(jù)集中。我們可以在這個新的數(shù)據(jù)集上重新訓練模型,并再次向用戶推出。新的誤報將會出現(xiàn)。數(shù)據(jù)集的收集和再訓練過程可以重復進行,從而產生一種主動學習。在實踐中,只需幾次再訓練迭代就足以使過程收斂,并使模型停止推薦廢話。當然,必須權衡隨機推薦的危害,有時值得采取額外的預防措施。但總的來說,這里不需要負采樣。相反,它可能會損害探索,導致系統(tǒng)保持在局部最優(yōu)狀態(tài)。
如果該模型用于輸入到另一個模型的特征,那么同樣的邏輯也適用,但高估隨機候選文檔的預測所帶來的危害甚至不那么嚴重,因為其他特征可以幫助調整最終預測。(如果一個文檔甚至沒有進入候選列表,我們就不會為它計算特征。)
有一次,我們直接測試并發(fā)現(xiàn),作為特征,標準ALS比IALS工作得更好,但不應用于候選生成。
小結
在本文探索分析中,我們強調了雙塔網(wǎng)絡在推薦排名中的有效性,檢驗了損失函數(shù)和負采樣在模型精度中的重要性,通過隱式正則化彌補了與經(jīng)典協(xié)同過濾的差距,并討論了負采樣在推薦系統(tǒng)中的重要作用。同時,這次討論強調了推薦系統(tǒng)技術不斷發(fā)展的復雜性和復雜性。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:Two-Tower Networks and Negative Sampling in Recommender Systems,作者:Michael Roizner