• ×
    支持199IT發展可加入知識交流群(4000+用戶),最有價值數據分享和討論!
    點擊即可加入!
    關閉

    一文解讀深度學習在搜索業務中的探索與實踐

    引言

    2018年12月31日,美團酒店單日入住間夜突破200萬,再次創下行業的新紀錄,而酒店搜索在其中起到了非常重要的作用。本文會首先介紹一下酒店搜索的業務特點,作為O2O搜索的一種,酒店搜索和傳統的搜索排序相比存在很大的不同。第二部分介紹深度學習在酒店搜索NLP中的應用。第三部分會介紹深度排序模型在酒店搜索的演進路線,因為酒店業務的特點和歷史原因,美團酒店搜索的模型演進路線可能跟大部分公司都不太一樣。最后一部分是總結。

    酒店搜索的業務特點

    美團的使命是幫大家“Eat Better,Live Better”,所做的事情就是連接人與服務。用戶在美團平臺可以找到他們所需要的服務,商家在美團可以售賣自己提供的服務,而搜索在其中扮演的角色就是“連接器”。大部分用戶通過美團App找酒店是從搜索開始的,搜索貢獻了大部分的訂單,是最大的流量入口。在美團首頁點擊 “酒店住宿”圖標,就會進入上圖右側的搜索入口,用戶可以選擇城市和入住時間并發起搜索。

    酒店搜索技術團隊的工作不僅有搜索排序,還有查詢引導、推薦等工作,查詢引導如搜索智能提示、查詢糾錯等。之所以還有推薦的工作,是因為很多用戶在發起搜索時不帶查詢詞,本質上屬于推薦,此外還有特定場景下針對少無結果的推薦等。本文主要介紹搜索排序這方面的工作。

    不同搜索對比

    現在,大家對搜索都很熟悉,常見的有網頁搜索,比如Google、百度、搜狗等;商品搜索,像天貓、淘寶、京東等;還有就是O2O(Online To Offline)的搜索,典型的就是酒店的搜索。雖然都是搜索,但是用戶使用搜索的目的并不相同,包括找信息、找商品、找服務等等,不同搜索之間也存在很大的差別。

    上圖對不同搜索進行了簡單對比,可以從5個維度展開。首先是目標維度。因為用戶是來找信息,網頁搜索重點是保證查詢結果和用戶意圖的相關性,而在商品搜索和酒店搜索中,用戶的主要目的是查找商品或服務,最終達成交易,目標上有較大區別。用戶使用不同搜索的目的不同,從而導致不同搜索對個性化程度的要求不同。交易屬性的搜索,包括商品搜索和酒店搜索,對個性化程度的要求都比較高,因為不同用戶的消費水平不同,偏好也不一樣。

    在技術層面上,也存在很多不同點。網頁搜索會索引全網的數據,這些數據不是它自己生產,數據來源非常多樣,包括新聞、下載頁、視頻頁、音樂頁等各種不同的形態,所以整個數據是非結構化的,差異也很大。這意味著網頁搜索需要擁有兩種技術能力,數據抓取能力和數據解析能力,它們需要抓取網頁并解析形成結構化數據。在這個層面上,酒店搜索和商品搜索相對就“幸福”一些,因為數據都是商家提交的結構化數據,相對來說更加規范。

    此外,酒店作為一種O2O的服務,用戶在線上(Online)下單,最終需要到線下(Offline)去消費,所以就有一個位置上的約束,而位置的約束也就導致出現供給側的約束,供給只能在某個特定位置附近。比如北京大學方圓幾公里之內的酒店。這兩點約束在網頁搜索和商品搜索中就不用考慮,網頁可以無限次的進行閱讀。商品搜索得益于快遞業的快速發展,在北京也可以買到來自浙江的商品,供給側的約束比較小。

    介紹完不同搜索產品的特點,接下來看不同搜索產品的優化目標。通用搜索的優化目標是相關性,評價指標是DCG、NDCG、MAP等這些指標,要求查詢結果和用戶意圖相關。對商品搜索來說,不同電商平臺的優化目標不太一樣,有的目標是最大化GMV,有的目標是最大化點擊率,這些在技術上都可以實現。

    而對酒店搜索而言,因為它屬于O2O的業務形態,線上下單,線下消費,這就要求搜索結果必須和用戶的查詢意圖“強相關”。這個“強相關”包括兩層含義,顯性相關和隱性相關。舉個例子,用戶搜索“北京大學”,那么他的訴求很明確,就是要找“北京大學”附近的酒店,這種屬于用戶明確告訴平臺自己的位置訴求。但是,如果用戶在本地搜索“七天”,即使用戶沒有明確說明酒店的具體位置,我們也知道,用戶可能想找的是距離自己比較近的“七天酒店”,這時候就需要建模用戶的隱性位置訴求。

    美團是一個交易平臺,大部分用戶使用美團是為了達成交易,所以要優化用戶的購買體驗。刻畫用戶購買體驗的核心業務指標是訪購率,用來描述用戶在美團是否順暢的完成了購買,需要優化訪購率這個指標。總結一下,酒店搜索不僅要解決相關性,盡量優化用戶購買體驗、優化訪購率等指標,同時還要照顧到業務訴求。

    根據上面的分析,酒店搜索的整個搜索框架就可以拆分成三大模塊:檢索、排序以及業務規則。檢索層包括查詢理解和召回兩部分,主要解決相關性問題。查詢理解做的事情就是理解用戶意圖,召回根據用戶意圖來召回相關的酒店,兩者強耦合,需要放在一起。檢索的核心是語義理解,比如用戶搜索“北京大學”,平臺就知道用戶想找的是“北京大學附近的酒店”,所以這個模塊的優化方式是問題驅動,不斷地發現問題、解決問題來進行迭代。

    接下來,從檢索模塊檢索出來的酒店都已經是滿足用戶需求的酒店了。還是上面“北京大學”的那個例子,檢索模塊已經檢索出來幾百家“北京大學”附近的酒店,這些都是和用戶的查詢詞“北京大學”相關的,怎么把用戶最有可能購買的酒店排到前面呢?這就是排序模塊要做的事情。

    排序模塊使用機器學習和深度學習的技術提供“千人千面”的排序結果,如果是經常預定經濟連鎖型酒店的用戶,排序模塊就把經濟連鎖型酒店排到前面。針對消費水平比較高,對酒店要求比較高的用戶,排序模塊就把高檔酒店排到前面,對每個用戶都可以做到個性化定制。排序屬于典型的技術驅動模塊,優化目標是訪購率,用這個技術指標驅動技術團隊不斷進行迭代和優化。

    最后是業務層面,比如有些商家會在美團上刷單作弊,針對這些商家需要做降權處理。

    整體框架

    上圖是搜索的整體框架,這里詳細描述下調用過程:

    • 搜索API負責接收用戶的查詢詞并發送給搜索控制中心。
    • 控制中心把接收到的查詢請求發送到檢索與意圖模塊,搜索詞會先經過查詢分析模塊做用戶的查詢意圖分析,分析完之后,會把用戶的查詢意圖分析結果傳回去給業務檢索模塊,業務檢索模塊根據意圖識別結果形成查詢條件,然后去基礎檢索端查詢結果。
    • 基礎檢索訪問索引得到查詢結果后,再把結果返回給上層。
    • 業務檢索模塊獲取基礎的檢索結果后,會調用一些外部服務如房態服務過濾一些滿房的酒店,再把結果返回給控制中心。
    • 此時,控制中心得到的都是和用戶查詢意圖強相關的結果,這時就需要利用機器學習技術做排序。通過預測模塊對每個酒店做訪購率預測,控制中心獲取預測模塊的排序結果后,再根據業務邏輯做一些調整,最終返回結果給搜索API。

    可以看到,模塊劃分和前文描述的思想一致,檢索模塊主要解決用戶意圖識別和召回問題,也就是解決相關性。預測模塊做訪購率預測,業務邏輯放在搜索控制中心實現。接下來會介紹一下意圖理解和排序模塊中涉及的一些深度學習技術。

    先來看下查詢理解的問題,這個模塊通過數據分析和Case分析,不斷的發現問題、解決問題來迭代優化。之前的評測發現少無結果的原因,主要包括以下幾種:

    • 地標詞:比如用戶搜索“望京國際研發園”,但是后臺沒有一家酒店包含“望京國際研發園”這幾個字,其實用戶想找的是望京國際研發園附近的酒店。
    • 結構化查詢:比如芍藥居附近7天,酒店描述信息中沒有“附近”這個詞,搜索體驗就比較差。這種需要對查詢詞做成分識別,丟掉不重要的詞,并且對不用類別的Term走不同的檢索域。
    • 異地查詢:用戶在北京搜索“大雁塔”沒有結果,其實用戶的真實意圖是西安大雁塔附近的酒店,這種需要做異地需求識別并進行異地跳轉。
    • 同義詞:在北京搜索“一中”和搜索“北京第一中學”,其實都是同一個意思,需要挖掘同義詞。

    針對這幾類問題,我們分別作了以下工作:

    • 針對地標詞問題,提供地標意圖識別和地標策略,把地標類別的查詢詞改成按經緯度進行畫圈檢索。
    • 針對結構化查詢的問題,我們對查詢詞做了成分識別,設計了少無結果時的多級檢索架構。
    • 針對異地查詢的問題,做異地意圖識別和異地的跳轉引導。
    • 針對語義查詢的問題,做同義詞和查詢改寫。

    這里的每一個模塊都用到了機器學習和深度學習的技術,本文挑選兩個酒店搜索中比較特殊的問題進行介紹。

    地標問題是O2O搜索的一個典型問題,在網頁搜索和商品搜索中都較少出現此類問題。當用戶搜索類似“望京國際研發園”這種查詢詞的時候,因為搜索的相關性是根據文本計算的,需要酒店描述中有相關文字,如果酒店的描述信息中沒有這個詞,那就檢索不出來。比如昆泰酒店,雖然就在望京國際研發園旁邊,但是它的描述信息中并沒有出現“望京國際研發園”,所以就無法檢索出來,這會導致用戶體驗較差。

    經過分析,我們發現有一類查詢詞是針對特定地點的搜索,用戶的訴求是找特定地點附近的酒店,這種情況下走文本匹配大概率是沒有結果的。這個問題的解法是針對這種類型的查詢詞,從“文本匹配”改成“坐標匹配”,首先分析查詢詞是不是有地標意圖,如果是的話就不走文本匹配了,改走坐標匹配,檢索出來這個坐標附近的酒店就可以了。這時就產生了兩個問題:第一,怎么確定哪些查詢詞有地標意圖;第二,怎么獲取經緯度信息。

    針對這個問題,我們做了地標策略,步驟如下:

    • 多渠道獲取可能包含地標詞的候選集,這些候選集包括用戶少無結果的查詢詞,以及一些酒店提供的描述信息。
    • 對候選集合進行命名實體識別(NER,Named Entity Recognition),可以得到各個命名實體的類型,標識為“地標”類型的就是疑似地標詞。
    • 把疑似地標詞放到美團地圖服務中獲取經緯度,經過人工校驗無誤后,存入線上數據庫中;線上來查詢請求時,先會去匹配精準地標庫,如果匹配成功,說明這個查詢詞是地標意圖,這時就不走文本檢索了,直接在意圖服務層走經緯度檢索。
    • 經過人工校驗的精準地標庫補充到NER模型的訓練數據中,持續優化NER模型。

    這里提到了NER模型,下面對它做一下詳細的介紹。

    NER是命名實體識別,是機器學習中的序列標注問題,比如輸入“北大附近的七天”,就會標注出來每個詞的成分,這里“北大”是地標,“七天”是酒店品牌。這里的類別是根據業務特點自己定義的,酒店業務中有地標、品牌、商圈等不同的類別。與分類問題相比,序列標注問題中當前的預測標簽不僅與當前的輸入特征相關,還與前后的預測標簽相關,即預測標簽序列之間有強相互依賴關系。

    解決序列標注問題的經典模型是CRF(Conditional Random Field,條件隨機場),也是我們剛開始嘗試的模型。條件隨機場可以看做是邏輯回歸的序列化版本,邏輯回歸是用于分類的對數線性模型,條件隨機場是用于序列化標注的對數線性模型,可以看做是考慮了上下文的分類模型。

    機器學習問題的求解就是“數據+模型+特征”,數據方面先根據業務特點定義了幾種實體類別,然后通過“人工+規則”的方法標注了一批數據。特征方面提取了包括詞性、Term文本特征等,還定義了一些特征模板,特征模板是CRF中人工定義的一些二值函數,通過這些二值函數,可以挖掘命名實體內部以及上下文的構成特點。標注數據、模型、特征都有了,就可以訓練CRF模型,這是線上NER問題的第一版模型。

    隨著深度學習的發展,用Word Embedding詞向量作為輸入,疊加神經網絡單元的方法漸漸成為NLP領域新的研究方向。基于雙向LSTM(Long Short-Term Memory)+CRF的方法成為NER的主流方法,這種方法采用雙向LSTM單元作為特征提取器替代原有的人工特征,不需要專門的領域知識,框架也通用。Embedding輸入也有多種形式,可以是詞向量,可以是字向量,也可以是字向量和詞向量的拼接。

    我們嘗試了雙向LSTM+CRF,并在實際應用中做了些改動:由于在CRF階段已經積累了一批人工特征,實驗發現把這些特征加上效果更好。加了人工特征的雙向LSTM+CRF是酒店搜索NER問題的主模型。

    當然,針對LSTM+CRF的方法已經有了很多的改進,比如還有一種NER的方法是融合CNN+LSTM+CRF,主要改進點是多了一個CNN模塊來提取字級別的特征。CNN的輸入是字級別的Embedding,通過卷積和池化等操作來提取字級別的特征,然后和詞的Embedding拼接起來放入LSTM。這種方法在兩個公開數據集上面取得了最好的結果,也是未來嘗試的方向之一。

    為了解決少無結果的問題,我們設計了多級檢索架構,如上圖所示,主要分4個層次:基本檢索、二次檢索、核心詞檢索和異地檢索。

    • 基本檢索會根據查詢詞的意圖選擇特定的檢索策略,比如地標意圖走經緯度檢索,品牌意圖只檢索品牌域和商家名。
    • 基本檢索少無結果會進行二次檢索,二次檢索也是分意圖的,不同意圖類型會有不同的檢索策略,地標意圖是經緯度檢索的,二次檢索的時候就需要擴大檢索半徑;品牌意圖的查詢詞,因為很多品牌在一些城市沒有開店,比如香格里拉在很多小城市并沒有開店,這時比較好的做法,是推薦給用戶該城市最好的酒店。
    • 如果還是少無結果,會走核心詞檢索,只保留核心詞檢索一遍。丟掉非核心詞有多種方式,一種是刪除一些運營定義的無意義詞,一種是保留NER模型識別出來的主要實體類型。此外還有一個TermWeight的模型,對每個詞都有一個重要性的權重,可以把一些不重要的詞丟掉。
    • 在還沒有結果的情況下,會選擇”異地+全國“檢索,即更換城市或者在全國范圍內進行檢索。

    多級檢索架構上線后,線上的無結果率就大幅度降低了。

    排序

    排序其實是一個典型的技術問題,業界應用比較廣泛的有廣告排序和推薦排序,廣告排序比如Google和百度的關鍵字廣告排序,今日頭條、騰訊的展示廣告排序。推薦排序比如快手、抖音這些短視頻平臺,以及各大App、瀏覽器的信息流。廣告排序和推薦排序優化的目標都是點擊率,技術棧也比較相似,包括LR/FTRL、FM/FFM、GBDT、DNN等模型。

    跟以上兩種排序應用相比,酒店排序有自己的業務特點,因為美團酒店具有LBS屬性和交易屬性,天生自帶很多連續特征,如酒店價格、酒店評分、酒店離用戶的距離等,這些連續特征是決定用戶購買行為的最重要因素。優化目標也不一樣,大部分場景下酒店搜索的優化目標是訪購率,部分場景下優化目標是點擊率。在技術層面,酒店排序整體的技術棧和廣告、推薦比較相似,都可以使用LR/FTRL、FM/FFM、GBDT、DNN等模型。

    面臨的挑戰

    具體到酒店排序工作,我們面臨一些不一樣的挑戰,主要包括以下4點:

    1. 數據稀疏。住酒店本身是一種低頻行為,大部分用戶一年也就住一兩次,導致很多特征的覆蓋率比較低。
    2. 業務眾多。美團酒店包括國內酒店業務、境外酒店業務,以及長租、鐘點房等業務,同時有美團和點評兩個不同的App。
    3. 場景復雜。按照用戶的位置可以分成本地和異地,按照用戶的訴求可以分成商務、旅游、本地休閑等幾大類,這些用戶之間差異很明顯。比如商務用戶會有大量復購行為,典型例子是美團員工的出差場景,美團在上海和北京各有一個總部,如果美團的同學去上海出差,大概率會在公司差旅標準內選一家離公司近的酒店,從而會在同一家酒店產生大量的復購行為;但是如果是一個旅游用戶,他就很少反復去同一個地方。
    4. 供給約束。酒店行業供給的變化很快,一個酒店只有那么多房間,一天能提供的間夜量是固定的,全部訂出的話,用戶提價也不會提供新的房間,這種情況在勞動節、國慶這種節假日特別明顯。

    上圖右側是排序的整體架構圖,分為線下、線上和近線上三個部分。在線下部分,主要做離線的模型調優和評估,線上部分做預測。這里比較特別的是近線上部分,我們在實時層面做了大量的工作,包括用戶的實時行為、酒店實時價格、實時庫存等等,以應對供給變化快的特點。

    這里介紹一個業務特點導致的比較獨特的問題:模型切分。美團酒店有很多業務場景,包括國內酒店、境外酒店、長租、鐘點房等;還有兩個App,美團App和大眾點評App;還有搜索和篩選兩種場景,搜索帶查詢詞,篩選沒有查詢詞,兩種場景差異較大;從地理位置維度,還可以分成本地和異地兩種場景。

    面對這么多的業務場景,第一個問題就是模型怎么設計,是用統一的大模型,還是分成很多不同的小模型?我們可以用一個大模型Cover所有的場景,用特征來區分不同場景的差異,好處是統一模型維護和優化成本低。也可以劃分很多小模型,這里有一個比較好的比喻,多個專科專家會診,勝過一個全科醫生。切分模型后,可以避免差異較大的業務之間互相影響,也方便對特殊場景進行專門的優化。

    在模型切分上,主要考慮三個因素:

    • 第一,業務之間的差異性。比如長租和境外差異很大,國內酒店和境外業務差異也很大,這種需要拆分。
    • 第二,細分后的數據量。場景分的越細,數據量就越小,會導致兩個問題,一是特征的覆蓋率進一步降低;二是數據量變小后,不利于后續的模型迭代,一些復雜模型對數據量有很高的要求。我們做過嘗試,國內酒店場景下,美團和大眾點評兩個App數據量都很大,而且用戶也很不一樣,所以做了模型拆分;但是境外酒店,因為本身是新業務數據量較小,就沒有再進行細分。
    • 第三,一切以線上指標為準。我們會做大量的實驗,看當前數據量下怎么拆分效果更好,比如美團App的國內酒店,我們發現把搜索和篩選拆開后,效果更好;篩選因為數據量特別大,拆分成本、異地效果也更好,但是如果搜索場景拆分成本地、異地模型就沒有額外收益了。最終,一切都要以線上的實際表現為準。

    模型演進

    接下來介紹一下排序模型的演進過程,因為業務特點及歷史原因,酒店搜索的排序模型走了一條不一樣的演進路線。大家可以看業界其他公司點擊率模型的演進,很多都是從LR/FTRL開始,然后進化到FM/FFM,或者用GBDT+LR搞定特征組合,然后開始Wide&Deep。

    酒店搜索的演進就不太一樣。酒店業務天生自帶大量連續特征,如酒店價格、酒店和用戶的距離、酒店評分等,因此初始階段使用了對連續特征比較友好的樹模型。在探索深度排序模型的時候,因為已經有了大量優化過的連續特征,導致我們的整個思路也不太一樣,主要是借鑒一些模型的思想,結合業務特點做嘗試,下面逐一進行介紹。

    初始階段線上使用的模型是XGB(XGBOOST, eXtreme Gradient Boosting)。作為GBDT的改進,XGB實現了非線性和自動的特征組合。樹節點的分裂其實就實現了非線性,樹的層次結構實現了不同特征的自動組合,而且樹模型對特征的包容性非常好,樹的分裂通過判斷相對大小來實現,不需要對特征做特殊處理,適合連續特征。

    樹模型的這些特點確實很適合酒店這種連續特征多的場景,至今為止,XGB都是數據量較小場景下的主模型。但是樹模型優化到后期遇到了瓶頸,比如特征工程收益變小、增大數據量沒有額外收益等,此外樹模型不適合做在線學習的問題愈發嚴重。酒店用戶在勞動節、國慶節等節假日行為有較大不同,這時需要快速更新模型,我們嘗試過只更新最后幾棵樹的做法,效果不佳。考慮到未來進一步的業務發展,有必要做模型升級。

    模型探索的原則是從簡單到復雜,逐步積累經驗,所以首先嘗試了結構比較簡單的MLP(Multiple-Layer Perception)多層感知機,也就是全連接神經網絡。神經網絡是一種比樹模型“天花板”更高的模型,“天花板”更高兩層意思:第一層意思,可以優化提升的空間更大,比如可以進行在線學習,可以做多目標學習;第二層意思,模型的容量更大,“胃口”更大,可以“吃下”更多數據。此外它的表達能力也更強,可以擬合任何函數,網絡結構和參數可以調整的空間也更大。但是它的優點同時也是它的缺點,因為它的網絡結構、參數等可以調整的空間更大,神經網需要做很多的參數和網絡結構層面的調整。

    上圖是MLP的網絡結構圖,包含輸入層、若干個隱藏層、輸出層。在很長一段時間內,在特征相同的情況下,MLP效果不如XGB,所以有段時間線上使用的是XGB和MLP的融合模型。后來經過大量的網絡結構調整和參數調整,調參經驗越來越豐富,MLP才逐步超越XGB。這里額外說明一下,酒店搜索中有少量的ID類特征,在第一版MLP里ID類特征是直接當做連續特征處理的。比如城市ID,ID的序關系有一定的物理意義,大城市ID普遍較小,小城市開城晚一些,ID較大。

    在MLP階段我們對網絡結構做了大量實驗,嘗試過三種網絡結構:平行結構、菱形結構、金字塔結構。在很多論文中提到三者相比平行結構效果最好,但是因為酒店搜索的數據不太一樣,實驗發現金字塔結構效果最好,即上圖最右邊的“1024-512-256”的網絡結構。同時還實驗了不同網絡層數對效果的影響,實驗發現3-6層的網絡效果較好,更深的網絡沒有額外收益而且線上響應時間會變慢,后面各種模型探索都是基于3到6層的金字塔網絡結構進行嘗試。

    MLP上線之后,我們開始思考接下來的探索方向。在樹模型階段,酒店搜索組就在連續特征上做了很多探索,連續特征方面很難有比較大的提升空間;同時業界的研究重點也放在離散特征方面,所以離散特征應該是下一步的重點方向。

    深度排序模型對離散特征的處理有兩大類方法,一類是對離散特征做Embedding,這樣離散特征就可以表示成連續的向量放到神經網絡中去,另一類是Wide&Deep,把離散特征直接加到Wide側。我們先嘗試了第一種,即對離散特征做Embedding的方法,借鑒的是FNN的思想。其實離散特征做Embedding的想法很早就出現了,FM就是把離散特征表示成K維向量,通過把高維離散特征表示成低維向量增加模型泛化能力。

    實際使用中,我們稍微做了一些改動,實驗中發現使用FM預訓練的效率不高,所以嘗試了不做預訓練直接把Embedding隨機初始化,然后讓Embedding跟隨網絡一起學習,實驗結果發現比FM預訓練效果還要好一點。最后的做法是沒有用FM做預訓練,讓Embedding隨機初始化并隨網絡學習,上圖是線上的V3模型。

    FNN的成功上線證明離散特征Embedding這個方向值得深挖,所以我們接著實驗了DeepFM。DeepFM相對于Wide&Deep的改進,非常類似于FM相對LR的改進,都認為LR部分的人工組合特征是個耗時耗力的事情,而FM模塊可以通過向量內積的方式直接求出二階組合特征。DeepFM使用FM替換了Wide&Deep中的LR,離散特征的Embedding同時“喂”給神經網和FM,這部分Embedding是共享的,Embedding在網絡的優化過程中自動學習,不需要做預訓練,同時FM Layer包含了一階特征和二階的組合特征,表達能力更強。我們嘗試了DeepFM,線下有提升線上波動提升,并沒有達到上線的標準,最終沒有全量。

    盡管DeepFM沒有成功上線,但這并沒有動搖我們對Embedding的信心,接下來嘗試了PNN。PNN的網絡重點在Product上面,在點擊率預估中,認為特征之間的關系更多是一種And“且”的關系, 而非Add“加”的關系,例如性別為男且用華為手機的人,他定酒店時屬于商務出行場景的概率更高。

    PNN使用了Product Layer進行顯式的二階特征組合。上圖右邊是PNN的網絡結構圖,依然對離散特征做Embedding,Embedding向量同時送往隱層和Product層,Product通過內積或者外積的方式,對特征做顯式的二階交叉,之后再送入神經網的隱層,這樣可以做到顯式的二階組合和隱式的高階特征組合。特征交叉基于乘法的運算實現,有兩種方式:內積和外積。我們嘗試了內積的方式,線下略有提升線上也是波動提升,沒有達到上線標準,所以最終也沒有全量上線。

    PNN之后我們認為Embedding還可以再嘗試一下,于是又嘗試了DCN(Deep&Cross Network)。DCN引入了一個Cross Network進行顯式的高階特征交叉。上圖右邊是論文中的圖,可以看到Deep&Cross中用了兩種網絡,Deep網絡和Cross網絡,兩種網絡并行,輸入都一樣,在最后一層再Stack到一起。

    Deep網絡和前面幾種網絡一樣,包括連續特征和離散特征的Embedding,Cross網絡是DCN的特色,在Cross網絡里面,通過巧妙的設計實現了特征之間的顯式高階交叉。看上圖左下角的Cross結構示意,這里的x是每一層的輸入,也就是上一層的輸出。Feature Crossing部分包括了原始輸入x0、本層輸入x的轉置、權重w三項,三項相乘其實就做了本層輸入和原始輸入的特征交叉,x1就包含了二階的交叉信息,x2就包含了三階的交叉信息,就可以通過控制Cross的層數顯式控制交叉的階數。

    不得不說,DCN在理論上很漂亮,我們也嘗試了一下。但是很可惜,線下有提升線上波動提升,依然未能達到上線的標準,最終未能全量上線。

    經過DeepFM、PNN、DCN的洗禮,促使我們開始反思,為什么在學術上特別有效的模型,反而在酒店搜索場景下不能全量上線呢?它們在線下都有提升,在線上也有提升,但是線上提升較小且有波動。

    經過認真分析我們發現可能有兩個原因:第一,連續特征的影響,XGB時代嘗試了600多種連續特征,實際線上使用的連續特征接近400種,這部分特征太強了;?第二,離散特征太少,離散特征只有百萬級別,但是Embedding特別適合離散特征多的情況。接下來方向就很明確了:補離散特征的課。

    最終,我們還是把目光轉回Wide&Deep。Wide&Deep同時訓練一個Wide側的線性模型和一個Deep側的神經網絡,Wide部分提供了記憶能力,關注用戶有過的歷史行為,Deep部分提供了泛化能力,關注一些沒有歷史行為的Item。之前的工作主要集中在Deep測,對低階特征的表達存在缺失,所以我們添加了LR模塊以增加對低階特征的表達,Deep部分和之前的V3一樣。剛開始只用了少量的ID類特征,效果一般,后來加了大量人工的交叉特征,特征維度達到了億級別后效果才得到很好的提升。下圖是我們的V4模型:

    接下來介紹一下優化目標的迭代過程(后面講MTL會涉及這部分內容)。酒店搜索的業務目標是優化用戶的購買體驗,模型的優化指標是用戶的真實消費率,怎么優化這個目標呢? 通過分析用戶的行為路徑可以把用戶的行為拆解成“展示->點擊->下單->支付->消費”等5個環節,這其中每個環節都可能存在用戶流失,比如有些用戶支付完成后,因為部分商家確認比較慢,用戶等不及就取消了。

    剛開始我們采用了方案1,對每一個環節建模(真實消費率=用戶點擊率×下單率×支付率×消費率)。優點是非常簡單直接且符合邏輯,每個模塊分工明確,容易確認問題出在哪里。缺點也很明顯,首先是特征重復,4個模型在用戶維度和商家維度的特征全部一樣,其次模型之間是相乘關系且層數過多,容易導致誤差逐層傳遞,此外4個模型也增加了運維成本。后來慢慢進化到了方案2的“End to End”方式,直接預測用戶的真實消費率,這時只需要把正樣本設定為實際消費的樣本,一個模型就夠了,開發和運維成本較小,模型間特征也可以復用,缺點就是鏈路比較長,上線時經常遇到AB測抖動問題。

    模型切換到神經網絡后就可以做多任務學習了,之前樹模型時代只預測“End to End”真實訪購率,神經網絡則可以通過多任務學習同時預測CTR展示點擊率和CVR點擊消費率。多任務學習通過硬共享的方式同時訓練兩個網絡,特征、Embedding層、隱層參數都是共享的,只在輸出層區分不同的任務。上圖是酒店搜索當前線上的模型,基于Wide&Deep做的多任務學習。

    網絡結構演進路線

    上圖是酒店搜索排序的深度排序模型演進路線,從MLP開始,通過對離散特征做Embedding進化到FNN,中間嘗試過DeepFM、PNN、DCN等模型,后來加入了Wide層進化到Wide&Deep,現在的版本是一個MTL版的Wide&Deep,每個模塊都是累加上去的。

    除了上面提到的模型,我們還探索過這個:

    這是我們自己設計的混合網絡,它融合了FNN、DeepFM、PNN、DCN、Wide&Deep等不同網絡的優點,同時實現了一階特征、顯式二階特征組合、顯式高階特征組合、隱式高階特征組合等,有興趣的同學可以嘗試一下。

    不同模型實驗結果

    上圖是不同模型的實驗結果,這里的BP是基點(Basis Point),1BP=0.01%。XGB是Baseline,MLP經過很長時間的調試才超過XGB,MLP和XGB融合模型的效果也很好,不過為了方便維護,最終還是用FNN替換了融合模型。Wide&Deep在開始階段,提升并沒有特別多,后來加了組合特征后效果才好起來。我們Embedding上面的嘗試,包括DeepFM、Deep&Cross等,線下都有提升,線上波動有提升,但是未能達到上線的標準,最終未能全量。

    在特征預處理方面對連續特征嘗試了累計分布歸一化、標準化,以及手工變換如根號變換、對數變換等;累積分布歸一化其實就是做特征分桶,因為連續特征多且分布范圍很廣,累積分布歸一化對酒店搜索的場景比較有效。

    離散特征方面嘗試了特征Embedding及離散特征交叉組合,分別對應FNN和 Wide&Deep。這里特別提一下缺失值參數化,因為酒店業務是一種低頻業務,特征覆蓋率低,大量樣本存在特征缺失的情況,如果對缺失特征學一個權重,非缺失值學一個權重效果較好。

    參數調優方面分別嘗試了激活函數、優化器等。激活函數嘗試過Sigmoid、ReLU、Leaky_ReLU、ELU等;優化器也實驗過Adagrad、Rmsprop、Adam等;從實驗效果看,激活函數ReLU+Adam效果最好。剛開始時,加了Batch Normalization層和Dropout層,后來發現去掉后效果更好,可能和酒店搜索的數據量及數據特點有關。網絡結構和隱層數方面用的是3到6層的金字塔網絡。學習率方面的經驗是學習率小點比較好,但是會導致訓練變慢,需要找到一個平衡點。

    下面介紹深度排序模型線上Serving架構的演化過程,初始階段組內同學各自探索,用過各種開源工具如Keras、TensorFlow等,線上分別自己實現,預測代碼和其他代碼都放一起,維護困難且無法復用。

    后來組內決定一起探索,大家統一使用TensorFlow,線上用TF-Serving,線上線下可以做到無縫銜接,預測代碼和特征模塊也解耦了。現在則全面轉向MLX平臺,MLX是美團自研的超大規模機器學習平臺,專為搜索、推薦、廣告等排序問題定制,支持百億級特征和流式更新,有完善的線上Serving架構,極大地解放了算法同學的生產力。

    最后介紹一下我們對搜索排序技術節奏的一些理解,簡單來說就是在不同階段做不同的事情。

    在上圖中,橫軸表示技術深度,越往右技術難度越大,人力投入越大,對人的要求也越高。縱軸是業務階段。業務階段對技術的影響包括兩方面,數據量和業務價值。數據量的大小,可以決定該做什么事情,因為有些技術在數據量小的時候意義不大;業務價值就更不用說了,業務價值越大越值得“重兵投入”。

    • 起步階段:起步階段,還沒有數據,這時候做簡單排序就好,比如純按價格排序或者距離排序,目的是讓整個流程快速地跑起來,能提供最基本的服務。比如2017年,美團的長租業務當時就處于起步階段。
    • 業務初期:隨著業務的發展,就進入了業務發展初期,訂單數慢慢增長,也有了一些數據,這時候可以增加一些啟發式規則或者簡單的線性模型,檢索模型也可以加上。但是由于數據量還比較小,沒必要部署很復雜的模型。
    • 穩定成長期:業務進一步發展后,就進入了穩定成長期,這時候訂單量已經很大了,數據量也非常大了,這段時間是“補課”的時候,可以把意圖理解的模塊加上,排序模型也會進化到非線性模型比如XGB,會做大量的特征工程,實時特征以及實時模型,在這個階段特征工程收益巨大。
    • 技術瓶頸期:這個階段的特點是基本的東西都已經做完了,在原有的技術框架下效果提升變的困難。這時需要做升級,比如將傳統語義模型升級成深度語義模型,開始嘗試深度排序模型,并且開始探索強化學習、多模型融合、多目標學習等。

    中國有句俗話叫“殺雞焉用牛刀”,比喻辦小事情,何必花費大力氣,也就是不要小題大做。其實做技術也一樣,不同業務階段不同數據量適合用不同的技術方案,沒有必要過度追求先進的技術和高大上的模型,根據業務特點和業務階段選擇最匹配的技術方案才是最好的。我們認為,沒有最好的模型,只有合適的場景。

    總結

    酒店搜索作為O2O搜索的一種,和傳統的搜索排序相比有很多不同之處,既要解決搜索的相關性問題,又要提供“千人千面”的排序結果,優化用戶購買體驗,還要滿足業務需求。通過合理的模塊劃分可以把這三大類問題解耦,檢索、排序、業務三個技術模塊各司其職。在檢索和意圖理解層面,我們做了地標策略、NER模型和多級檢索架構來保證查詢結果的相關性;排序模型上結合酒店搜索的業務特點,借鑒業界先進思想,嘗試了多種不同的深度排序模型,走出了一條不一樣的模型演進路線。同時通過控制技術節奏,整體把握不同業務的技術選型和迭代節奏,對不同階段的業務匹配不同的技術方案,只選對的,不選貴的。

    參考文獻

    [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.

    作者簡介

    藝濤,美團高級技術專家,2016年加入美團,現負責美團酒店業務搜索排序技術。2010年畢業于中科院計算所,曾在網易有道等公司工作,先后從事網頁搜索、購物搜索、計算廣告等方向的研發工作。曾榮獲“Kaggle衛星圖像分類大賽”亞軍,QCon明星講師。

    感謝支持199IT
    我們致力為中國互聯網研究和咨詢及IT行業數據專業人員和決策者提供一個數據共享平臺。

    要繼續訪問我們的網站,只需關閉您的廣告攔截器并刷新頁面。
    滾動到頂部
    --> 宁夏十一选五平台