深度學習word2vec筆記之應用篇

garfielder007發表於2016-05-08

宣告:

1)該博文是Google專家以及多位博主所無私奉獻的論文資料整理的。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻

2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應,更有些部分本來就是直接從其他部落格複製過來的。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系老衲刪除或修改,直到相關人士滿意為止。

3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。

4)閱讀本文需要機器學習、概率統計演算法等等基礎(如果沒有也沒關係了,沒有就看看,當做跟同學們吹牛的本錢),基礎篇url:http://blog.csdn.net/mytestmy/article/details/26961315

5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。請直接回帖,本人來想辦法處理。

6)本人手上有word版的和pdf版的,有必要的話可以上傳到csdn供各位下載。



好不容易學了一個深度學習的演算法,大家是否比較爽了?但是回頭想想,學這個是為了什麼?吹牛皮嗎?寫論文嗎?參加競賽拿獎嗎?

不管哪個原因,都顯得有點校園思維了。

站在企業的層面,這樣的方式顯然是不符合要求的,如果只是學會了,公式推通了,但是沒有在工作中應用上,那會被老大認為這是沒有產出的。沒有產出就相當於沒有幹活,沒有幹活的話就……呃……不說了。

下面就給大家弄些例子,說說在網際網路廣告這一塊的應用吧。

 

一.對廣告主的輔助

1.1基本概念

網際網路廣告的廣告主其實往往有他們的困惑,他們不知道自己的目標人群在哪裡。所謂目標人群,就是廣告主想向他們投廣告的那幫人。就像網際網路廣告的一個大牛的一句名言——我知道網際網路廣告有一半是浪費的,問題是我不知道是哪一半。

這個困惑就給媒體帶來一個義務——要幫助廣告主定向他們的目標人群。

對於普通的廣告主來說,比如說一個化妝品廣告的廣告主,它的目標人群很明顯就是年輕的女性。注意關鍵詞“年輕”和“女性”,這是決定媒體這邊能否賺到錢的關鍵詞。要知道對於媒體來說,廣告主是它們的客戶,滿足客戶的要求,客戶就給它們錢,不滿足客戶的要求,就沒有人為媒體買單;沒有人為媒體買單,媒體就沒有錢養它們的員工和機器,也弄不來新聞和網際網路的其他內容,那樣媒體公司就垮了……

那麼在媒體這邊,需要做的的工作就很明確了——滿足它們的客戶(也就是廣告主)的需求。怎麼滿足呢?這工作說容易也容易,說簡單也簡單,就是把喜歡這個廣告主的廣告的人找出來,然後幫這個廣告主把他們的廣告投放給這些人,讓這些人看到這個廣告主的廣告。

這個工作帶來的問題就真多了,媒體又不是什麼神人,比如說一個新聞網站,瀏覽這個網站的每天有100萬人,這個新聞網站的員工不可能一個個去訪問他們的使用者(瀏覽這個網站的人),整天問他們你喜不喜歡化妝品啊,喜不喜歡體育啊之類的問題。

那怎麼辦呢?媒體的員工只好猜了,但是哪怕是猜都很費勁,想想都頭疼,一百萬人啊,一個個猜也得吃力不討好啊。這時候計算機的作用就來了,用計算機猜嘛,而且不一定需要全部瞎猜的,因為使用者如果註冊了的話,還有一些使用者的個人資訊可以參考的。一般的網站註冊的時候都要求提供年齡性別之類的個人資訊,有時候要要求寫一些個人的興趣什麼的標籤。這個時候這些資料就用上大用處了。

網站可以把註冊使用者的個人資訊儲存下來,然後提供廣告主選擇。如上面的那個化妝品的廣告主,它就可以跟媒體提它的要求——我要向年輕的女性投放廣告。媒體這個時候就可以提供一些條件給這個廣告主選擇,如媒體說我有很多使用者,18到80歲的都有,然後男性女性使用者都有。廣告主就可以根據這些條件選擇自己的目標使用者,如選擇了18到30歲的女性使用者作為目標人群。選中了目標人群后,廣告主和媒體就可以談價錢了,談好了價錢廣告主就下單,然後媒體就幫廣告主投廣告,然後媒體的錢就賺到了。

 

1.2興趣挖掘的必要性

