本文做者:在線實驗室javascript
文章結構:html
背景介紹——效果展現——模型概覽——數據準備——訓練模型——應用模型——總結——參考文獻java
本教程源代碼目錄在book/recommender_system,初次使用請您參考Book文檔使用說明。git
背景介紹github
在網絡技術不斷髮展和電子商務規模不斷擴大的背景下,商品數量和種類快速增加,用戶須要花費大量時間才能找到本身想買的商品,這就是信息超載問題。爲了解決這個難題,個性化推薦系統(Recommender System)應運而生。web
個性化推薦系統是信息過濾系統(Information Filtering System)的子集,它能夠用在不少領域,如電影、音樂、電商和 Feed 流推薦等。個性化推薦系統經過分析、挖掘用戶行爲,發現用戶的個性化需求與興趣特色,將用戶可能感興趣的信息或商品推薦給用戶。與搜索引擎不一樣,個性化推薦系統不須要用戶準確地描述出本身的需求,而是根據用戶的歷史行爲進行建模,主動提供知足用戶興趣和需求的信息。跨域
1994年明尼蘇達大學推出的GroupLens系統[1]通常被認爲是個性化推薦系統成爲一個相對獨立的研究方向的標誌。該系統首次提出了基於協同過濾來完成推薦任務的思想,此後,基於該模型的協同過濾推薦引領了個性化推薦系統十幾年的發展方向。網絡
傳統的個性化推薦系統方法主要有:ide
近些年來,深度學習在不少領域都取得了巨大的成功。學術界和工業界都在嘗試將深度學習應用於個性化推薦系統領域中。深度學習具備優秀的自動提取特徵的能力,可以學習多層次的抽象特徵表示,並對異質或跨域的內容信息進行學習,能夠必定程度上處理個性化推薦系統冷啓動問題[6]。本教程主要介紹個性化推薦的深度學習模型,以及如何使用PaddlePaddle實現模型。函數
效果展現
咱們使用包含用戶信息、電影信息與電影評分的數據集做爲個性化推薦的應用場景。當咱們訓練好模型後,只須要輸入對應的用戶ID和電影ID,就能夠得出一個匹配的分數(範圍[0,5],分數越高視爲興趣越大),而後根據全部電影的推薦得分排序,推薦給用戶可能感興趣的電影。
Input movie_id: 1962 Input user_id: 1 Prediction Score is 4.25
模型概覽
本章中,咱們首先介紹YouTube的視頻個性化推薦系統[7],而後介紹咱們實現的融合推薦模型。
YouTube的深度神經網絡個性化推薦系統
YouTube是世界上最大的視頻上傳、分享和發現網站,YouTube個性化推薦系統爲超過10億用戶從不斷增加的視頻庫中推薦個性化的內容。整個系統由兩個神經網絡組成:候選生成網絡和排序網絡。候選生成網絡從百萬量級的視頻庫中生成上百個候選,排序網絡對候選進行打分排序,輸出排名最高的數十個結果。系統結構如圖1所示:
圖1. YouTube 個性化推薦系統結構
候選生成網絡(Candidate Generation Network)
候選生成網絡將推薦問題建模爲一個類別數極大的多類分類問題:對於一個Youtube用戶,使用其觀看歷史(視頻ID)、搜索詞記錄(search tokens)、人口學信息(如地理位置、用戶登陸設備)、二值特徵(如性別,是否登陸)和連續特徵(如用戶年齡)等,對視頻庫中全部視頻進行多分類,獲得每一類別的分類結果(即每個視頻的推薦機率),最終輸出機率較高的幾百個視頻。
首先,將觀看歷史及搜索詞記錄這類歷史信息,映射爲向量後取平均值獲得定長表示;同時,輸入人口學特徵以優化新用戶的推薦效果,並將二值特徵和連續特徵歸一化處理到[0, 1]範圍。接下來,將全部特徵表示拼接爲一個向量,並輸入給非線形多層感知器(MLP,詳見識別數字教程)處理。最後,訓練時將MLP的輸出給softmax作分類,預測時計算用戶的綜合特徵(MLP的輸出)與全部視頻的類似度,取得分最高的kk個做爲候選生成網絡的篩選結果。圖2顯示了候選生成網絡結構。
圖2. 候選生成網絡結構
對於一個用戶UU,預測此刻用戶要觀看的視頻ωω爲視頻ii的機率公式爲:
其中uu爲用戶UU的特徵表示,VV爲視頻庫集合,vivi爲視頻庫中第ii個視頻的特徵表示。uu和vivi爲長度相等的向量,二者點積能夠經過全鏈接層實現。
考慮到softmax分類的類別數很是多,爲了保證必定的計算效率:1)訓練階段,使用負樣本類別採樣將實際計算的類別數縮小至數千;2)推薦(預測)階段,忽略softmax的歸一化計算(不影響結果),將類別打分問題簡化爲點積(dot product)空間中的最近鄰(nearest neighbor)搜索問題,取與uu最近的kk個視頻做爲生成的候選。
排序網絡(Ranking Network)
排序網絡的結構相似於候選生成網絡,可是它的目標是對候選進行更細緻的打分排序。和傳統廣告排序中的特徵抽取方法相似,這裏也構造了大量的用於視頻排序的相關特徵(如視頻 ID、上次觀看時間等)。這些特徵的處理方式和候選生成網絡相似,不一樣之處是排序網絡的頂部是一個加權邏輯迴歸(weighted logistic regression),它對全部候選視頻進行打分,從高到底排序後將分數較高的一些視頻返回給用戶。
融合推薦模型
本節會使用卷積神經網絡(Convolutional Neural Networks)來學習電影名稱的表示。下面會依次介紹文本卷積神經網絡以及融合推薦模型。
文本卷積神經網絡(CNN)
卷積神經網絡常常用來處理具備相似網格拓撲結構(grid-like topology)的數據。例如,圖像能夠視爲二維網格的像素點,天然語言能夠視爲一維的詞序列。卷積神經網絡能夠提取多種局部特徵,並對其進行組合抽象獲得更高級的特徵表示。實驗代表,卷積神經網絡能高效地對圖像及文本問題進行建模處理。
卷積神經網絡主要由卷積(convolution)和池化(pooling)操做構成,其應用及組合方式靈活多變,種類繁多。本小結咱們以如圖3所示的網絡進行講解:
圖3. 卷積神經網絡文本分類模型
假設待處理句子的長度爲nn,其中第ii個詞的詞向量爲xi∈ℝkxi∈Rk,kk爲維度大小。
首先,進行詞向量的拼接操做:將每hh個詞拼接起來造成一個大小爲hh的詞窗口,記爲xi:i+h−1xi:i+h−1,它表示詞序列xi,xi+1,…,xi+h−1xi,xi+1,…,xi+h−1的拼接,其中,ii表示詞窗口中第一個詞在整個句子中的位置,取值範圍從11到n−h+1n−h+1,xi:i+h−1∈ℝhkxi:i+h−1∈Rhk。
其次,進行卷積操做:把卷積核(kernel)w∈ℝhkw∈Rhk應用於包含hh個詞的窗口xi:i+h−1xi:i+h−1,獲得特徵ci=f(w⋅xi:i+h−1+b)ci=f(w⋅xi:i+h−1+b),其中b∈ℝb∈R爲偏置項(bias),ff爲非線性激活函數,如sigmoidsigmoid。將卷積核應用於句子中全部的詞窗口x1:h,x2:h+1,…,xn−h+1:nx1:h,x2:h+1,…,xn−h+1:n,產生一個特徵圖(feature map):
接下來,對特徵圖採用時間維度上的最大池化(max pooling over time)操做獲得此卷積覈對應的整句話的特徵ĉ c^,它是特徵圖中全部元素的最大值:
融合推薦模型概覽
在融合推薦模型的電影個性化推薦系統中:
首先,使用用戶特徵和電影特徵做爲神經網絡的輸入,其中:
用戶特徵融合了四個屬性信息,分別是用戶ID、性別、職業和年齡。
電影特徵融合了三個屬性信息,分別是電影ID、電影類型ID和電影名稱。
對用戶特徵,將用戶ID映射爲維度大小爲256的向量表示,輸入全鏈接層,並對其餘三個屬性也作相似的處理。而後將四個屬性的特徵表示分別全鏈接並相加。
對電影特徵,將電影ID以相似用戶ID的方式進行處理,電影類型ID以向量的形式直接輸入全鏈接層,電影名稱用文本卷積神經網絡獲得其定長向量表示。而後將三個屬性的特徵表示分別全鏈接並相加。
獲得用戶和電影的向量表示後,計算兩者的餘弦類似度做爲個性化推薦系統的打分。最後,用該類似度打分和用戶真實打分的差別的平方做爲該回歸模型的損失函數。
圖4. 融合推薦模型
參考文獻
本教程 由 PaddlePaddle 創做,採用 知識共享 署名-相同方式共享 4.0 國際 許可協議進行許可。