導(dǎo)讀:高德的愿景是:連接真實(shí)世界,讓出行更美好。為了實(shí)現(xiàn)愿景,我們要處理好LBS大數(shù)據(jù)和用戶之間的智能鏈接。信息檢索是其中的關(guān)鍵技術(shù),而搜索建議又是檢索服務(wù)不可或缺的組成部分。 本文將主要介紹機(jī)器學(xué)習(xí)在高德搜索建議的具體應(yīng)用,尤其是在模型優(yōu)化方面進(jìn)行的一些嘗試,這些探索和實(shí)踐都已歷經(jīng)驗(yàn)證,取得了不錯(cuò)的效果,并且為后來幾年個(gè)性化、深度學(xué)習(xí)、向量索引的應(yīng)用奠定了基礎(chǔ)。 對(duì)搜索排序模塊做重構(gòu) 搜索建議(suggest服務(wù))是指:用戶在輸入框輸入query的過程中,為用戶自動(dòng)補(bǔ)全query或POI(Point of Interest,興趣點(diǎn),地理信息系統(tǒng)中可以是商鋪、小區(qū)、公交站等地理位置標(biāo)注信息),羅列出補(bǔ)全后的所有候選項(xiàng),并進(jìn)行智能排序。 我們希望通過suggest服務(wù):智能提示,降低用戶的輸入成本。它的特點(diǎn)是:響應(yīng)快、不承擔(dān)復(fù)雜query的檢索,可以把它理解為一個(gè)簡(jiǎn)化版的LBS領(lǐng)域信息檢索服務(wù)。 和通用IR系統(tǒng)一樣,suggest也分為doc(LBS中的doc即為POI)的召回和排序兩個(gè)階段。其中,排序階段主要使用query和doc的文本相關(guān)性,以及doc本身的特征(weight、click),進(jìn)行加權(quán)算分排序。 但隨著業(yè)務(wù)的不斷發(fā)展、特征規(guī)模越來越大,人工調(diào)參逐漸困難,基于規(guī)則的排序方式已經(jīng)很難得到滿意的效果。這種情況下,為了解決業(yè)務(wù)問題,將不得不打上各種補(bǔ)丁,導(dǎo)致代碼難以維護(hù)。 因此,我們決定對(duì)排序模塊進(jìn)行重構(gòu),Learning to Rank無疑是一個(gè)好的選擇。 面臨的挑戰(zhàn):樣本構(gòu)造、模型調(diào)優(yōu) Learning to Rank(LTR)是用機(jī)器學(xué)習(xí)的方法來解決檢索系統(tǒng)中的排序問題。業(yè)界比較常用的模型是gbrank,loss方案用的最多的是pair wise,這里也保持一致。一般應(yīng)用LTR解決實(shí)際問題,最重要的問題之一就是如何獲得樣本。 首先,高德地圖每天的訪問量巨大,這背后隱藏的候選POI更是一個(gè)天文數(shù)字,想要使用人工標(biāo)注的方法去獲得樣本明顯不現(xiàn)實(shí)。 其次,如果想要使用一些樣本自動(dòng)構(gòu)造的方法,比如基于用戶對(duì)POI的點(diǎn)擊情況構(gòu)建樣本pair ,也會(huì)遇到如下的問題:
對(duì)于這幾個(gè)問題總結(jié)起來就是:無點(diǎn)擊數(shù)據(jù)時(shí),建模很迷茫。但就算有某個(gè)POI的點(diǎn)擊,卻也無法代表用戶實(shí)際是滿意的。 最后,在模型學(xué)習(xí)中,也面臨了特征稀疏性的挑戰(zhàn)。統(tǒng)計(jì)學(xué)習(xí)的目標(biāo)是全局誤差的一個(gè)最小化。稀疏特征由于影響的樣本較少,在全局上影響不大,常常被模型忽略。但是實(shí)際中一些中長尾case的解決卻往往要依靠這些特征。因此,如何在模型學(xué)習(xí)過程中進(jìn)行調(diào)優(yōu)是很重要。 系統(tǒng)建模過程詳解 上一節(jié),我們描述了建模的兩個(gè)難題,一個(gè)是樣本如何構(gòu)造,另一個(gè)是模型學(xué)習(xí)如何調(diào)優(yōu)。先看下怎么解決樣本構(gòu)造難題,我們解決方案是:
詳細(xì)方案 第一步,融合服務(wù)端多張日志表,包括搜索建議、搜索、導(dǎo)航等。接著,進(jìn)行session的切分和清洗。最后,通過把輸入session中,末尾query的點(diǎn)擊計(jì)算到session中所有query上,以此滿足實(shí)現(xiàn)用戶輸入session最短的優(yōu)化目標(biāo)。 如下圖所示: 最終,抽取線上點(diǎn)擊日志超過百萬條的隨機(jī)query,每條query召回前N條候選POI。利用上述樣本構(gòu)造方案,最終生成千萬級(jí)別的有效樣本作為gbrank的訓(xùn)練樣本。 特征方面,主要考慮了4種建模需求,每種需求都有對(duì)應(yīng)的特征設(shè)計(jì)方案:
詳細(xì)的特征設(shè)計(jì),如下表所示: 完成特征設(shè)計(jì)后,為了更好發(fā)揮特征的作用,進(jìn)行必要的特征工程,包括尺度縮放、特征平滑、去position bias、歸一化等。這里不做過多解釋。 初版模型,下掉所有規(guī)則,在測(cè)試集上MRR 有5個(gè)點(diǎn)左右的提升,但模型學(xué)習(xí)也存在一些問題,gbrank特征學(xué)習(xí)的非常不均勻。樹節(jié)點(diǎn)分裂時(shí)只選擇了少數(shù)特征,其他特征沒有發(fā)揮作用。 以上就是前面提到的,建模的第二個(gè)難題:模型學(xué)習(xí)的調(diào)優(yōu)問題。具體來說就是如何解決gbrank特征選擇不均勻的問題。接下來,我們?cè)敿?xì)解釋下。 先看下,模型的特征重要度。如下圖所示: 經(jīng)過分析,造成特征學(xué)習(xí)不均衡的原因主要有:
綜上,由于各種原因,導(dǎo)致樹模型學(xué)習(xí)過程中,特征選擇時(shí),不停選擇同一個(gè)特征(city-click)作為樹節(jié)點(diǎn),使得其他特征未起到應(yīng)有的作用。解決這個(gè)問題,方案有兩種:
具體的計(jì)算公式如下式: 以上公式是交叉熵?fù)p失函數(shù)的負(fù)梯度,loss_diff 相當(dāng)于對(duì)sigmod函數(shù)的一個(gè)平移。 差值越大,loss_diff越大,懲罰力度越大,相應(yīng)的下一輪迭代該特征的分裂收益也就越大。 調(diào)loss后,重新訓(xùn)練模型,測(cè)試集MRR在初版模型的基礎(chǔ)又提升了2個(gè)點(diǎn)。同時(shí)歷史排序case的解決比例從40%提升到70%,效果明顯。 寫在最后 Learning to Rank技術(shù)在高德搜索建議應(yīng)用后,使系統(tǒng)擺脫了策略耦合、依靠補(bǔ)丁的規(guī)則排序方式,取得了明顯的效果收益。gbrank模型上線后,效果基本覆蓋了各頻次query的排序需求。 目前,我們已經(jīng)完成了人群個(gè)性化、個(gè)體個(gè)性化的建模上線,并且正在積極推進(jìn)深度學(xué)習(xí)、向量索引、用戶行為序列預(yù)測(cè)在高德搜索建議上的應(yīng)用。 |
|