1. 程式人生 > >深度學習在推薦系統上的應用

深度學習在推薦系統上的應用

深度學習最近大紅大紫,深度學習的爆發使得人工智慧進一步發展,阿里、騰訊、百度先後建立了自己的AI Labs,就連傳統的廠商OPPO、VIVO都在今年開始籌備建立自己的人工智慧研究所。

確實深度學習很火,近期深度學習的戰火燒到推薦系統,其強大的表徵能力和低准入門檻,已經成為各大高校和中國人改網路發paper的紅利時代。可是我還沒能發上那麼幾篇,之前面試大廠的AI labs被總監虐,感覺工作之後被壓榨太多,快乾了。

推薦系統為什麼引入深度學習?

為什麼我們會想到使用深度學習去處理推薦系統裡面的事情呢,推薦系統從基於內容的推薦,到協同過濾的推薦,協同過濾的推薦在整個推薦演算法領域裡獨領風燒了多年,從基本的基於使用者的協同過濾,基於item的協同過濾,到基於model的協同過濾等眾多演算法的延伸。或許深度學習在推薦系統裡面沒有像影象處理演算法那樣一枝獨秀,但是深度學習對於推薦系統的幫助確實起到了,推波助瀾的功效。下面我們可以來看一下推薦系統使用深度學習的原因。

  • 能夠直接從內容中提取特徵,表徵能力強

  • 容易對噪聲資料進行處理,抗噪能量強

  • 可以使用RNN迴圈神經網路對動態或者序列資料進行建模

  • 可以更加準確的學習user和item的特徵

  • 深度學習便於對負責資料進行統一處理


640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

深度推薦系統

實際上深度學習在自然語言處理,影象處理,影象識別等領域迅猛發展的近4年來,深度學習在其他領域,例如強化學習,推薦系統也得到快速的發展。下面我們來看一下深度學習在推薦系統當中的一些應用,其主要分為5大類別,下面我們會重點介紹4個類別,分別是:

  • Learning item embeddings

  • Deep Collaborative filtering 深度協同過濾

  • Feature extraction directly from content 從內容中提取特徵

  • Session-based recommendation with RNN 使用RNN從會話中推薦

  • hybird combination algorithm 混合基於深度學習的推薦系統


640?wx_fmt=jpeg

1. Learning item embeddings & 2VEC models

Embedding 其實就是從輸入資料中學習到另外一組向量值的過程,通過另外一組向量去表達原來實際的向量。

在推薦系統裡面我們經常會使用基於矩陣分解的協同過濾的方法,去得到Latent feature vector,也就是潛在特徵向量。

這麼一說可能會比較含糊,embedding到底對推薦系統來說有什麼用,其實1)在更加高階的演算法那中對item進行表徵。2)能夠用於item to item的推薦演算法。

1.1 Embedding as MF

在推薦系統中我們現在常用的方法有矩陣分解 Matrix Factorization,MF。而矩陣分解實際上就是學習user & item的embedding向量。

學習相似特徵

我們可以通過深度學習去矩陣分解演算法中相類似的特徵向量。其中包括items vector, user vector, 使用者偏好向量。

640?wx_fmt=jpeg

MF可以看做一個簡單的神經網路

為什麼這麼說呢,其實我們可以這麼來看,矩陣分解之於神經網路。輸入是一個one-hot編碼的使用者id,對於資料的隱層權重向量來說是代表使用者特徵矩陣。對於隱層則可以是代表使用者特徵向量 user feature vector,對於隱層的輸出權重向量來說代表item特徵矩陣, Item feature maxtrix。最後該神經網路的輸出則是使用者對於該item的偏好。

640?wx_fmt=jpeg

1.2 Word2Vec

word2vec 對於做自然語言處理的人們來說,自然熟悉不過了。我覺得自己好多廢話,word2vec顧名思義就是把單詞編碼成向量,例如單詞 "拉稀" 編碼成 [0.4442, 0.11345]。