上面多次提到的“目標人群”,就是廣告主最關心的事情。客戶最關心的事情自然也是媒體最關心的事情。所以媒體會盡力幫助它們的客戶去定向它們的目標人群。

一般所謂的定向也不是媒體親自有一個人來跟廣告主談的,是媒體建立好一個頁面,這個頁面上有一些選項,比如年齡,性別,地域什麼的,都是條件。廣告主在上面把自己的目標人群符合的條件輸入,然後下單購買向這些人投放廣告的機會。

媒體為了更好地賺錢,肯定是願意把這個頁面上的條件做得更加豐富一點,讓更多的廣告主覺得這個網站的使用者裡面有它們的目標人群,從而讓更多的廣告主願意過來下單。

廣告主的定向其實有粗細之分的,有些廣告主粗放點,它們有錢,選的定向條件比較寬,就說女性的使用者,全部都投放;有些就定向得比較窄,比如說,北京的20到25歲的女性,並且要喜歡羽毛球的使用者。對於定向寬的廣告主好處理,問題就是這些定向窄的廣告主,它們還希望知道使用者的興趣所在,這就麻煩了。

為啥麻煩呢?一個使用者的興趣鬼才知道呢。就算當面問,人家也不樂意回答,何況就憑藉一點點東西瞎猜。但是為了賺錢,瞎猜也得上的了,工業界為了賺這個錢,誕生了整整一個行業——資料探勘,甚至在學術界還有一個更加生猛的名字——機器學習。學術界的那個名字和解釋都是相當大氣的:讓機器學會像人一樣思考。工業界就務實一點,只是對資料內容本身做一個挖掘,獲取到啥呢?一般就是使用者的興趣啊,愛好啊什麼的。這些東西供誰使用呢?暫時看來只有廣告主願意為這些掏錢,其他的就有些媒體做來讓自己推薦的內容不至於讓使用者那麼反感而已。

上面有個名詞“資料”,沒錯了,這個詞是網際網路廣告業,甚至是資料探勘行業的核心的東西。所謂資料,這裡簡單點說就可以認為是使用者的年齡、性別、地域等使用者的基本屬性;複雜點說可以說是使用者興趣、愛好,瀏覽記錄等;更高階的有使用者的交易資料(當然這個高階的資料很少媒體能搞得到)等。

解釋完“資料”這個詞,結合一下廣告這個場景,就可以得到活在媒體公司裡面的網際網路廣告行業資料探勘工程師的工作是什麼了。他們的工作就是:根據使用者自身的基本屬性和使用者流量的網頁記錄以及內容,想方設法讓計算機猜出使用者的興趣愛好。使用者的興趣愛好“挖掘”出來後,就可以作為定向條件放到上面說的那個網頁上面供廣告主選擇了。這事情整好了,廣告投了有人點選,公司的錢就賺到了;沒整好,廣告沒人點選,廣告主不樂意下單了,公司就賺不到錢……怎麼著?炒這些工程師的魷魚去。

上面可以看到了,輔助廣告主定位它們的目標人群是很重要的。

經過一番的探索,word2vec在網際網路廣告上面也是可以輔助廣告主定向他們的目標人群的,下面就講講這個演算法在網際網路廣告的應用吧。

1.3利用word2vec給廣告主推薦使用者

為了用上word2vec,把場景轉換到一個新聞媒體如A公司。

在A公司的多個頁面中,電商公司B有他們的一個主頁,專門介紹他們公司一些產品促銷,搶購和釋出會什麼的。

公司A目前有很多使用者的瀏覽資料,如使用者u瀏覽了公司A的頁面a1,a2,a3等。

把這些資料處理一下,整合成word2vec能處理的資料,如下

U1  a1,a2,a3……

U2  a2,a3,a5,……

U3  a1,a3,a6,……

其中u1,u2,u3表示不同的使用者,後面的一串表示這些使用者的瀏覽記錄,如U1  a1,a2,a3表示使用者u1先瀏覽了頁面a1,再瀏覽a2,然後瀏覽了a3,……

這些資料還不符合word2vec的輸入資料格式,把第一列去掉,變成下面的樣子

a1,a2,a3……

a2,a3,a5,……

a1,a3,a6,……

這些資料就可以作為word2vec的輸入資料了。

就把這些資料作為word2vec的訓練資料,詞向量維度為3,進行訓練,完成後得到下面的輸出

