深度學習word2vec筆記之應用篇

深度學習word2vec筆記之應用篇

聲明:

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的資料。

文章來源:http://blog.csdn.net/mytestmy/article/details/38612907

發佈了19 篇原創文章 · 獲贊 71 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章