Word2Vec是從大量文字語料中以無監督的方式學習語義知識的一種模型,它被大量地用在自然語言處理(NLP)中。那麼它是如何幫助我們做自然語言處理呢?Word2Vec其實就是通過學習文字來用詞向量的方式表徵詞的語義資訊,即通過一個嵌入空間使得語義上相似的單詞在該空間內距離很近。Embedding其實就是一個對映,將單詞從原先所屬的空間對映到新的多維空間中,也就是把原先詞所在空間嵌入到一個新的空間中去。

Word2Vec模型中,主要有Skip-Gram和Continous Bag of Words (CBOW)兩種模型,從直觀上理解,Skip-Gram是給定input word來預測上下文。而CBOW是給定上下文,來預測input word。

Word2Vec-Continous Bag of Words (CBOW)

Continous Bag of Words 連續詞包的目標是使得給定上下文的目標詞概率最大化。對於這樣的深度學習模型來說,輸入是經過one-hot編碼的向量;經過神經網路的第一層E處,是對單詞one-hot向量的embedding操作;對於中間隱層,是上下文的壓縮編碼特徵;經過softmax轉變後得到給定語料單詞的最大似然估計。

640?wx_fmt=jpeg

上面就是word2vec的一個簡單過程,經過上面過程我們可以對單詞進行編碼,然後對所有單詞進行彙總求和分類,得到最後的語料向量。

640?wx_fmt=jpeg

Word2Vec-skip gram

skip-gram與CBOW相比,只有細微的不同。skip-gram的輸入是當前詞的詞向量,而輸出是周圍詞的詞向量。也就是說,通過當前詞來預測周圍的詞。

640?wx_fmt=jpeg

其中word2Vec部分與CBOW相同,但是根據論文和實踐證明,skip-gram的方式得到的準確率會更高。表徵能力也更強。

640?wx_fmt=jpeg

1.3 xxx2vec

當然,最常用的是上面2中,但是不乏近年來又衍生了更多的2vec變種,例如有的利用段落資訊,有的利用整個文字的資訊,有的則是在更高維度的item上進行2vec操作。下面我們一起來看看更多的衍生演算法,至於說哪個演算法哪個實現方式更好?筆者覺得應該尊重原資料,建立在理解業務的基礎上進行操作,例如對於短視訊的推薦與對於電影的推薦是不同,短視訊有其特別的屬性,例如搞笑、時間短、標題黨等諸多屬性需要去做去噪等工作。

640?wx_fmt=jpeg

其中有Paragraph2vec基於CBOW,把段落的ID作為屬性也納入計算當中。

640?wx_fmt=jpeg

不過我們也可以像Content2Vec或者meta-prod2vec那樣組合更多的特徵進行處理,在這裡以後再也不要說深度學習不需要特徵工程時間了,深度學習的表徵能力很好,但是工程師們仍然需要耗費大量的時間在選擇特徵這一件事情上,不懂特徵工程的機器學習工程師不是好的機器學習工程師。

2. Deep Collaborative Filtering, DCL

深度協同過濾,一聽名字就覺得逆天炸地。

2.1 Auto-encoders

Model-based方法的目的就是學習到User的隱向量矩陣U與Item的隱向量矩陣V。我們可以通過深度學習來學習這些抽象表示的隱向量。

Autoencoder(AE)是一個無監督學習模型,它利用反向傳播演算法,讓模型的輸出等於輸入。Autoencoder利用AE來預測使用者對物品missing的評分值,該模型的輸入為評分矩陣R中的一行(User-based)或者一列(Item-based),其目標函式通過計算輸入與輸出的損失來優化模型,而R中missing的評分值通過模型的輸出來預測,進而為使用者做推薦。

原論文的思路如下所示,對於autoencoders是一個自動編解碼器,對於同源編解碼器的訓練學習過程中,我們的輸入等於輸出,中間編碼向量作為特徵向量。

640?wx_fmt=jpeg

該神經網路設計的編解碼器一般只有3層,編碼層(輸入層),隱層,解碼層(輸出層)。

640?wx_fmt=jpeg

stacked denoising autoencoders

