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

本文根據美團高級技術專家翟藝濤在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的業務形態,線上下單,線下消費,這就要求搜索結果必須和用戶的查詢意圖「強相關」。這個「強相關」包括兩層含義,顯性相關和隱性相關。舉個例子,用戶搜索「北京大學」,那麼他的訴求很明確,就是要找「北京大學」附近的酒店,這種屬於用戶明確告訴平臺本身的位置訴求。可是,若是用戶在本地搜索「七天」,即便用戶沒有明確說明酒店的具體位置,咱們也知道,用戶可能想找的是距離本身比較近的「七天酒店」,這時候就須要建模用戶的隱性位置訴求。dom

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

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

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

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

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

總體框架

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

  • 搜索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),在後臺給咱們留言。咱們每週會挑選出一位熱心小夥伴,送上一份精美的小禮品。快來掃碼關注咱們吧!

相關文章
相關標籤/搜索