近線:準(zhǔn)實(shí)時(shí)捕捉用戶(hù)實(shí)時(shí)行為并做出反饋,即近線模塊的輸出需要考慮用戶(hù)的實(shí)時(shí)行為反饋。該模塊一般處理延遲為秒級(jí)。

離線:基于分布式平臺(tái)離線挖掘,輸出包括item-base協(xié)同過(guò)濾結(jié)果、基于標(biāo)簽的召回結(jié)果、各維度熱門(mén)結(jié)果、用戶(hù)畫(huà)像等等。該模塊的處理延遲一般為小時(shí)級(jí)或者天級(jí)。

一個(gè)通用的資訊流推薦架構(gòu)如下:

信息流效果_效果信息流廣告_效果數(shù)據(jù)

圖1:--三層架構(gòu)

hot rec模塊負(fù)責(zé)生成各個(gè)維度的熱門(mén)結(jié)果,如分類(lèi)別熱門(mén)、分地域熱門(mén);生成各個(gè)標(biāo)簽的召回結(jié)果,如 英超 -> (,,….);item rec生成每個(gè)資訊item的相關(guān)結(jié)果;user rec 根據(jù)用戶(hù)實(shí)時(shí)行為和離線畫(huà)像負(fù)責(zé)生成用戶(hù)的推薦結(jié)果;響應(yīng)推薦請(qǐng)求;item 返回資訊的信息;負(fù)責(zé)接收用戶(hù)對(duì)item的行為反饋。關(guān)于架構(gòu)可參考更過(guò)之前達(dá)觀數(shù)據(jù)發(fā)布的推薦技術(shù)文章。

為什么需要學(xué)習(xí)排序

學(xué)習(xí)排序(LTR: to rank)是信息檢索領(lǐng)域的經(jīng)典問(wèn)題,也是互聯(lián)網(wǎng)場(chǎng)景中這個(gè)核心算法問(wèn)題。推薦整個(gè)流程可以分為召回、排序、重排序這三個(gè)階段,通俗來(lái)說(shuō),召回就是找到用戶(hù)可能喜歡的幾百條資訊,排序就是對(duì)這幾百條資訊利用機(jī)器學(xué)習(xí)的方法預(yù)估用戶(hù)對(duì)每條資訊的偏好程度,一般以點(diǎn)擊率衡量,所以學(xué)習(xí)排序在很多情況下等同于點(diǎn)擊率預(yù)估,都是將用戶(hù)最可能點(diǎn)擊的資訊優(yōu)先推給用戶(hù);重排序更多考慮業(yè)務(wù)邏輯,如在推薦結(jié)果的多樣性、時(shí)效性、新穎性等方面進(jìn)行控制。

在沒(méi)有學(xué)習(xí)排序之前,也可以單純使用協(xié)同過(guò)濾算法來(lái)進(jìn)行推薦。列如使用用戶(hù)最近點(diǎn)擊的資訊信息召回這些item的相關(guān)結(jié)果和偏好類(lèi)別熱門(mén)結(jié)果組合后進(jìn)行返回。但是這對(duì)于資訊類(lèi)推薦需要考慮一下問(wèn)題:資訊類(lèi)信息流屬于用戶(hù)消費(fèi)型場(chǎng)景,item時(shí)效性要求高,item base cf容易召回較舊的內(nèi)容,而且容易導(dǎo)致推薦結(jié)果收斂。因此可以將item的相關(guān)結(jié)果保證時(shí)效性的基礎(chǔ)上,融合類(lèi)別、標(biāo)簽熱門(mén)結(jié)果,對(duì)各個(gè)策略的召回結(jié)果按照線上總體反饋進(jìn)行排序,就可以作為用戶(hù)的推薦結(jié)果。但是這一融合過(guò)程比較復(fù)雜,一種簡(jiǎn)單的方式就是看哪種召回策略總體收益越高就擴(kuò)大這個(gè)策略的曝光占比,對(duì)于個(gè)體而言卻顯得不是特別個(gè)性化,而且在規(guī)則調(diào)參上也比較困難。

LTR架構(gòu)