A1  (0.3,-0.5,0.1)

A2  (0.1,0.4,0.2)

A3  (-0.3,0.7,0.8)

……

An  (0.7,-0.1,0.3)

就得到了每個頁面的向量。

這些向量有啥意義呢?其實單個向量的意義不大,只是用這些向量可以計算一個東西——距離,這個距離是頁面之間的距離,如頁面a1和a2可以用歐式距離或者cos距離計算公式來計算一個距離,這個距離是有意義的,表示的是兩個網頁在使用者瀏覽的過程中的相似程度(也可以認為是這兩個頁面的距離越近,被同一個人瀏覽的概率越大)。注意這個距離的絕對值本身也是沒有意義的,但是這個距離的相對大小是有意義的,意思就是說,假設頁面a1跟a2、a3、a4的距離分別是0.3、0.4、0.5,這0.3、0.4、0.5沒啥意義,但是相對來說,頁面a2與a1的相似程度就要比a3和a4要大。

那麼這裡就有玄機了,如果頁面a1是電商公司B的主頁,頁面a2、a3、a4與a1的距離在所有頁面裡面是最小的,其他都比這三個距離要大,那麼就可以認為同一個使用者u瀏覽a1的同時,瀏覽a2、a3、a4的概率也比較大,那麼反過來,一個使用者經常瀏覽a2、a3、a4,那麼瀏覽a1的概率是不是也比較大呢?從實驗看來可以這麼認為的。同時還可以得到一個推論,就是使用者可能會喜歡a1這個頁面對應的廣告主的廣告。

這個在實驗中實際上也出現過的。這裡模擬一個例子吧,如a1是匹克體育用品公司在媒體公司A上的官網,a2是湖人隊比賽資料頁,a3是熱火隊的灌水討論區,a4是小牛隊的球員討論區。這個結果看起來是相當激動人心的。

根據這樣的一個結果,就可以在廣告主下單的那個頁面上增加一個條件——經常瀏覽的相似頁面推薦,功能就是——在廣告主過來選條件的時候,可以選擇那些經常瀏覽跟自己主頁相似的頁面的使用者。舉個例子就是,當匹克體育用品公司來下單的時候,頁面上給它推薦了幾個經常瀏覽頁面的粉絲:湖人隊比賽資料頁,熱火隊的灌水討論區,小牛隊的球員討論區。意思是說,目標人群中包括了經常瀏覽這三個頁面的人。

這個功能上線後是獲得過很多廣告主的好評的。

這樣word2vec這個演算法在這裡就有了第一種用途。

 

二. 對ctr預估模型的幫助

根據另一篇博文《網際網路廣告綜述之點選率系統》,裡面需要計算的使用者對某廣告的ctr。在實際操作的時候,這個事情也是困難重重的,其中有一個冷啟動問題很難解決。冷啟動問題就是一個廣告是新上線的,之前沒有任何的歷史投放資料,這樣的廣告由於資料不足,點選率模型經常不怎麼湊效。

但是這個問題可以使用同型別廣告點選率來緩解,意思就是拿一個同行的廣告的各種特徵作為這個廣告的特徵,對這個新廣告的點選率進行預估。

同行往往太粗糙,那麼怎麼辦呢?可以就利用跟這個廣告主比較相似的廣告的點選率來預估一下這個廣告的點選率。

上面說過,可以得到每個頁面的詞向量。這裡的方法比較簡單,如在媒體公司A上面有1000個廣告主,它們的主頁分別是a1、a2、……、a1000。

根據上面的方法,得到了這1000個詞向量,然後執行kmean或者其他聚類演算法,把這1000個廣告主聚成100個簇,然後每個簇裡面的廣告主看成是一個。

這裡可以模擬一個例子,聚類完成後,某個簇c裡面包含了幾個廣告主的主頁,分別是京東商城,天貓,唯品會,噹噹,聚美優品,1號店,蘑菇街,卓越,亞馬遜,淘寶這10個,這10個的目標人群看起來基本是一致的。

這裡的看成是一個簇是有意義的,比如說第一個簇c1,c1這個簇裡面的所有歷史投放資料和實時資料可以做特徵,來預估這個流量對這個簇的ctr。得到這個ctr後,就很有用了,如果某廣告投放資料比較充分,就直接預估這個廣告的ctr;如果某廣告的歷史投放資料很少,就用這個廣告主所在的簇的ctr來代替這個廣告,認為對簇的ctr就是這個廣告的ctr,這樣能讓一個新廣告也能得到相對靠譜的預估ctr,保證不至於亂投一番。

 

