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