我們迅速在資訊信息流推薦場(chǎng)景上實(shí)踐ltr算法。Ltr一般分為 wise、、list wise,一般工程上使用較多,簡(jiǎn)單,成本低,收益也可靠。簡(jiǎn)單來(lái)說(shuō),Ltr即預(yù)測(cè)user對(duì)一個(gè)未消費(fèi)item的預(yù)估點(diǎn)擊率,即:

即這個(gè)預(yù)估的點(diǎn)擊率是和user、item、相關(guān)的。我們使用邏輯回歸( ,lr)模型來(lái)搭建我們第一版的學(xué)習(xí)排序架構(gòu),lr模型簡(jiǎn)單可解釋?zhuān)秉c(diǎn)在于需要對(duì)業(yè)務(wù)特征有較深理解,特征工程比較費(fèi)力,但從應(yīng)用角度出發(fā),無(wú)論是lr、ffm亦或是較新的wide& deep等模型,特征挖掘都是極其重要的一環(huán)。因此在首先基于lr模型的基礎(chǔ)上,核心工作就是基于業(yè)務(wù)理解并發(fā)掘特征。以下是排序模型的整體推薦架構(gòu)。

效果信息流廣告_效果數(shù)據(jù)_信息流效果

圖2:ltr整體架構(gòu)

日志過(guò)濾

推薦日志詳細(xì)打印了每次推薦請(qǐng)求的參數(shù)信息和返回信息,如屏數(shù)、請(qǐng)求個(gè)數(shù)、設(shè)備信息、位置信息、返回的推薦結(jié)果。推薦日志需要盡可能的考慮后期可能使用到的特征,并做好充分的記錄。將推薦日志與曝光日志進(jìn)行第一次join,過(guò)濾掉未曝光即用戶(hù)沒(méi)有看到的推薦item,這部分樣本沒(méi)有參考意義,可以省略;第一個(gè)join后的結(jié)果與點(diǎn)擊日志join,即可以得到每條樣本的(0/1:未點(diǎn)擊/點(diǎn)擊)。兩次join需要根據(jù)請(qǐng)求時(shí)間、、三者進(jìn)行 join,確保數(shù)據(jù)準(zhǔn)確。日志過(guò)濾后生成的每條樣本信息如下:

[請(qǐng)求時(shí)間、曝光時(shí)間、點(diǎn)擊時(shí)間(如果有)、、最近的點(diǎn)擊item列表、最近曝光的item列表、、召回策略、屏數(shù)、曝光順序位置、地理位置、設(shè)備信息] –> 點(diǎn)擊。

特征工程

經(jīng)過(guò)1)的樣本缺少足夠的特征,我們需要補(bǔ)充user和item端的特征。該部分特征需要離線挖掘并提前入庫(kù)。總結(jié)后的可使用特征種類(lèi)大致如下:

特征種類(lèi)

User特征:手機(jī)型號(hào)、地域、圖文曝光/點(diǎn)擊總數(shù)、視頻曝光/點(diǎn)擊總數(shù)、圖文點(diǎn)擊率、視頻點(diǎn)擊率,最近1、2、3天圖文視頻點(diǎn)擊數(shù)、最近點(diǎn)擊時(shí)間、最近一次點(diǎn)擊是圖文還是視頻、一二級(jí)類(lèi)別點(diǎn)擊率、標(biāo)簽偏好,類(lèi)別偏好、最近16次點(diǎn)擊的素材分布、最近16次點(diǎn)擊item的平均標(biāo)題向量、曝光時(shí)間、點(diǎn)擊時(shí)間等;

item特征:、類(lèi)別、總體點(diǎn)擊率、最近一周點(diǎn)擊率、圖片個(gè)數(shù)、來(lái)源、類(lèi)型(圖文還是視頻)、發(fā)布時(shí)間、標(biāo)題向量、召回策略、點(diǎn)擊反饋ctr等;

特征:屏數(shù)、曝光順序位置、請(qǐng)求時(shí)間段等;

