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