使用深度學習來做推薦系統,舉個例子給你看

2019-10-23     AI公園
作者:Marcel Kurovski
編譯:ronghuaiyang

導讀

用一個完整的例子告訴你,推薦系統是什麼樣的一個東西,深度學習該怎麼用在裡面。

找到一輛符合你喜好的車是一項非常耗時的任務,可能會讓你發瘋。另一方面,在我們的平台上大約有150萬輛汽車,不斷變化的車輛描述和仍在探索的用戶可能也會讓我們成為瘋狂的解決方案提供商。在這種情況下,根據用戶的偏好來匹配汽車是很有挑戰性的,當你找到匹配的汽車時,你的完美汽車可能已經不見了。

來自Amazon,Netflix和Spotify的推薦樣本

即使你還沒有搜索過汽車,你也可能在其他領域遇到過類似的問題,比如新聞、消費產品或娛樂。在Spotify上,在你開始享受音樂之前,你不喜歡明確地列出你的音樂品味。你也不想搜索整個IMDB來在Netflix上找到你下一部最喜歡的電視劇。可能性的絕對數量造成了選擇的負擔。我們不能在做決定之前手工收集所有的信息。我們希望決策支持是順暢的、個性化的,特別是我們希望它是自動的。

人們傾向于歸咎於「信息超載」,即大量信息侵入我們的大腦,需要快速準確的處理。但還有另一種觀點。2008年,紐約大學教授Clay Shirky說:「這不是信息過載,而是篩選失敗。「在mobile.de,這就突現出我們試圖達到的目標:提高我們的篩選水平來幫助你從信息過載中逃離,幫助你迅速找到合適的車,不需要任何的麻煩。

為了做到這一點,我們使用了一個「推薦系統」,從數十億的互動和數百個特徵中推斷出用戶的偏好,從而得出個性化的推薦。下圖顯示了這一推理:我們使用通過數字化變得強大的技術來解決作為數字化副產品的感知信息過載問題。

一點背景知識

在我們深入討論細節之前,我們需要先做好準備,澄清一些基本詞彙:

推薦系統的三個基本數據源是usersitems和它們之間的interaction,交互可以是「隱式」的,也可以是「顯式」的。隱式交互在沒有表達偏好或忽略意圖的情況下發生,而顯式交互則有意地反映偏好。例如,點擊特定的汽車廣告或為它們做書籤,主要是一種隱含的信號,因為用戶的主要意圖不是對它們進行評級,例如在亞馬遜(Amazon)購買的產品上加星。不過,我們可以放心地假設,你對你聯繫的經銷商的汽車有強烈的偏好。我們將一組用戶U和一組條目I之間的交互存儲在評級矩陣R中,如下所示這個矩陣有m行表示用戶,n列表示項目。每個條目(i, j)包含特定的交互。這裡我們區分視圖、書籤和郵件。

根據反饋的類型,這些矩陣是一元的,這意味著我們只有一個表示反饋的正值,比如「1」。所有未觀察到的反饋都會使條目為空。我們曾經將已知的矩陣項表示為額定值。此外,這些矩陣通常非常稀疏,這意味著很大一部分(通常為> 95%)的矩陣是空的。猜猜亞馬遜提供了多少產品,而你點擊或購買的產品又有多少。

除了關於交互的信息,我們還有關於交互實體(用戶和物品)的數據。物品帶有某些特徵,分析用戶-物品交互可以讓我們根據用戶對這些特徵的偏好得出結論。例如,我們可以推斷出用戶最喜歡的汽車製造商。還可能有一些特定於用戶的特徵,比如用戶的設備或年齡。我們可以利用這些信息來改進我們的建議。

但是推薦的真正目的是什麼呢?推薦系統的基本目標是根據之前的交互和特徵來預測未來的用戶—物品交互。參考上面的圖片,我們想量化問號,看看用戶接下來最有可能看到哪輛車。這個目標被表示為建議的「相關性」,只是許多類似於可信度、多樣性或健壯性的目標之一。可擴展性是另一個重要的面向生產的目標,它迫使我們快速(在幾十或幾百毫秒內)向許多用戶提供建議。如果你需要在等待的時候喝杯咖啡,完美的推薦並不重要。

在推薦系統中實現這些目標的標準技術是協同過濾(CF)。CF使用物品或用戶之間的相似性來找到合適的物品進行推薦。在基於模型的CF中,我們使用矩陣分解來尋找表示用戶和物品的密集矩陣,然後這些用這些用戶和物品重新構造原始的評級矩陣。因此,我們為用戶和物品提供了低維度的表示,我們可以利用這些表示進行預測。因子分解增加了稀疏矩陣的信息密度。在車輛推薦實驗中,我們分析了10萬用戶和近170萬輛車之間的大約800萬個評分。這相當於10萬次互動中有5次。從這些稀疏的信息中獲得深刻的見解是相當具有挑戰性的。

