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

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

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

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

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

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

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

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

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

LTR架構(gòu)

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

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

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

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

日志過濾

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

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

特征工程

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

特征種類

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

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

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

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

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

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

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

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

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

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

簡單起見,我們使用N-2天前的日志做訓(xùn)練,N-1天前的日志做評估,需保證兩部分日志的用戶群體是一致的,我們再做ab測試的過程中,不能訓(xùn)練數(shù)據(jù)用的是1號桶,評估數(shù)據(jù)用的是2號桶。

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

在線服務(wù)于評估

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

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

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

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

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

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

問題探討

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

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

樣本和特征的時間正交

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

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

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

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

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

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

重要特征和 case排查

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

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

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

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

總結(jié)

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

BOUT

關(guān)于作者

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