在地理文本处理技术上,高德有哪些技巧?
簡介:?作者 | 暮兮
1、背景
地圖App的功能可以簡單概括為定位、搜索、導航三部分,分別解決在哪里,去哪里,和怎么去的問題。高德地圖的搜索場景下,輸入的是:地理相關的檢索query,用戶位置,App圖面等信息,輸出的是,用戶想要的POI。如何能夠更加精準地找到用戶想要的POI,提高滿意度,是評價搜索效果的最關鍵指標。
一個搜索引擎通常可以拆分成query分析、召回、排序三個部分,query分析主要是嘗試理解query表達的含義,為召回和排序給予指導。
地圖搜索的query分析不僅包括通用搜索下的分詞,成分分析,同義詞,糾錯等通用NLP技術,還包括城市分析,wherewhat分析,路徑規劃分析等特定的意圖理解方式。
常見的一些地圖場景下的query意圖表達如下:
query分析是搜索引擎中策略密集的場景,通常會應用NLP領域的各種技術。地圖場景下的query分析,只需要處理地理相關的文本,多樣性不如網頁搜索,看起來會簡單一些。但是,地理文本通常比較短,并且用戶大部分的需求是唯一少量結果,要求精準度非常高,如何能夠做好地圖場景下的文本分析,并提升搜索結果的質量,是充滿挑戰的。
2、整體技術架構
搜索架構
類似于通用檢索的架構,地圖的檢索架構包括query分析,召回,排序三個主要部分。先驗的,用戶的輸入信息可以理解為多種意圖的表達,同時下發請求嘗試獲取檢索結果。后驗的,拿到每種意圖的檢索結果時,進行綜合判斷,選擇效果最好的那個。
query分析流程
具體的意圖理解可分為基礎query分析和應用query分析兩部分,基礎query分析主要是使用一些通用的NLP技術對query進行理解,包括分析,成分分析,省略,同義詞,糾錯等。應用query分析主要是針對地圖場景里的特定問題,包括分析用戶目標城市,是否是where+what表達,是否是從A到B的路徑規劃需求表達等。
整體技術演進
在地理文本處理上整體的技術演進經歷了規則為主,到逐步引入機器學習,到機器學習全面應用的過程。由于搜索模塊是一個高并發的線上服務,對于深度模型的引入有比較苛刻的條件,但隨著性能問題逐漸被解決,我們從各個子方向逐步引入深度學習的技術,進行新一輪的效果提升。
NLP領域技術在最近幾年取得了日新月異的發展,bert,XLNet等模型相繼霸榜,我們逐步統一化各個query分析子任務,使用統一的向量表示對進行用戶需求進行表達,同時進行seq2seq的多任務學習,在效果進一步提升的基礎上,也能夠保證系統不會過于臃腫。
本文就高德地圖搜索的地理文本處理,介紹相關的技術在過去幾年的演進。我們將重點介紹搜索引擎中一些通用的query分析技術,包括糾錯,改寫和省略以及地圖場景中特有query分析技術,包括城市分析,wherewhat分析,路徑規劃。
3、通用query分析技術演進
3.1 糾錯
在搜索引擎中,用戶輸入的檢索詞(query)經常會出現拼寫錯誤。如果直接對錯誤的query進行檢索,往往不會得到用戶想要的結果。因此不管是通用搜索引擎還是垂直搜索引擎,都會對用戶的query進行糾錯,最大概率獲得用戶想搜的query。
在目前的地圖搜索中,約有6%-10%的用戶請求會輸入錯誤,所以query糾錯在地圖搜索中是一個很重要的模塊,能夠極大的提升用戶搜索體驗。
在搜索引擎中,低頻和中長尾問題往往比較難解決,也是糾錯模塊面臨的主要問題。另外,地圖搜索和通用搜索,存在一個明顯的差異,地圖搜索query結構化比較突出,query中的片段往往包含一定的位置信息,如何利用好query中的結構化信息,更好地識別用戶意圖,是地圖糾錯獨有的挑戰。
3.1.1 常見錯誤分類
(1) 拼音相同或者相近,例如: 盤橋物流園-潘橋物流園
(2) 字形相近,例如: 河北冒黎-河北昌黎
(3) 多字或者漏字,例如: 泉州州頂街-泉州頂街
3.1.2 糾錯現狀
原始糾錯模塊包括多種召回方式,如:
拼音糾錯:主要解決短query的拼音糾錯問題,拼音完全相同或者模糊音作為糾錯候選。
拼寫糾錯:也叫形近字糾錯,通過遍歷替換形近字,用query熱度過濾,加入候選。
組合糾錯:通過翻譯模型進行糾錯替換,資源主要是通過query對齊挖掘的各種替換資源。
組合糾錯翻譯模型計算公式:
其中p(f)是語言模型,p(f|e)是替換模型。
問題1:召回方式存在缺陷。目前query糾錯模塊主要召回策略包括拼音召回、形近字召回,以及替換資源召回。對于低頻case,解決能力有限。
問題2:排序方式不合理。糾錯按照召回方式分為幾個獨立的模塊,分別完成相應的召回和排序,不合理。
3.2 技術改造
3.2.1 改造1:基于空間關系的實體糾錯
原始的糾錯主要是基于用戶session挖掘片段替換資源,所以對于低頻問題解決能力有限。但是長尾問題往往集中在低頻,所以低頻問題是當前的痛點。
地圖搜索與通用搜索引擎有個很大的區別在于,地圖搜索query比較結構化,例如北京市朝陽區阜榮街10號首開廣場。我們可以對query進行結構化切分(也就是地圖中成分分析的工作),得到這樣一種帶有類別的結構化描述,北京市【城市】朝陽區【區縣】阜榮街【道路】10號【門址后綴】首開廣場【通用實體】。
同時,我們擁有權威的地理知識數據,利用權威化的地理實體庫進行前綴樹+后綴樹的索引建庫,提取疑似糾錯的部分在索引庫中進行拉鏈召回,同時利用實體庫中的邏輯隸屬關系對糾錯結果進行過濾。實踐表明,這種方式對低頻的區劃或者實體的錯誤有著明顯的作用。
基于字根的字形相似度計算:上文提到的排序策略里面通過字形的編輯距離作為排序的重要特征,這里我們開發了一個基于字根的字形相似度計算策略,對于編輯距離的計算更為細化和準確。漢字信息有漢字的字根拆分詞表和漢字的筆畫數。
將一個漢字拆分成多個字根,尋找兩個字的公共字根,根據公共字根筆畫數來計算連個字的相似度。
3.2.2 改造2:排序策略重構
原始的策略召回和排序策略耦合,導致不同的召回鏈路,存在顧此失彼的情況。為了能夠充分發揮各種召回方式的優勢,急需要對召回和排序進行解耦并進行全局排序優化。為此我們增加了排序模塊,將流程分為召回和排序兩階段。
模型選擇
對于這個排序問題,這里我們參考業界的實踐,使用了基于pair-wise的gbrank進行模型訓練。
樣本建設
通過線上輸出結合人工review的方式構造樣本。
特征建設
(1) 語義特征。如統計語言模型。
(2) 熱度特征。pv,點擊等。
(3) 基礎特征。編輯距離,切詞和成分特征,累積分布特征等。
這里解決了糾錯模塊兩個痛點問題,一個是在地圖場景下的大部分低頻糾錯問題。另一個是重構了模塊流程,將召回和排序解耦,充分發揮各個召回鏈路的作用,召回方式更新后只需要重訓排序模型即可,使得模塊更加合理,為后面的深度模型升級打下良好的基礎。后面在這個框架下,我們通過深度模型進行seq2seq的糾錯召回,取得了進一步的收益。
3.3 改寫
糾錯作為query變換的一種方式的召回策略存在諸多限制,對于一些非典型的query變換表達,存在策略的空白。比如query=永城市新農合辦,目標POI是永城市新農合服務大廳。用戶的低頻query,往往得不到較好搜索效果,但其實用戶描述的語義與主poi的高頻query是相似的。
這里我們提出一種query改寫的思路,可以將低頻query改寫成語義相似的高頻query,以更好地滿足用戶需求多樣性的表達。
這是一個從無到有的實現。用戶表達的query是多樣的,使用規則表達顯然是難以窮盡的,直觀的思路是通過向量的方式召回,但是向量召回的方式很可能出現泛化過多,不適應地圖場景的檢索的問題,這些都是要在實踐過程中需要考慮的問題。
3.3.1 方案
整體看,方案包括召回,排序,過濾,三個階段。
1)召回階段
我們調研了句子向量表示的幾種方法,選擇了算法簡單,效果和性能可以和CNN,RNN媲美的SIF(Smooth Inverse Frequency)。向量召回可以使用開源的Faiss向量搜索引擎,這里我們使用了阿里內部的性能更好的的向量檢索引擎。
2)排序階段
樣本構建
原query與高頻query候選集合,計算語義相似度,選取語義相似度的TOPK,人工標注的訓練樣本。
特征建設
1.基礎文本特征
2.編輯距離
3.組合特征
模型選擇
使用xgboost進行分數回歸
3)過濾階段
通過向量召回的query過度泛化非常嚴重,為了能夠在地圖場景下進行應用,增加了對齊模型。使用了兩種統計對齊模型giza和fastalign,實驗證明二者效果幾乎一致,但fastalign在性能上好于giza,所以選擇fastalign。
通過對齊概率和非對齊概率,對召回的結果進行進一步過濾,得到精度比較高的結果。
query改寫填補了原始query分析模塊中一些低頻表達無法滿足的空白,區別于同義詞或者糾錯的顯式query變換表達,句子的向量表示是相似query的一種隱式的表達,有其相應的優勢。
向量表示和召回也是深度學習模型逐步開始應用的嘗試。同義詞,改寫,糾錯,作為地圖中query變換主要的三種方式,以往在地圖模塊里比較分散,各司其職,也會有互相重疊的部分。在后續的迭代升級中,我們引入了統一的query變換模型進行改造,在取得收益的同時,也擺脫掉了過去很多規則以及模型耦合造成的歷史包袱。
3.4 省略
在地圖搜索場景里,有很多query包含無效詞,如果用全部query嘗試去召回很可能不能召回有效結果。如廈門市搜"湖里區縣后高新技術園新捷創運營中心11樓1101室 縣后brt站"。這就需要一種檢索意圖,在不明顯轉義下,使用核心term進行召回目標poi候選集合,當搜索結果無果或者召回較差時起到補充召回的作用。
在省略判斷的過程中存在先驗后驗平衡的問題。省略意圖是一個先驗的判斷,但是期望的結果是能夠進行POI有效召回,和POI的召回字段的現狀密切相關。如何能夠在策略設計的過程中保持先驗的一致性,同時能夠在后驗POI中拿到相對好的效果,是做好省略模塊比較困難的地方。
原始的省略模塊主要是基于規則進行的,規則依賴的主要特征是上游的成分分析特征。由于基于規則擬合,模型效果存在比較大的優化空間。另外,由于強依賴成分分析,模型的魯棒性并不好。
技術改造
省略模塊的改造主要完成了規則到crf模型的升級,其中也離線應用了深度學習模型輔助樣本生成。
模型選擇:識別出來query哪些部分是核心哪些部分是可以省略的,是一個序列標注問題。在淺層模型的選型中,顯而易見地,我們使用了crf模型。
特征建設
term特征。使用了賦權特征,詞性,先驗詞典特征等。
成分特征。仍然使用成分分析的特征。
統計特征。統計片段的左右邊界熵,城市分布熵等,通過分箱進行離散化。
樣本建設
項目一期我們使用了使用線上策略粗標,外包細標的方式,構造了萬級的樣本供crf模型訓練。
但是省略query的多樣性很高,使用萬級的樣本是不夠的,在線上模型無法快速應用深度模型的情況下,我們使用了boostraping的方式,借助深度模型的泛化能力,離線構造了大量樣本。
使用了這種方式,樣本從萬級很容易擴充到百萬級,我們仍然使用crf模型進行訓練和線上應用。
在省略模塊,我們完成了規則到機器學習的升級,引入了成分以外的其他特征,提升了模型的魯棒性。同時并且利用離線深度學習的方式進行樣本構造的循環,提升了樣本的多樣性,使得模型能夠更加接近crf的天花板。
在后續深度模型的建模中,我們逐步擺脫了對成分分析特征的依賴,對query到命中poi核心直接進行建模,構建大量樣本,取得了進一步的收益。
四、應用query分析技術演進
4.1 城市分析
在高德地圖的檢索場景下,從基礎的地圖數據索引、到在線召回、最終產品展示,均以市級別行政單位為基礎粒度。一次完整的檢索需求除了用戶輸入的query外,還會包含用戶的圖面城市以及用戶位置城市兩個城市信息。
通常,大多數的搜索意圖都是在圖面或者用戶位置城市下,但是仍存在部分檢索意圖需要在其他城市中進行,準確的識別出用戶請求的目標城市,是滿足用戶需求的第一步,也是極其重要的一步。
在query分析策略流程中,部分策略會在城市分析的多個結果下并發執行,所以在架構上,城市分析的結果需要做到少而精。同時用戶位置城市,圖面城市,異地城市三個城市的信息存在明顯差異性,不論是先驗輸出置信度,還是用后驗特征做選擇,都存在特征不可比的問題。
在后驗意圖決策中,多個城市都有相關結果時,單一特征存在說服力不足的問題,如何結合先驗置信度和后驗的POI特征等多維度進行刻畫,都是我們要考慮的問題。
原始的城市分析模塊已經采用先驗城市分析和后驗城市選擇的總體流程:
但是原始的策略比較簡陋,存在以下問題:
問題1:先驗和后驗兩部分均基于規則,效果不好并且可維護性差;
問題2:特征體系存在缺陷。原始的城市分析僅使用query級的特征,包括點擊,session改寫,query和城市共現等,對于低頻query處理得不好。
4.1.1 技術改造
1)改造1:城市分析
方案
城市分析是一個輕召回重選擇的問題,我們將城市分析設計為召回+選擇的兩階段任務。
召回階段,我們主要從query和phrase兩種粒度挖掘特征資源,而后進行候選城市歸并。
排序階段,需要對候選城市進行判斷,識別是否應為目標城市,用gbdt進行二分類擬合。
樣本構建
樣本方面,我們選擇從搜索日志中隨機抽取,簡單清洗后,進行人工標注。構造樣本時存在本異地分樣本分布不均的問題,本地需求遠遠多于異地,這里需要剔除本地和異地相關的特征,避免模型學偏。
特征體系
主要特征包括:
query級特征:如用戶在特定query&city下的點擊;
phrase級特征:類比于query級的特征,在更細粒度下進行統計;
組合特征:為了克服單一特征表征能力不足的問題,這里我們進行了一些人工特征組合。
2)改造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=嘉年華西草田,善興寺小寨,逆序的表達如果不能正確識別,效果可能很差。
4.2.1 現狀與問題
1)現狀
切分:wherewhat模塊在成分分析模塊下游,主要依靠了成分分析的特征。對于一些比較規整的query,通過成分分析組合的pattern來解決,對于一些中長尾的query,通過再接入一個crf模型進行ww標注。
選擇:基于人工規則進行意圖的判斷和選擇。
問題1:切分模型簡陋。基于crf的切分模型使用特征單一,對成分特征依賴嚴重,處于黑盒狀態無法分析;
問題2:后驗意圖判斷,規則堆砌,不好維護;
問題3:逆序問題表現不好。由于query的語料大部分是正序的,模型在小比例的逆序query上表現不好。
2)技術改造
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等定向的問題,如何能夠通過定向優化解決這些策略的死角,提高系統的容錯能力,也是我們目前需要考慮的問題。
地圖搜索雖然是個垂類搜索,但是麻雀雖小五臟俱全,并且有地圖場景下很多有特色的的難點。未來我們需要繼續使用業界先進的技術,并且結合地理文本的特點進行優化,理解將更加智能化。
總結
以上是生活随笔為你收集整理的在地理文本处理技术上,高德有哪些技巧?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业云上安全事件突发,这五个问题值得运维
- 下一篇: 蚂蚁金服共享智能技术实践:如何降低数据共