齊彥杰:機器學習在新浪微博個性化push的應用
原創【51CTO.com原創稿件】新浪微博不僅僅是一個信息交流平臺,同時也兼具著媒體屬性,據統計2013年12月新浪微博MAU(Monthly Active Users,月活躍用戶數量)達到1.29億,DAU(Daily Active Users,日活躍用戶數量)超過6100萬,到2018年3月,MAU突破4.11億,DAU達到1.84億。據2017年數據統計,微博的主要用戶集中在23-30歲,占38.6%,性別上男性多于女性,占56.3%,而用戶興趣主要集中在明星、美女帥哥、動漫等泛娛樂領域。
這么龐大的用戶體量和廣泛的興趣標簽,如何做才能將用戶感興趣的話題、博主、事件***時間進行精準推送,是新浪微博一直要解決的事情,個性化push的應用將精準推送這項業務變的短時高效。
圖1 新浪微博齊彥杰
博文質量、算法模型與分發效率共同決定push效果
在實現個性化push之前要先構建一個推薦系統,所有的推薦系統基本上都是從內容源頭中去找到用戶喜歡的東西,微博的源頭就是全量的原創博文。但是面對每天幾千萬量級的生產量和大量不適宜的原創文章,如何才能將精準推送這個訴求變現呢?人工篩選加機器篩選是個不錯的組合。在push推送過程中加入人工審核程序,可以降低涉黃、不健康、不適宜內容的傳播,同時還減少了對用戶的騷擾。
物料召回模型只是在源頭處把握了原創博文的篩選,如何才能將優質文章推薦給感興趣的用戶呢?這就需要排序算法模型了。首先,將物料生成模型進行審核,篩選出全量優質的內容,放到物料池中,并且物料池要實時更新互動特征,比如,這個微博在當前的時間點的轉發量和評論數等。更新以后,每分鐘提取當前可用物料和用戶,進行計算和排序,從中篩選出客戶最感興趣的博文,***發送給用戶。其實,在我們的推薦系統中,和模型計算平行的還有一個協同推薦服務。有一些推薦系統中把協同推薦作為一種召回的方式,把協同推薦產生的內容放在物料召回的部分再做推薦。但是在我們的場景中,協同推薦效果好于排序模型,所以沒有必要再走一遍程序,可以直接發送給用戶。經過基礎過濾下發,實時收集下發日志和點擊日志,經過數據處理和加工,再去更新物料池,同時更新物料生成模型和運營審核部分。
圖2 推薦系統
機器學習的特征維度建立
在排序策略、模型服務、特征工程、基礎數據的整體架構下有博文信息、用戶信息、行為信息等,利用這些信息在上層挖掘出特征,利用特征進行模型訓練和評估,得出排序模型和物料模型。當有了模型之后,再把模型運用到線上做排序策略、CTR預估。***,將線上的數據再傳導回來,進行基礎數據計算,供下一次模型訓練迭代。
興趣維度
但是,對于一個博文來說,特征構建的時候需要通過一個三級標簽體系來具像這個博文代表的意義,以及通過用戶對博文的瀏覽程度來呈現用戶的興趣,這時就會建立一個三級標簽體系,首先***級標簽是比較寬泛的,比如說體育領域,一級標簽下面會有二級標簽,比如:足球,二級標簽下面會有三級標簽,比如:梅西、C羅。當一個用戶消費了多個打上梅西標簽的博文的時候,我們就知道這個用戶對梅西感興趣,所以,當有一個梅西的物料進來的時候,就會用到這部分特征,加入到模型中進行訓練,再推送給興趣用戶,這個就是興趣維度。
圖3 興趣維度
關系維度
興趣維度是一個用戶對興趣領域的特征描述,但是如果想把博主與用戶,也就是人與人之間的特征描述加入到模型當中,就需要關系維度了。當一個博主和一個用戶在歷史上的互動非常高的話,那么這個博主一定是契合這個用戶的需求的,所以他們的關系也可以作為一個維度特征加入到模型當中。
實時維度
將興趣維度、關系維度加入到模型的同時,還需要將先驗數據傳導回來,這時候就需要實時維度的幫助。因為Push場景用的物料相對少一些,同時曝光機會也特別少,而點擊率就可以作為先驗數據傳導回來,導入到模型中。
除了以上三種維度,還包括環境的維度,推送的時間、設備的網絡信息、設備本身的信息等等。
介紹完特征部分之后,再講一下模型演進的過程。升級從LR(Logistic Regression,邏輯回歸)模型開始,LR模型基本上比較難以捕捉用戶的組合特征,所以進一步升級到FM模型。FM( Factorization Machine,隱因子分解機)模型是LR模型加上Dense(密集化)的兩兩特征組合。每一個兩兩組合特征,需要有一個權重Wij,如果直接求Wij,因為特征組合會造成樣本過少,導致Wij不準確,所以是通過因子Vi,Vj相乘的形式來得到Wij。但是,FM模型只做了兩兩組合特征,所以又升級成了wide&deep模型,通過把wide模型和deep模型進行組合,既保留了wide模型里面的記憶能力,又有一些高級特征組合模型的能力,使這樣一個模型能夠有更強的表現能力。
圖4 Wide&deep模型
Push在使用中的實用技巧
利用用戶頻次(頻率+次數)拆分提高點擊量和點擊率
微博使用中用戶的頻次差異很大,因此要將用戶的頻次進行拆分,分別訓練高頻次、中頻次和低頻次的用戶,所以需要在負樣本的選擇上做一些改變。
在服務器推送的時候,會遇到用戶設置系統不提醒新消息的狀況,也會遇到用戶不看新消息的狀況,所以,在選擇推送用戶的時候,盡量選取歷史上有過正樣本的用戶,這樣,用戶在獲得正樣本復發的時候,在正樣本上下幾條曝光(其中包含兩條負樣本),就可以提高點擊量和點擊率。
逐層控制下發物料
如果一個物料在沒有經過充分驗證的情況下,就對所有的人進行計算,可能因為某一個特征特別高的時候,使下發產生過大,這樣可能把一個低質物料展現給過多用戶。所以首先要在一個特別小的范圍內進行嘗試,如果點擊率達到預期,則會逐漸一層一層擴大,直到放到全量。這個方式,可以控制低質物料下發范圍,同時把曝光機會讓給經過充分驗證的優質物料。
以上內容是51CTO記者根據新浪微博齊彥杰在WOT2018全球軟件與運維技術峰會的演講內容整理,更多關于WOT的內容請關注51cto.com。