在推薦系統上使用神經網路

作者 NVIDIA

深度學習是許多機器學習問題(例如電腦視覺或自然語言問題)最先進的解決方案,且優於替代方法。近期的趨勢是將深度學習技術應用於推薦引擎。AirBnB、Facebook、Google、Home Depot、LinkedIn、Pinterest 等許多大公司,分享了他們將深度學習使用於推薦系統上的經驗。

最近,NVIDIA 和 RAPIDS.AI 團隊贏得三項深度學習競賽:ACM RecSys2021 ChallengeSIGIR eCom Data ChallengeACM WSDM2021 Booking.com Challenge

推薦系統領域很複雜。本文章是著重於神經網路架構及其元件,例如嵌入層和全連接層、遞迴神經網路單元(LSTM 或 GRU)以及 transformer 區塊。將會探討常見的網路架構,例如 Google 的 Wide & Deep 和 Facebook 的深度學習推薦模型(Deep Learning Recommender Model,DLRM)。

深度學習推薦系統的好處

推薦系統可以使用許多不同的技術進行設計,例如關聯規則、內容型或協同過濾、矩陣分解,或訓練線性或以樹狀結構為基礎的模型,以預測互動機率。

使用神經網路的優點是什麼?一般而言,深度學習模型可以達到較高的準確度。第一,深度學習可以利用更多資料。許多傳統的機器學習技術會因為更多資料而停滯。但是,增加神經網路的容量時,模型可以利用更多資料提高效能。

第二,神經網路的設計很靈活。舉例來說,您可以在多個目標上訓練深度學習模型(多任務學習),例如「使用者是否會將商品新增至購物車?」、「開始商品結帳?」或「購買商品?」。每一個目標都可以協助模型從資料中擷取資訊,且目標可以互相支援。

其他設計方法,包括將多模態資料新增至推薦模型。您可以使用卷積神經網路處理產品影像,或使用自然語言處理(NLP)模型處理產品描述。神經網路適用於許多領域。您可以將新開發的最佳化工具或新層,轉移至推薦系統。

最後,深度學習框架經過高度最佳化,可以處理各種領域之數 TB 至數 PB 的資料。以下說明如何為推薦系統設計神經網路。

基本構件:嵌入層

嵌入層表示具有密集向量的類別。此技術在 NLP 中很常見,可以嵌入具有密集表示的單字。含義相近的單字具有相似的嵌入向量。

您可以在推薦系統上應用相同的技術。最簡單的推薦系統是以使用者和商品為基礎:應向使用者推薦哪些商品?您擁有使用者 ID 和商品 ID。單字是使用者和商品,所以使用兩個嵌入表(圖 1)。

Embedding tables are a dense representation of sparse categories. Each category is represented by a vector.
1:維度 4 的嵌入表

計算使用者嵌入與商品嵌入之間的點乘積,以取得最終分數:使用者與商品互動的機率。您可以套用 sigmoid 激勵函數做為最後一步,將輸出轉換成 0 與 1 之間的機率。

dot product: u \cdot v = \Sigma a_i \cdot b_i

User ID and item ID are embedded and the dot product is applied to the embedding vectors.
2:具有兩個嵌入表和點乘積輸出的神經網路

此方法相當於矩陣分解或交替最小平方(alternating least squares,ALS)。

具有全連接層的更深模型

神經網路的效能是以具有多個非線性層的深度架構為基礎。您可以延伸先前的模型,使用 ReLU 激勵,透過多個全連接層饋送嵌入層的輸出。

一個設計選擇是如何將兩個嵌入向量合併。您可以僅串接嵌入向量或將向量逐元素相乘,類似於點乘積。輸出後接多個隱藏層。

Combine the user and item embeddings with concatenating or element-wise multiplication. Multiple hidden layers can process the resulting vector.
3:具有兩個嵌入表和多個全連接層的神經網路

將中繼資料資訊新增至神經網路

截至目前為止,僅使用使用者 ID 和產品 ID 做為輸入,但是通常有更多資訊。其他使用者資訊可能是性別、年齡、城市(地址)、上一次造訪的間隔時間,或付款的信用卡。商品通常有品牌、價格、類別或過去 7 天內售出的數量。這些輔助資訊可以協助模型更有效地概化。透過修改神經網路,使用其他特徵做為輸入。

Add more information to the neural network architecture. You can add side information, such as city, age, branch, category, and price.
4:具有中繼資訊和多個全連接層的神經網路

常見架構

嵌入層和全連接層是可以理解一些最新神經網路架構的主要元件。本文章介紹 Google 在 2016 年發布的 Wide and Deep,以及 Facebook 在 2019 年發布的 DLRM。

