在 【上篇】
裡,我們介紹了地理文本處理技術在高德的整體演進,選取了幾個通用query分析的點進行了介紹。下篇中,我們會選取幾個地圖搜尋文本進行中特有的文本分析技術做出分析,包括城市分析,wherewhat分析,路徑規劃,并對未來做一下展望。
四、query分析技術演進
4.1 城市分析
在高德地圖的檢索場景下,從基礎的地圖資料索引、到線上召回、最終産品展示,均以市級别行政機關為基礎粒度。一次完整的檢索需求除了使用者輸入的query外,還會包含使用者的圖面城市以及使用者位置城市兩個城市資訊。
通常,大多數的搜尋意圖都是在圖面或者使用者位置城市下,但是仍存在部分檢索意圖需要在其他城市中進行,準确的識别出使用者請求的目标城市,是滿足使用者需求的第一步,也是極其重要的一步。

在query分析政策流程中,部分政策會在城市分析的多個結果下并發執行,是以在架構上,城市分析的結果需要做到少而精。同時使用者位置城市,圖面城市,異地城市三個城市的資訊存在明顯差異性,不論是先驗輸出置信度,還是用後驗特征做選擇,都存在特征不可比的問題。
在後驗意圖決策中,多個城市都有相關結果時,單一特征存在說服力不足的問題,如何結合先驗置信度和後驗的POI特征等多元度進行刻畫,都是我們要考慮的問題。
原始的城市分析子產品已經采用先驗城市分析和後驗城市選擇的總體流程
- 問題1:先驗和後驗兩部分均基于規則,效果不好并且可維護性差;
- 問題2:特征體系存在缺陷。原始的城市分析僅使用query級的特征,包括點選,session改寫,query和城市共現等,對于低頻query處理得不好。
技術改造
改造1:城市分析
方案
城市分析是一個輕召回重選擇的問題,我們将城市分析設計為召回+選擇的兩階段任務。
召回階段,我們主要從query和phrase兩種粒度挖掘特征資源,而後進行候選城市歸并。
排序階段,需要對候選城市進行判斷,識别是否應為目标城市,用gbdt進行二分類拟合。
樣本建構
樣本方面,我們選擇從搜尋日志中随機抽取,簡單清洗後,進行人工标注。構造樣本時存在本異地分樣本分布不均的問題,本地需求遠遠多于異地,這裡需要剔除本地和異地相關的特征,避免模型學偏。
特征體系
主要特征包括:
- query級特征:如使用者在特定query&city下的點選;
- phrase級特征:類比于query級的特征,在更細粒度下進行統計;
- 組合特征:為了克服單一特征表征能力不足的問題,這裡我們進行了一些人工特征組合。
改造2:城市選擇
城市選擇在整體的意圖決策中處于下遊,多種意圖先在城市内部PK,然後城市互相PK。城市選擇問題可以了解為多個城市間的排序問題,這裡我們使用ltr進行城市選擇的模組化。
使用随機query的多個城市意圖結果作為樣本,每次檢索隻有1個展示城市,因而每次隻需要從候選城市中選擇目标作為正樣本,其他候選城市均作為負樣本,與目标城市構成pair對。
特征建構
- 先驗特征。如城市分析部分輸出的置信度;
- 文本特征。一些基礎的文本相關性特征;
- 點選特征。如不同意圖城市中的點選強度;
- 意圖特征。一些特征可能影響使用者的城市傾向,如使用者位置與首位POI距離。
相比原始的城市分析和城市選擇,兩個子產品全部實作機器學習化,在惡劣badcase顯著降低的同時,可維護性大幅提高。在後續的模組化中,我們将城市分析作為一個上層應用任務,通過多任務的方式接入到query分析的統一模型中來,降低了特征間的耦合,同時實作進一步的效果提升。
4.2 wherewhat分析
地圖場景下的query經常包含多個空間語義片段的描述,隻有正确識别query中的核心部分做what用于召回,同時用空間描述部分做where進行限定,才能夠得到使用者想要的POI。如query=北京市海澱區五道口肯德基,what=肯德基,是泛需求。query=南京市雨花台區闆橋街道新亭大街與新湖大道交界口灣景,what=灣景,是精确需求。這種在A附近找B或者在A範圍内找B的需求我們把它稱作wherewhat需求,簡稱ww。
wherewhat意圖分析主要包括先驗和後驗兩個部分。先驗要做wherewhat切分,是一個序列标注問題,标注出query中的哪些部分是where哪些部分是what,同時給出where的空間位置。後驗要做意圖選擇,選擇是否展示wherewhat意圖的結果,可以轉化成分類或者排序問題。
wherewhat體系的主要難點在ww切分上,不僅要應對其他query分析子產品都要面對的低頻和中長尾問題,同時還要應對ww意圖了解獨特的問題。像語義模糊,比如北京歡樂谷公交站,湧邊村牌坊這樣的query該切還是不該切,結果差異很大。像語序變換,如query=嘉年華西草田,善興寺小寨,逆序的表達如果不能正确識别,效果可能很差。
現狀與問題
現狀
切分:wherewhat子產品在成分分析子產品下遊,主要依靠了成分分析的特征。對于一些比較規整的query,通過成分分析組合的pattern來解決,對于一些中長尾的query,通過再接入一個crf模型進行ww标注。
選擇:基于人工規則進行意圖的判斷和選擇。
- 問題1:切分模型簡陋。基于crf的切分模型使用特征單一,對成分特征依賴嚴重,處于黑盒狀态無法分析;
- 問題2:後驗意圖判斷,規則堆砌,不好維護;
- 問題3:逆序問題表現不好。由于query的語料大部分是正序的,模型在小比例的逆序query上表現不好。
crf問題分析工具
為了能夠分析原始crf切分模型的問題,我們基于crf++源碼開發了一個crf模型的分析工具,能夠将基于維特比算法的預測過程互動式的展示出來,将模型的黑盒分析變成白盒,分析出了一系列問題。
同時,crf問題分析工具也應用在了其他query分析子產品。
- 改造1:特征建設和模型優化
地理文本處理技術在高德的演進(下)
原始的模型依賴成分分析比較嚴重,由于成分分析特征本身存在準确率的問題,我們從使用者的query中總結了一些更加可靠的統計特征。
字首置信度
描述了片段做字首的占比。比如望京凱德茂,望京阜通,也有望京單獨搜,如果望京在字首中出現的占比很高,那說明這個片段做where的能力比較強。
字尾熵
描述了字尾的離散程度,如望京凱德茂,望京美食,望京首開,字尾很亂,也可以說明片段做where的能力。
what置信度
片段單獨搜占比,比如西門經常是在片段結尾出現,但是單獨搜比較少,那片段做what的能力比較弱。
以特征值域做橫軸,where和what,label作為縱軸,就得到了特征-label曲線。從這幾個特征的特征-label曲線來看,在某些區間下區分度還是很好的。由于crf模型隻接受離散特征,特征-label的曲線也指導了特征離散化的門檻值選擇。對于低頻query,我們通過低頻query中的高頻片段的統計資訊,也可以使我們的模型在低頻問題上表現更好。
- 改造2:後驗意圖選擇更新
将原始的堆砌的規則更新到gbdt機器學習模型,引入了先驗特征,在拿到一定收益的同時也使得整個體系更加合理。
- 改造3:魯棒性優化
将ww中逆序的問題抽象出來,可以歸納為query分析中的魯棒性問題。随着政策優化進入深水區,存在政策提升使用者不可感覺,攻擊case容易把系統打穿的問題。
如上圖,使用者變換query中where和what的順序,效果可能變差。變換下檢索城市,對于同一個知名景點,跳轉邏輯不一緻。使用者區劃輸錯,糾錯不能識别,效果變很差。這種子產品對非預期的query變換,或者更通用地叫做,對上下遊的特征擾動的承載能力,我們可以把它叫做子產品的魯棒性。
這裡我們設計了對于通用魯棒性問題解決的思路
在不引入複雜模型的前提下,通過建構ensemble的淺層模型來優化特定問題,降低了問題解決的成本。
對于ww逆序這個特定問題進行了特征複用用本複用,并且模型對外統一
效果上,新的模型在原始測試集效果持平,人工構造攻擊case集合準召明顯提升,目标case集合具有可觀的解決比例,驗證了魯棒性優化的思路是有效的。
這裡基本完成了對于ww體系的一個完整的更新,體系中的痛點基本都得到了解決。優化了切分模型,流程更加合理。意圖決策上完成了規則到機器學習模型的更新。在優化或者引入淺層機器學習模型的同時盡可能發揮淺層模型的潛力,為從淺層模型更新為深度模型打下基礎。
在後續的模組化中我們使用字粒度lstm+crf模型代替現有的crf模型,徹底擺脫了對成分分析特征的依賴,同時通過融合知識資訊到lstm+crf模型,進一步提升效果。
4.3 路徑規劃
在高德地圖的搜尋場景中,一類使用者搜尋意圖為路徑規劃意圖。例如,當使用者在高德地圖App的搜尋框中輸入“從回龍觀到來廣營”,點選搜尋按鈕後,搜尋服務能識别出使用者的搜尋意圖為路徑規劃,并識别出使用者描述的起點為“回龍觀”,終點為“來廣營”,進而檢索到對應的POI點給下遊服務做出路線的規劃。
從使用者輸入中識别路徑規劃意圖,并提取出對應的起終點,這是一個典型的NLP任務。早期的路徑規劃子產品使用的是模闆比對的方式,這種方式開發成本低,能解決大部分常見的路徑規劃問題,如上面這種“從A 到B”類的問題。
但随着業務的不斷發展,子產品需要解決的問題越來越複雜,比如“坐地鐵從西直門到大興狼垡坐到哪裡下車”,“廣東到安徽經過哪幾個城市”,“去往青島的公共汽車有嗎” 等等各種非“從A到B”模式的問題。由于模闆比對方式沒有泛化能力,隻能通過不斷增加模闆來解決,使得子產品越來越沉重難以維護。
優化
由于線上所有的搜尋query都會經過路徑規劃子產品,若是讓模型去處理所有的query,那麼模型不僅要解決意圖識别問題(召回類問題),又要解決槽位提取問題(準确類問題),對于模型來說是很難同時将這兩個任務學好的。是以,我們采取了以下三段式:
模型前使用關鍵字比對政策進行簡單意圖識别,過濾掉大部分非路徑規劃query;模型處理疑似路徑規劃的query,進行槽位提取;模型後再對模型結果進行進一步檢驗。
樣本和特征
機器學習的樣本一般來源于人工标注,但人工标注耗時長成本高。是以我們采取的是自動标注樣本方式。通過富集路徑規劃模式,如“從A怎麼乘公交到B”,再用清洗後的随機query按照實際起終點的長度分布進行起終點替換,生成大量标注樣本。
特征方面,我們使用了成分分析特征及含有關鍵字的POI詞典特征。它們主要在如“從這裡到58到家”這類起終點 中含有關鍵字的query上起着區分關鍵字的作用。
模型訓練
crf算法是業界常用的為序列标注任務建立機率圖模型的算法。我們選取的也是crf算法。
效果評估
在驗證集準确率召回率,以及随機query效果評比上,名額都有了明顯的提升。
對于路徑規劃這樣一個定向的NLP任務,使用crf模型完成了從規則到機器學習模型的更新。作為一個應用層任務,路徑規劃也很容易被遷移到seq2seq的多任務學習模型中來。
五、展望
過去兩年随着機器學習的全面應用,以及基于合理性進行的多次效果疊代,目前的地理文本處理的效果優化已經進入深水區。我們認為将來的優化重點在攻和防兩方面。
攻主要針對低頻和中長尾問題。在中高頻問題已經基本解決的前提下,如何能夠利用深度學習的技術進行地理文本處理seq2seq的統一模組化,在低頻和中長尾問題上進行進一步優化,獲得新一輪的效果提升,是我們目前需要思考的問題。另外,如何更好地融合知識資訊到模型中來,讓模型能夠具有接近人的先驗判斷能力,也是我們亟待提升的能力。
防主要針對系統的魯棒性。如使用者的非典型表達,變換query等定向的問題,如何能夠通過定向優化解決這些政策的死角,提高系統的容錯能力,也是我們目前需要考慮的問題。
地圖搜尋雖然是個垂類搜尋,但是麻雀雖小五髒俱全,并且有地圖場景下很多有特色的的難點。未來我們需要繼續使用業界先進的技術,并且結合地理文本的特點進行優化,了解将更加智能化。