為什么要用深度學習來做個性化推薦 CTR 預估
深度學習應該這一兩年計算機圈子里最熱的一個詞了。基于深度學習,工程師們在圖像,語音,NLP等領域都取得了令人振奮的進展。而深度學習本身也在不斷的探索和發(fā)展中,其潛力的極限目前還沒有被看到。
當然,深度學習也不是***的,比如有很多問題的特征是易于提取的,我們可以直接使用SVM, 決策樹的算法來取得很好的結果。而深度學習并不能提供太多的幫助。還有一些問題,我們并沒有足夠數(shù)量的數(shù)據(jù),我們也很難通過深度學習算法來得到可用的模型。此外,有些問題對計算資源和時間的要求比較嚴苛,在深度學習小型化沒有取得突破性進展的時候,它們也不是***方法。
判斷一個項目適不適合上深度學習的正確姿勢
( 圖片來源 : 深度學習防騙指南 )
反過來說,雖然目前深度學習在個性化推薦,計算廣告領域上還沒有很大的突破,但是我認為推薦系統(tǒng)有很大概率會是深度學習的最重要的應用場景之一。理由有以下幾個方面:
現(xiàn)在的推薦系統(tǒng)都要面對海量的數(shù)據(jù),要提取上萬乃至上億維的特征。而深度學習本身就是一個很好的表示學習的框架,從海量的數(shù)據(jù)中學習到人類無法提取的特征組合,是其擅長的事情。
( 圖片來源 : 深度學習防騙指南 )
數(shù)據(jù)和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。現(xiàn)有的推薦系統(tǒng)依賴于特征工程的效果。而特征工程建立在不斷的深入理解問題和獲取額外的數(shù)據(jù)源上。然而根據(jù)數(shù)據(jù)人能抽象出來的特征總類很有限,新數(shù)據(jù)源和新特征的獲得會越來越難。隨著人工特征工程的深入,投入的人力和時間越來越長,得到的新特征對系統(tǒng)的提升卻越來越少。這個時候,使用深度學習來做特征表達,在成本上也許是一個更好的選擇。
圖:IBM Watson系統(tǒng)的精度提升曲線。可以看到一開始的時候結果提升的特別快,后面一點點的提升都要付出很大的努力,
因此我們基于Tensorflow在某個業(yè)務上做了DNN的嘗試,跑通了整個流程,積累了一些經(jīng)驗。也比原有LR的模型在線上有了20%多的提升。希望這些代碼也可以幫助各位同學快速的在自己的業(yè)務上實現(xiàn)一套深度模型的框架。
圖: DNN在CTR預估的一般框架
一般來說,我們可以先選擇一個比較簡單的框架來跑通整個流程,然后再慢慢增加模型的復雜度。通常我們可以選用下圖的框架,把我們用到的數(shù)據(jù)分為兩類:連續(xù)的,和離散的特征。
對于連續(xù)的特征,需要做一些歸一化;對于離散的特征,則一般要做一個Embedding,把一個離散的特征轉成一個N維的向量。這個向量的長度一般來說是和該向量的取值空間成正比的。這個embedding的過程可以用FM來實現(xiàn)。 在我們的代碼里,是通過Tensorflow自動embedding_column實現(xiàn)的。
所以把用戶數(shù)據(jù)和推薦的物品數(shù)據(jù)放一起分成兩類,然后把embedded之后的離散特征 和 連續(xù)特征組合在一起,作為神經(jīng)網(wǎng)絡的輸入,輸出就是[0,1] 是否點擊。這里面我們就直接調(diào)用tensorflow的DNNClassifier。這個網(wǎng)絡可以設計層數(shù),每層的大小,dropout, 激活函數(shù),學習率等等。
- opt = tf.train.AdamOptimizer(learning_rate=0.01,
- beta1=0.9,
- beta2=0.999) # default 0.001 0.9 0.999
- m = tf.contrib.learn.DNNClassifier(model_dir=model_dir,
- feature_columns=deep_columns,
- hidden_units=[1024, 512, 256],
- optimizer = opt,
- activation_fn=tf.nn.relu, # default
- dropout=0.05 )
所以后面就是一個不斷調(diào)參的過程,當然這個調(diào)參也是有一些技巧。網(wǎng)上有很多,在這里就不一一來說了。
深度學習調(diào)參師
( 圖片來源 : 深度學習防騙指南 )
總的來說,深度學習沒有那么神秘,它是一個很有效的工具。在個性化推薦上應該已經(jīng)有很多團隊進行了很多嘗試。在這里,我們給出了一個簡單和有效的基于Tensorflow的實現(xiàn)方式,也希望可以幫助一些想要嘗試深度學習的一些團隊。
原文鏈接:https://cloud.tencent.com/community/article/603674
作者:蘇博覽
【本文是51CTO專欄作者“騰訊云技術社區(qū)”的原創(chuàng)稿件,轉載請通過51CTO聯(lián)系原作者獲取授權】