交叉特征:用戶(hù)對(duì)item類(lèi)別的一二級(jí)類(lèi)別點(diǎn)擊率、用戶(hù)對(duì)item標(biāo)簽的偏好、用戶(hù)對(duì)item素材類(lèi)型的曝光、點(diǎn)擊次數(shù)和點(diǎn)擊率、最近16個(gè)點(diǎn)擊item與預(yù)測(cè)item標(biāo)題向量的余弦相似度、相似度最大值等。

交叉特征對(duì)于特別重要,核心在于邏輯回歸函數(shù)中,如果與預(yù)測(cè)item無(wú)關(guān)的特征不會(huì)對(duì)item的排序產(chǎn)生影響,只有item特征或者與item交叉的特征才會(huì)對(duì)排序有實(shí)質(zhì)影響,因?yàn)槠渌卣鲗?duì)任何待預(yù)測(cè)item的打分貢獻(xiàn)是一樣的。

我們沒(méi)有使用 word模型來(lái)表示標(biāo)題,因?yàn)檫@非常稀疏,而是采用標(biāo)題中關(guān)鍵詞的向量組合生成標(biāo)題表示,使用詞向量來(lái)表示標(biāo)題極大減少了特征規(guī)模,實(shí)現(xiàn)上比較方便。標(biāo)題向量同時(shí)需要?dú)w一化成單位向量,單位向量的余弦相似度即兩個(gè)向量的內(nèi)積,這個(gè)優(yōu)化顯著提高了ltr在線模塊的性能。

我們將所有特征按類(lèi)型劃分為離散型、連續(xù)型、向量型三種類(lèi)型。如item類(lèi)別就是一個(gè)離散型特征、item ctr就是一個(gè)連續(xù)性特征、標(biāo)題向量就是一個(gè)向量型特征。對(duì)于每種特征,其處理方式都會(huì)不太一樣,對(duì)于離散型一般直接根據(jù)離散值做 name,對(duì)于連續(xù)值我們部分參考 wide & deep論文中的等頻歸一化方法,簡(jiǎn)單來(lái)說(shuō)加入ctr特征需要等屏成10個(gè)特征,即將ctr值按照分布取其10等分點(diǎn),這10等分點(diǎn)就定義了10個(gè)區(qū)間,每個(gè)區(qū)間的樣本數(shù)都占10%。需要注意的是,ltr在線部分需要寫(xiě)死這10個(gè)區(qū)間來(lái)提高特征離散化的效率。

由于離線和在線都會(huì)需要User和item端特征,我們?cè)趆ive數(shù)倉(cāng)和ssdb集群總中都存儲(chǔ)一份,離線負(fù)責(zé)join hive表,在線負(fù)責(zé)讀取ssdb。

模型訓(xùn)練與評(píng)估

經(jīng)過(guò)特征工程后,訓(xùn)練數(shù)據(jù)按照格式進(jìn)行打印。使用一天的訓(xùn)練數(shù)據(jù)的情況下,整個(gè)特征空間規(guī)模約為30萬(wàn)維左右。模型訓(xùn)練采用的 模型進(jìn)行訓(xùn)練,方便dump和load模型,我們采用了算法來(lái)進(jìn)行訓(xùn)練,是一種擬牛頓法,不同于隨機(jī)梯度下降,總是朝著最優(yōu)化梯度方向進(jìn)行迭代。

簡(jiǎn)單起見(jiàn),我們使用N-2天前的日志做訓(xùn)練,N-1天前的日志做評(píng)估,需保證兩部分日志的用戶(hù)群體是一致的,我們?cè)僮鯽b測(cè)試的過(guò)程中,不能訓(xùn)練數(shù)據(jù)用的是1號(hào)桶,評(píng)估數(shù)據(jù)用的是2號(hào)桶。

實(shí)際過(guò)程中,我們采用1500萬(wàn)條樣本做訓(xùn)練,300萬(wàn)條樣本做評(píng)估,訓(xùn)練完成后離線auc為0.79-0.8區(qū)間內(nèi),在線auc為0.75-0.76區(qū)間內(nèi),存在一定差距。關(guān)于auc可以自行參考技術(shù)文章,簡(jiǎn)單來(lái)說(shuō)auc就是衡量模型將正樣本排在負(fù)樣本前面的概率,即排序能力。