自從Autoencoders出現之後,確實是個好思想,但是後面我們迎來了DCL的黃金時代,確實DCL這篇文章首次提出讓深度學習與協同過濾相結合,效果在開源資料集中取得了一點點上升,即使是一點點上升,但也是很重要的,因為把深度學習與協同過濾有機地集合了在一起。

Denoising Autoencoder(DAE)是在AE的基礎之上,對輸入的訓練資料加入噪聲。所以DAE必須學習去除這些噪聲而獲得真正的沒有被噪聲汙染過的輸入資料。因此,這就迫使編碼器去學習輸入資料的更加魯棒的表達,通常DAE的泛化能力比一般的AE強。Stacked Denoising Autoencoder(SDAE)是一個多層的AE組成的神經網路,其前一層自編碼器的輸出作為其後一層自編碼器的輸入。

640?wx_fmt=jpeg

在SDAE的基礎之上,又提出了Bayesian SDAE模型,並利用該模型來學習Item的隱向量,其輸入為Item的Side information。該模型假設SDAE中的引數滿足高斯分佈,同時假設User的隱向量也滿足高斯分佈,進而利用概率矩陣分解來擬合原始評分矩陣。該模型通過最大後驗估計(MAP)得到其要優化的目標函式,進而利用梯度下降學習模型引數,從而得到User與Item對應的隱向量矩陣。

Collaborative Recurrent Autoencoder

後來同一個作者又搗鼓出了CRAE.使用迴圈神經網路代替淺層的神經網路。看截圖的風格,可以很清晰地看到肯定是出於同一個作者之手。

640?wx_fmt=jpeg

2.2 DeepCF

下面我們要介紹幾個16-17年發表的DeepCF網路模型,雖然下面的網路模型不一定有用,但是其思想值得借鑑。

MV-DNN是基於多主題推薦,一個使用者與多個主題內容進行建模組成一個深度神經網路。有n個使用者則有n個神經網路,大量的神經網路進行組合成為一個龐大的DNN模型群。

640?wx_fmt=jpeg

TDSSM與MV-DNN有點類似,用於對使用者和item的短暫/臨時資料進行一起建模。

640?wx_fmt=jpeg

Coevolving Features匹配上使用者與item的瞬時資訊,因為其相信隨著使用者在系統的瀏覽或者購買過程中,使用者的選擇偏好會不斷改變,而所被選擇的物品也會不斷變化,這兩者是一起發生變化的co-evolutionary。

640?wx_fmt=jpeg

Product Neural Network則是把產品的目錄結構也納入神經網路中進行計算,計算的同時考慮了產品目錄結構屬性。

640?wx_fmt=jpeg

2.3 google recommendations

下面兩個是google近年來推出較為經典的使用深度學習做推薦演算法的框架。其中Wide & Deep Learning網路模型由Wide Models和Deep Models組合而成,這裡的特徵組合方式非常巧妙。

640?wx_fmt=jpeg

YouTube Recommender,在今年的推薦系統頂級會議RecSys上,Google利用DNN來做YouTube的視訊推薦。通過對使用者觀看的視訊,搜尋的關鍵字做embedding,然後在串聯上使用者的side information等資訊,作為DNN的輸入,利用一個多層的DNN學習出使用者的隱向量,然後在其上面加上一層softmax學習出Item的隱向量,進而即可為使用者做Top-N的推薦。

640?wx_fmt=jpeg
640?wx_fmt=jpeg

Content Features in recommenders

在基於內容/上下文特徵的推薦中,我們的注意力對內容/上下文centent中,例如有影象、文字、語音,這些內容都可以通過深度學習建模,獲得其高維特徵或者分類屬性,然後基於協同過濾演算法CF和基於內容的過濾演算法CBF的混合組合,進行推薦。

640?wx_fmt=jpeg