Google 的 Wide and Deep

Google 的 Wide and Deep 包含兩個元件:

  • 記住共同特徵組合的「寬塔」
  • 概化罕見或未觀察到之特徵組合的「深塔」

創新之處在於因為神經網路的靈活性,而使同時訓練兩個元件變為可能。深塔是透過嵌入層饋送類別特徵,並將輸出與數值輸入特徵串接。透過多個全連接層饋送串接後的向量。

聽起來是不是很熟悉?是的,這就是先前的神經網路設計。新元件是寬塔,僅輸入特徵的線性組合,具有類似的線性/邏輯迴歸。將兩個塔的輸出相加,可以得到最終預測值。

Facebook 的 DLRM

Facebook 的 DLRM 結構與具有中繼資料的神經網路架構相似,但是仍有一些明確的差異。資料集可能包含多個類別特徵。DLRM 必須透過維度相同的嵌入層,饋送所有類別的輸入。稍後將探討這為何很重要。

接著,串接連續輸入,並透過稱為底部多層感知器(multilayer perceptron,MLP)的多個全連接層進行饋送。底部 MLP 的最後一層維度與嵌入層向量相同。

DLRM 使用新的組合層。它在所有嵌入向量對與底部 MLP 輸出之間套用逐元素乘法。因此,每一個向量的維度相同。串接產生的向量,並透過另一組全連接層(頂部 MLP)進行饋送。

Wide and Deep architecture is visualized on the left and DLRM architecture is on the right.
5:左側為 Wide and Deep 架構右側為 DLRM 架構。

以工作階段為基礎的推薦系統

我在分析不同的推薦系統深度學習架構時,假設輸入具有表格資料結構,並忽略使用者互動的性質。但是,當使用者造訪網站時,在一個工作階段中有多次互動。例如,他們造訪商店,並檢視多個產品頁面。是否能以使用者互動序列做為輸入,以擷取模式?

在一個工作階段中,當使用者連續檢視多條牛仔褲時,應推薦另一條牛仔褲。在另一個工作階段中,當同一位使用者連續檢視多雙鞋時,應推薦另一雙鞋。這是以工作階段為基礎之推薦系統的直覺。

令人慶幸的是,您可以推薦系統領域中應一些 NLP 技術。使用者的互動具有循序結構。

User behavior is often a sequence of actions, which you can process with a neural network, such as an RNN or Transformer layer. Add the hidden representation of the sequence to the neural network model.
6:以工作階段為基礎的神經網路架構

可以使用遞迴神經網路(RNN)或以 transformer 為基礎的架構做為序列層,以處理序列。以嵌入向量表示商品 ID,並透過序列層饋送輸出。可以將序列層的隱藏表示做為輸入,新增至深度學習架構。

其他選項

由於本文章是著重於將深度學習應用在推薦系統上的理論,因此未探討許多其他挑戰。在此簡要描述這些挑戰,以提供起點:

  • 嵌入表可能會超過 CPU 或 GPU 記憶體。由於線上服務可能會有數百萬個使用者,因此嵌入表可能高達數 TB。NVIDIA 提供 HugeCTR 框架,將嵌入表擴充至 CPU 或 GPU 記憶體之外。
  • 在訓練期間,將 GPU 利用率最大化。以深度學習為基礎的推薦系統具有淺層網路架構,僅採用幾個全連接層。有時候,資料載入器是訓練工作流程的瓶頸。為了解決此問題,NVIDIA 為 TensorFlow 和 PyTorch 開發出高度最佳化的 GPU 資料載入器
  • 要提供推薦必須針對「使用者-商品」進行評分。最壞的情境是預測所有可用產品的機率並選擇前幾名的產品。但實際上不可行,候選項目是使用低負擔模型產生,例如近似最近鄰。

總結

本文章介紹了以深度學習為基礎的推薦系統。首先介紹以兩個輸入為基礎的基本矩陣分解,之後介紹使用 transformer 層,以工作階段為基礎的最新架構。

您可以使用遞迴神經網路(RNN)或以 transformer 為基礎的架構做為序列層,以處理序列。使用嵌入向量表示商品 ID,並透過序列層饋送輸出。將序列層的隱藏表示做為輸入,新增至深度學習架構。

想要深入瞭解推薦系統嗎?NVIDIA Merlin 是一個在 GPU 上加快推薦系統端對端流程的開放原始碼框架。NVIDIA 持續開發出更多資源,讓您能輕鬆地訓練和部署以深度學習為基礎的推薦系統。以下是一些可以提供協助的資源: