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