深度學(xué)習(xí)( Deep learning , DL )是解決計(jì)算機(jī)視覺(jué)或自然語(yǔ)言等機(jī)器學(xué)習(xí)問(wèn)題的最新方法,它的性能優(yōu)于其它方法。最近的趨勢(shì)包括將 DL 技術(shù)應(yīng)用于推薦引擎。許多大型公司,如 AirBnB 、 Facebook 、 Google 、 Home Depot 、 LinkedIn 和 Pinterest ,都分享了他們將 DL 用于推薦系統(tǒng)的經(jīng)驗(yàn)。
最近, NVIDIA 和 RAPIDS 。 AI 團(tuán)隊(duì)與 DL 贏得了三場(chǎng)比賽: VZX1 、 信號(hào)和日期挑戰(zhàn) 和 ACM WSDM2021 Booking 。 com 挑戰(zhàn)賽 。
推薦系統(tǒng)的領(lǐng)域是復(fù)雜的。在這篇文章中,我將重點(diǎn)介紹神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)及其組件,例如嵌入層和完全連接層、遞歸神經(jīng)網(wǎng)絡(luò)單元( LSTM 或 GRU )和變壓器塊。我討論了流行的網(wǎng)絡(luò)架構(gòu),比如 Google 的 Wide & Deep 和 Facebook 的 Deep Learning Recommender Model ( DLRM )。
DL 推薦系統(tǒng)的優(yōu)點(diǎn)
有許多不同的技術(shù)來(lái)設(shè)計(jì)推薦系統(tǒng),例如關(guān)聯(lián)規(guī)則、基于內(nèi)容或協(xié)同過(guò)濾、矩陣分解或訓(xùn)練線性或基于樹(shù)的模型來(lái)預(yù)測(cè)交互可能性。
使用神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)是什么?一般來(lái)說(shuō), DL 模型可以獲得更高的精度。首先, DL 可以利用額外的數(shù)據(jù)。許多傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)需要更多的數(shù)據(jù)。但是,當(dāng)您增加神經(jīng)網(wǎng)絡(luò)的容量時(shí),該模型可以使用更多的數(shù)據(jù)來(lái)提高性能。
第二,神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)是靈活的。例如,您可以針對(duì)多個(gè)目標(biāo)(多任務(wù)學(xué)習(xí))訓(xùn)練 DL 模型,例如“用戶是否將項(xiàng)目添加到購(gòu)物車(chē)中?”、“使用項(xiàng)目開(kāi)始結(jié)賬?”、或“購(gòu)買(mǎi)項(xiàng)目?”。每個(gè)目標(biāo)都有助于模型從數(shù)據(jù)中提取信息,并且目標(biāo)可以相互支持。
其他設(shè)計(jì)方法包括向推薦模型中添加多模態(tài)數(shù)據(jù)。您可以通過(guò)使用卷積神經(jīng)網(wǎng)絡(luò)處理產(chǎn)品圖像或使用 NLP 模型處理產(chǎn)品描述來(lái)實(shí)現(xiàn)這一點(diǎn)。神經(jīng)網(wǎng)絡(luò)應(yīng)用于許多領(lǐng)域。您可以將新開(kāi)發(fā)(如優(yōu)化器或新層)轉(zhuǎn)移到推薦系統(tǒng)。
最后, DL 框架經(jīng)過(guò)了高度優(yōu)化,可以處理各種域的數(shù) TB 到數(shù) PB 的數(shù)據(jù)。下面是如何為推薦系統(tǒng)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)。
基本構(gòu)造塊:嵌入層
嵌入層用密集向量表示類(lèi)別。這種技術(shù)在自然語(yǔ)言處理中非常流行,可以嵌入具有密集表示的單詞。具有相似意義的詞具有相似的嵌入向量。
您可以將相同的技術(shù)應(yīng)用于推薦系統(tǒng)。最簡(jiǎn)單的推薦系統(tǒng)是基于用戶和項(xiàng)目的:您應(yīng)該向用戶推薦哪些項(xiàng)目?您有用戶 ID 和項(xiàng)目 ID 。單詞是 users 和 items ,因此使用兩個(gè)嵌入表(圖 1 )。
圖 1 。嵌入維度為 4 的表
計(jì)算用戶嵌入和項(xiàng)目嵌入之間的點(diǎn)積,得到最終分?jǐn)?shù),即用戶與項(xiàng)目交互的可能性。最后一步可以應(yīng)用 sigmoid 激活函數(shù)將輸出轉(zhuǎn)換為 0 到 1 之間的概率。
圖 2 。具有兩個(gè)嵌入表和點(diǎn)積輸出的神經(jīng)網(wǎng)絡(luò)
該方法等價(jià)于矩陣分解或交替最小二乘法( ALS )。
具有完全連接層的較深模型
神經(jīng)網(wǎng)絡(luò)的性能是基于具有多個(gè)非線性層的深層結(jié)構(gòu)。通過(guò)將嵌入層的輸出通過(guò)多個(gè)具有 ReLU 激活的完全連接層提供,可以擴(kuò)展先前的模型。
一個(gè)設(shè)計(jì)選擇是如何組合兩個(gè)嵌入向量。您可以僅串聯(lián)嵌入向量,也可以將向量逐元素相乘,類(lèi)似于點(diǎn)積。輸出之后是多個(gè)隱藏層。
圖 3 。具有兩個(gè)嵌入表和多個(gè)完全連接層的神經(jīng)網(wǎng)絡(luò)
向神經(jīng)網(wǎng)絡(luò)中添加元數(shù)據(jù)信息
到目前為止,您只使用了用戶 ID 和產(chǎn)品 ID 作為輸入,但是您通常可以獲得更多的信息。其他用戶信息可以是性別、年齡、城市(地址)、自上次訪問(wèn)以來(lái)的時(shí)間或用于支付的信用卡。一件商品通常有一個(gè)品牌、價(jià)格、類(lèi)別或在過(guò)去 7 天內(nèi)售出的數(shù)量。這些信息有助于模型更好地推廣。修改神經(jīng)網(wǎng)絡(luò)以使用附加特征作為輸入。
圖 4 。具有元信息和多個(gè)完全連接層的神經(jīng)網(wǎng)絡(luò)
流行建筑
嵌入層和完全連接層是理解一些最新出版的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的主要組成部分。在這篇文章中,我將從 2016 年開(kāi)始報(bào)道谷歌的廣度和深度,從 2019 年開(kāi)始報(bào)道 Facebook 的 DLRM 。
谷歌的廣度和深度
谷歌的廣度和深度包含兩個(gè)部分:
記憶共同特征組合的寬塔
用來(lái)概括罕見(jiàn)或未觀察到的特征組合的深塔
創(chuàng)新之處在于,這兩個(gè)組件同時(shí)訓(xùn)練,這是可能的,因?yàn)樯窠?jīng)網(wǎng)絡(luò)是靈活的。深塔通過(guò)嵌入層提供分類(lèi)特征,并將輸出與數(shù)字輸入特征連接起來(lái)。級(jí)聯(lián)向量通過(guò)多個(gè)完全連接的層饋送。
你聽(tīng)上去熟悉嗎?是的,那是你以前的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)。新的組成部分是寬塔,它只是輸入特征的線性組合,具有類(lèi)似的線性/邏輯回歸。每個(gè)塔的輸出相加,得到最終的預(yù)測(cè)值。
Facebook 的 DLRM
Facebook 的 DLRM 與帶有元數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)類(lèi)似,但有一些特定的差異。數(shù)據(jù)集可以包含多個(gè)分類(lèi)特征。 DLRM 要求所有的分類(lèi)輸入都通過(guò)一個(gè)具有相同維數(shù)的嵌入層。稍后,我將討論這一點(diǎn)的重要性。
接下來(lái),將連續(xù)的輸入串聯(lián)起來(lái)并通過(guò)稱(chēng)為底部多層感知器( MLP )的多個(gè)完全連接的層饋送。底層 MLP 的最后一層具有與嵌入層向量相同的維數(shù)。
DLRM 使用了一個(gè)新的組合層。它在所有嵌入向量對(duì)和底部 MLP 輸出之間應(yīng)用按元素相乘。這就是為什么每個(gè)向量都有相同的維數(shù)。所得到的向量被串聯(lián)并饋送到另一組完全連接的層(頂部 MLP )。
圖 5 。左側(cè)顯示廣度和深度架構(gòu),右側(cè)顯示 DLRM 架構(gòu)。
基于會(huì)話的推薦系統(tǒng)
當(dāng)我為推薦系統(tǒng)分析不同的基于 DL 的體系結(jié)構(gòu)時(shí),我假設(shè)輸入具有表格數(shù)據(jù)結(jié)構(gòu),而忽略了用戶交互的本質(zhì)。但是,用戶在訪問(wèn)網(wǎng)站時(shí),在一個(gè)會(huì)話中有多個(gè)交互。例如,他們?cè)L問(wèn)一家商店并查看多個(gè)產(chǎn)品頁(yè)面。您可以使用用戶交互序列作為輸入來(lái)提取模式嗎?
在一個(gè)會(huì)話中,用戶連續(xù)查看多條牛仔褲,您應(yīng)該推薦另一條牛仔褲。在另一個(gè)會(huì)話中,同一個(gè)用戶連續(xù)查看多雙鞋,您應(yīng)該推薦另一雙鞋。這就是基于會(huì)話的推薦系統(tǒng)背后的直覺(jué)。
謝天謝地,您可以將 NLP 中的一些技術(shù)應(yīng)用于推薦系統(tǒng)域。用戶的交互具有順序結(jié)構(gòu)。
圖 6 。基于會(huì)話的神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)
序列可以通過(guò)使用遞歸神經(jīng)網(wǎng)絡(luò)( RNN )或基于變壓器的結(jié)構(gòu)作為序列層來(lái)處理。用嵌入向量表示項(xiàng)目 ID ,并通過(guò)序列層提供輸出。序列層的隱藏表示可以添加為深度學(xué)習(xí)體系結(jié)構(gòu)的輸入。
其他選擇
當(dāng)我把這篇文章的重點(diǎn)放在將 DL 應(yīng)用于推薦系統(tǒng)的理論上時(shí),我沒(méi)有涉及到很多其他的挑戰(zhàn)。我在這里簡(jiǎn)要介紹一下,以提供一個(gè)起點(diǎn):
嵌入表可以超過(guò) CPU 或 GPU 內(nèi)存。由于在線服務(wù)可能有數(shù)百萬(wàn)用戶,嵌入表可以達(dá)到數(shù)兆字節(jié)。 NVIDIA 提供了 HugeCTR 框架,可以將嵌入表擴(kuò)展到 CPU 或 GPU 內(nèi)存之外。
在培訓(xùn)期間最大限度地利用 GPU 。基于 DL 的推薦系統(tǒng)有一個(gè)淺層的網(wǎng)絡(luò)結(jié)構(gòu),只有幾個(gè)完全連接的層。數(shù)據(jù)加載器有時(shí)是訓(xùn)練管道中的瓶頸。為了抵消這一點(diǎn), NVIDIA 為 PyTorch 和 TensorFlow 開(kāi)發(fā)了一個(gè) 高度優(yōu)化的 GPU 數(shù)據(jù)加載器 。
生成建議需要對(duì)用戶項(xiàng)對(duì)進(jìn)行評(píng)分。最壞的情況是預(yù)測(cè)所有可用產(chǎn)品的可能性,并選擇最佳產(chǎn)品。在實(shí)踐中,這是不可行的,候選人產(chǎn)生了一個(gè)低開(kāi)銷(xiāo)的模型,如近似近鄰。
概括
這篇文章向您介紹了基于 DL 的推薦系統(tǒng)。我首先介紹了基于兩個(gè)輸入的基本矩陣分解,然后介紹了使用 transformer 層的最新基于會(huì)話的體系結(jié)構(gòu)。
您可以使用遞歸神經(jīng)網(wǎng)絡(luò)( RNN )或基于轉(zhuǎn)換器的體系結(jié)構(gòu)作為序列層來(lái)處理序列。用嵌入向量表示項(xiàng)目 ID ,并通過(guò)序列層提供輸出。添加序列層的隱藏表示作為 DL 架構(gòu)的輸入。
關(guān)于作者
Benedikt Schifferer 是 NVIDIA 的深度學(xué)習(xí)工程師,致力于推薦系統(tǒng)。在他在 NVIDIA 的工作之前,他畢業(yè)于紐約哥倫比亞大學(xué)的數(shù)據(jù)科學(xué)碩士,并為德國(guó)電子商務(wù)公司開(kāi)發(fā)了推薦系統(tǒng)。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5026瀏覽量
103292 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5508瀏覽量
121311
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論