深度学习在搜索业务中的探索与实践
引言
2018年12月31日,美團(tuán)酒店單日入住間夜突破200萬(wàn),再次創(chuàng)下行業(yè)的新紀(jì)錄,而酒店搜索在其中起到了非常重要的作用。本文會(huì)首先介紹一下酒店搜索的業(yè)務(wù)特點(diǎn),作為O2O搜索的一種,酒店搜索和傳統(tǒng)的搜索排序相比存在很大的不同。第二部分介紹深度學(xué)習(xí)在酒店搜索NLP中的應(yīng)用。第三部分會(huì)介紹深度排序模型在酒店搜索的演進(jìn)路線,因?yàn)榫频陿I(yè)務(wù)的特點(diǎn)和歷史原因,美團(tuán)酒店搜索的模型演進(jìn)路線可能跟大部分公司都不太一樣。最后一部分是總結(jié)。
酒店搜索的業(yè)務(wù)特點(diǎn)
美團(tuán)的使命是幫大家“Eat Better,Live Better”,所做的事情就是連接人與服務(wù)。用戶在美團(tuán)平臺(tái)可以找到他們所需要的服務(wù),商家在美團(tuán)可以售賣自己提供的服務(wù),而搜索在其中扮演的角色就是“連接器”。大部分用戶通過(guò)美團(tuán)App找酒店是從搜索開始的,搜索貢獻(xiàn)了大部分的訂單,是最大的流量入口。在美團(tuán)首頁(yè)點(diǎn)擊 “酒店住宿”圖標(biāo),就會(huì)進(jìn)入上圖右側(cè)的搜索入口,用戶可以選擇城市和入住時(shí)間并發(fā)起搜索。
酒店搜索技術(shù)團(tuán)隊(duì)的工作不僅有搜索排序,還有查詢引導(dǎo)、推薦等工作,查詢引導(dǎo)如搜索智能提示、查詢糾錯(cuò)等。之所以還有推薦的工作,是因?yàn)楹芏嘤脩粼诎l(fā)起搜索時(shí)不帶查詢?cè)~,本質(zhì)上屬于推薦,此外還有特定場(chǎng)景下針對(duì)少無(wú)結(jié)果的推薦等。本文主要介紹搜索排序這方面的工作。
不同搜索對(duì)比
現(xiàn)在,大家對(duì)搜索都很熟悉,常見的有網(wǎng)頁(yè)搜索,比如Google、百度、搜狗等;商品搜索,像天貓、淘寶、京東等;還有就是O2O(Online To Offline)的搜索,典型的就是酒店的搜索。雖然都是搜索,但是用戶使用搜索的目的并不相同,包括找信息、找商品、找服務(wù)等等,不同搜索之間也存在很大的差別。
上圖對(duì)不同搜索進(jìn)行了簡(jiǎn)單對(duì)比,可以從5個(gè)維度展開。首先是目標(biāo)維度。因?yàn)橛脩羰莵?lái)找信息,網(wǎng)頁(yè)搜索重點(diǎn)是保證查詢結(jié)果和用戶意圖的相關(guān)性,而在商品搜索和酒店搜索中,用戶的主要目的是查找商品或服務(wù),最終達(dá)成交易,目標(biāo)上有較大區(qū)別。用戶使用不同搜索的目的不同,從而導(dǎo)致不同搜索對(duì)個(gè)性化程度的要求不同。交易屬性的搜索,包括商品搜索和酒店搜索,對(duì)個(gè)性化程度的要求都比較高,因?yàn)椴煌脩舻南M(fèi)水平不同,偏好也不一樣。
在技術(shù)層面上,也存在很多不同點(diǎn)。網(wǎng)頁(yè)搜索會(huì)索引全網(wǎng)的數(shù)據(jù),這些數(shù)據(jù)不是它自己生產(chǎn),數(shù)據(jù)來(lái)源非常多樣,包括新聞、下載頁(yè)、視頻頁(yè)、音樂(lè)頁(yè)等各種不同的形態(tài),所以整個(gè)數(shù)據(jù)是非結(jié)構(gòu)化的,差異也很大。這意味著網(wǎng)頁(yè)搜索需要擁有兩種技術(shù)能力,數(shù)據(jù)抓取能力和數(shù)據(jù)解析能力,它們需要抓取網(wǎng)頁(yè)并解析形成結(jié)構(gòu)化數(shù)據(jù)。在這個(gè)層面上,酒店搜索和商品搜索相對(duì)就“幸福”一些,因?yàn)閿?shù)據(jù)都是商家提交的結(jié)構(gòu)化數(shù)據(jù),相對(duì)來(lái)說(shuō)更加規(guī)范。
此外,酒店作為一種O2O的服務(wù),用戶在線上(Online)下單,最終需要到線下(Offline)去消費(fèi),所以就有一個(gè)位置上的約束,而位置的約束也就導(dǎo)致出現(xiàn)供給側(cè)的約束,供給只能在某個(gè)特定位置附近。比如北京大學(xué)方圓幾公里之內(nèi)的酒店。這兩點(diǎn)約束在網(wǎng)頁(yè)搜索和商品搜索中就不用考慮,網(wǎng)頁(yè)可以無(wú)限次的進(jìn)行閱讀。商品搜索得益于快遞業(yè)的快速發(fā)展,在北京也可以買到來(lái)自浙江的商品,供給側(cè)的約束比較小。
介紹完不同搜索產(chǎn)品的特點(diǎn),接下來(lái)看不同搜索產(chǎn)品的優(yōu)化目標(biāo)。通用搜索的優(yōu)化目標(biāo)是相關(guān)性,評(píng)價(jià)指標(biāo)是DCG、NDCG、MAP等這些指標(biāo),要求查詢結(jié)果和用戶意圖相關(guān)。對(duì)商品搜索來(lái)說(shuō),不同電商平臺(tái)的優(yōu)化目標(biāo)不太一樣,有的目標(biāo)是最大化GMV,有的目標(biāo)是最大化點(diǎn)擊率,這些在技術(shù)上都可以實(shí)現(xiàn)。
而對(duì)酒店搜索而言,因?yàn)樗鼘儆贠2O的業(yè)務(wù)形態(tài),線上下單,線下消費(fèi),這就要求搜索結(jié)果必須和用戶的查詢意圖“強(qiáng)相關(guān)”。這個(gè)“強(qiáng)相關(guān)”包括兩層含義,顯性相關(guān)和隱性相關(guān)。舉個(gè)例子,用戶搜索“北京大學(xué)”,那么他的訴求很明確,就是要找“北京大學(xué)”附近的酒店,這種屬于用戶明確告訴平臺(tái)自己的位置訴求。但是,如果用戶在本地搜索“七天”,即使用戶沒(méi)有明確說(shuō)明酒店的具體位置,我們也知道,用戶可能想找的是距離自己比較近的“七天酒店”,這時(shí)候就需要建模用戶的隱性位置訴求。
美團(tuán)是一個(gè)交易平臺(tái),大部分用戶使用美團(tuán)是為了達(dá)成交易,所以要優(yōu)化用戶的購(gòu)買體驗(yàn)。刻畫用戶購(gòu)買體驗(yàn)的核心業(yè)務(wù)指標(biāo)是訪購(gòu)率,用來(lái)描述用戶在美團(tuán)是否順暢的完成了購(gòu)買,需要優(yōu)化訪購(gòu)率這個(gè)指標(biāo)。總結(jié)一下,酒店搜索不僅要解決相關(guān)性,盡量?jī)?yōu)化用戶購(gòu)買體驗(yàn)、優(yōu)化訪購(gòu)率等指標(biāo),同時(shí)還要照顧到業(yè)務(wù)訴求。
根據(jù)上面的分析,酒店搜索的整個(gè)搜索框架就可以拆分成三大模塊:檢索、排序以及業(yè)務(wù)規(guī)則。檢索層包括查詢理解和召回兩部分,主要解決相關(guān)性問(wèn)題。查詢理解做的事情就是理解用戶意圖,召回根據(jù)用戶意圖來(lái)召回相關(guān)的酒店,兩者強(qiáng)耦合,需要放在一起。檢索的核心是語(yǔ)義理解,比如用戶搜索“北京大學(xué)”,平臺(tái)就知道用戶想找的是“北京大學(xué)附近的酒店”,所以這個(gè)模塊的優(yōu)化方式是問(wèn)題驅(qū)動(dòng),不斷地發(fā)現(xiàn)問(wèn)題、解決問(wèn)題來(lái)進(jìn)行迭代。
接下來(lái),從檢索模塊檢索出來(lái)的酒店都已經(jīng)是滿足用戶需求的酒店了。還是上面“北京大學(xué)”的那個(gè)例子,檢索模塊已經(jīng)檢索出來(lái)幾百家“北京大學(xué)”附近的酒店,這些都是和用戶的查詢?cè)~“北京大學(xué)”相關(guān)的,怎么把用戶最有可能購(gòu)買的酒店排到前面呢?這就是排序模塊要做的事情。
排序模塊使用機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的技術(shù)提供“千人千面”的排序結(jié)果,如果是經(jīng)常預(yù)定經(jīng)濟(jì)連鎖型酒店的用戶,排序模塊就把經(jīng)濟(jì)連鎖型酒店排到前面。針對(duì)消費(fèi)水平比較高,對(duì)酒店要求比較高的用戶,排序模塊就把高檔酒店排到前面,對(duì)每個(gè)用戶都可以做到個(gè)性化定制。排序?qū)儆诘湫偷募夹g(shù)驅(qū)動(dòng)模塊,優(yōu)化目標(biāo)是訪購(gòu)率,用這個(gè)技術(shù)指標(biāo)驅(qū)動(dòng)技術(shù)團(tuán)隊(duì)不斷進(jìn)行迭代和優(yōu)化。
最后是業(yè)務(wù)層面,比如有些商家會(huì)在美團(tuán)上刷單作弊,針對(duì)這些商家需要做降權(quán)處理。
整體框架
上圖是搜索的整體框架,這里詳細(xì)描述下調(diào)用過(guò)程:
- 搜索API負(fù)責(zé)接收用戶的查詢?cè)~并發(fā)送給搜索控制中心。
- 控制中心把接收到的查詢請(qǐng)求發(fā)送到檢索與意圖模塊,搜索詞會(huì)先經(jīng)過(guò)查詢分析模塊做用戶的查詢意圖分析,分析完之后,會(huì)把用戶的查詢意圖分析結(jié)果傳回去給業(yè)務(wù)檢索模塊,業(yè)務(wù)檢索模塊根據(jù)意圖識(shí)別結(jié)果形成查詢條件,然后去基礎(chǔ)檢索端查詢結(jié)果。
- 基礎(chǔ)檢索訪問(wèn)索引得到查詢結(jié)果后,再把結(jié)果返回給上層。
- 業(yè)務(wù)檢索模塊獲取基礎(chǔ)的檢索結(jié)果后,會(huì)調(diào)用一些外部服務(wù)如房態(tài)服務(wù)過(guò)濾一些滿房的酒店,再把結(jié)果返回給控制中心。
- 此時(shí),控制中心得到的都是和用戶查詢意圖強(qiáng)相關(guān)的結(jié)果,這時(shí)就需要利用機(jī)器學(xué)習(xí)技術(shù)做排序。通過(guò)預(yù)測(cè)模塊對(duì)每個(gè)酒店做訪購(gòu)率預(yù)測(cè),控制中心獲取預(yù)測(cè)模塊的排序結(jié)果后,再根據(jù)業(yè)務(wù)邏輯做一些調(diào)整,最終返回結(jié)果給搜索API。
可以看到,模塊劃分和前文描述的思想一致,檢索模塊主要解決用戶意圖識(shí)別和召回問(wèn)題,也就是解決相關(guān)性。預(yù)測(cè)模塊做訪購(gòu)率預(yù)測(cè),業(yè)務(wù)邏輯放在搜索控制中心實(shí)現(xiàn)。接下來(lái)會(huì)介紹一下意圖理解和排序模塊中涉及的一些深度學(xué)習(xí)技術(shù)。
先來(lái)看下查詢理解的問(wèn)題,這個(gè)模塊通過(guò)數(shù)據(jù)分析和Case分析,不斷的發(fā)現(xiàn)問(wèn)題、解決問(wèn)題來(lái)迭代優(yōu)化。之前的評(píng)測(cè)發(fā)現(xiàn)少無(wú)結(jié)果的原因,主要包括以下幾種:
- 地標(biāo)詞:比如用戶搜索“望京國(guó)際研發(fā)園”,但是后臺(tái)沒(méi)有一家酒店包含“望京國(guó)際研發(fā)園”這幾個(gè)字,其實(shí)用戶想找的是望京國(guó)際研發(fā)園附近的酒店。
- 結(jié)構(gòu)化查詢:比如芍藥居附近7天,酒店描述信息中沒(méi)有“附近”這個(gè)詞,搜索體驗(yàn)就比較差。這種需要對(duì)查詢?cè)~做成分識(shí)別,丟掉不重要的詞,并且對(duì)不用類別的Term走不同的檢索域。
- 異地查詢:用戶在北京搜索“大雁塔”沒(méi)有結(jié)果,其實(shí)用戶的真實(shí)意圖是西安大雁塔附近的酒店,這種需要做異地需求識(shí)別并進(jìn)行異地跳轉(zhuǎn)。
- 同義詞:在北京搜索“一中”和搜索“北京第一中學(xué)”,其實(shí)都是同一個(gè)意思,需要挖掘同義詞。
針對(duì)這幾類問(wèn)題,我們分別作了以下工作:
- 針對(duì)地標(biāo)詞問(wèn)題,提供地標(biāo)意圖識(shí)別和地標(biāo)策略,把地標(biāo)類別的查詢?cè)~改成按經(jīng)緯度進(jìn)行畫圈檢索。
- 針對(duì)結(jié)構(gòu)化查詢的問(wèn)題,我們對(duì)查詢?cè)~做了成分識(shí)別,設(shè)計(jì)了少無(wú)結(jié)果時(shí)的多級(jí)檢索架構(gòu)。
- 針對(duì)異地查詢的問(wèn)題,做異地意圖識(shí)別和異地的跳轉(zhuǎn)引導(dǎo)。
- 針對(duì)語(yǔ)義查詢的問(wèn)題,做同義詞和查詢改寫。
這里的每一個(gè)模塊都用到了機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的技術(shù),本文挑選兩個(gè)酒店搜索中比較特殊的問(wèn)題進(jìn)行介紹。
地標(biāo)問(wèn)題是O2O搜索的一個(gè)典型問(wèn)題,在網(wǎng)頁(yè)搜索和商品搜索中都較少出現(xiàn)此類問(wèn)題。當(dāng)用戶搜索類似“望京國(guó)際研發(fā)園”這種查詢?cè)~的時(shí)候,因?yàn)樗阉鞯南嚓P(guān)性是根據(jù)文本計(jì)算的,需要酒店描述中有相關(guān)文字,如果酒店的描述信息中沒(méi)有這個(gè)詞,那就檢索不出來(lái)。比如昆泰酒店,雖然就在望京國(guó)際研發(fā)園旁邊,但是它的描述信息中并沒(méi)有出現(xiàn)“望京國(guó)際研發(fā)園”,所以就無(wú)法檢索出來(lái),這會(huì)導(dǎo)致用戶體驗(yàn)較差。
經(jīng)過(guò)分析,我們發(fā)現(xiàn)有一類查詢?cè)~是針對(duì)特定地點(diǎn)的搜索,用戶的訴求是找特定地點(diǎn)附近的酒店,這種情況下走文本匹配大概率是沒(méi)有結(jié)果的。這個(gè)問(wèn)題的解法是針對(duì)這種類型的查詢?cè)~,從“文本匹配”改成“坐標(biāo)匹配”,首先分析查詢?cè)~是不是有地標(biāo)意圖,如果是的話就不走文本匹配了,改走坐標(biāo)匹配,檢索出來(lái)這個(gè)坐標(biāo)附近的酒店就可以了。這時(shí)就產(chǎn)生了兩個(gè)問(wèn)題:第一,怎么確定哪些查詢?cè)~有地標(biāo)意圖;第二,怎么獲取經(jīng)緯度信息。
針對(duì)這個(gè)問(wèn)題,我們做了地標(biāo)策略,步驟如下:
- 多渠道獲取可能包含地標(biāo)詞的候選集,這些候選集包括用戶少無(wú)結(jié)果的查詢?cè)~,以及一些酒店提供的描述信息。
- 對(duì)候選集合進(jìn)行命名實(shí)體識(shí)別(NER,Named Entity Recognition),可以得到各個(gè)命名實(shí)體的類型,標(biāo)識(shí)為“地標(biāo)”類型的就是疑似地標(biāo)詞。
- 把疑似地標(biāo)詞放到美團(tuán)地圖服務(wù)中獲取經(jīng)緯度,經(jīng)過(guò)人工校驗(yàn)無(wú)誤后,存入線上數(shù)據(jù)庫(kù)中;線上來(lái)查詢請(qǐng)求時(shí),先會(huì)去匹配精準(zhǔn)地標(biāo)庫(kù),如果匹配成功,說(shuō)明這個(gè)查詢?cè)~是地標(biāo)意圖,這時(shí)就不走文本檢索了,直接在意圖服務(wù)層走經(jīng)緯度檢索。
- 經(jīng)過(guò)人工校驗(yàn)的精準(zhǔn)地標(biāo)庫(kù)補(bǔ)充到NER模型的訓(xùn)練數(shù)據(jù)中,持續(xù)優(yōu)化NER模型。
這里提到了NER模型,下面對(duì)它做一下詳細(xì)的介紹。
NER是命名實(shí)體識(shí)別,是機(jī)器學(xué)習(xí)中的序列標(biāo)注問(wèn)題,比如輸入“北大附近的七天”,就會(huì)標(biāo)注出來(lái)每個(gè)詞的成分,這里“北大”是地標(biāo),“七天”是酒店品牌。這里的類別是根據(jù)業(yè)務(wù)特點(diǎn)自己定義的,酒店業(yè)務(wù)中有地標(biāo)、品牌、商圈等不同的類別。與分類問(wèn)題相比,序列標(biāo)注問(wèn)題中當(dāng)前的預(yù)測(cè)標(biāo)簽不僅與當(dāng)前的輸入特征相關(guān),還與前后的預(yù)測(cè)標(biāo)簽相關(guān),即預(yù)測(cè)標(biāo)簽序列之間有強(qiáng)相互依賴關(guān)系。
解決序列標(biāo)注問(wèn)題的經(jīng)典模型是CRF(Conditional Random Field,條件隨機(jī)場(chǎng)),也是我們剛開始嘗試的模型。條件隨機(jī)場(chǎng)可以看做是邏輯回歸的序列化版本,邏輯回歸是用于分類的對(duì)數(shù)線性模型,條件隨機(jī)場(chǎng)是用于序列化標(biāo)注的對(duì)數(shù)線性模型,可以看做是考慮了上下文的分類模型。
機(jī)器學(xué)習(xí)問(wèn)題的求解就是“數(shù)據(jù)+模型+特征”,數(shù)據(jù)方面先根據(jù)業(yè)務(wù)特點(diǎn)定義了幾種實(shí)體類別,然后通過(guò)“人工+規(guī)則”的方法標(biāo)注了一批數(shù)據(jù)。特征方面提取了包括詞性、Term文本特征等,還定義了一些特征模板,特征模板是CRF中人工定義的一些二值函數(shù),通過(guò)這些二值函數(shù),可以挖掘命名實(shí)體內(nèi)部以及上下文的構(gòu)成特點(diǎn)。標(biāo)注數(shù)據(jù)、模型、特征都有了,就可以訓(xùn)練CRF模型,這是線上NER問(wèn)題的第一版模型。
隨著深度學(xué)習(xí)的發(fā)展,用Word Embedding詞向量作為輸入,疊加神經(jīng)網(wǎng)絡(luò)單元的方法漸漸成為NLP領(lǐng)域新的研究方向。基于雙向LSTM(Long Short-Term Memory)+CRF的方法成為NER的主流方法,這種方法采用雙向LSTM單元作為特征提取器替代原有的人工特征,不需要專門的領(lǐng)域知識(shí),框架也通用。Embedding輸入也有多種形式,可以是詞向量,可以是字向量,也可以是字向量和詞向量的拼接。
我們嘗試了雙向LSTM+CRF,并在實(shí)際應(yīng)用中做了些改動(dòng):由于在CRF階段已經(jīng)積累了一批人工特征,實(shí)驗(yàn)發(fā)現(xiàn)把這些特征加上效果更好。加了人工特征的雙向LSTM+CRF是酒店搜索NER問(wèn)題的主模型。
當(dāng)然,針對(duì)LSTM+CRF的方法已經(jīng)有了很多的改進(jìn),比如還有一種NER的方法是融合CNN+LSTM+CRF,主要改進(jìn)點(diǎn)是多了一個(gè)CNN模塊來(lái)提取字級(jí)別的特征。CNN的輸入是字級(jí)別的Embedding,通過(guò)卷積和池化等操作來(lái)提取字級(jí)別的特征,然后和詞的Embedding拼接起來(lái)放入LSTM。這種方法在兩個(gè)公開數(shù)據(jù)集上面取得了最好的結(jié)果,也是未來(lái)嘗試的方向之一。
為了解決少無(wú)結(jié)果的問(wèn)題,我們?cè)O(shè)計(jì)了多級(jí)檢索架構(gòu),如上圖所示,主要分4個(gè)層次:基本檢索、二次檢索、核心詞檢索和異地檢索。
- 基本檢索會(huì)根據(jù)查詢?cè)~的意圖選擇特定的檢索策略,比如地標(biāo)意圖走經(jīng)緯度檢索,品牌意圖只檢索品牌域和商家名。
- 基本檢索少無(wú)結(jié)果會(huì)進(jìn)行二次檢索,二次檢索也是分意圖的,不同意圖類型會(huì)有不同的檢索策略,地標(biāo)意圖是經(jīng)緯度檢索的,二次檢索的時(shí)候就需要擴(kuò)大檢索半徑;品牌意圖的查詢?cè)~,因?yàn)楹芏嗥放圃谝恍┏鞘袥](méi)有開店,比如香格里拉在很多小城市并沒(méi)有開店,這時(shí)比較好的做法,是推薦給用戶該城市最好的酒店。
- 如果還是少無(wú)結(jié)果,會(huì)走核心詞檢索,只保留核心詞檢索一遍。丟掉非核心詞有多種方式,一種是刪除一些運(yùn)營(yíng)定義的無(wú)意義詞,一種是保留NER模型識(shí)別出來(lái)的主要實(shí)體類型。此外還有一個(gè)TermWeight的模型,對(duì)每個(gè)詞都有一個(gè)重要性的權(quán)重,可以把一些不重要的詞丟掉。
- 在還沒(méi)有結(jié)果的情況下,會(huì)選擇”異地+全國(guó)“檢索,即更換城市或者在全國(guó)范圍內(nèi)進(jìn)行檢索。
多級(jí)檢索架構(gòu)上線后,線上的無(wú)結(jié)果率就大幅度降低了。
排序
排序其實(shí)是一個(gè)典型的技術(shù)問(wèn)題,業(yè)界應(yīng)用比較廣泛的有廣告排序和推薦排序,廣告排序比如Google和百度的關(guān)鍵字廣告排序,今日頭條、騰訊的展示廣告排序。推薦排序比如快手、抖音這些短視頻平臺(tái),以及各大App、瀏覽器的信息流。廣告排序和推薦排序優(yōu)化的目標(biāo)都是點(diǎn)擊率,技術(shù)棧也比較相似,包括LR/FTRL、FM/FFM、GBDT、DNN等模型。
跟以上兩種排序應(yīng)用相比,酒店排序有自己的業(yè)務(wù)特點(diǎn),因?yàn)槊缊F(tuán)酒店具有LBS屬性和交易屬性,天生自帶很多連續(xù)特征,如酒店價(jià)格、酒店評(píng)分、酒店離用戶的距離等,這些連續(xù)特征是決定用戶購(gòu)買行為的最重要因素。優(yōu)化目標(biāo)也不一樣,大部分場(chǎng)景下酒店搜索的優(yōu)化目標(biāo)是訪購(gòu)率,部分場(chǎng)景下優(yōu)化目標(biāo)是點(diǎn)擊率。在技術(shù)層面,酒店排序整體的技術(shù)棧和廣告、推薦比較相似,都可以使用LR/FTRL、FM/FFM、GBDT、DNN等模型。
面臨的挑戰(zhàn)
具體到酒店排序工作,我們面臨一些不一樣的挑戰(zhàn),主要包括以下4點(diǎn):
上圖右側(cè)是排序的整體架構(gòu)圖,分為線下、線上和近線上三個(gè)部分。在線下部分,主要做離線的模型調(diào)優(yōu)和評(píng)估,線上部分做預(yù)測(cè)。這里比較特別的是近線上部分,我們?cè)趯?shí)時(shí)層面做了大量的工作,包括用戶的實(shí)時(shí)行為、酒店實(shí)時(shí)價(jià)格、實(shí)時(shí)庫(kù)存等等,以應(yīng)對(duì)供給變化快的特點(diǎn)。
這里介紹一個(gè)業(yè)務(wù)特點(diǎn)導(dǎo)致的比較獨(dú)特的問(wèn)題:模型切分。美團(tuán)酒店有很多業(yè)務(wù)場(chǎng)景,包括國(guó)內(nèi)酒店、境外酒店、長(zhǎng)租、鐘點(diǎn)房等;還有兩個(gè)App,美團(tuán)App和大眾點(diǎn)評(píng)App;還有搜索和篩選兩種場(chǎng)景,搜索帶查詢?cè)~,篩選沒(méi)有查詢?cè)~,兩種場(chǎng)景差異較大;從地理位置維度,還可以分成本地和異地兩種場(chǎng)景。
面對(duì)這么多的業(yè)務(wù)場(chǎng)景,第一個(gè)問(wèn)題就是模型怎么設(shè)計(jì),是用統(tǒng)一的大模型,還是分成很多不同的小模型?我們可以用一個(gè)大模型Cover所有的場(chǎng)景,用特征來(lái)區(qū)分不同場(chǎng)景的差異,好處是統(tǒng)一模型維護(hù)和優(yōu)化成本低。也可以劃分很多小模型,這里有一個(gè)比較好的比喻,多個(gè)專科專家會(huì)診,勝過(guò)一個(gè)全科醫(yī)生。切分模型后,可以避免差異較大的業(yè)務(wù)之間互相影響,也方便對(duì)特殊場(chǎng)景進(jìn)行專門的優(yōu)化。
在模型切分上,主要考慮三個(gè)因素:
- 第一,業(yè)務(wù)之間的差異性。比如長(zhǎng)租和境外差異很大,國(guó)內(nèi)酒店和境外業(yè)務(wù)差異也很大,這種需要拆分。
- 第二,細(xì)分后的數(shù)據(jù)量。場(chǎng)景分的越細(xì),數(shù)據(jù)量就越小,會(huì)導(dǎo)致兩個(gè)問(wèn)題,一是特征的覆蓋率進(jìn)一步降低;二是數(shù)據(jù)量變小后,不利于后續(xù)的模型迭代,一些復(fù)雜模型對(duì)數(shù)據(jù)量有很高的要求。我們做過(guò)嘗試,國(guó)內(nèi)酒店場(chǎng)景下,美團(tuán)和大眾點(diǎn)評(píng)兩個(gè)App數(shù)據(jù)量都很大,而且用戶也很不一樣,所以做了模型拆分;但是境外酒店,因?yàn)楸旧硎切聵I(yè)務(wù)數(shù)據(jù)量較小,就沒(méi)有再進(jìn)行細(xì)分。
- 第三,一切以線上指標(biāo)為準(zhǔn)。我們會(huì)做大量的實(shí)驗(yàn),看當(dāng)前數(shù)據(jù)量下怎么拆分效果更好,比如美團(tuán)App的國(guó)內(nèi)酒店,我們發(fā)現(xiàn)把搜索和篩選拆開后,效果更好;篩選因?yàn)閿?shù)據(jù)量特別大,拆分成本、異地效果也更好,但是如果搜索場(chǎng)景拆分成本地、異地模型就沒(méi)有額外收益了。最終,一切都要以線上的實(shí)際表現(xiàn)為準(zhǔn)。
模型演進(jìn)
接下來(lái)介紹一下排序模型的演進(jìn)過(guò)程,因?yàn)闃I(yè)務(wù)特點(diǎn)及歷史原因,酒店搜索的排序模型走了一條不一樣的演進(jìn)路線。大家可以看業(yè)界其他公司點(diǎn)擊率模型的演進(jìn),很多都是從LR/FTRL開始,然后進(jìn)化到FM/FFM,或者用GBDT+LR搞定特征組合,然后開始Wide&Deep。
酒店搜索的演進(jìn)就不太一樣。酒店業(yè)務(wù)天生自帶大量連續(xù)特征,如酒店價(jià)格、酒店和用戶的距離、酒店評(píng)分等,因此初始階段使用了對(duì)連續(xù)特征比較友好的樹模型。在探索深度排序模型的時(shí)候,因?yàn)橐呀?jīng)有了大量?jī)?yōu)化過(guò)的連續(xù)特征,導(dǎo)致我們的整個(gè)思路也不太一樣,主要是借鑒一些模型的思想,結(jié)合業(yè)務(wù)特點(diǎn)做嘗試,下面逐一進(jìn)行介紹。
初始階段線上使用的模型是XGB(XGBoost, eXtreme Gradient Boosting)。作為GBDT的改進(jìn),XGB實(shí)現(xiàn)了非線性和自動(dòng)的特征組合。樹節(jié)點(diǎn)的分裂其實(shí)就實(shí)現(xiàn)了非線性,樹的層次結(jié)構(gòu)實(shí)現(xiàn)了不同特征的自動(dòng)組合,而且樹模型對(duì)特征的包容性非常好,樹的分裂通過(guò)判斷相對(duì)大小來(lái)實(shí)現(xiàn),不需要對(duì)特征做特殊處理,適合連續(xù)特征。
樹模型的這些特點(diǎn)確實(shí)很適合酒店這種連續(xù)特征多的場(chǎng)景,至今為止,XGB都是數(shù)據(jù)量較小場(chǎng)景下的主模型。但是樹模型優(yōu)化到后期遇到了瓶頸,比如特征工程收益變小、增大數(shù)據(jù)量沒(méi)有額外收益等,此外樹模型不適合做在線學(xué)習(xí)的問(wèn)題愈發(fā)嚴(yán)重。酒店用戶在勞動(dòng)節(jié)、國(guó)慶節(jié)等節(jié)假日行為有較大不同,這時(shí)需要快速更新模型,我們嘗試過(guò)只更新最后幾棵樹的做法,效果不佳。考慮到未來(lái)進(jìn)一步的業(yè)務(wù)發(fā)展,有必要做模型升級(jí)。
模型探索的原則是從簡(jiǎn)單到復(fù)雜,逐步積累經(jīng)驗(yàn),所以首先嘗試了結(jié)構(gòu)比較簡(jiǎn)單的MLP(Multiple-Layer Perception)多層感知機(jī),也就是全連接神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)是一種比樹模型“天花板”更高的模型,“天花板”更高兩層意思:第一層意思,可以優(yōu)化提升的空間更大,比如可以進(jìn)行在線學(xué)習(xí),可以做多目標(biāo)學(xué)習(xí);第二層意思,模型的容量更大,“胃口”更大,可以“吃下”更多數(shù)據(jù)。此外它的表達(dá)能力也更強(qiáng),可以擬合任何函數(shù),網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)可以調(diào)整的空間也更大。但是它的優(yōu)點(diǎn)同時(shí)也是它的缺點(diǎn),因?yàn)樗木W(wǎng)絡(luò)結(jié)構(gòu)、參數(shù)等可以調(diào)整的空間更大,神經(jīng)網(wǎng)需要做很多的參數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)層面的調(diào)整。
上圖是MLP的網(wǎng)絡(luò)結(jié)構(gòu)圖,包含輸入層、若干個(gè)隱藏層、輸出層。在很長(zhǎng)一段時(shí)間內(nèi),在特征相同的情況下,MLP效果不如XGB,所以有段時(shí)間線上使用的是XGB和MLP的融合模型。后來(lái)經(jīng)過(guò)大量的網(wǎng)絡(luò)結(jié)構(gòu)調(diào)整和參數(shù)調(diào)整,調(diào)參經(jīng)驗(yàn)越來(lái)越豐富,MLP才逐步超越XGB。這里額外說(shuō)明一下,酒店搜索中有少量的ID類特征,在第一版MLP里ID類特征是直接當(dāng)做連續(xù)特征處理的。比如城市ID,ID的序關(guān)系有一定的物理意義,大城市ID普遍較小,小城市開城晚一些,ID較大。
在MLP階段我們對(duì)網(wǎng)絡(luò)結(jié)構(gòu)做了大量實(shí)驗(yàn),嘗試過(guò)三種網(wǎng)絡(luò)結(jié)構(gòu):平行結(jié)構(gòu)、菱形結(jié)構(gòu)、金字塔結(jié)構(gòu)。在很多論文中提到三者相比平行結(jié)構(gòu)效果最好,但是因?yàn)榫频晁阉鞯臄?shù)據(jù)不太一樣,實(shí)驗(yàn)發(fā)現(xiàn)金字塔結(jié)構(gòu)效果最好,即上圖最右邊的“1024-512-256”的網(wǎng)絡(luò)結(jié)構(gòu)。同時(shí)還實(shí)驗(yàn)了不同網(wǎng)絡(luò)層數(shù)對(duì)效果的影響,實(shí)驗(yàn)發(fā)現(xiàn)3-6層的網(wǎng)絡(luò)效果較好,更深的網(wǎng)絡(luò)沒(méi)有額外收益而且線上響應(yīng)時(shí)間會(huì)變慢,后面各種模型探索都是基于3到6層的金字塔網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行嘗試。
MLP上線之后,我們開始思考接下來(lái)的探索方向。在樹模型階段,酒店搜索組就在連續(xù)特征上做了很多探索,連續(xù)特征方面很難有比較大的提升空間;同時(shí)業(yè)界的研究重點(diǎn)也放在離散特征方面,所以離散特征應(yīng)該是下一步的重點(diǎn)方向。
深度排序模型對(duì)離散特征的處理有兩大類方法,一類是對(duì)離散特征做Embedding,這樣離散特征就可以表示成連續(xù)的向量放到神經(jīng)網(wǎng)絡(luò)中去,另一類是Wide&Deep,把離散特征直接加到Wide側(cè)。我們先嘗試了第一種,即對(duì)離散特征做Embedding的方法,借鑒的是FNN的思想。其實(shí)離散特征做Embedding的想法很早就出現(xiàn)了,FM就是把離散特征表示成K維向量,通過(guò)把高維離散特征表示成低維向量增加模型泛化能力。
實(shí)際使用中,我們稍微做了一些改動(dòng),實(shí)驗(yàn)中發(fā)現(xiàn)使用FM預(yù)訓(xùn)練的效率不高,所以嘗試了不做預(yù)訓(xùn)練直接把Embedding隨機(jī)初始化,然后讓Embedding跟隨網(wǎng)絡(luò)一起學(xué)習(xí),實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)比FM預(yù)訓(xùn)練效果還要好一點(diǎn)。最后的做法是沒(méi)有用FM做預(yù)訓(xùn)練,讓Embedding隨機(jī)初始化并隨網(wǎng)絡(luò)學(xué)習(xí),上圖是線上的V3模型。
FNN的成功上線證明離散特征Embedding這個(gè)方向值得深挖,所以我們接著實(shí)驗(yàn)了DeepFM。DeepFM相對(duì)于Wide&Deep的改進(jìn),非常類似于FM相對(duì)LR的改進(jìn),都認(rèn)為L(zhǎng)R部分的人工組合特征是個(gè)耗時(shí)耗力的事情,而FM模塊可以通過(guò)向量?jī)?nèi)積的方式直接求出二階組合特征。DeepFM使用FM替換了Wide&Deep中的LR,離散特征的Embedding同時(shí)“喂”給神經(jīng)網(wǎng)和FM,這部分Embedding是共享的,Embedding在網(wǎng)絡(luò)的優(yōu)化過(guò)程中自動(dòng)學(xué)習(xí),不需要做預(yù)訓(xùn)練,同時(shí)FM Layer包含了一階特征和二階的組合特征,表達(dá)能力更強(qiáng)。我們嘗試了DeepFM,線下有提升線上波動(dòng)提升,并沒(méi)有達(dá)到上線的標(biāo)準(zhǔn),最終沒(méi)有全量。
盡管DeepFM沒(méi)有成功上線,但這并沒(méi)有動(dòng)搖我們對(duì)Embedding的信心,接下來(lái)嘗試了PNN。PNN的網(wǎng)絡(luò)重點(diǎn)在Product上面,在點(diǎn)擊率預(yù)估中,認(rèn)為特征之間的關(guān)系更多是一種And“且”的關(guān)系, 而非Add“加”的關(guān)系,例如性別為男且用華為手機(jī)的人,他定酒店時(shí)屬于商務(wù)出行場(chǎng)景的概率更高。
PNN使用了Product Layer進(jìn)行顯式的二階特征組合。上圖右邊是PNN的網(wǎng)絡(luò)結(jié)構(gòu)圖,依然對(duì)離散特征做Embedding,Embedding向量同時(shí)送往隱層和Product層,Product通過(guò)內(nèi)積或者外積的方式,對(duì)特征做顯式的二階交叉,之后再送入神經(jīng)網(wǎng)的隱層,這樣可以做到顯式的二階組合和隱式的高階特征組合。特征交叉基于乘法的運(yùn)算實(shí)現(xiàn),有兩種方式:內(nèi)積和外積。我們嘗試了內(nèi)積的方式,線下略有提升線上也是波動(dòng)提升,沒(méi)有達(dá)到上線標(biāo)準(zhǔn),所以最終也沒(méi)有全量上線。
PNN之后我們認(rèn)為Embedding還可以再嘗試一下,于是又嘗試了DCN(Deep&Cross Network)。DCN引入了一個(gè)Cross Network進(jìn)行顯式的高階特征交叉。上圖右邊是論文中的圖,可以看到Deep&Cross中用了兩種網(wǎng)絡(luò),Deep網(wǎng)絡(luò)和Cross網(wǎng)絡(luò),兩種網(wǎng)絡(luò)并行,輸入都一樣,在最后一層再Stack到一起。
Deep網(wǎng)絡(luò)和前面幾種網(wǎng)絡(luò)一樣,包括連續(xù)特征和離散特征的Embedding,Cross網(wǎng)絡(luò)是DCN的特色,在Cross網(wǎng)絡(luò)里面,通過(guò)巧妙的設(shè)計(jì)實(shí)現(xiàn)了特征之間的顯式高階交叉。看上圖左下角的Cross結(jié)構(gòu)示意,這里的x是每一層的輸入,也就是上一層的輸出。Feature Crossing部分包括了原始輸入x0、本層輸入x的轉(zhuǎn)置、權(quán)重w三項(xiàng),三項(xiàng)相乘其實(shí)就做了本層輸入和原始輸入的特征交叉,x1就包含了二階的交叉信息,x2就包含了三階的交叉信息,就可以通過(guò)控制Cross的層數(shù)顯式控制交叉的階數(shù)。
不得不說(shuō),DCN在理論上很漂亮,我們也嘗試了一下。但是很可惜,線下有提升線上波動(dòng)提升,依然未能達(dá)到上線的標(biāo)準(zhǔn),最終未能全量上線。
經(jīng)過(guò)DeepFM、PNN、DCN的洗禮,促使我們開始反思,為什么在學(xué)術(shù)上特別有效的模型,反而在酒店搜索場(chǎng)景下不能全量上線呢?它們?cè)诰€下都有提升,在線上也有提升,但是線上提升較小且有波動(dòng)。
經(jīng)過(guò)認(rèn)真分析我們發(fā)現(xiàn)可能有兩個(gè)原因:第一,連續(xù)特征的影響,XGB時(shí)代嘗試了600多種連續(xù)特征,實(shí)際線上使用的連續(xù)特征接近400種,這部分特征太強(qiáng)了; 第二,離散特征太少,離散特征只有百萬(wàn)級(jí)別,但是Embedding特別適合離散特征多的情況。接下來(lái)方向就很明確了:補(bǔ)離散特征的課。
最終,我們還是把目光轉(zhuǎn)回Wide&Deep。Wide&Deep同時(shí)訓(xùn)練一個(gè)Wide側(cè)的線性模型和一個(gè)Deep側(cè)的神經(jīng)網(wǎng)絡(luò),Wide部分提供了記憶能力,關(guān)注用戶有過(guò)的歷史行為,Deep部分提供了泛化能力,關(guān)注一些沒(méi)有歷史行為的Item。之前的工作主要集中在Deep測(cè),對(duì)低階特征的表達(dá)存在缺失,所以我們添加了LR模塊以增加對(duì)低階特征的表達(dá),Deep部分和之前的V3一樣。剛開始只用了少量的ID類特征,效果一般,后來(lái)加了大量人工的交叉特征,特征維度達(dá)到了億級(jí)別后效果才得到很好的提升。下圖是我們的V4模型:
接下來(lái)介紹一下優(yōu)化目標(biāo)的迭代過(guò)程(后面講MTL會(huì)涉及這部分內(nèi)容)。酒店搜索的業(yè)務(wù)目標(biāo)是優(yōu)化用戶的購(gòu)買體驗(yàn),模型的優(yōu)化指標(biāo)是用戶的真實(shí)消費(fèi)率,怎么優(yōu)化這個(gè)目標(biāo)呢? 通過(guò)分析用戶的行為路徑可以把用戶的行為拆解成“展示->點(diǎn)擊->下單->支付->消費(fèi)”等5個(gè)環(huán)節(jié),這其中每個(gè)環(huán)節(jié)都可能存在用戶流失,比如有些用戶支付完成后,因?yàn)椴糠稚碳掖_認(rèn)比較慢,用戶等不及就取消了。
剛開始我們采用了方案1,對(duì)每一個(gè)環(huán)節(jié)建模(真實(shí)消費(fèi)率=用戶點(diǎn)擊率×下單率×支付率×消費(fèi)率)。優(yōu)點(diǎn)是非常簡(jiǎn)單直接且符合邏輯,每個(gè)模塊分工明確,容易確認(rèn)問(wèn)題出在哪里。缺點(diǎn)也很明顯,首先是特征重復(fù),4個(gè)模型在用戶維度和商家維度的特征全部一樣,其次模型之間是相乘關(guān)系且層數(shù)過(guò)多,容易導(dǎo)致誤差逐層傳遞,此外4個(gè)模型也增加了運(yùn)維成本。后來(lái)慢慢進(jìn)化到了方案2的“End to End”方式,直接預(yù)測(cè)用戶的真實(shí)消費(fèi)率,這時(shí)只需要把正樣本設(shè)定為實(shí)際消費(fèi)的樣本,一個(gè)模型就夠了,開發(fā)和運(yùn)維成本較小,模型間特征也可以復(fù)用,缺點(diǎn)就是鏈路比較長(zhǎng),上線時(shí)經(jīng)常遇到AB測(cè)抖動(dòng)問(wèn)題。
模型切換到神經(jīng)網(wǎng)絡(luò)后就可以做多任務(wù)學(xué)習(xí)了,之前樹模型時(shí)代只預(yù)測(cè)“End to End”真實(shí)訪購(gòu)率,神經(jīng)網(wǎng)絡(luò)則可以通過(guò)多任務(wù)學(xué)習(xí)同時(shí)預(yù)測(cè)CTR展示點(diǎn)擊率和CVR點(diǎn)擊消費(fèi)率。多任務(wù)學(xué)習(xí)通過(guò)硬共享的方式同時(shí)訓(xùn)練兩個(gè)網(wǎng)絡(luò),特征、Embedding層、隱層參數(shù)都是共享的,只在輸出層區(qū)分不同的任務(wù)。上圖是酒店搜索當(dāng)前線上的模型,基于Wide&Deep做的多任務(wù)學(xué)習(xí)。
網(wǎng)絡(luò)結(jié)構(gòu)演進(jìn)路線
上圖是酒店搜索排序的深度排序模型演進(jìn)路線,從MLP開始,通過(guò)對(duì)離散特征做Embedding進(jìn)化到FNN,中間嘗試過(guò)DeepFM、PNN、DCN等模型,后來(lái)加入了Wide層進(jìn)化到Wide&Deep,現(xiàn)在的版本是一個(gè)MTL版的Wide&Deep,每個(gè)模塊都是累加上去的。
除了上面提到的模型,我們還探索過(guò)這個(gè):
這是我們自己設(shè)計(jì)的混合網(wǎng)絡(luò),它融合了FNN、DeepFM、PNN、DCN、Wide&Deep等不同網(wǎng)絡(luò)的優(yōu)點(diǎn),同時(shí)實(shí)現(xiàn)了一階特征、顯式二階特征組合、顯式高階特征組合、隱式高階特征組合等,有興趣的同學(xué)可以嘗試一下。
不同模型實(shí)驗(yàn)結(jié)果
上圖是不同模型的實(shí)驗(yàn)結(jié)果,這里的BP是基點(diǎn)(Basis Point),1BP=0.01%。XGB是Baseline,MLP經(jīng)過(guò)很長(zhǎng)時(shí)間的調(diào)試才超過(guò)XGB,MLP和XGB融合模型的效果也很好,不過(guò)為了方便維護(hù),最終還是用FNN替換了融合模型。Wide&Deep在開始階段,提升并沒(méi)有特別多,后來(lái)加了組合特征后效果才好起來(lái)。我們Embedding上面的嘗試,包括DeepFM、Deep&Cross等,線下都有提升,線上波動(dòng)有提升,但是未能達(dá)到上線的標(biāo)準(zhǔn),最終未能全量。
在特征預(yù)處理方面對(duì)連續(xù)特征嘗試了累計(jì)分布?xì)w一化、標(biāo)準(zhǔn)化,以及手工變換如根號(hào)變換、對(duì)數(shù)變換等;累積分布?xì)w一化其實(shí)就是做特征分桶,因?yàn)檫B續(xù)特征多且分布范圍很廣,累積分布?xì)w一化對(duì)酒店搜索的場(chǎng)景比較有效。
離散特征方面嘗試了特征Embedding及離散特征交叉組合,分別對(duì)應(yīng)FNN和 Wide&Deep。這里特別提一下缺失值參數(shù)化,因?yàn)榫频陿I(yè)務(wù)是一種低頻業(yè)務(wù),特征覆蓋率低,大量樣本存在特征缺失的情況,如果對(duì)缺失特征學(xué)一個(gè)權(quán)重,非缺失值學(xué)一個(gè)權(quán)重效果較好。
參數(shù)調(diào)優(yōu)方面分別嘗試了激活函數(shù)、優(yōu)化器等。激活函數(shù)嘗試過(guò)Sigmoid、ReLU、Leaky_ReLU、ELU等;優(yōu)化器也實(shí)驗(yàn)過(guò)Adagrad、Rmsprop、Adam等;從實(shí)驗(yàn)效果看,激活函數(shù)ReLU+Adam效果最好。剛開始時(shí),加了Batch Normalization層和Dropout層,后來(lái)發(fā)現(xiàn)去掉后效果更好,可能和酒店搜索的數(shù)據(jù)量及數(shù)據(jù)特點(diǎn)有關(guān)。網(wǎng)絡(luò)結(jié)構(gòu)和隱層數(shù)方面用的是3到6層的金字塔網(wǎng)絡(luò)。學(xué)習(xí)率方面的經(jīng)驗(yàn)是學(xué)習(xí)率小點(diǎn)比較好,但是會(huì)導(dǎo)致訓(xùn)練變慢,需要找到一個(gè)平衡點(diǎn)。
下面介紹深度排序模型線上Serving架構(gòu)的演化過(guò)程,初始階段組內(nèi)同學(xué)各自探索,用過(guò)各種開源工具如Keras、TensorFlow等,線上分別自己實(shí)現(xiàn),預(yù)測(cè)代碼和其他代碼都放一起,維護(hù)困難且無(wú)法復(fù)用。
后來(lái)組內(nèi)決定一起探索,大家統(tǒng)一使用TensorFlow,線上用TF-Serving,線上線下可以做到無(wú)縫銜接,預(yù)測(cè)代碼和特征模塊也解耦了。現(xiàn)在則全面轉(zhuǎn)向MLX平臺(tái),MLX是美團(tuán)自研的超大規(guī)模機(jī)器學(xué)習(xí)平臺(tái),專為搜索、推薦、廣告等排序問(wèn)題定制,支持百億級(jí)特征和流式更新,有完善的線上Serving架構(gòu),極大地解放了算法同學(xué)的生產(chǎn)力。
最后介紹一下我們對(duì)搜索排序技術(shù)節(jié)奏的一些理解,簡(jiǎn)單來(lái)說(shuō)就是在不同階段做不同的事情。
在上圖中,橫軸表示技術(shù)深度,越往右技術(shù)難度越大,人力投入越大,對(duì)人的要求也越高。縱軸是業(yè)務(wù)階段。業(yè)務(wù)階段對(duì)技術(shù)的影響包括兩方面,數(shù)據(jù)量和業(yè)務(wù)價(jià)值。數(shù)據(jù)量的大小,可以決定該做什么事情,因?yàn)橛行┘夹g(shù)在數(shù)據(jù)量小的時(shí)候意義不大;業(yè)務(wù)價(jià)值就更不用說(shuō)了,業(yè)務(wù)價(jià)值越大越值得“重兵投入”。
- 起步階段:起步階段,還沒(méi)有數(shù)據(jù),這時(shí)候做簡(jiǎn)單排序就好,比如純按價(jià)格排序或者距離排序,目的是讓整個(gè)流程快速地跑起來(lái),能提供最基本的服務(wù)。比如2017年,美團(tuán)的長(zhǎng)租業(yè)務(wù)當(dāng)時(shí)就處于起步階段。
- 業(yè)務(wù)初期:隨著業(yè)務(wù)的發(fā)展,就進(jìn)入了業(yè)務(wù)發(fā)展初期,訂單數(shù)慢慢增長(zhǎng),也有了一些數(shù)據(jù),這時(shí)候可以增加一些啟發(fā)式規(guī)則或者簡(jiǎn)單的線性模型,檢索模型也可以加上。但是由于數(shù)據(jù)量還比較小,沒(méi)必要部署很復(fù)雜的模型。
- 穩(wěn)定成長(zhǎng)期:業(yè)務(wù)進(jìn)一步發(fā)展后,就進(jìn)入了穩(wěn)定成長(zhǎng)期,這時(shí)候訂單量已經(jīng)很大了,數(shù)據(jù)量也非常大了,這段時(shí)間是“補(bǔ)課”的時(shí)候,可以把意圖理解的模塊加上,排序模型也會(huì)進(jìn)化到非線性模型比如XGB,會(huì)做大量的特征工程,實(shí)時(shí)特征以及實(shí)時(shí)模型,在這個(gè)階段特征工程收益巨大。
- 技術(shù)瓶頸期:這個(gè)階段的特點(diǎn)是基本的東西都已經(jīng)做完了,在原有的技術(shù)框架下效果提升變的困難。這時(shí)需要做升級(jí),比如將傳統(tǒng)語(yǔ)義模型升級(jí)成深度語(yǔ)義模型,開始嘗試深度排序模型,并且開始探索強(qiáng)化學(xué)習(xí)、多模型融合、多目標(biāo)學(xué)習(xí)等。
中國(guó)有句俗話叫“殺雞焉用牛刀”,比喻辦小事情,何必花費(fèi)大力氣,也就是不要小題大做。其實(shí)做技術(shù)也一樣,不同業(yè)務(wù)階段不同數(shù)據(jù)量適合用不同的技術(shù)方案,沒(méi)有必要過(guò)度追求先進(jìn)的技術(shù)和高大上的模型,根據(jù)業(yè)務(wù)特點(diǎn)和業(yè)務(wù)階段選擇最匹配的技術(shù)方案才是最好的。我們認(rèn)為,沒(méi)有最好的模型,只有合適的場(chǎng)景。
總結(jié)
酒店搜索作為O2O搜索的一種,和傳統(tǒng)的搜索排序相比有很多不同之處,既要解決搜索的相關(guān)性問(wèn)題,又要提供“千人千面”的排序結(jié)果,優(yōu)化用戶購(gòu)買體驗(yàn),還要滿足業(yè)務(wù)需求。通過(guò)合理的模塊劃分可以把這三大類問(wèn)題解耦,檢索、排序、業(yè)務(wù)三個(gè)技術(shù)模塊各司其職。在檢索和意圖理解層面,我們做了地標(biāo)策略、NER模型和多級(jí)檢索架構(gòu)來(lái)保證查詢結(jié)果的相關(guān)性;排序模型上結(jié)合酒店搜索的業(yè)務(wù)特點(diǎn),借鑒業(yè)界先進(jìn)思想,嘗試了多種不同的深度排序模型,走出了一條不一樣的模型演進(jìn)路線。同時(shí)通過(guò)控制技術(shù)節(jié)奏,整體把握不同業(yè)務(wù)的技術(shù)選型和迭代節(jié)奏,對(duì)不同階段的業(yè)務(wù)匹配不同的技術(shù)方案,只選對(duì)的,不選貴的。
參考文獻(xiàn)
- [1] John Lafferty et al. Conditional random fields: Probabilistic models for segmenting and labeling sequence data.ICML2001.
- [2] Guillaume Lample et al Neural architectures for named entity recognition. NAACL2016.
- [3] Zhiheng Huang, Wei Xu, and Kai Yu. 2015.
- [4] Bidirectional LSTM-CRF models for sequence tagging. arXiv preprint arXiv:1508.01991.
- [5] Xuezhe Ma et al.End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF.ACL2016.
- [6] T Chen, C Guestrin. XGBoost: A scalable tree boosting system. KDD2016.
- [7] Weinan Zhang et al. Deep Learning over Multi-Field Categorical Data: A Case Study on User Response Prediction. ECIR 2016.
- [8] Huifeng Guo et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction. IJCAI2017.
- [9] Yanru Qu et al. Product-based neural networks for user response prediction. ICDM2016.
- [10] Heng-Tze Cheng et al. 2016. Wide & deep learning for recommender systems. 2016.In Proceedings of the 1st Workshop on Deep Learning for Recommender Systems.
- [11] Ruoxi Wang et al. Deep & Cross Network for Ad Click Predictions. ADKDD2017.
作者簡(jiǎn)介
- 藝濤,美團(tuán)高級(jí)技術(shù)專家,2016年加入美團(tuán),現(xiàn)負(fù)責(zé)美團(tuán)酒店業(yè)務(wù)搜索排序技術(shù)。2010年畢業(yè)于中科院計(jì)算所,曾在網(wǎng)易有道等公司工作,先后從事網(wǎng)頁(yè)搜索、購(gòu)物搜索、計(jì)算廣告等方向的研發(fā)工作。曾榮獲“Kaggle衛(wèi)星圖像分類大賽”亞軍,QCon明星講師。
總結(jié)
以上是生活随笔為你收集整理的深度学习在搜索业务中的探索与实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android手机用wifi连接adb调
- 下一篇: 深度学习框架PyTorch一书的学习-第