在線服務(wù)于評(píng)估

我們的最終目的是要在線上流程產(chǎn)生收益,我們采用rpc搭建了一個(gè)ltr在線服務(wù),負(fù)責(zé)接收的ltr請(qǐng)求。推薦在召回各個(gè)策略的結(jié)果后,會(huì)將、預(yù)測(cè)的列表、等信息傳給ltr ,ltr 打分后返回。我們對(duì)ltr 做了充足的優(yōu)化,包括標(biāo)題向量的單位化、ssdb性能優(yōu)化、特征離散化的優(yōu)化,顯著提高了性能,對(duì)200-300個(gè)item打分的平均響應(yīng)時(shí)間控制在以?xún)?nèi)。

模型不僅需要離線評(píng)估,還需要在線評(píng)估,在線評(píng)估即評(píng)估在線樣本的auc, log中記錄了ltr ,因此可以方便的計(jì)算在線auc。計(jì)算在線auc的目的是為了驗(yàn)證離線效果提升和在線效果提升的同步性。

業(yè)務(wù)效果的提升

我們?cè)跍y(cè)試組上線ltr邏輯后,在點(diǎn)擊率指標(biāo)上相比原算法取得了明顯的提升。如下圖所示:

信息流效果_效果信息流廣告_效果數(shù)據(jù)

可以明顯看出上線后,基于點(diǎn)擊率目標(biāo)的ltr對(duì)于天級(jí)點(diǎn)擊率的提升是非常明顯的。

問(wèn)題探討

單機(jī)訓(xùn)練大規(guī)模樣本

由于選取的樣本數(shù)較大,1000-2000萬(wàn)的規(guī)模,簡(jiǎn)單增大樣本數(shù)可以顯著提高auc,在我們的場(chǎng)景上在往上增加auc就似乎增加不明顯了。這么大的訓(xùn)練樣本單機(jī)訓(xùn)練的話顯然只能用稀疏矩陣的方式來(lái)存儲(chǔ)樣本。的就是非常好的選擇,由于的轉(zhuǎn)載時(shí)數(shù)組下表采用int,故最大空間只能到20億,顯然2000萬(wàn)樣本* 每個(gè)樣本的平均特征數(shù)遠(yuǎn)遠(yuǎn)大于20億,因此我們探討了如何加載大規(guī)模數(shù)據(jù)的方法,最終我們參考工具包中加載格式數(shù)據(jù)的代碼,當(dāng)然加載方式也存在問(wèn)題,經(jīng)過(guò)修改調(diào)試后,成功的完成了訓(xùn)練數(shù)據(jù)的加載,具體問(wèn)題和解決方式可以參考這篇文章。

樣本和特征的時(shí)間正交

樣本和特征數(shù)據(jù)的時(shí)間正交即兩者在時(shí)間上不應(yīng)該有交叉。舉個(gè)例子,前期我們?cè)趈oin用戶(hù)端特征時(shí),用的是1號(hào)的訓(xùn)練樣本數(shù)據(jù),用戶(hù)離線特征用的也是1號(hào)的數(shù)據(jù),這樣兩者就會(huì)存在交叉,即user點(diǎn)擊了一篇英超新聞,同時(shí)user 畫(huà)像中也偏好英超標(biāo)簽(由1號(hào)的點(diǎn)擊生成),這樣就會(huì)導(dǎo)致auc偏高,當(dāng)然這種偏高就是虛假偏高,模型的泛化能力是很差的。在實(shí)際過(guò)程中,遇到過(guò)幾次auc突然偏高的情況,發(fā)現(xiàn)大部分都是由于沒(méi)有保證數(shù)據(jù)正交性導(dǎo)致的。

在整個(gè)流程中,數(shù)據(jù)的時(shí)間正交總是被不斷強(qiáng)調(diào)。無(wú)論是user、item特征還是樣本數(shù)據(jù),比如訓(xùn)練樣本中一個(gè)特定user的樣本按照時(shí)間排序是(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10),使用s1-s8訓(xùn)練,s9,s10評(píng)估是合理的,而使用s3-s10訓(xùn)練,s1,s2則顯然是不合理的。