三.一些總結

如何應用好一個演算法,確實是很多演算法工程師的一個重大課題。

資料探勘演算法工程師經常要面對的一個難題就是:這個演算法怎麼用到我們的資料上面來?有不少同學會認為是:我到了公司,就發明一個很牛逼的演算法,把公司的原來的問題解決掉,然後大大增加了效果,獲得了領導的好評。這個天真爛漫的想法就不評價了,免得被說打擊人。網際網路企業裡面的真實情況是演算法工程師面對那一團亂遭的資料,得想盡辦法去把資料整合成能用的格式。

拿上面的(1.3)中的例子,那個把資料組合成a1,a2,a3……這樣一行行的,然後進入word2vec去進行訓練是最難想到的而且是最核心的東西,雖然明著說是word2vec這個演算法厲害,實際上面是“把資料整合成合適的方式交給word2vec進行訓練”這個想法重要,因為嘗試了很多想法,做了很多實驗才能想到這樣的一招的。

還有資料的整合其實也費了很多功夫的,比如說媒體有些使用者是一些機器的賬號,人家亂搞的,要想辦法排除掉的,而“想辦法排除”這麼簡單一句話,真正要做的工作真是多多的有。

哪怕結果都訓練出來了,怎麼解釋這個結果是好的?這個問題也是得想了一段時間的,後來是實驗發現了利用詞向量的距離來評價相似性這個東西最靠譜,然後才用上的。

一個資料探勘的過程其實不簡單,這個部落格也沒辦法一一體現做的過程裡面的那些各種折騰,各種不順暢。

資料探勘工程師經常要面對的另一個難題就是:明明理論上推得槓槓的,演算法效能也是槓槓的,但是對於網際網路廣告的效果,怎麼就那麼不鹹不淡的呢?

這個問題真沒有什麼統一的答案,這種現象多了去了。經常遇到的原因有:資料本身處理的方式不對和演算法不合適。

所謂資料本身處理的方式,可以參看博文《網際網路廣告綜述之點選率特徵工程》,裡面說的那些方法不是從哪本書上面看到的,是經過比較長時間實踐,然後各種折騰,各種特徵取捨,各種胡思亂想,各種坑踩出來的。可能志在學術的人看起來都簡單,實際上課本那些東西,學生們吹起牛皮來不眨眼的那些東西,一跟真實應用場景結合起來就各種坑要踩的了。

拿上面的(二)中的例子來看。方法簡單得不得了,但是可以想象一下,word2vec牛逼啊,kmeans牛逼啊,第一次聚類出來的結果也不過如此。後來又加入了每個廣告主的行業和地域作為特徵,而且這個加特徵,就是直接把行業和地域處理一下,連線到廣告主的詞向量後面的。如a1的詞向量是(0.3,-0.5,0.1),然後假設只有兩個行業,體育和化妝品,處理成二值特徵,佔據第4和5兩個index,第4個特徵為1,第5個特徵為0表示體育類廣告主,反過來,第4個特徵為0,第5個特徵為1表示化妝品;再對地域的下標做了一下處理,成為二值特徵,比如說佔據了6到10這5個位置(假設第6個位置為1,其餘7到10為0表示北京;第7個位置為1,其餘為0表示廣東,以此類推)。

經過了上面的處理,再用kmeans進行聚類,從聚類後一個個簇去看,結果看起來才順眼了很多。上面的行業和地域特徵的加入,也是用了比較多的經驗的,不是憑空亂整出來的一個吹牛皮的東西,當然誰有更好的方法,也可以提出來試試看。另外還希望大家注意關鍵字“一個個簇去看”,這個工作真是費時費力,比較辛苦的。

以上舉了一些例子,也把網際網路廣告的資料探勘演算法工程師的一些工作中的成功和不成功的地方都說出來了,基本上算是實話實說,希望對大家有點幫助吧。有過類似經歷的人能看懂,沒啥興趣的就呵呵吧。

 

 

致謝

多位同事提供的建議與指導。

多位google研究員有關word2vec的資料。


from: http://blog.csdn.net/mytestmy/article/details/38612907

相關文章