摘要:調研首先要確定微博領域的數據,關于微博的數據可以這樣分類用戶基礎數據年齡性別公司郵箱地點公司等。這意味著深度學習在推薦領域應用的關鍵技術點已被解決。
當2012年Facebook在廣告領域開始應用定制化受眾(Facebook Custom Audiences)功能后,“受眾發現”這個概念真正得到大規模應用,什么叫“受眾發現”?如果你的企業已經積累了一定的客戶,無論這些客戶是否關注你或者是否跟你在Facebook上有互動,都能通過Facebook的廣告系統觸達到。“受眾發現”實現了什么功能?在沒有這個系統之前,廣告投放一般情況都是用標簽去區分用戶,再去給這部分用戶發送廣告,“受眾發現”讓你不用選擇這些標簽,包括用戶基本信息、興趣等。你需要做的只是上傳一批你目前已有的用戶或者你感興趣的一批用戶,剩下的工作就等著Custom Audiences幫你完成了。
Facebook這種通過一群已有的用戶發現并擴展出其他用戶的推薦算法就叫Lookalike,當然Facebook的算法細節筆者并不清楚,各個公司實現Lookalike也各有不同。這里也包括騰訊在微信端的廣告推薦上的應用、Google在YouTube上推薦感興趣視頻等。下面讓我們結合前人的工作,實現自己的Lookalike算法,并嘗試著在新浪微博上應用這一算法。
調研
首先要確定微博領域的數據,關于微博的數據可以這樣分類:
用戶基礎數據:年齡、性別、公司、郵箱、地點、公司等。
關系圖:根據人?人,人?微博的關注、評論、轉發信息建立關系圖。
內容數據:用戶的微博內容,包含文字、圖片、視頻。
有了這些數據后,怎么做數據的整合分析?來看看現在應用最廣的方式——協同過濾、或者叫關聯推薦。協同過濾主要是利用某興趣相投、擁有共同經驗群體的喜好來推薦用戶可能感興趣的信息,協同過濾的發展有以下三個階段:
第一階段,基于用戶喜好做推薦,用戶A和用戶B相似,用戶B購買了物品a、b、c,用戶A只購買了物品a,那就將物品b、c推薦給用戶A。這就是基于用戶的協同過濾,其重點是如何找到相似的用戶。因為只有準確的找到相似的用戶才能給出正確的推薦。而找到相似用戶的方法,一般是根據用戶的基本屬性貼標簽分類,再高級點可以用上用戶的行為數據。
第二階段,某些商品光從用戶的屬性標簽找不到聯系,而根據商品本身的內容聯系倒是能發現很多有趣的推薦目標,它在某些場景中比基于相似用戶的推薦原則更加有效。比如在購書或者電影類網站上,當你看一本書或電影時,推薦引擎會根據內容給你推薦相關的書籍或電影。
第三階段,如果只把內容推薦多帶帶應用在社交網絡上,準確率會比較低,因為社交網絡的關鍵特性還是社交關系。如何將社交關系與用戶屬性一起融入整個推薦系統就是關鍵。在神經網絡和深度學習算法出現后,提取特征任務就變得可以依靠機器完成,人們只要把相應的數據準備好就可以了,其他數據都可以提取成向量形式,而社交關系作為一種圖結構,如何表示為深度學習可以接受的向量形式,而且這種結構還需要有效還原原結構中位置信息?這就需要一種可靠的向量化社交關系的表示方法。基于這一思路,在2016年的論文中出現了一個算法node2vec,使社交關系也可以很好地適應神經網絡。這意味著深度學習在推薦領域應用的關鍵技術點已被解決。
在實現算法前我們主要參考了如下三篇論文:
Audience Expansion for Online Social Network Advertising 2016
node2vec: Scalable Feature Learning for Networks Aditya Grover 2016
Deep Neural Networks for YouTube Recommendations 2016
第一篇論文是LinkedIn給出的,主要談了針對在線社交網絡廣告平臺,如何根據已有的受眾特征做受眾群擴展。這涉及到如何定位目標受眾和原始受眾的相似屬性。論文給出了兩種方法來擴展受眾:
1. 與營銷活動無關的受眾擴展;
2. 與營銷活動有關的受眾擴展。
圖1 LinkedIn的Lookalike算法流程圖
在圖1中,LinkedIn給出了如何利用營銷活動數據、目標受眾基礎數據去預測目標用戶行為進而發現新的用戶。今天的推薦系統或廣告系統越來越多地利用了多維度信息。如何將這些信息有效加以利用,這篇論文給出了一條路徑,而且在工程上這篇論文也論證得比較扎實,值得參考。
第二篇論文,主要講的是node2vec,這也是本文用到的主要算法之一。node2vec主要用于處理網絡結構中的多分類和鏈路預測任務,具體來說是對網絡中的節點和邊的特征向量表示方法。
簡單來說就是將原有社交網絡中的圖結構,表達成特征向量矩陣,每一個node(可以是人、物品、內容等)表示成一個特征向量,用向量與向量之間的矩陣運算來得到相互的關系。
下面來看看node2vec中的關鍵技術——隨機游走算法,它定義了一種新的遍歷網絡中某個節點的鄰域的方法,具體策略如圖2所示。
圖2 隨機游走策略
假設我們剛剛從節點t走到節點v,當前處于節點v,現在要選擇下一步該怎么走,方案如下:
其中dtx表示節點t到節點x之間的最短路徑,dtx=0表示會回到節點t本身,dtx =1表示節點t和節點x直接相連,但是在上一步卻選擇了節點v,dtx=2表示節點t不與x直接相連,但節點v與x直接相連。其中p和q為模型中的參數,形成一個不均勻的概率分布,最終得到隨機游走的路徑。與傳統的圖結構搜索方法(如BFS和DFS)相比,這里提出的隨機游走算法具有更高的效率,因為本質上相當于對當前節點的鄰域節點的采樣,同時保留了該節點在網絡中的位置信息。
node2vec由斯坦福大學提出,并有開源代碼,這里順手列出,這一部分大家不用自己動手實現了。https://github.com/aditya-grover/node2vec
注:本文的方法需要在源碼的基礎上改動圖結構。
第三篇論文講的是Google如何做YouTube視頻推薦,論文是在我做完結構設計和流程設計后看到的,其中模型架構的思想和我們不謀而合,還解釋了為什么要引入DNN(后面提到所有的feature將會合并經歷幾層全連接層):引入DNN的好處在于大多數類型的連續特征和離散特征可以直接添加到模型當中。此外我們還參考了這篇論文對于隱含層(FC)單元個數選擇。圖3是這篇論文提到的算法結構。
圖3 YouTube推薦結構圖
實現
(a)數據準備
獲得用戶的屬性(User Profile),如性別、年齡、學歷、職業、地域、能力標簽等;
根據項目內容和活動內容制定一套受眾標簽(Audience Label);
提取用戶之間的關注關系,微博之間的轉發關系;
獲取微博message中的文本內容;
獲得微博message中的圖片內容。
(b)用戶標簽特征處理
根據步驟a中用戶屬性信息和已有的部分受眾標簽系統。利用GBDT算法(可以直接用xgboost)將沒有標簽的受眾全部打上標簽。這個分類問題中請注意處理連續值變量以及歸一化。
將標簽進行向量化處理,這個問題轉化成對中文單詞進行向量化,這里用word2vec處理后得到用戶標簽的向量化信息Label2vec。這一步也可以使用word2vec在中文的大數據樣本下進行預訓練,再用該模型對標簽加以提取,對特征的提取有一定的提高,大約在0.5%左右。
(c)文本特征處理?
將步驟a中提取到的所有微博message文本內容清洗整理,訓練Doc2Vec模型,得到單個文本的向量化表示,對所得的文本作聚類(KMeans,在30w的微博用戶的message上測試,K取128對文本的區分度較強),最后提取每個cluster的中心向量,并根據每個用戶所占有的cluster獲得用戶所發微博的文本信息的向量表示Content2vec。
(d)圖像特征(可選)?
將步驟a中提取到的所有的message圖片信息整理分類,使用預訓練卷積網絡模型(這里為了平衡效率選取VGG16作為卷積網絡)提取圖像信息,對每個用戶message中的圖片做向量化處理,形成Image2vec,如果有多張圖片將多張圖片分別提取特征值再接一層MaxPooling提取重要信息后輸出。
(e)社交關系建立(node2vec向量化)?
將步驟a中獲得到的用戶之間的關系和微博之間的轉發評論關系轉化成圖結構,并提取用戶關系sub-graph,最后使用node2Vec算法得到每個用戶的社交網絡圖向量化表示。?
圖4為簡歷社交關系后的部分圖示。?
圖4 用戶社交關系
(f)將bcde步驟得到的向量做拼接,經過兩層FC,得到表示每個用戶的多特征向量集(User Vector Set, UVS)。這里取的輸出單元個數時可以根據性能和準確度做平衡,目前我們實現的是輸出512個單元,最后的特征輸出表達了用戶的社交關系、用戶屬性、發出的內容、感興趣的內容等的混合特征向量,這些特征向量將作為下一步比對相似性的輸入值。
(g)分別計算種子用戶和潛在目標用戶的向量集,并比對相似性,我們使用的是余弦相似度計算相似性,將步驟f得到的用戶特征向量集作為輸入x,y,代入下面公式計算相似性:?
使用余弦相似度要注意:余弦相似度更多的是從方向上區分差異,而對的數值不敏感。因此沒法衡量每個維度值的差異,這里我們要在每個維度上減去一個均值或者乘以一個系數,或者在之前做好歸一化。
(h)受眾擴展
獲取種子受眾名單,以及目標受眾的數量N;
檢查種子用戶是否存在于UVS中,將存在的用戶向量化;
計算受眾名單中用戶和UVS中用戶的相似度,提取最相似的前N個用戶作為目標受眾。
最后我們將以上步驟串聯起來,形成如圖5所示。
圖5 Lookalike算法示意圖
在以上步驟中特征提取完成后,我們使用一個2層的神經網絡做最后的特征提取,算法結構示意圖如圖6所示。
圖6 Lookalike算法結構圖
其中FC1層也可以替換成MaxPooling,MaxPooling層具有強解釋性,也就是在用戶特征群上提取最重要的特征點作為下一層的輸入,讀者可以自行嘗試,這里限于篇幅問題就不做展開了。
講到這里,算法部分就已基本完結,其中還有些工程問題,并不屬于本次主題探討范圍,這里也不做討論了。
結果
我司算法團隊根據Lookalike思想完整實現其算法,并在實際產品中投入試用。針對某客戶(乳品領域世界排名前三的品牌主)計算出結果(部分):
表1 部分計算結果
可以觀察到以上微博ID的主題基本都是西點企業或西點培訓企業,和品牌主售賣的乳品有很高的關聯性:乳品是非常重要的西點原料,除終端用戶外,西點相關企業就是乳品企業主需要尋找的最重要的受眾之一。
探討
特征表達
除了以上提到的特征外,我們也對其他的重要特征表達做了處理和變換:根據我們的需求,需要抽取出人的興趣特征,如何表達一個人的興趣?除了他自己生成的有關內容外,還有比較關鍵的一點是比如“我”看了一些微博,但并沒有轉發,大多數情況下都不會轉發,但有些“我”轉發了,有些“我”評論了;“我”轉發了哪些?評論了哪些?這次距上次的瀏覽該人的列表時間間隔多久?都代表“我”對微博的興趣,而間接的反應“我”的興趣特征。這些數據看來非常重要,又無法直接取得,怎么辦?
下面來定義一個場景,試圖描述出我們對看過的內容中哪些是感興趣的,哪些不是感興趣的:
(a)用戶A,以及用戶A關注的用戶B;
(b)用戶A的每天動作時間(比如他轉發、評論、收藏、點贊)起始時間,我們定義為蘇醒時間A_wake(t);
(c)用戶B每天發帖(轉發、評論)時間:B_action(t);
(d)簡單假設一下A_wake(t)> B_action(t),也就是B_action(t)的評論都能看到。這就能得到用戶A對應了哪些帖子;
(e)同理,也可知用戶A 在A_wake(t)時間內轉發了、評論了哪些帖子;
(f)結合上次瀏覽間隔時間,可以描述用戶A對哪些微博感興趣(post ive),哪些不感興趣(negative)。
全連接層的激活單元比對提升
在Google那篇論文中比對隱含層(也就是我們結構圖中的FC層)各種單元組合產生的結果,Google選擇的是最后一種組合,如圖7所示。
圖7 YouTube推薦模型隱含層單元選擇對比
我們初期選用了512 tanh→256 tanh 這種兩層組合,后認為輸入特征維度過大,512個單元無法完整的表達特征,故又對比了 1024→512組合,發現效果確實有微小提升大概在0.7%。另外我們的FC層輸入在(-1,1)區間,考慮到relu函數的特點沒有使用它,而是使用elu激活函數。測試效果要比tanh函數提升0.3%-0.5%。
附node2vec偽碼:?
感謝我司算法組周維在擬寫這篇文章時提供的幫助。
?
作者簡介
吳岸城,菱歌科技首席算法科學家,致力于深度學習在文本、圖像、預測推薦領域的應用。曾在中興通訊、亞信(中國)擔任研發經理、高級技術經理等職務。?
歡迎加入本站公開興趣群商業智能與數據分析群
興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識
QQ群:81035754
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/4553.html
摘要:是你學習從入門到專家必備的學習路線和優質學習資源。的數學基礎最主要是高等數學線性代數概率論與數理統計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...
摘要:通過書籍學習,比如除了上述的先學知識,你還應該了解一些流行的深度學習庫和運行他們的語言。你也可以查看查看的中的第講,概要性的了解一些深度學習庫。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/cd0... 原文:https://www.analyticsvidhya.c... 介紹 ...
摘要:普通程序員,如何轉向人工智能方向,是知乎上的一個問題。領域簡介,也就是人工智能,并不僅僅包括機器學習。但是,人工智能并不等同于機器學習,這點在進入這個領域時一定要認識清楚。 人工智能已經成為越來越火的一個方向。普通程序員,如何轉向人工智能方向,是知乎上的一個問題。本文是對此問題的一個回答的歸檔版。相比原回答有所內容增加。 目的 本文的目的是給出一個簡單的,平滑的,易于實現的學習方法,幫...
摘要:因為在每一時刻對過去的記憶信息和當前的輸入處理策略都是一致的,這在其他領域如自然語言處理,語音識別等問題不大,但并不適用于個性化推薦,一個用戶的聽歌點擊序列,有正負向之分。 在內容爆炸性增長的今天,個性化推薦發揮著越來越重要的作用,如何在海量的數據中幫助用戶找到感興趣的物品,成為大數據領域極具挑戰性的一項工作;另一方面,深度學習已經被證明在圖像處理,計算機視覺,自然語言處理等領域都取得了不俗...
摘要:為了更好地為機器學習或深度學習提供先驗知識,知識圖譜的表示學習仍是一項任重道遠的研究課題。 肖仰華:復旦大學計算機科學技術學院,副教授,博士生導師,上海市互聯網大數據工程技術中心副主任。主要研究方向為大數據管理與挖掘、知識庫等。大數據時代的到來,為人工智能的飛速發展帶來前所未有的數據紅利。在大數據的喂養下,人工智能技術獲得了前所未有的長足進步。其進展突出體現在以知識圖譜為代表的知識工程以及深...
摘要:阿里妹導讀作為大神,賈揚清讓人印象深刻的可能是他寫的框架,那已經是六年前的事了。經過多年的沉淀,成為阿里新人的他,對人工智能又有何看法最近,賈揚清在阿里內部分享了他的思考與洞察,歡迎共同探討交流。 showImg(https://segmentfault.com/img/remote/1460000018868775); 阿里妹導讀:作為 AI 大神,賈揚清讓人印象深刻的可能是他寫的...
閱讀 2457·2021-09-28 09:36
閱讀 3597·2021-09-22 15:41
閱讀 4382·2021-09-04 16:45
閱讀 1954·2019-08-30 15:55
閱讀 2846·2019-08-30 13:49
閱讀 824·2019-08-29 16:34
閱讀 2369·2019-08-29 12:57
閱讀 1678·2019-08-26 18:42