但「稀疏性」只是一個問題,另一個問題是,我們通常不知道該向初次訪問的用戶推薦什麼。例如,請參見上圖中的第四個用戶,他沒有與我們的任何汽車進行交互。這就是所謂的「冷啟動」問題。為了應對這一挑戰,基於內容的過濾 (CBF)技術得到了發展,它利用了用戶和物品的特徵。這使得推薦系統對缺失的交互信號不那麼敏感。但是推斷用戶對物品特徵的偏好仍然需要它們,我們稍後將對此進行探討。一般來說,關於用戶和物品的上下文信息給了我們一些線索,但仍然有一些依賴關係。

然而,將交互和基於內容的信息結合起來可能會更加強大。我們稱結合不同技術的推薦:混合推薦

我們知道了推薦系統的基本詞彙,但由於這是關於深度學習的,我們需要更深入。

深度學習來做車輛推薦

使用深度學習來改進車輛推薦,我們有兩個基本目標:

  1. 提高推薦的相關性
  2. 可擴展的方式提供推薦

我們必須根據觀察到的交互和用戶/物品特徵來估計偏好。讓我們提煉任務:

給定一個用戶u和一個條目i,我們計算一個作為首選項的代理的分數。這意味著高分反映了高偏好,反之亦然。這個分數允許我們根據給定用戶的相關性對一組物品進行排序。分數可以是用戶與某項交互的機率。因此,我們的目標是預測用戶—物品交互的機率。為了計算這個機率,我們使用一個只有一個輸出單元的深度神經網絡。該單元使用sigmoid函數進行激活,生成區間(0,1)的輸出值,因此我們可以將網絡輸出解釋為機率,並將其用於排序。然後,該網絡被訓練來區分偏好和忽視。因此,我們用1標記所有正的user-item組合,用0標記負的user-item組合。因此,學習任務表現為二分類任務。出色地完成這項任務可以提升我們各項推薦的相關性。

使用一種簡單的方法,我們計算所有可能的用戶—項目組合的這些機率。基於此,我們將選擇k個最高機率的物品,並將它們作為個性化推薦呈現給用戶。由於推薦場景中有大量的用戶和物品,這實際上是不可行的。我們需要找到一種計算成本低、速度快的方法,將物品的搜索庫縮小到每個用戶的候選集,這些候選集仍然包含可能相關的項目。因此,我們使用近似最近鄰搜索來提升我們的深度學習方法。我們在用戶和物品的密集表示上執行搜索,這要求我們在第一步中創建它們。在此基礎上,利用近似近鄰搜索可以快速地找到合適的候選對象,從而使系統具有良好的可擴展性。

傳統的技術,如CF或CBF,使用線性技術計算這些分數,而這些線性技術無法預測潛在的非線性模式。為了捕捉這些非線性,我們建立了更複雜的學習模型。最終,我們希望實現相同的目標,但是「只是」更改底層模型。該模型將近似最近鄰搜索生成的候選與二值分類相結合進行排序。

用戶和物品表示(特徵值的集合)提供了實值、高維和高度稀疏的向量。首先,我們需要解決以下任務:

  1. 嵌入
  2. 候選物品的生成
  3. 排序

我們在整個模型中解決所有這些任務。但這只是我們方法的一部分,另一部分是我們如何處理數據。因此,在繼續使用模型之前,我們需要先將數據對齊。

數據和一個關於用戶偏好挖掘的小故事

在第一步中,我們選擇用戶和物品共同的特徵。我們將這些特性分為連續特徵(如車輛價格或里程)和類別特性(如顏色和車輛類型)。我們進一步定義了訓練和測試模型的時間段。現在,我們獲取在這些時間內發生的所有事件,以及當時有效的相應物品特徵。

通過這樣做,我們可以專注於每個用戶的事件和相關物品。這允許我們將用戶首選項確定為關聯物品特徵的組合。通過計算用戶查看的所有車輛的均值和標準差,我們可以了解用戶喜歡的價格範圍,以及用戶如何在價格和里程之間進行權衡。我們可以使用貝葉斯方法來構建這些用戶表示,從而為用戶設計出與汽車相同的特徵。儘管它們涉及相同的概念,但用戶表示是隨機的,而車輛表示是確定的。例如,下圖顯示了一個概要文件,其中用戶查看了五輛車。其中兩個是黑色的,兩個是灰色的,一個是紅色的。這顯示了對顏色的偏好,這反映在機率分布上。對於像價格這樣的連續特徵,我們也可以這樣做。取與用戶交互的車輛的平均值和方差,我們就可以估計出用戶喜歡的價格範圍。汽車可以是黑色、白色或灰色,而且只有一個價格。

