快看漫畫個性化推薦探索與實踐
掃描二維碼
隨時隨地手機看文章
本次分享的主題是快看漫畫個性化推薦探索與實踐,主要包括:
業(yè)務(wù)介紹
技術(shù)挑戰(zhàn)
技術(shù)探索
總結(jié)與未來規(guī)劃
▌業(yè)務(wù)介紹
1. 關(guān)于快看漫畫
快看世界創(chuàng)立于2014年,旗下快看漫畫 app 是中國新生代內(nèi)容社區(qū)和原創(chuàng) IP 平臺,截止2019年7月總用戶量已經(jīng)突破2億,注冊用戶量突破1億,月活突破4000萬,絕大多數(shù)用戶屬于高活躍、高粘性的95后、00后,快看漫畫今年被 QuestMobile 等機構(gòu)評為“最受00后歡迎的產(chǎn)品”。
很多人來到快看漫畫,可能更多的是想看漫畫,實際我們的內(nèi)容不只是漫畫,還有社區(qū)的 UGC 內(nèi)容,從產(chǎn)品屬性來講雖然現(xiàn)在更傾向于漫畫,但是我們在逐漸強化社區(qū)屬性,也是未來重點的戰(zhàn)略方向。所以,對于推薦來講我們是長內(nèi)容和短內(nèi)容結(jié)合的。
2. 快看漫畫推薦業(yè)務(wù)
上圖為快看漫畫的主要推薦業(yè)務(wù)場景,包括:首頁個性推薦 tab,發(fā)現(xiàn)頁推薦 tab,世界頁推薦 tab,貼底相關(guān)推薦。畫面會比之前好一些,對于推薦系統(tǒng)來講,不光是技術(shù)、數(shù)據(jù)、算法,還和 UI/UE、領(lǐng)域知識相關(guān)。
內(nèi)容形式包含:長漫畫、短漫畫、圖文帖子、視頻帖子等。
我們在做的事情就是如何為4000萬月活用戶很好的分發(fā)長內(nèi)容和短內(nèi)容。
▌技術(shù)挑戰(zhàn)
1. 內(nèi)容形式多樣
短內(nèi)容(短視頻、新聞資訊、用戶帖子等)特點:
占用用戶碎片化時間,閱讀時間短
興趣點通常單一
長內(nèi)容(漫畫、小說等)特點:
占用用戶大塊的時間,閱讀周期長
連續(xù)性、周期性、多章節(jié)多興趣點
針對多樣的內(nèi)容形式,我們面臨的技術(shù)挑戰(zhàn):
技術(shù)上如何捕捉長內(nèi)容的連續(xù)性、周期性、多興趣點等特征?
快看漫畫既有長內(nèi)容又有短內(nèi)容,如何較好的融合兩類內(nèi)容?
2. 內(nèi)容風(fēng)格獨特
快看漫畫有大量的文本信息(帖子內(nèi)容、彈幕、評論)和海量的圖像信息(漫畫圖像、帖子圖片),其帶來的挑戰(zhàn)為:
如何進行漫畫類圖像內(nèi)容理解?圖中古風(fēng)的圖片可能比較好理解,但是如何分辨校園和都市,通過圖像是很難判別的。
獨特的社區(qū)文化(比如二次元),新生代文化“暗語”(如上圖帖子中的內(nèi)容,對這方面不了解的人都很難理解,對于機器來說更難理解),給文本內(nèi)容理解帶來挑戰(zhàn)。
▌技術(shù)探索:算法
1. 推薦算法演進
如果現(xiàn)在界定為深度學(xué)習(xí)時代,各大公司的產(chǎn)品都已經(jīng)上了深度學(xué)習(xí)模型,深度學(xué)習(xí)的效果是非常好的,但是它的平臺搭建周期是非常長的,并且很難被解釋,是一個黑盒的東西,看不到摸不到,很難干預(yù)。對于前深度學(xué)習(xí)時代,也就是傳統(tǒng)機器學(xué)習(xí)模型來說,它的可解釋性強,訓(xùn)練起來比較容易,并且容易部署。
2. 快看推薦算法迭代
快看推薦算法起步相對于推薦領(lǐng)域是比較晚的,但是相對于漫畫垂直領(lǐng)域還是比較早的,我們在2019年以前更多的是基于內(nèi)容的推薦,今年的上半年我們引入了協(xié)同過濾,同時19年到現(xiàn)在排序這塊主要用到的是 XGBoost,未來我們會考慮深度學(xué)習(xí)。
3. 基于內(nèi)容的推薦
基于內(nèi)容的推薦,最大的難點在于對內(nèi)容的理解,我們有比較專業(yè)的運營和內(nèi)容團隊,在做推薦之前已經(jīng)有了一些比較基礎(chǔ)和簡單的標簽,可以快速的應(yīng)用起來,所以我們最早做的是基于內(nèi)容的推薦。做內(nèi)容推薦,我們需要有很好的內(nèi)容理解,構(gòu)造好物品的畫像,另外,需要很好的理解用戶的興趣偏好,構(gòu)建用戶的用戶畫像,我們把兩者很好的結(jié)合就可以得到推薦的結(jié)果。對于內(nèi)容推薦來講,它的可解釋性也是比較強的,對于在內(nèi)容方面有很深積累的公司,可以很快的構(gòu)建起來。
① 快看漫畫標簽體系
快看漫畫的標簽體系,分為三個維度:
作品基礎(chǔ)維度:搞笑、青春、治愈等
用戶分發(fā)維度:男性、女性、青少年等
內(nèi)容創(chuàng)作維度:青春成長、兄妹、學(xué)生等
即使有專業(yè)的標簽團隊來打標簽,建立很好的標簽體系也需要很長的周期過程,因為人和人之間的感受和認知是有差距的,如何把這些標準制定好,保證每個作品打的標簽是無差別的,這是一個專業(yè)性很強的問題。(上圖為我們?nèi)ツ瓯容^火的作品,被拍成了電影)
② 用戶興趣模型
做用戶興趣模型,需考慮:
相關(guān)行為:關(guān)注、點贊、評論、分享等
行為粒度:會精確到關(guān)注的作品或具體某個章節(jié)
章節(jié)數(shù)量:章節(jié)數(shù)量不等,有的作品很長,有的作品很短,如何判斷用戶對一個感興趣,對另一個作品不感興趣
興趣衰減:用戶的興趣是周期性的,會存在興趣衰減的情況
作品熱度:需考慮熱門作品,大家都在看的內(nèi)容
③ 基于內(nèi)容推薦總結(jié)
基于內(nèi)容推薦的總結(jié),存在以下缺點:
非常依賴標簽
推薦粒度較粗,如果用戶興趣單一的話,召回會不足
缺乏新穎性
但是,這是我們第一次上線基于內(nèi)容推薦的模型,DAU 人均閱讀次數(shù)率提升35%,效果還是很不錯的。
4. 基于協(xié)同過濾
之后,我們引入了協(xié)同過濾,下面為我們實現(xiàn)了的三種算法:
基于物品的協(xié)同過濾 ( Item-Based ),對于漫畫來講,作品數(shù)量不是特別大,可以很快的離線計算完成。
基于用戶的協(xié)同過濾 ( User-Based ),由于我們有4000萬的月活用戶,做起來還是比較痛苦的,下面將重點介紹。
基于模型的協(xié)同過濾 ( Model-Based )
由于協(xié)同過濾都是基于矩陣來完成的,我們采用的是業(yè)界常用的 KNN 近鄰算法。
① KNN 召回
因為,基于用戶的協(xié)同算法用戶相似度計算量巨大,所以,針對 KNN 近鄰算法,我們做了調(diào)研,對 Nmslib 和 Faiss 庫做了對比:
它們都是開源的,可能 Faiss 會比較知名一點,因為是 Facebook 開源的,它們的實現(xiàn)語言都是 C++,都實現(xiàn)了 Python 綁定,但是 Faiss 會支持 GPU,都實現(xiàn)了目前最快的 HNSW 分層索引算法,右邊為網(wǎng)上找的兩個算法在單機 CPU 上的 benchmark,訓(xùn)練集大概 100+W,維度是200,查找的是100個近鄰。大家可以看到,最外層綠色的線就是 Nmslib 實現(xiàn)的 HNSW 算法,緊接著深綠色的就是 Faiss 實現(xiàn)的 HNSW 算法,對比 Nmslib 會慢一點,再往下一條線是 Faiss 實現(xiàn)的 IVF 算法,它會稍微差一些,但是它可以支持 GPU 并行計算,所以按照 GPU 去考量,那么這個明顯是勝出的,所以我們綜合考慮,選擇了 Faiss 作為近鄰計算的基礎(chǔ)庫。
這里簡單介紹下 Faiss 實現(xiàn)的算法。
Faiss IndexIVFFlat 實現(xiàn)過程:
訓(xùn)練 & 建索引
① 聚類(找到聚類中心存儲在量化器 quantizer 中)
② 找到每個向量最近的聚類中心點
③ 建立倒排id ( id 編號 ) list
④ 建立倒排 code ( 真實向量的倒排索引 ) list
搜索 topK
① 搜出查詢向量最近的 n 個聚類中心點 id 及對應(yīng)的距離
② 構(gòu)建 k 個元素最大堆
③ Id 對應(yīng)的倒排 list 每個向量計算距離后放入最大堆
④ 堆排序,最后做堆排序就可以得到 TopK
下面的 Faiss IndexIVFPQ,相當(dāng)于一個升級優(yōu)化版本,實現(xiàn)更復(fù)雜些,會計算殘差,通過構(gòu)建二級索引實現(xiàn)計算的加速。整體來說,我們實現(xiàn)了 User-Based CF 的實時在線召回。
② 基于協(xié)同過濾總結(jié)
協(xié)同過濾上線后,DAU 人均閱讀次數(shù)提升了31%,同時協(xié)同過濾存在的缺點為:
傾向于推薦熱門內(nèi)容 ( 當(dāng)然可以通過一些方法對熱門內(nèi)容進行打壓 )
對新用戶和新內(nèi)容不友好
相似矩陣的計算量大 ( 可以通過 ANN 的方式來解決 )
5. 召回排序模型
我們有了基于內(nèi)容的召回,基于協(xié)同過濾的召回,每個召回都有自己的排序結(jié)果,我們會考慮如何把這些結(jié)果合并起來,前期是基于規(guī)則的,后期我們采用 CTR 預(yù)估的方式,使用傳統(tǒng)的召回+排序的結(jié)構(gòu)。
① 常用 CTR 預(yù)估算法
常用的 CTR 預(yù)估算法有:LR、FM & FFM、GBDT ( 樹模型 )、DNN ( 深度神經(jīng)網(wǎng)絡(luò) )。
LR 模型
優(yōu)勢:
模型簡單,善于處理離散化特征 ( 包括 id 類特征 )
容易實現(xiàn)分布式,可處理大規(guī)模特征和樣本集
劣勢:
特征需要離散化
特征之間在模型中是孤立的,需要做大量特征工程來做特征交叉
XGBoost 模型
優(yōu)勢:
樹模型具有一定的組合特征能力
善于處理聯(lián)系特征,可進行特征篩選,人工特征工程量少
劣勢:
具有很強的記憶行為,不利于挖掘長尾特征
組合特征的能力有限
FM & FFM 模型
優(yōu)勢:
可以自動進行特征間的組合
通過引入特征隱向量,加速了訓(xùn)練的復(fù)雜度,善于處理稀疏數(shù)據(jù)
劣勢:
工作量接近深度學(xué)習(xí),效果不如深度學(xué)習(xí)
FFM 計算復(fù)雜度高
DNN 模型
優(yōu)勢:
可直接輸入原始特征,減少交叉特征選擇
效果好
劣勢:
可解釋性差
模型可能較大,調(diào)參復(fù)雜,需要較大的工程支持
綜上,我們最終選擇人工特征工程量較少的 XGBoost 方案。
② 召回排序模型總結(jié)
上線召回排序模型之后,DAU 人均閱讀次數(shù)提升36.6%,目前的現(xiàn)狀和問題:
特征還需要進一步挖掘
模型的訓(xùn)練效果有待提升,需要工程上的提升
探索嘗試新模型提升效果
▌技術(shù)探索:系統(tǒng)架構(gòu)
1. 架構(gòu)的重要性
架構(gòu)的重要性:算法是大腦,架構(gòu)是骨架,如果沒有好的推薦系統(tǒng)架構(gòu),算法很難落地。
好的推薦系統(tǒng)需要具備的特質(zhì):
實時響應(yīng)請求
及時、準確、全面的記錄用戶反饋
優(yōu)雅降級,即使在服務(wù)出現(xiàn)問題的時候,也能推薦出個性化的結(jié)果
快速迭代推薦策略、算法
2. 經(jīng)典 Netflix 推薦系統(tǒng)架構(gòu)
這是 Netflix 在2013年公布的推薦系統(tǒng)架構(gòu),把推薦系統(tǒng)分為了三層:
離線層:一個用戶產(chǎn)生行為,通過事件分發(fā),分發(fā)到離線層和近線層,離線部分是通過 hive 和 pag 這種通過離線的任務(wù)把數(shù)據(jù)分發(fā)到模型訓(xùn)練和一些離線計算上。
進線層(準實時層):近線層有個組件叫 Manhattan,相當(dāng)于今天常用的 Flink 和 Strom,把實時計算結(jié)果存儲到 Cassandra 相當(dāng)于 HBase,然后還有 EVcache 相當(dāng)于 redis。
在線層:在線層會用離線計算的模型和近線計算的結(jié)果,得出在線的排序結(jié)果。
這就是當(dāng)時 Netflix 的推薦系統(tǒng)架構(gòu)。
3. 快看推薦系統(tǒng)架構(gòu)
我們在做快看推薦系統(tǒng)架構(gòu)的時候,實際上是沒有參考 Netflix 的架構(gòu),但是,當(dāng)我們完成之后發(fā)現(xiàn),各個層也可以按照這個方式去劃分:
近線層(橙色,實時數(shù)據(jù)流過程):客戶端采集的日志數(shù)據(jù),通過 Kafka、Flink 傳遞到實時用戶畫像和動態(tài)文檔。
離線層(紅色):業(yè)務(wù)庫數(shù)據(jù)通過 sqoop 導(dǎo)到 HDFS 后在 Spark 上計算,然后是離線模型,包括特征工程,模型訓(xùn)練,算法模型,向量索引,用戶畫像等等。
在線層(綠色):包括在線的召回、排序、推薦、服務(wù)端、ios/android 等等。
工具(紫色):標簽權(quán)重模型、推薦結(jié)果追蹤、數(shù)據(jù)指標監(jiān)控和服務(wù)監(jiān)控。
4. AB 實驗平臺
快看的 AB 實驗平臺在功能上是非常完善的,是從產(chǎn)品各層級自上而下統(tǒng)一的實驗標識,方便聯(lián)動;實現(xiàn)了設(shè)備隨機、用戶隨機、流量隨機的隨機分組方式;通過實驗分層支持正交實驗,可以在一個層做多組實驗;同時支持互斥實驗,確保流量調(diào)整時用戶穩(wěn)定落在某一分組。
對于指標計算,進行了顯著性的總結(jié)和功效的總結(jié),并且指標可配置,在做實驗的時候想關(guān)注哪些指標可以進行配置,方便查看算法實驗的效果。
5. 推薦結(jié)果追蹤工具
推薦往往會有一些 Bad case 暴露出來,如果沒有做追蹤,就很難查找那塊兒出了問題,因此我們做了個性化推薦全鏈路的跟蹤系統(tǒng),保證了推薦的結(jié)果是因為什么推薦的,或者為什么沒有被推薦,這樣就保證了一個可解釋性。如何解決的?我們會把當(dāng)時的歷史畫像 Snapshot 和上下文,通過 HBase 記錄下來。
▌總結(jié)與未來規(guī)劃
1. 總結(jié)
本次分享主要介紹了快看和快看的推薦業(yè)務(wù),從算法和系統(tǒng)兩方面介紹了快看推薦技術(shù)在起步階段的一些探索,并且介紹了大規(guī)模k近鄰計算方法、AB 實驗平臺搭建等常用技術(shù)的落地方案。
2. 未來規(guī)劃
內(nèi)容理解是推薦業(yè)務(wù)的基石,目前這塊兒還比較欠缺,未來將探索漫畫領(lǐng)域的圖像和文本內(nèi)容理解技術(shù)。
傳統(tǒng)機器學(xué)習(xí)方法探索充分之后將嘗試深度學(xué)習(xí)推薦算法,以期更好的推薦效果。
嘉賓介紹
——END——
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!