導(dǎo)讀:3月下旬,中國(guó)電信大數(shù)據(jù)技術(shù)團(tuán)隊(duì)邀請(qǐng)達(dá)觀數(shù)據(jù)技術(shù)團(tuán)隊(duì)前去進(jìn)行技術(shù)交流和互相學(xué)習(xí)。達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人文輝就“視頻推薦技術(shù)”進(jìn)行了詳細(xì)的講解,主要從達(dá)觀推薦系統(tǒng)開(kāi)發(fā)的概況、推薦系統(tǒng)的架構(gòu)模塊和達(dá)觀推薦算法來(lái)闡述,并針對(duì)操作中出現(xiàn)的問(wèn)題分享了自己的觀點(diǎn)。
推薦系統(tǒng)概況
說(shuō)了那么多遍的推薦系統(tǒng)到底是什么且如何運(yùn)用?很高興和大家分享下經(jīng)驗(yàn)。我們今天主要從視頻推薦技術(shù)來(lái)延伸學(xué)習(xí)?;ヂ?lián)網(wǎng)技術(shù)和社會(huì)化網(wǎng)絡(luò)發(fā)展加速度,每天有大量包括博客,圖片,視頻,微博等等的信息發(fā)布到網(wǎng)上。對(duì)于以視頻為主要流量導(dǎo)向的企業(yè)越來(lái)越難以發(fā)現(xiàn)用戶對(duì)信息的需求,原因有多種,用戶很難用合適的關(guān)鍵詞來(lái)描述自己的需求,又或是用戶無(wú)法對(duì)自己未知而又可能感興趣的信息做出描述。我們開(kāi)發(fā)視頻推薦引擎,也是以大數(shù)據(jù)技術(shù)幫用戶獲取更豐富,更符合個(gè)人口味和更加有意義的信息。
視頻推薦系統(tǒng)會(huì)根據(jù)用戶的觀看記錄和行為,利用機(jī)器推薦算法為用戶推薦其感興趣的視頻。智能推薦系統(tǒng)是為了解決千人一面的問(wèn)題,防止用戶看到的推薦結(jié)果都是千篇一律的,真正實(shí)現(xiàn)千人千面的個(gè)性化推薦效果,給用戶更好的體驗(yàn),給平臺(tái)更好的留存和收益。
達(dá)觀視頻智能推薦系統(tǒng)的研發(fā)目標(biāo)集中在以下方面:
??推薦結(jié)果相關(guān)性明顯提升
??推薦結(jié)果的多樣性提升
??推薦結(jié)果的時(shí)效性提升
??新穎的推薦理由自動(dòng)生成功能
以上研發(fā)目標(biāo)都是為了使視頻推薦效果更加準(zhǔn)確、及時(shí),現(xiàn)經(jīng)不斷優(yōu)化已經(jīng)完成所有目標(biāo),但系統(tǒng)還在持續(xù)優(yōu)化升級(jí)。
從系統(tǒng)的效果上來(lái)看,我們要實(shí)現(xiàn):
??更完整的挖掘數(shù)據(jù)
??多種優(yōu)質(zhì)推薦算法
??完善的系統(tǒng): 可靠性, 運(yùn)算性能
??更好的接口封裝: 支持多種終端的接入
從系統(tǒng)的組成上來(lái)看,系統(tǒng)主要包括以下幾個(gè)方面,注意各個(gè)部分的功能不是單一和互斥的:
??分布式推薦模塊——用戶點(diǎn)擊行為挖掘
??離線推薦模塊——多個(gè)推薦算法合并
??在線推薦模塊——實(shí)時(shí)推薦請(qǐng)求和計(jì)算
??個(gè)性化推薦模塊——用戶興趣深度挖掘
??推薦理由挖掘模塊——多種形態(tài)的理由
達(dá)觀視頻推薦系統(tǒng)不同于其他企業(yè)的部分是,從類型上來(lái)看相當(dāng)多樣化,分為個(gè)性化推薦、相關(guān)視頻推薦和熱門(mén)視頻推薦三種,每種類型對(duì)應(yīng)了不同的業(yè)務(wù)場(chǎng)景。
個(gè)性化推薦“想你所想”
深入分析用戶行為記錄,挖掘用戶的興趣愛(ài)好,向用戶推薦其感興趣想看的視頻,通常意義的推薦默認(rèn)就是個(gè)性化推薦;
相關(guān)視頻推薦“豐富擴(kuò)展”
通過(guò)深入分析網(wǎng)站視頻之間的內(nèi)在相關(guān)性,根據(jù)當(dāng)前被瀏覽的某個(gè)視頻為用戶推薦其視頻;
熱門(mén)視頻推薦“廣而告之”
為網(wǎng)站提供全站熱門(mén)視頻排行榜和分類熱門(mén)視頻排行榜
推薦系統(tǒng)的架構(gòu)和模塊
三層模型
為了解決待推薦item數(shù)量巨大和優(yōu)先的計(jì)算資源之間的矛盾,同時(shí)將更多的資源投入到熱門(mén)item的深度挖掘,我們引入了三層模型:離線模塊(offline)、近線模塊(nearline)、在線模塊(online)。離線模塊利用分布式平臺(tái)上進(jìn)離線挖掘,候選推薦結(jié)果每日帶入離線計(jì)算服務(wù)器;近線模塊在近線端進(jìn)行挖掘,結(jié)合用戶實(shí)時(shí)行為和離線模型結(jié)果,生成用戶的推薦結(jié)果;在線模塊負(fù)責(zé)整合離線結(jié)果和近線結(jié)果為最終輸出用戶的結(jié)果。從時(shí)效性上來(lái)看,離線(天級(jí))>近線(分鐘級(jí)或者秒級(jí))>在線(毫秒級(jí)),從效果上來(lái)看離線好于近線,近線好于在線。三層模型更好解決了新視頻和新用戶的無(wú)推薦結(jié)果的問(wèn)題。
分布式的挖掘模塊,會(huì)生成一些推薦的候選集,其中包括熱門(mén)挖掘模塊、推薦理由挖掘模塊、內(nèi)容系統(tǒng)挖掘模塊。這些離線系統(tǒng)生成的挖掘結(jié)果會(huì)響應(yīng)的存入到hdfs或者db中;
離線計(jì)算模塊,會(huì)對(duì)這個(gè)結(jié)果進(jìn)行再次加工,包括合并、融合等,其中可能還有處理業(yè)務(wù)的邏輯。離線模塊對(duì)這些結(jié)果進(jìn)行再次加工之后,最終的推薦結(jié)果,會(huì)存到一個(gè)redis db中;
online模塊就會(huì)直接從我們r(jià)edis的是slaver中直接去讀取推薦結(jié)果,快速返回推薦內(nèi)容。
從接口層來(lái)看,推薦服務(wù)是以HTTP API的方式來(lái)提供服務(wù),接口后端包括多機(jī)的負(fù)載均衡,并支持各終端通用(Web/Android/iOS…)各端接入,同時(shí)提供多種推薦類型:個(gè)性化推薦、相關(guān)推薦、熱門(mén)推薦。
推薦候選池candidate模塊會(huì)生成多種類型的推薦結(jié)果,比如使用標(biāo)簽去倒排中查出一部分的結(jié)果,協(xié)同過(guò)濾的結(jié)果、熱門(mén)的一些結(jié)果,包括分類熱門(mén)和編輯推薦結(jié)果,也會(huì)作為我們推薦的候選池。
正反饋數(shù)據(jù)是線上推薦結(jié)果的用戶反饋,比如在推薦列表中,我們會(huì)發(fā)現(xiàn)某些排序在后的結(jié)果好于排序在前的結(jié)果,那么這部分結(jié)果也可以作為推薦候選。
推薦候選池就是最終生成推薦結(jié)果的候選池,最終的推薦結(jié)果就是從候選池中篩選得到的。
視頻推薦相關(guān)視頻模塊,該模塊的輸入就是需要處理的一些視頻ID隊(duì)列,從輸出來(lái)看就是每個(gè)視頻的相關(guān)推薦結(jié)果。比如每個(gè)視頻都預(yù)存了64個(gè)推薦結(jié)果,存儲(chǔ)到redis中,當(dāng)redis緩存不能命中時(shí),可調(diào)用online模塊實(shí)時(shí)計(jì)算,解決冷啟動(dòng)的問(wèn)題。
features模塊其實(shí)就是一個(gè)正排找視頻信息的功能,根據(jù)視頻ID去獲取其一些基本信息,包括標(biāo)題、描述、標(biāo)簽、點(diǎn)擊數(shù)、前后綴。
Ranking模塊是權(quán)值計(jì)算和排序的模塊,此模塊是對(duì)候選結(jié)果視頻權(quán)值進(jìn)行再次計(jì)算,一些不合格的視頻我們需要剔除。對(duì)于推薦視頻的相關(guān)性,我們可能要進(jìn)行加權(quán),某些優(yōu)質(zhì)用戶的視頻也要進(jìn)行加權(quán)。
Filtering視頻過(guò)濾:UGC上傳的視頻時(shí)長(zhǎng)很短,許多視頻間標(biāo)題又很類似,這就存在大量重復(fù)資源,所以我們推薦結(jié)果也要過(guò)濾推薦結(jié)果中相同的視頻進(jìn)行去重,去重會(huì)讓用戶的體驗(yàn)更加友好。
Reranking排序后處理,對(duì)返回給用戶的推薦結(jié)果進(jìn)行一個(gè)ranking,也就是說(shuō),我們給用戶推薦的10個(gè)推薦視頻的同時(shí),還要保證視頻質(zhì)量和多樣性。
Reranking具體策略包括從推薦理由、視頻類別還有推薦效果各個(gè)方面把推薦結(jié)果順序打散,不至于連續(xù)多個(gè)推薦結(jié)果都是通過(guò)某個(gè)標(biāo)簽推薦的。
實(shí)時(shí)用戶行為反饋:特別針對(duì)一些新用戶,我們會(huì)及時(shí)捕捉新用戶的行為,隨后更新用戶的用戶畫(huà)像,然后去優(yōu)化推薦效果。
如果一個(gè)用戶點(diǎn)擊了A視頻和B視頻,又看了C視頻,在C視頻的 “猜你喜歡”推薦結(jié)果中,已使用了A、B視頻的特征。雖然A、B、C這3個(gè)視頻本身可能沒(méi)什么關(guān)聯(lián),因?yàn)橛脩舻南埠枚疾皇菃我坏摹?/p>
Feedback點(diǎn)擊反饋:用戶會(huì)對(duì)推薦結(jié)果會(huì)有點(diǎn)擊或者其他行為,那么根據(jù)這些行為,就可以優(yōu)化推薦結(jié)果的排序。但點(diǎn)擊反饋也存在一些困難點(diǎn),包括位置偏向、技術(shù)性點(diǎn)擊作弊和感知相關(guān)性。其中,位置偏向問(wèn)題比較普及。
開(kāi)源技術(shù):使用hadoop或spark等分布式計(jì)算平臺(tái)進(jìn)行離線數(shù)據(jù)挖掘,采用HBase進(jìn)行視頻信息和用戶行為存儲(chǔ),使用redis來(lái)存儲(chǔ)推薦結(jié)果,利用Redis的主從同步技術(shù)實(shí)現(xiàn)多機(jī)高可用方案,還有采用Tornado作為Http Interface的接口調(diào)用API。
推薦算法
1熱門(mén)算法
最簡(jiǎn)單是對(duì)item的單一維度的評(píng)分,比如視頻播放數(shù)、視頻上傳時(shí)間、視頻評(píng)論數(shù),接著會(huì)對(duì)單一維度進(jìn)行升級(jí),便會(huì)考慮多個(gè)維度的綜合評(píng)分。比如多個(gè)維度的線性加權(quán)得出分后再進(jìn)行排序,同時(shí)在計(jì)算這些評(píng)分過(guò)程中,需要考慮這些物品的時(shí)間因素,對(duì)一些時(shí)效性較強(qiáng)的item,會(huì)根據(jù)它的時(shí)間新舊進(jìn)行篩減。
按照點(diǎn)擊率進(jìn)行排名時(shí),還需要考慮它的置信度。比如說(shuō)同樣是1%的點(diǎn)擊,10000次展現(xiàn)里的100次點(diǎn)擊的物品,它的1%的點(diǎn)擊率自信度肯定要大于100次展現(xiàn)里的僅有1次點(diǎn)擊的item的置信度。可以考慮用威爾遜區(qū)間的方法對(duì)這些物品的ctr進(jìn)行降權(quán)。最后則要防止馬太效應(yīng),要考慮推薦多樣性和效果平衡。
2內(nèi)容算法
根據(jù)視頻類的標(biāo)題,基于文本挖掘技術(shù),挖掘出視頻的關(guān)鍵標(biāo)簽。比如短視頻標(biāo)題:“美國(guó)泥瓦匠辣舞走紅網(wǎng)絡(luò) 擺臂扭臀電力十足”,通過(guò)達(dá)觀文本挖掘技術(shù)可以自動(dòng)提取出此視頻最主要的兩個(gè)標(biāo)簽,“泥瓦匠”和“辣舞”,作為這個(gè)視頻的Top2標(biāo)簽。這里要注意視頻的屬性特征不僅僅包括標(biāo)簽,還包括系列視頻、作者賬號(hào),視頻類別等。
內(nèi)容算法如何應(yīng)用于相關(guān)推薦和個(gè)性化推薦?
在相關(guān)視頻推薦這部分,我們得到視頻的特征向量,比如視頻的作者、類別、標(biāo)簽之后,就可以用這些特征去我們倒排索引中進(jìn)行搜索和匹配,那么查出來(lái)的結(jié)果就能作為相關(guān)推薦的結(jié)果。
內(nèi)容算法應(yīng)用于個(gè)性化推薦,會(huì)比相關(guān)推薦多一走步。我們會(huì)生成用戶的profile向量,就是用戶模型的向量。這個(gè)向量會(huì)計(jì)算用戶對(duì)類別、標(biāo)簽、作者的一個(gè)偏好,通過(guò)用戶的向量和視頻的向量,計(jì)算這兩個(gè)向量的(余弦)相似度,那么就可以得到用戶對(duì)視頻的得分。
3協(xié)同過(guò)濾算法
協(xié)同過(guò)濾算法利用群體智慧為用戶進(jìn)行推薦,對(duì)于視頻來(lái)說(shuō)就是看了又看。
比如上圖,我們可以看到1號(hào)視頻和5號(hào)視頻,會(huì)經(jīng)常同時(shí)出現(xiàn)在很多用戶的觀看記錄中,那么用戶在觀看了1號(hào)視頻后,為其推薦 5號(hào)視頻則會(huì)是非常合理,也非常容易讓用戶進(jìn)行點(diǎn)擊。
協(xié)同過(guò)濾算法的輸入是用戶的播放行為日志,需要注意的是對(duì)日志的預(yù)處理。比如一個(gè)用戶對(duì)一個(gè)視頻有多次播放記錄的話,則需要進(jìn)行排重,只保留一個(gè)用戶對(duì)一條視頻的唯一一條播放記錄。
協(xié)同過(guò)濾算法具體的計(jì)算流程:
比如:計(jì)算A視頻和B視頻,包括兩個(gè)視頻播放的單天頻次、歷史頻次、單天共現(xiàn)(單天同被觀看的就是單天共現(xiàn),也就是說(shuō)都被同一個(gè)人所點(diǎn)擊所觀看的用戶數(shù)。)、歷史共現(xiàn)(歷史貢獻(xiàn)是指歷史上A視頻、B視頻都被同一個(gè)用戶所觀看的用戶數(shù)),計(jì)算出此4個(gè)指標(biāo)后,就可以計(jì)算出A視頻和B視頻的關(guān)聯(lián)度、相似度。
同時(shí)在計(jì)算相似度的時(shí)候,我們還需要考慮時(shí)間因子,需要對(duì)歷史共現(xiàn)的數(shù)據(jù)和歷史頻次的數(shù)據(jù)進(jìn)行降權(quán),要更加側(cè)重于新數(shù)據(jù)的影響力。
4用戶建模
用戶建模架構(gòu)圖主要包括三個(gè)部分,用戶數(shù)據(jù)的采集和預(yù)處理,數(shù)據(jù)統(tǒng)計(jì)和特征提取、智能挖掘分析。
第一部分包括用戶行為數(shù)據(jù)的采集,同時(shí)對(duì)不合法的數(shù)據(jù)、爬蟲(chóng)數(shù)據(jù)等進(jìn)行過(guò)濾等,形成基礎(chǔ)數(shù)據(jù);第二個(gè)部分為數(shù)據(jù)統(tǒng)計(jì)和特征抽取模塊,會(huì)從基礎(chǔ)數(shù)據(jù)里對(duì)用戶的行為特征進(jìn)行抽取,還有一些基礎(chǔ)特征、統(tǒng)計(jì)特征,對(duì)這些特征抽取完畢之后,有一個(gè)智能挖掘分析模塊對(duì)這些特征數(shù)據(jù)進(jìn)行深入的挖掘,利用機(jī)器學(xué)習(xí)分類技術(shù)預(yù)測(cè)用戶的人口統(tǒng)計(jì)學(xué)屬性、挖掘用戶長(zhǎng)期偏好、短期偏好。
用戶偏好挖掘,也就是對(duì)用戶興趣的挖掘,包括用戶對(duì)視頻作者、視頻類別和視頻標(biāo)簽的偏好。在計(jì)算這些偏好時(shí),我們也要同時(shí)考慮它的支持度和置信度。比如一個(gè)用戶在最近一周內(nèi)看了10個(gè)關(guān)于足球的視頻,同時(shí)在這一周內(nèi),我們所有的用戶平均觀看足球視頻的個(gè)數(shù)只有0.5個(gè),那么可以明顯看出這個(gè)用戶對(duì)足球類別的偏好遠(yuǎn)遠(yuǎn)超出平均水平。
5多策略融合
融合策略會(huì)在所有算法生成推薦結(jié)果后,比如內(nèi)容算法、協(xié)同過(guò)濾、矩陣分解等單算法結(jié)果,對(duì)所有結(jié)果進(jìn)行策略合并,可能也會(huì)考慮一些業(yè)務(wù)邏輯規(guī)則。
機(jī)器學(xué)習(xí)重排序的方法可以對(duì)這些推薦結(jié)果進(jìn)行重排,使用系統(tǒng)的正反饋和負(fù)反饋的數(shù)據(jù)去進(jìn)行訓(xùn)練。訓(xùn)練完畢后,我們會(huì)預(yù)測(cè)用戶對(duì)推薦結(jié)果的概率,排序后生成最終展現(xiàn)給客戶的視頻推薦列表,經(jīng)過(guò)一系列算法融合后的推薦列表,用戶對(duì)推薦視頻的點(diǎn)擊率會(huì)比之前提升3倍。
在接入我們視頻推薦的客戶當(dāng)中,推薦視頻的點(diǎn)擊率是達(dá)到翻倍甚至3倍以上效果,這都跟我們以上講的所有框架、算法息息相關(guān),實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),我們多年的實(shí)踐開(kāi)發(fā),實(shí)踐應(yīng)用,都說(shuō)明了達(dá)觀開(kāi)發(fā)的系統(tǒng)能在推薦領(lǐng)域得以很好的應(yīng)用,我們也將一直在推薦領(lǐng)域不斷學(xué)習(xí)鞏固。
Q&A
Q:視頻推薦系統(tǒng)的應(yīng)用場(chǎng)景?
A:類似于酷六、今日頭條視頻頁(yè)面,由UGC上傳的短視頻或長(zhǎng)視頻,以視頻信息流方式或個(gè)性化信息流展示的方式,都可以應(yīng)用視頻推薦系統(tǒng)。
Q:位置偏向問(wèn)題是指什么?
A:是指一個(gè)排在前面視頻的點(diǎn)擊率高于排在后面視頻的點(diǎn)擊率,并不一定是指是前面視頻推薦效果好于后面視頻,而只是因?yàn)槲恢玫年P(guān)系。因此,在用點(diǎn)擊行為對(duì)推薦結(jié)果進(jìn)行反饋時(shí),要考慮位置偏向問(wèn)題。
Q:Tornado是什么意思?
A:python版的http?server,它支持異步,不僅輕量而且性能很好。
Q:協(xié)同過(guò)濾算法中,歷史數(shù)據(jù)和新數(shù)據(jù)如何計(jì)算權(quán)重?
A:可以進(jìn)行線上的A/B測(cè)試,比如人工先設(shè)置某個(gè)值,然后在線上的測(cè)試中看效果,進(jìn)行人工調(diào)參。這個(gè)權(quán)重原則上是可以根據(jù)業(yè)務(wù)調(diào)整的,比如對(duì)于短視頻強(qiáng)調(diào)時(shí)效性,那么歷史數(shù)據(jù)的權(quán)重就可以小些;比如對(duì)于小說(shuō)時(shí)效性不強(qiáng),歷史數(shù)據(jù)的權(quán)重就可以大一些,一般新數(shù)據(jù)的權(quán)重都是1,歷史數(shù)據(jù)的權(quán)重在(0,1)之間。
Q:能否分享下多年的推薦系統(tǒng)相似工作經(jīng)驗(yàn)?
A:做數(shù)據(jù)挖掘、做推薦系統(tǒng)好多年,一些經(jīng)驗(yàn)告訴我們要有效提升,基本上百分之五十的精力都在做數(shù)據(jù)預(yù)處理,但是數(shù)據(jù)預(yù)處理的工作都是屬于臟活累活,但要把數(shù)據(jù)預(yù)處理做好,后面這些算法效果才能事半功倍的,拿到數(shù)據(jù)后去重、去燥,然后清洗、結(jié)構(gòu)化等等。
還需要很多工作,像自然語(yǔ)言處理,它在很多項(xiàng)目推薦系統(tǒng)跟用戶畫(huà)像里都起到非常重要的作用。而用戶畫(huà)像又分為靜態(tài)用戶畫(huà)像和動(dòng)態(tài)用戶畫(huà)像,動(dòng)態(tài)用戶畫(huà)像比靜態(tài)用戶畫(huà)像更直接一些。這些都需要認(rèn)真專業(yè)的團(tuán)隊(duì)去研究不斷開(kāi)發(fā)。