針對於影象識別一類任務,深度學習已經取得了舉足的進展。深度神經挽留過模型設計一開始的時候模型權重越多模型越大,其精度越高,後來先後出現了GoogleNet、InceptionV1、INceptionV2、InceptionV3,resNet等著名的開源深度網路架構之後,在取得相同或者更高精度之下,其權重引數不斷下降。值得注意的是,並不是意味著橫座標越往右,它的運算時間越大。在這裡並沒有對時間進行統計,而是對模型引數和網路的精度進行了縱橫對比。其中有幾個網路非常值得學習和經典的有:AlexNet、LeNet、GoogLeNet、VGG-16\VGG-19。

640?wx_fmt=jpeg

針對文字處理我們在此前已經介紹過一系列的Word2vec技術,而音訊音樂方面的內容可以使用迴圈神經網路RNN進行序列資料建模。

Session-based neural recommendation

640?wx_fmt=jpeg

首先介紹下 session-based 的概念:session 是伺服器端用來記錄識別使用者的一種機制。典型的場景比如購物車,服務端為特定的物件建立了特定的 Session,用於標識這個物件,並且跟蹤使用者的瀏覽點選行為。我們這裡可以將其理解為具有時序關係的一些記錄序列。

傳統的兩類推薦方法——基於內容的推薦演算法和協同過濾推薦演算法(model-based,memory-based)在刻畫序列資料中存在缺陷:每個 item 相互獨立,不能建模 session 中 item 的連續偏好資訊。

640?wx_fmt=jpeg

在模型構建的時候,上圖使用了GRU,但是我們可以有很多選擇例如LSTM等,當然這些模型神經元的選擇主要原因是為了防止梯度消散對長時間序列記憶力下降而出現的。

我們出現了基於時間序列資料建模的迴圈神經網路RNN,把使用者的session資訊看作是歷史序列資料,使用者的行為CTR作為迴圈神經網路RNN的預測輸出。

640?wx_fmt=jpeg

總結

本文介紹了一些深度學習在推薦領域的應用,我們發現一些常見的深度模型(DNN, AE, CNN等)都可以應用於推薦系統中,但是針對不同領域的推薦,我們需要更多的高效的模型。隨著深度學習技術的發展,我們相信深度學習將會成為推薦系統領域中一項非常重要的技術手段。

REFERENCE

  • O. Barkan, N. Koenigstein: ITEM2VEC: Neural item embedding for collaborative filtering. IEEE 26th International Workshop on Machine Learning for Signal Processing (MLSP 2016).

  • M. Grbovic, V. Radosavljevic, N. Djuric, N. Bhamidipati, J. Savla, V. Bhagwan, D. Sharp: E-commerce in Your Inbox: Product Recommendations at Scale. 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD’15).

  • Q. Le, T. Mikolov: Distributed Representations of Sentences and Documents. 31st International Conference on Machine Learning (ICML 2014). • [Mikolov et. al, 2013a] T. Mikolov, K. Chen, G. Corrado, J. Dean: Efficient Estimation of Word Representations in Vector Space. ICLR 2013 Workshop.

  • T. Mikolov, I. Sutskever, K. Chen, G. Corrado, J. Dean: Distributed Representations of Words and Phrases and Their Compositionality. 26th Advances in Neural Information Processing Systems (NIPS 2013).

  • F. Morin, Y. Bengio: Hierarchical probabilistic neural network language model. International workshop on artificial intelligence and statistics, 2005. • [Nedelec et. al, 2017] T. Nedelec, E. Smirnova, F. Vasile: Specializing Joint Representations for the task of Product Recommendation. 2nd Workshop on Deep Learning for Recommendations (DLRS 2017).

  • F. Vasile, E. Smirnova, A. Conneau: Meta-Prod2Vec – Product Embeddings Using Side-Information for Recommendations. 10th ACM Conference on Recommender Systems (RecSys’16).

出處:https://zhuanlan.zhihu.com/p/33214451

版權申明:內容來源網路,版權歸原創者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除並表示歉意。謝謝。

640?wx_fmt=png

架構文摘

ID:ArchDigest

網際網路應用架構丨架構技術丨大型網站丨大資料丨機器學習

640?wx_fmt=jpeg

更多精彩文章,請點選下方:閱讀原文