預(yù)估點(diǎn)擊率和實(shí)際點(diǎn)擊率的一致性

點(diǎn)擊率預(yù)估基本要求就是預(yù)估的點(diǎn)擊率要精準(zhǔn),如果只考慮位置的,可以不用過(guò)分關(guān)心預(yù)估的絕對(duì)值,但實(shí)際情況下還是需要盡量保證預(yù)估分?jǐn)?shù)的合理性,往往預(yù)估精準(zhǔn)的ctr具有很大的參考價(jià)值。

前期我們預(yù)估的點(diǎn)擊率一直偏高,平均打分甚至達(dá)到了0.5,經(jīng)過(guò)排查在于訓(xùn)練模型的參數(shù)設(shè)置不合理,錯(cuò)誤的將的參數(shù)設(shè)置成,導(dǎo)致?lián)p失函數(shù)中正樣本預(yù)測(cè)錯(cuò)誤的代價(jià)增大,導(dǎo)致模型偏向正樣本,從而導(dǎo)致預(yù)估的點(diǎn)擊率極度偏高,修復(fù)成默認(rèn)值預(yù)估點(diǎn)擊率下降明顯,接近實(shí)際值。具體參考:。

同時(shí)為了保證訓(xùn)練數(shù)據(jù)和在線服務(wù)完全一致性,我們調(diào)整了推薦的整體架構(gòu),更多的直接在推薦模塊負(fù)責(zé)召回和排序,這樣又可以進(jìn)一步保證預(yù)估點(diǎn)擊率和實(shí)際點(diǎn)擊率的一致。

重要特征和 case排查

lr模型可以方便每個(gè)樣本的各個(gè)特征和權(quán)重,權(quán)重高的特征顯然更加重要。如果你覺(jué)得重要的特征權(quán)重過(guò)低了或者不重要的特征權(quán)重過(guò)高了,也許就要思考為什么了。以下是一個(gè)樣本的信息。

效果數(shù)據(jù)_信息流效果_效果信息流廣告

例如我們發(fā)現(xiàn)ctr特征權(quán)重特別高,假設(shè)一個(gè)新item曝光了一次點(diǎn)擊了一次,點(diǎn)擊率是1.0,乘上ctr的權(quán)重上這個(gè)item極易被排到最前面,因此我們考慮ctr的置信度,考慮對(duì)ctr類(lèi)特征做了平滑。

值根據(jù)實(shí)際情況設(shè)定。

總結(jié)

本文詳細(xì)介紹了達(dá)觀數(shù)據(jù)的推薦引擎架構(gòu)和在資訊信息流推薦場(chǎng)景中利用ltr排序顯著提高業(yè)務(wù)指標(biāo)的實(shí)踐和經(jīng)驗(yàn)。由于篇幅有限,關(guān)于非線性的ffm、wide & deep沒(méi)有做詳細(xì)介紹,而這也是算法團(tuán)隊(duì)一直繼續(xù)投入研究的重點(diǎn)。

BOUT

關(guān)于作者

文輝:達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人,主要負(fù)責(zé)達(dá)觀數(shù)據(jù)推薦系統(tǒng)、爬蟲(chóng)系統(tǒng)等主要系統(tǒng)的研究和開(kāi)發(fā)。同濟(jì)大學(xué)計(jì)算機(jī)應(yīng)用技術(shù)專(zhuān)業(yè)碩士,曾就職于盛大文學(xué)數(shù)據(jù)中心部門(mén),負(fù)責(zé)爬蟲(chóng)系統(tǒng)、推薦系統(tǒng)、數(shù)據(jù)挖掘和分析等大數(shù)據(jù)系統(tǒng)的研發(fā)工作,在爬蟲(chóng)系統(tǒng)、/Hive、數(shù)據(jù)挖掘等方面具備充足的研發(fā)和實(shí)踐經(jīng)驗(yàn)。