11月8-9日,由中國 IT 社區(qū) CSDN 與硅谷 AI 社區(qū) AICamp 聯(lián)合出品的 2018 AI 開發(fā)者大會(huì)(AI NEXTCon) 在北京舉行,就人工智能的最新技術(shù)及深度實(shí)踐,進(jìn)行了全方位的解讀及論證。本文是機(jī)器學(xué)習(xí)技術(shù)專題中知乎首頁業(yè)務(wù)總監(jiān)、首頁推薦技術(shù)負(fù)責(zé)人張瑞的演講實(shí)錄。
信息爆炸時(shí)代,信息過載已經(jīng)成為互聯(lián)網(wǎng)核心問題之一,而通過AI、機(jī)器學(xué)習(xí)等技術(shù)過濾低質(zhì)無用信息,推動(dòng)有價(jià)值信息的生產(chǎn)和迭代,被視為一種有效解決方案。以知乎為例,這家知識(shí)內(nèi)容平臺(tái)很早就開始著手機(jī)器學(xué)習(xí)的開發(fā)實(shí)踐,并于2016年正式組建機(jī)器學(xué)習(xí)團(tuán)隊(duì),利用站內(nèi)豐富的中文語料庫訓(xùn)練AI算法,推動(dòng)有價(jià)值信息更高效觸達(dá)用戶,為內(nèi)容產(chǎn)業(yè)提供了很好的技術(shù)借鑒。日前,在2018AI開發(fā)者大會(huì)上,知乎首頁業(yè)務(wù)總監(jiān)張瑞就機(jī)器學(xué)習(xí)在知乎首頁中的應(yīng)用做了技術(shù)分享。以下是分享內(nèi)容摘要。
一、知乎信息流推薦框架
知乎的信息流推薦框架是一個(gè)基于多策略融合的多源內(nèi)容推薦系統(tǒng),代號(hào)“水晶球”。如圖所示,在這個(gè)系統(tǒng)中,首頁上出現(xiàn)的內(nèi)容經(jīng)歷過兩次排序。第一次是從數(shù)十個(gè)推薦隊(duì)列里被“召回”,第二次是在合并后經(jīng)過深層神經(jīng)網(wǎng)絡(luò)(DNN)的“排序”。
“召回”的第一個(gè)步驟是,召回模塊根據(jù)用戶的歷史行為表現(xiàn)(用戶畫像、內(nèi)容標(biāo)簽、內(nèi)容源信息),確定數(shù)十個(gè)推薦隊(duì)列。這數(shù)十個(gè)推薦隊(duì)列是含有特定標(biāo)簽的內(nèi)容池,有些隊(duì)列里內(nèi)容性質(zhì)相似,比如熱點(diǎn)新聞隊(duì)列、視頻隊(duì)列,還有的隊(duì)列與用戶行為緊密相關(guān),比如關(guān)注關(guān)系隊(duì)列、搜索關(guān)鍵詞隊(duì)列。比如說,根據(jù)用戶的關(guān)注關(guān)系向外擴(kuò)展更多關(guān)注關(guān)系,根據(jù)用戶興趣召回感興趣的內(nèi)容,根據(jù)搜索關(guān)鍵詞進(jìn)行相關(guān)推薦。
“召回”過程的第二個(gè)步驟是,各召回源根據(jù)用戶的需求分別將自己的隊(duì)列中的內(nèi)容做排序后,按召回?cái)?shù)量返回內(nèi)容。我們會(huì)從內(nèi)容類型、內(nèi)容質(zhì)量、召回技術(shù)三個(gè)維度對內(nèi)容分類,召回源的數(shù)據(jù)經(jīng)過匯聚之后會(huì)進(jìn)行融合,最后,DNN可以在20ms內(nèi)對這些數(shù)據(jù)完成打分和排序過程,決定推送給用戶的內(nèi)容。
API的數(shù)據(jù)還會(huì)反饋到Feedback&Control的模塊里面,應(yīng)用這些數(shù)據(jù)進(jìn)行業(yè)務(wù)控制的操作,比如我們會(huì)記錄每個(gè)用戶看到的內(nèi)容是什么,大家都知道在Feed信息流推薦有個(gè)很重要的應(yīng)用是去重,推薦內(nèi)容不能是有重復(fù)的,我們會(huì)用過濾保證推出來的內(nèi)容沒有重復(fù)。用戶在一天里面看到哪些內(nèi)容點(diǎn)擊了哪些內(nèi)容,這些內(nèi)容都可以為業(yè)務(wù)提供一定數(shù)據(jù)支撐。
二、知乎信息流推薦系統(tǒng)的技術(shù)演進(jìn)
2016年之前,知乎的Feed流是比較簡單的,你關(guān)注了什么樣的人,這個(gè)人產(chǎn)生的各種各樣的動(dòng)態(tài)會(huì)在你的界面進(jìn)行時(shí)間倒序的排序,和朋友圈的邏輯非常相似。2016年初我們上線了一個(gè)叫EdgeRank的排序系統(tǒng),第一代Feed流算法在這個(gè)系統(tǒng)支持下取得了一定收益,系統(tǒng)維持了一年時(shí)間。
2016年10月份知乎上線了一個(gè)基于GBDT的排序系統(tǒng),對召回的內(nèi)容進(jìn)行一個(gè)排序。我們使用GBDT做排序持續(xù)了一年時(shí)間,引入GBDT后用戶的Feed流使用時(shí)長的變化,是呈上升的趨勢。在使用 GBDT 進(jìn)行排序的過程中,我們逐步完善了我們用戶畫像和內(nèi)容分析的系統(tǒng),在用戶特征和內(nèi)容特征方面做了非常多工作,把用戶的實(shí)時(shí)行為集成到GBDT里面,用戶Feed流使用時(shí)長得到了激增。
2017年10月開始知乎先后在召回側(cè)和排序側(cè)引入DNN模型,在引入之后的2017年10月份到2018年7月份周期內(nèi),知乎的使用時(shí)長和閱讀量也呈現(xiàn)出快速增長。
在這之后,我們又做了一些優(yōu)化工作,一個(gè)是7月份在DNN做的優(yōu)化,把注意力機(jī)制和LSTM模型引入到DNN的模型里面去,一個(gè)是嘗試強(qiáng)化學(xué)習(xí)在推薦系統(tǒng)中的應(yīng)用。經(jīng)過這么長時(shí)間的優(yōu)化之后知乎的信息流系統(tǒng)已經(jīng)在知乎整體業(yè)務(wù)中占了非常大的體量,用戶滲透率(即有多少用戶會(huì)有效來到首頁看內(nèi)容)達(dá)到88%,使用時(shí)長占比(包括刷知乎的時(shí)長以及在知乎中消費(fèi)內(nèi)容的時(shí)長等)達(dá)到76%。
三、Feed流推薦系統(tǒng)中的AI應(yīng)用
基于深度學(xué)習(xí)的推薦召回模型
知乎在2017年上線了基于深度學(xué)習(xí)的推薦召回1.0版本,左邊這張圖是第一版上線時(shí)候的深度學(xué)習(xí)召回網(wǎng)絡(luò)框架,整個(gè)系統(tǒng)把用戶和用戶的特征表示成了網(wǎng)絡(luò),它和庫里幾萬條內(nèi)容做了一個(gè)多分類,在上層進(jìn)行SoftMax。整個(gè)網(wǎng)絡(luò)訓(xùn)練下來可以得到兩個(gè)成果。首先是一個(gè) User Representation Network,它把用戶信息表示成128維的網(wǎng)絡(luò),我們用了畫像里的所有信息,包括他的興趣標(biāo)簽、各種各樣的用戶信息,都會(huì)放到模型的輸入里面去,這個(gè)輸入經(jīng)過四層網(wǎng)絡(luò)之后得到用戶128維的 Embedding 表示。與此同時(shí),使用Faiss作為向量化ANN召回的Backend,用ANN召回的方式從這幾個(gè)條目里選出他最感興趣的內(nèi)容推薦給他,這是整個(gè)召回框架的工作過程。
我們在訓(xùn)練集里包含了幾萬個(gè)內(nèi)容的Embedding,我們首先會(huì)在訓(xùn)練中生成一批Embedding,比如今天的數(shù)據(jù)來自于過去一周內(nèi)分發(fā)量比較高的數(shù)據(jù),這些內(nèi)容數(shù)據(jù)會(huì)生成Embedding,我們先通過這些召回源把這些機(jī)制分發(fā)出去,還有一批內(nèi)容是新產(chǎn)生的、未在訓(xùn)練集中包含的內(nèi)容,這些內(nèi)容通過其他的渠道分發(fā)出去之后,可以得到看到內(nèi)容用戶的Embedding是什么以及點(diǎn)擊這些內(nèi)容用戶的Embedding是什么,我們可以利用這份數(shù)據(jù)把這些新產(chǎn)生內(nèi)容的Embedding計(jì)算出來更新到Embedding庫里面去,這個(gè)時(shí)候就可以拿到每天新產(chǎn)生內(nèi)容的表示,并且把這些內(nèi)容推薦出來。
后來我們又對召回框架進(jìn)行了2.0升級(jí)。在1.0版本的召回框架里,“新內(nèi)容Embedding怎么得到的”這個(gè)問題是延遲解決的。用戶的表示網(wǎng)絡(luò)和Embedding召回在效果收益非常明顯,協(xié)同過濾用戶矩陣分解最常用的方法就是ALS,我們拿了一個(gè)關(guān)鍵的指標(biāo)也就是召回從這幾萬條里挑出的100個(gè)結(jié)果里準(zhǔn)確度有多少,這100個(gè)結(jié)果里有沒有預(yù)測到用戶下次點(diǎn)擊的數(shù)據(jù),在這個(gè)指標(biāo)上, DNN 比起ALS來講提升了10倍的量級(jí),我們希望一個(gè)內(nèi)容產(chǎn)生之后馬上算出Embedding放到網(wǎng)絡(luò)里。
在2.0版本中,我們嘗試了三個(gè)層面的技術(shù)升級(jí):
使用了Content的原始特征,一個(gè)內(nèi)容上打了標(biāo)簽,原始數(shù)據(jù)比如長度有多少,有沒有圖片,經(jīng)過三層的網(wǎng)絡(luò)之后會(huì)生成Feed Embedding,可以直接得到Content Embedding,解決新內(nèi)容的召回機(jī)制問題。
在用戶表示網(wǎng)絡(luò)這一側(cè)我們也做了優(yōu)化,這個(gè)網(wǎng)絡(luò)里就是一個(gè)最簡單的全鏈接神經(jīng)網(wǎng)絡(luò),我們做優(yōu)化的時(shí)候是在User Representation Network引入FM Pooling層,學(xué)習(xí)用戶高頻消費(fèi)行為的交叉特征,會(huì)讓Top100的精確度提高8%。
用戶在Feed流里有,“展示未點(diǎn)擊的Skip數(shù)據(jù)”比線上“展示已點(diǎn)擊數(shù)據(jù)”量級(jí)還要高,代表用戶對內(nèi)容并不是真正感興趣。第一,我們把展示未點(diǎn)擊的數(shù)據(jù)作為特征引入到User Representation Network里面,其中會(huì)用到歷史搜索和歷史閱讀數(shù)據(jù)。第二,我們會(huì)把Skip數(shù)據(jù)作為指導(dǎo)采樣的一種方式,訓(xùn)練大規(guī)模的標(biāo)簽Embedding時(shí)我們往往把正向數(shù)據(jù)之外的其他數(shù)據(jù)都當(dāng)成負(fù)向數(shù)據(jù)使用,所有負(fù)向采樣的sample都是在剩下的數(shù)據(jù)中,根據(jù)概率的方式或控制采樣頻率的方式提取。展示了但是跳過 的內(nèi)容會(huì)在采樣的時(shí)候加大權(quán)重,把它成為負(fù)例的概率變得更大,讓用戶的行為來指導(dǎo)采樣。
Skip這兩個(gè)數(shù)據(jù)為Top100 ACC產(chǎn)生了比較好的效果,從召回?cái)?shù)據(jù)里來的CTR和整體的閱讀量都有比較大的提高。
基于深度學(xué)習(xí)的 CTR 預(yù)估模型
知乎還在排序側(cè)采用了CTR預(yù)估的模型。1.0版本總體結(jié)構(gòu)和基于DNN的召回框架類似,使用兩層Relu而不是直接點(diǎn)積作為Embedding的預(yù)估網(wǎng)絡(luò)。這個(gè)模型上線一段時(shí)間之后,我們剛開始沒有進(jìn)行任何的參數(shù)裁剪的操作,收效沒有達(dá)到我們的預(yù)期。后來我們做了一個(gè)簡單的嘗試,按照業(yè)務(wù)的理解把特征組合成不同的Field,這些Field之間先做連接,用戶先分成N個(gè)Field,比如,F(xiàn)ield1是自己填寫的資料,F(xiàn)ield2是用戶興趣標(biāo)簽,F(xiàn)ield3是歷史搜索行為,先經(jīng)過一個(gè)簡單的子網(wǎng)絡(luò)再全連接到上層。這個(gè) trick能夠有效的減少特征在初始輸入時(shí)候的錯(cuò)誤交叉,會(huì)減輕模型的過擬合,線上應(yīng)用則達(dá)到了非常明顯的收益,AUC提升了1%,CTR提升了5.8%。
使用了DNN之后,我們還試用了谷歌出品的Wide & Deep Network,Deep是圖上部分,效果沒有明顯的提升。隨后我們做了一個(gè)分析判斷,發(fā)現(xiàn)Wide & Deep Network的 wide 部分,都會(huì)在原始特征輸入交叉方面做一個(gè)比較強(qiáng)的特征工程,否則所有信息在Deep部分已經(jīng)得到比較好的應(yīng)用,Wide 部分并沒有提供什么額外的輸入,也不會(huì)拿到特別好的數(shù)據(jù)表現(xiàn)。
今年我們開始在深度學(xué)習(xí)的CTR預(yù)估模型上嘗試更加激進(jìn)更有意思的優(yōu)化,也就是2.0版本。其中最早引入的優(yōu)化還是特征之間的交叉,我們引入FM層作為這些類別之間的Sparse Input之間的交叉,AUC提升了0.2%,CTR提升了1%。引入CNN及LSTM分別作為文本Encoder/Last Action Encoder,單用戶使用時(shí)長提高50秒。
第三個(gè)trick參考了阿里的一篇論文,我們引入Attention機(jī)制作為用戶Embedding和CandidateEmbedding之間的交叉權(quán)重。舉個(gè)例子,用戶點(diǎn)擊的十篇文章中,有九篇是關(guān)于體育的一篇是關(guān)于互聯(lián)網(wǎng)的,等到下次體育相關(guān)內(nèi)容的分?jǐn)?shù)會(huì)比互聯(lián)網(wǎng)相關(guān)內(nèi)容的分?jǐn)?shù)高得特別離譜,平均之后互聯(lián)網(wǎng)信息淹沒在體育信息里,但互聯(lián)網(wǎng)內(nèi)容也是用戶喜歡的,權(quán)重卻很難發(fā)揮出來。我們引入Attention機(jī)制,把用戶的閱讀歷史跟當(dāng)前候選集里相關(guān)的數(shù)據(jù)和權(quán)重學(xué)習(xí)之后,收到了良好效果,單用戶使用時(shí)長增加了40秒左右。
知乎是一個(gè)社區(qū)化的平臺(tái),常常需要平衡很多指標(biāo)的收益,預(yù)估閱讀時(shí)長、點(diǎn)贊、收藏、分享、創(chuàng)作等行為。為了解決多目標(biāo)預(yù)估中訓(xùn)練和預(yù)測效率問題,我們使用了CTR預(yù)估模型預(yù)訓(xùn)練網(wǎng)絡(luò),利用Parameter Hard Sharing,點(diǎn)擊和點(diǎn)贊這兩層共享之前的權(quán)重,會(huì)有一個(gè)獨(dú)立的隱藏層model task自己的目標(biāo),這樣能降低前向/反向傳播中的計(jì)算量。
我們常常預(yù)估到一些非離散的目標(biāo),對于非離散目標(biāo)如閱讀時(shí)長,很多同行的做法是線性預(yù)估的方式預(yù)估,你閱讀了60秒,我盡量把預(yù)測的值逼近。知乎的做法是,把一篇文章的閱讀時(shí)長做一個(gè)Normalize操作。我們觀察了一下閱讀時(shí)長的分布,這個(gè)分布與正態(tài)分布比較類似。所以我們使用了 z-value 來對閱讀市場進(jìn)行離散化,離散化之后會(huì)把閱讀時(shí)長分為五等——沒點(diǎn)擊、點(diǎn)擊了閱讀時(shí)長低、點(diǎn)擊了閱讀時(shí)長中等、點(diǎn)擊了閱讀時(shí)長偏高、點(diǎn)擊了閱讀時(shí)長非常高——將連續(xù)值預(yù)測轉(zhuǎn)化成離散值預(yù)測。
在訓(xùn)練過程中,我們也修改了 Softmax 函數(shù),如果預(yù)測出的檔數(shù)和實(shí)際用戶閱讀時(shí)長檔數(shù)差太多,我們加一個(gè)比較大的修改函數(shù),讓這種樣本的 loss 加大。閱讀時(shí)長這個(gè)模型上線之后,對知乎的使用時(shí)長和單篇文章的閱讀時(shí)長都有提升。
四、Feed流推薦系統(tǒng)中遇到的實(shí)際問題
模型訓(xùn)練問題
樣本組織方面,大家可以看到剛才我們用了很多實(shí)時(shí)特征,這些實(shí)時(shí)特征對用戶和樣本來講都是不斷變化的,最初知乎組織這些樣本的時(shí)候都是使用從離線庫里Join數(shù)據(jù)的方式做特征的梳理,后來我們發(fā)現(xiàn)線上往往會(huì)出現(xiàn)特征穿越的狀況,你在線下記錄的日志畢竟不是實(shí)時(shí)的,日志都是流失的放到數(shù)據(jù)庫里,處理數(shù)據(jù)流的過程中也會(huì)出現(xiàn)順序上的錯(cuò)誤,所以我們會(huì)在線上進(jìn)行實(shí)施打點(diǎn)避免穿越。
對于CTR預(yù)估的正向樣本和負(fù)向樣本,后者與前者相比存在幾倍的量級(jí)差異。通常我們會(huì)對正負(fù)樣本進(jìn)行不同采樣率的實(shí)驗(yàn),不同的業(yè)務(wù)指標(biāo)下采樣率不一樣,最終回有一個(gè)最佳的采樣率。但采樣率多少跟數(shù)據(jù)的分布和業(yè)務(wù)需要預(yù)估的指標(biāo)特性相關(guān),1比1不一定是最好的采樣比例。
特征工程方面,我們在實(shí)際應(yīng)用場景里發(fā)現(xiàn)對于分布范圍比較大的特征,有一萬個(gè)贊也有幾萬個(gè)贊的,做CTR預(yù)估的過程中贊量的影響會(huì)變得非常不平均,所以通常會(huì)進(jìn)行特征的歸一化和boxing,分成不同的段輸入到CTR預(yù)估模型里達(dá)到比較好的效果。
模型評(píng)估方面,AUC是基礎(chǔ)指標(biāo),我們發(fā)現(xiàn)AUC是一個(gè)特別基礎(chǔ)的指標(biāo),對于兩份離線文件之間的評(píng)估確實(shí)有比較大的意義,尤其AUC在現(xiàn)在狀態(tài)下大家都訓(xùn)練到0.7或0.8的水平,上線之后各種數(shù)據(jù)指標(biāo)并不一定能提升那么多,我們做了一個(gè)DCG Gain收益的指標(biāo),它具有更高的參考意義。
業(yè)務(wù)問題
多樣性問題如何解決?大家都知道Feed流里很多時(shí)候最精準(zhǔn)不一定是用戶最想要的,重復(fù)太多對于各種線上業(yè)務(wù)數(shù)據(jù)的改進(jìn)也不一定是正向的結(jié)果,我們會(huì)引入各種框架進(jìn)行業(yè)務(wù)導(dǎo)向的調(diào)權(quán)、打散、隔離和禁閉,一個(gè)內(nèi)容出現(xiàn)幾次之后你沒有點(diǎn)擊,之后都不會(huì)推薦相似的內(nèi)容。
如何避免「信息繭房」的產(chǎn)生?以各種行為表現(xiàn)預(yù)估的方式去排序和推薦的推薦系統(tǒng),最后會(huì)讓用戶傳遞一個(gè)信息繭房,推薦列表里翻來覆去就是這么幾個(gè)內(nèi)容。我們的解決方案是,采用一個(gè)Explore & Exploit機(jī)制,針對老用戶及興趣比較均勻的用戶,適當(dāng)減少興趣探測手段,在探測過程中也會(huì)盡量使用Tag之間的關(guān)聯(lián)信息增強(qiáng)探測效率。
-
人工智能
+關(guān)注
關(guān)注
1799文章
47959瀏覽量
241249 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8458瀏覽量
133228 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5523瀏覽量
121716
原文標(biāo)題:知乎如何洞察你的真實(shí)喜好?首頁信息流技術(shù)揭秘
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
X平臺(tái)推出短視頻信息流,瞄準(zhǔn)美國TikTok用戶
云知聲AIGC技術(shù)助力雅馬哈提升企業(yè)生產(chǎn)力
知乎正式公布三季度財(cái)報(bào):月活躍用戶數(shù)穩(wěn)步增長
差壓表的技術(shù)演進(jìn)與實(shí)際應(yīng)用探討
智慧電力綜合自動(dòng)化系統(tǒng) 電力綜自系統(tǒng) 是什么?
藍(lán)牙傳輸技術(shù)的演進(jìn)與發(fā)展
知乎全新AI產(chǎn)品"知乎直答"亮相第十屆鹽Club新知青年大會(huì)
知語科技無人機(jī)反制技術(shù)

評(píng)論