深度學習在搜索業務中的探索與實踐

收藏待读

深度學習在搜索業務中的探索與實踐

本文根據美團高級技術專家翟藝濤在2018 QCon全球軟件開發大會上的演講內容整理而成,內容有修改。

引言

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明星講師。

發現文章有錯誤、對內容有疑問,都可以關注美團技術團隊微信公眾號(meituantech),在後台給我們留言。我們每周會挑選出一位熱心小夥伴,送上一份精美的小禮品。快來掃碼關注我們吧!

深度學習在搜索業務中的探索與實踐

原文 : 美團技術團隊

相關閱讀

免责声明:本文内容来源于美團技術團隊,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。