微博推薦系統(tǒng)架構揭秘:基于機器學習的個性化Push應用實踐
原創(chuàng)【51CTO.com原創(chuàng)稿件】Push 作為一種有效的召回用戶的產(chǎn)品,近幾年來被各類 App 廣泛應用。但是 Push 存在兩面性,如果推薦的消息準確,則能夠有效地召回用戶,反之,就會對用戶造成騷擾。
通過機器學習進行個性化 Push,給用戶推送其感興趣的內容,既能最大程度地降低對用戶的騷擾,同時也能有效地提升 Push 的打開率。
2018 年 5 月 18-19 日,由 51CTO 主辦的全球軟件與運維技術峰會在北京召開。
在“人工智能技術探索”分會場,新浪微博的技術專家齊彥杰,給大家?guī)砹恕稒C器學習在微博個性化 Push 的應用》的主題演講。
他和大家分享了微博個性化 Push 如何基于海量數(shù)據(jù),通過機器學習有效提升打開效果的一些做法和思路。
本文按照如下四個部分展開:
- 為什么要做 Push 業(yè)務
- 微博個性化 Push 的場景
- 微博個性化 Push 的機制
- 微博基于機器學習的個性化 Push 應用
為什么要做 Push 業(yè)務
眾所周知,微博是社交媒體中的領跑者,它于 2009 年 8 月份上線;2013 年底,MAU(月活用戶數(shù))突破了一億;2015 年 9 月,DAU(日活用戶數(shù))突破了一億。
2017 年 9 月,MAU 達到 3.76 億;2018 年 3 月,微博的MAU突破了 4.11 億。該增長速度是相當驚人的。
當微博的 MAU 超過 4.1 億之后,這么龐大的用戶體量以及用戶關系,本身必定會更大發(fā)揮其社交媒體的屬性。
下面我們來看為何要去做 Push 業(yè)務。如上圖右邊所示,這些都是大家印象非常深刻的事件。
如果我們能夠在第一時間把這些事件推送給目標用戶,一定會滿足用戶對重大消息及時性的需求。
所以,每當國內、外有重大事件發(fā)生的時候,我們都會做一些提醒發(fā)給大家。
同時我們又是一個社交媒體,當用戶所關注的博主發(fā)出博文的時候,他們都希望能夠以內容提醒的方式,收到自己感興趣的通知類消息。
根據(jù)上述需求,我們將微博上的 Push 大概分為:熱點 Push、個性化 Push、關系 Push、區(qū)域 Push 和直播 Push 等類型。
上圖右側是微博 Push 的展現(xiàn)形態(tài),它們包括一些文案和簡介,且都是在通知欄里展現(xiàn)出來的。
可見,Push 本身具有站方主動推送的特征,而用戶則處于一種被動提醒的狀態(tài)。
然而它的挑戰(zhàn)性是:用戶在信息流中通過一次性刷新,就能帶來十多條的信息曝光,命中用戶興趣點的概率較大,而 Push 是單條曝光,命中的概率小了很多。
但是,如果 Push 的發(fā)送過于頻繁,則會引起用戶的反感。因此,我們希望在盡量少發(fā)的前提下,盡快找到用戶的興趣點。
它具有一定的復雜性和挑戰(zhàn)性。即在降低對用戶騷擾的同時,提升用戶的點擊規(guī)模。
所以,我認為 Push 的本質就是一個高效的內容分發(fā)系統(tǒng),它能夠在較短的時間內為各種內容找到其目標群體,并且發(fā)送給相應的消費者。
同時,對于個人用戶來說,它應該是一個擁有足夠豐富經(jīng)驗的私人秘書,幫助用戶在海量的內容源中,找到喜歡的消息,并及時的提醒用戶進行查閱。
微博個性化 Push 場景
下面我們來看看個性化 Push 的場景。上圖是 2017 年對于微博用戶的分析,用戶從 18 歲以下到 41 歲以上有著廣泛的年齡層次分布。
相對于微博這種體量的平臺,就算 41 歲以上的人群僅占 5.6%,其絕對數(shù)量也有幾千萬的群體。
就地域而言,一、二、三、四線、及港澳臺城市,都有大量用戶的分布。
同時微博用戶的興趣點也是非常分散的。內容涉及明星、汽車、電影、美食等方面。
在如此龐大的用戶群體和用戶喜好分布的情況下,微博本身的內容品種也是非常豐富的。
如上圖左側所列的、微博熱門的首頁分類,以及右側是某一時刻的、熱門話題的列表,可見它是多么的豐富和繁雜。
鑒于用戶有如此廣泛的興趣,我們該如何在較短的時間內,為他們匹配并推送喜歡的內容呢?
這就是我們個性化 Push 所要解決的問題。我們需要構建一個推薦系統(tǒng),有針對性地為不同的用戶找到他們所喜歡的內容。
微博個性化 Push 機制
由于所有的推薦系統(tǒng),基本上都是從內容源頭上去尋找用戶喜歡的資源。那么對于微博而言,其源頭就是全量的原創(chuàng)博文。
每天,這些博文以幾千萬的量級產(chǎn)生,但并非所有的內容都適合被推薦給用戶的,因此我們需要進行機器和人工的雙重篩選。
機器篩選,能幫助我們找到優(yōu)質的素材。但由于 Push 本身是一個推送的過程,當它所推送的內容包含一些不良內容時,就會給用戶帶來巨大的困擾,因此,為了規(guī)避風險,我們加入了人工審核的環(huán)節(jié)。
在人工審核完成之后,我們會得到適合推薦的集合,該集合再利用算法去匹配博文和用戶,即如果兩者之間匹配的分數(shù)高,我們就會通過分發(fā)控制將內容下發(fā)過去。
同時,我們通過對“已讀、已發(fā)”進行過濾,以保證所發(fā)出去的內容不是用戶已經(jīng)看過的。
另外,大家使用微博的時間偏好會有所不同。如果我們在用戶工作的時候給他發(fā)送博文消息,那么由于他在此時并不想消費內容,因此會構成一定的騷擾。
而到了中午,當有空再去查看時,該內容已經(jīng)過時了。所以我們需要選擇用戶最想看微博的時間段,將內容發(fā)送過去。
有了前面推薦系統(tǒng)的流程概念,我們具體來看一下評分的過程。首先,我們通過物料生成模型進行審核,篩選出全量優(yōu)質的內容,并放入物料池之中。而物料池需要實時地更新其互動的內容。
例如,物料池根據(jù)某條博文在當前時間點的轉發(fā)次數(shù)與評論次數(shù),予以實時更新。
在完成更新之后,我們會以分鐘為間隔單位,去拉取所需的物料和參與計算的用戶,使用 Rank 模型算出分值和排序,并從中篩選出對于用戶最感興趣的博文予以下發(fā)。
上圖的 Rank 模型旁邊是“協(xié)同推薦”。在一般系統(tǒng)中,會將協(xié)同作為一種召回的方式,將協(xié)同所產(chǎn)生的內容,放在物料召回的部分中再做推薦。
但是在該場景下,根據(jù)我們做過的測試,協(xié)同推薦的效果好于排序模型,因此我們認為沒有必要再“走”一遍排序模型,完全可以直接發(fā)送下去了。
而在經(jīng)歷了基礎過濾的下發(fā)后,我們會實時地收取下發(fā)日志和點擊日志。這兩種日志再通過更新物料池,影響物料生成模型和運營審核部分,從而為篩選環(huán)節(jié)提供幫助。
微博基于機器學習的個性化 Push 應用
理解了推薦系統(tǒng)的結構,我們再來看如何將機器學習在個性化 Push 中進行具體應用。
上圖是我們整體的架構,其最下端是博文信息、用戶信息、行為信息等。我們會根據(jù)這些信息挖掘出各種非常具象的特征。
利用這些特征進行模型訓練和評估,就能得出排序模型和物料模型。當新模型達到需求,我們就會將這些模型運用到線上,進行排序策略、和 CTR 預估。
最后線上的數(shù)據(jù)被再次“傳導”回來,成為下面的基礎數(shù)據(jù)部分,以供模型下一次的訓練與迭代。
特征構建
上面提到了特征的構建,那么我們如何來具象各種特征呢?
興趣維度
對于一篇博文而言,微博通過“三級標簽體系”來具現(xiàn)它所代表的特征含義。通過記錄用戶對博文的消費來記錄其興趣方向。
如上圖所示:首先,最上面的是比較寬泛的,如“體育領域”;其次是“足球”;“足球”下面會有“梅西”、“C 羅”。
在某個用戶消費了帶有“梅西”標簽的博文后,只要他多次打開或互動,我們就認為該用戶是對于“梅西”感興趣的,就會把“梅西”標簽記錄在用戶信息中。
我們把用戶興趣標簽和博文標簽作為特征加入到模型中,進行訓練,就能表示用戶對博文內容的興趣程度。
關系維度
檢查某個用戶與其關注的博主是否有過直接的互動行為。如果他們在歷史上的互動次數(shù)非常頻繁的話,我們就認為該博主所會產(chǎn)生的博文特別契合此用戶的需求,那么他們的關系也可以作為一個緯度特征,被加入進來。
實時維度
或稱“先驗”緯度。由于 Push 在其應用的場景中所使用的物料相對較少,其“曝光”的機會更少,因此所推送的內容必須是熱點中的熱點。
我們通常會將各種博文在其他領域里的消費點擊率作為“先驗”數(shù)據(jù)傳導回來,通過導入至模型中,以給我們提供幫助。
環(huán)境維度
包括推送的時間、設備的網(wǎng)絡信息、和設備本身的信息等。
模型升級
有了上述各種特征之后,我們再討論一下 Push 業(yè)務的模型升級過程。首先,我們從 LR(Logistic Regression)開始做了一個 Base Line。
由于 LR 模型在實踐中不但非常簡單,同時解釋性也不錯,而且它特別適合于大規(guī)模的計算,因此我們將其作為 Base Line 之后,就有了一個基礎性的數(shù)據(jù)。
在那之后,我們升級到了FM(Factorization Machines)模型,以及現(xiàn)在所做的 Wide&Deep 模型。
線性模型
上圖是對 LR 模型的介紹。由于該模型比較難以捕捉用戶的組合特征,因此在被使用時,大家往往會增加一些人工的組合特征進去。
例如,我們在此改進為“兩兩特征組合”,當然也可使用多維特征的組合方式。
不過它存在的問題是:由于本身特征就很稀疏,如果做了組合,其對應的樣本變得更加稀少。
而對于模型而言,樣本是至關重要的,因此我們使用該模型無法學習到足夠多的信息。
FM 模型
在此基礎上,業(yè)內專家想了一種模型--FM 模型,它是把 LR 模型+“Dense 化兩兩特征組合”。
即并不直接對 WIJ 進行求導,而是把 WIJ 拆分成了兩個向量緯度的乘積予以表現(xiàn)。
同時,它的向量與所有特征共同計算,因此它在泛化能力上有所提升。
具體實現(xiàn)方式如上圖所示。該模型在上線之后,在 Push 業(yè)務效果的提升非常明顯。
Wide&Deep 模型
有了上述的兩兩特征組合之后,我們還引入了 Wide&Deep 模型。即:通過把 Wide 模型和 Deep 模型相結合,既保留了 Wide 模型里面的記憶能力,又具有一些高階的特征組合優(yōu)勢。
因此,該模型具有更強的表現(xiàn)能力。當然,它也帶來了計算量增加的問題。
深度模型通常網(wǎng)絡節(jié)點很多,用于線上業(yè)務計算量比較大,因此我們相對于原論文,進行了適當?shù)夭眉簟?/p>
我們使用該模型的網(wǎng)絡結構如上圖所示,三層網(wǎng)絡節(jié)點分別是 64、128、256。盡量保證在離線指標下降較小的情況下,簡化網(wǎng)絡。
模型訓練
下面和大家分享一下,我們在工作中遇到過的一些問題和使用的技巧。
對于微博中不同頻次的用戶而言,由于他們的使用習慣差異較大,如果簡單地將其放入同一個模型,則效果不佳。
因此,我們對于不同用戶的頻次進行了拆分,分別訓練了高頻次、中頻次和低頻次類型的用戶。同時,我們在負樣本的選擇上做了一些調整。
由于服務器在做推送(Push)的時候,用戶不一定能真的收到、收到了也不一定會被系統(tǒng)所展示出來、就算系統(tǒng)展示出來了也不一定會被用戶所看到。
因此我們不能簡單地將推送曝光的樣本作為負樣本,而應當選取歷史上有過正樣本的用戶,將他們在獲得正樣本觸發(fā)時,所并未點擊到的上下幾條曝光,來作為負樣本。
籍此,我們的表現(xiàn)能力、點擊量和點擊率都有了顯著的提升。
其他的方法與技巧還包括:
- 在物料模型上,我們采取的是機器投稿+人工審核的方式。
- 在物料召回上,我們采用了興趣領域召回、熱點召回、和文本 embedding 召回等。
- 在排序的方面,我們使用了分片批量計算。因為我們每天要發(fā)送幾個億規(guī)模的推送量,如果每次都是進行全量計算的話,對于服務器的資源消耗會過大,當然也沒有必要。
下面分享我們的兩個方案。
BoostPush 方案
如果某個物料在未經(jīng)充分驗證的情況下,對所有的用戶進行計算,那么就可能因為某一特征的影響導致分值特別高,而造成過大范圍的下發(fā)。
如此,該不良物料會被展現(xiàn)給成百上千萬用戶。因此,我們首先會在一個特別小的范圍內進行嘗試,如果點擊率特別高的話,我們再逐漸擴大其權限,層層擴量,直至全站。
通過該 BoostPush 方式,我們既控制了不良物料下發(fā)的范圍,又將曝光的機會讓給了充分驗證完成的物料。通過此法,我們的點擊量得到了大幅提升。
協(xié)同過濾方案
Push 除了能給用戶帶來最及時的消息推送以外,它還有一項非常重要的作用--給 App 的服務方提供“拉活”效果。
對于一般不常打開 App 的用戶而言,推送在“拉活”方面的效果并不明顯。
因此,我們需要選取曾經(jīng)時常點擊并打開 Push 消息的那些用戶,以他們的行為作為推送的參考,來進行各種相應的協(xié)同下發(fā)方面的嘗試。這對于我們“拉來”新的用戶會十分有效。
上面就是我們在實際生產(chǎn)過程中所遇到過的問題,和相應的解決方案。
齊彥杰,新浪微博技術專家。畢業(yè)于鄭州大學計算機系,微博研發(fā)中心技術專家。曾任職于某搜索公司高級架構師,多年從事爬蟲、索引、檢索、數(shù)據(jù)分析等方向的研發(fā)工作。目前在微博 User Growth 方向中,關注領域在數(shù)據(jù)挖掘、用戶畫像、自然語言處理、個性化推薦系統(tǒng)等領域,負責訪客信息流推薦、Push 平臺信息推薦、用戶轉化等業(yè)務。
【51CTO原創(chuàng)稿件,合作站點轉載請注明原文作者和出處為51CTO.com】