我們現在可以基於用戶過去的交互創建一個表示。

由於設置了用戶和物品集合,我們需要針對交互本身。我們選擇了一種二分類方法來簡化這個問題。因此,我們將所有觀察到的交互作用都標記為1來表示偏好。由於我們缺乏負反饋信號,我們用一種稱為「負採樣」的技術,從正樣本中人為地生成它們。結果,我們觀察到的帶正號的相互作用和帶負號的相互作用是一樣多的。現在,我們準備做得更深入一點。

偏好預測模型

整個網絡由三個子網組成,如下圖所示:UserNetItemNetRankNet。這些網絡被聯合起來共同訓練。然後,我們將它們分割為能夠在生產中提供建議的整體架構。

1. 嵌入

UserNetItemNet 將稀疏的用戶和物品表示為密集的嵌入eᵤ 和 eᵢ。因此,它們通過壓縮信息來極大地降低了維度。雖然嵌入式失去了人類的可讀性,但是我們從後一個過程中受益,因為它們的內存效率更高。由於表示形式不同(隨機用戶和確定的物品),但涉及相同的特徵,所以我們使用單獨的網絡。

通過這些方便的用戶和物品表示,我們開始為給定用戶分配好的物品(嵌入)。這個過程分為兩部分,包括從整個語料庫生成一個物品子集,並對這些候選物品進行排序.

2. 候選物品生成

為了快速找到可能與用戶相關的候選物品,我們使用近似最近鄰搜索。從用戶嵌入查詢開始,我們可以有效地獲取特定距離度量的T個最近的物品,例如餘弦或歐式距離。這些幾何上相似的候選物品為我們提供了一個很好的選擇。我們使用此技術是因為對所有可用物品進行排序在計算上過於複雜。近似最近鄰搜索成為可擴展性的關鍵。

有很多實現,包括Yahoo提供的Locally Optimized Product Quantizations(LOPQ)或Spotify提供的Approximate Nearest Neighbor Oh Yeah (ANNOY)。

3. 排序

由於我們現在為用戶提供了T個候選物品,所以我們可以使用RankNet為每個候選項打分。最後,我們只是按分數遞減的方式對候選項進行排序,然後選出最有希望的候選物品。然後將這些物品作為推薦,並取得了顯著的成功。

上面的步驟描述了推理過程。訓練模型非常類似,只是沒有額外的候選項的生成。

結果

大量的數據預處理、高強度的建模和一些花哨的TensorFlow調試最終取得了成功,並取得了顯著的效果。為了比較我們的方法,我們使用不同的傳統方法作為基準,並用網格搜索確定正確的參數。我們推薦LightFM作為不同傳統推薦技術的輕量級實現。這讓我們能夠專注於深度學習部分。

我們選擇了純CF和混合推薦器,結合CF和CBF作為基線。我們使用mean average precision @k (MAP@k)來測量相關性。

我們使用不同的k查看評估,而k=5最接近我們在mobile.de中的用例。在這種情況下,深度學習推薦器的性能比傳統CF高出近143%。我們還將強大的混合推薦器提高了73%。查看下圖中的總體結果,有人可能會說,MAP@5的約1.05%看起來不是很好,但有兩點值得注意。首先,考慮到數據的巨大稀疏性、我們對小時間跨度和有限用戶子集的限制,絕對值的範圍被人為地保持在較低的水平。其次,重要的一點是相對增長,這相當於推薦相關性翻倍了。

但相關性只是硬幣的一面。儘管還有許多其他目標,但是這裡特別關注的是「可擴展性」。由於有了候選項集合,我們能夠在幾十毫秒內生成相關的推薦,並擴展到數百萬用戶和物品—儘管不斷更新的車輛特徵使這一點變得困難。

結論

我們看到,深度學習是實現更好的個性化服務的偉大工具。在mobile.de,我們目前正在將我們的方法投入生產,以幫助我們的客戶快速找到他們理想的汽車。使用TensorFlow service,可以方便地為生產中的模型提供服務,並順利地修改它們。我們還考慮將該模型用於其他目的,比如改進搜索結果,利用用戶信息提高搜索結果的相關性。用阿蘭·圖靈的話來說:「我們只能看到前方很短的距離,但我們可以看到很多需要做的事情。「

英文原文:https://ebaytech.berlin/deep-learning-for-recommender-systems-48c786a20e1a

請長按或掃描二維碼關注本公眾號

文章來源: https://twgreatdaily.com/UOVo-20BMH2_cNUgYOjj.html