地圖POI類別標籤體系建設實踐

amap_tech發表於2019-08-27

導讀

POI是“Point of interest”的縮寫,中文可以翻譯為“興趣點”。在地圖上,一個POI可以是一棟房子、一個商鋪、一個公交站、一個湖泊、一條道路等。在地圖搜尋場景,POI是檢索物件,等同於網頁搜尋中的網頁。在地圖客戶端上,使用者選中一個POI,會有一個懸浮的氣球指向這個POI。

如上圖左邊,這家商場內的屈臣氏是一個POI;而所謂類別標籤,就是在類別維度對POI屬性的一種概括,比如,屈臣氏的類別標籤化妝品,而屈臣氏所坐落的凱德mall,類別標籤是商場;右側則是商場query搜尋召回的一系列POI,都具有和query相匹配的類別屬性。

上圖也展示了類別標籤的兩種主要使用場景:為使用者提供豐富資訊和支援決策,一方面在前端為使用者顯示更豐富的資訊,另一方面支援搜尋的類別搜尋需求,主要是在地圖場景query和POI雙方都具有豐富的多義表達,透過傳統的文字匹配引擎或者簡單的同義詞泛化是難以達到目的的,因此挖掘標籤作為召回和排序依據。

我們的類目體系建設主要依據以下幾點:

  • 使用者實際的query表達,主要為了支援使用者的搜尋需求;

  • 真實世界的客觀類目分佈,以及pm對該分佈的認知;

  • 不同標籤間的從屬、並列關係。

最終每個大類將構建一個多層的多叉樹體系,比如購物類別的劃分:

類別標籤建設的難點

我們的目標是打標,就是將POI對映到上面類目樹體系的各個節點上,很顯然這是一個分類問題,但又不是一個單純的分類問題:

  • 多標籤問題:屈臣氏打上化妝品的標籤,是一個一對一的對映;而部分POI,可能同時具有多個標籤,比如xx傢俱店,打上傢俱店標籤的同時,必須打上其父節點家居建材標籤。整體上,這是一個多標籤問題,而不是多分類問題;

  • 文字相關問題:大多數的POI具有比較直觀的文字標題,比如小牛電動車、海爾專賣店、東英茗茶、熙妍精衣、新生貴族,透過名稱文字分析,可以預測出比較正確的結果。另一方面,又不是純文字問題,比如蘋果專賣,僅從文字無法確認是一個手機店,還是一個水果店;還有一些表達,比如老五批發,低頻表達或者不含類別資訊,則需要引入其他特徵來進行解決;

  • 綜合性問題:演算法可能解決主要問題,但現實世界的複雜,透過單純的演算法是難以完全覆蓋的,比如酒吧中夜店和清吧的區分,三甲醫院、汽車4S店的打標,低頻品牌的識別等,透過受限的樣本和特徵無法盡數解決,但又無法置之不理。

此外,應用方對於標籤的準召和產出速率也有較高的要求:打標準確率低,則可能導致使用者搜尋時召回錯誤POI;覆蓋率低,則可能導致使用者期待的結果被漏掉;而待建設的大分類有20+,同時每個大分類有數十個子標籤,大小標籤總量上千。則必須使用高速高效、準召均有保障的方法進行打標,才能有效落地收益。

綜上,我們要解決的類別標籤打標的主要問題,是一個多標籤分類問題,主要使用文字進行識別,但有必要引入其他非文字特徵或手段,才能比較完滿的解決。

技術方案

整體方案設計

如圖,為了高效完成打標,我們設計了主要的流程模組,具體描述如下:

  • 特徵工程:文字特徵解決最主要的打標問題,但同時地圖場景下POI文字偏短,長尾分佈廣泛,具有較多的低頻文字或者完全不含類目資訊的低頻品牌等,而評論、簡介等長文字描述往往偏於高頻,而難點在於解決低頻。因此特徵設計上,儘可能使用一些通用特徵,比如POI名稱、typecode(生產方維護的另一套分類體系)、來源類別(資料提供方的原始零件類別)、品牌等通用特徵;對於高頻專有特徵或資料,一般不在通用模型中進行識別;

  • 樣本工程:樣本的挖掘和清洗、以及模型的設計也是旨在解決通用性的打標問題,POI表達的多樣性,而同時標籤數量極多,導致需要的樣本量也極大,標註成本較高時,必須考慮人工標註之外的樣本來源;

  • 分類模型:單純的文字分類模型,不能解決非文字的問題,同時多標籤的問題,也不能單純使用多分類模型來解決;我們設計了多種貼合業務的模型改造工作;

  • 多路融合:分類模型能解決主要的問題,但不是全部問題。在地圖場景下,總有些演算法之外的待解問題,如5A景點、三甲醫院,以及各類品牌,模型難以盡數處理。我們設計多路打標,如品牌庫對品牌效果進行兜底,引入外部資源批次解決非演算法問題,引入專項挖掘解決非通用的打標類別等等……總體上對模型之外的問題引入外部知識輔助進行打標,從整體上收斂問題。

後面將重點介紹業務的主要難點,在樣本和模型上的主要工作。

樣本工程

樣本來源&清洗

樣本方面,經過一些實驗論證,標籤數量多,每個標籤需要的樣本量大,人工標註幾乎不可能滿足要求,因此考慮主要使用點選日誌和一些現成的外部資源:

  • 點選日誌資料量大,能夠迴圈產生,同時反映了使用者最直接的意圖;缺點是含有的噪聲大,同時使用者點選往往偏向於高頻,低頻表達較為稀缺;

  • 外部資源資料量小,但多樣性較好,能夠彌補點選資料在低頻表達不足的問題。

透過引入這兩方面的樣本,我們很快得到了數百萬的原始樣本,這麼大量級的樣本,即使清洗依然是一個及其巨大的工作量,為了高效地清洗樣本,我們設計了結合主動學習的兩級模式:

在兩方面的初始樣本引入後:

  • 首先對資料進行抽樣清洗,並將清洗過程抽象為業務規則,進行全域性清洗和迭代;

  • 當整體系統且明顯的噪聲趨於收斂後,我們透過對剩餘資料進行劃分,每次抽取部分資料建模,對另一部分資料進行識別,然後對識別不好的一部分資料進行人工標註;如此反覆迭代多輪。

透過一種類似主動學習的方式,使人工標註的價值最大化,避免低資訊量重複樣本的反覆標註造成人力浪費。 下面具體介紹點選樣本的挖掘思路。

點選樣本挖掘

搜尋點選日誌凝聚了無數使用者的需求與智慧,大多數的搜尋業務都能從中挖掘最原始的訓練樣本。具體到當前的挖掘業務,首先要解決的問題是樣本表達形式的不一致問題。具體描述為:

點選資料:query -> POI 
需要樣本:tag -> POI 
解決方案:tag -> query -> POI

如下圖,要挖掘內衣的樣本集,人工定義了該標籤的對映的query集合seed query,再透過這個query集合去召回對應的click樣本,就可以直接作為標籤內衣的樣本。

在實際操作中,我們增加了seed query到泛化集合的對映,即由人工定義的高頻query集合泛化到一個更大的同義集合後,再由同義集合進行click樣本的召回,其出發點在於:

高頻的query主要點選集中於高頻的樣本,要解決的問題難點在於低頻表達的挖掘,因此對query進行從高頻到低頻的泛化,以期透過低頻query召回低頻的樣本表達,比如絲襪到休閒棉襪,內衣到維密、都市麗人等方面的擴充套件。

query泛化過程:

query的泛化,需要透過高頻集合獲得近義的低頻表達,同時又要保證不會過度的語義擴散,導致泛化集合偏離了標籤原本的語義。我們主要嘗試了以下方案:

  • word2vec:透過對點選或外部語料學習word粒度的向量表達,對query中的多個word進行maxpooling,得到query的向量表達,再透過query向量去全量集合中搜尋向量距離近的其他query。該方法的主要問題是透過word粒度的embedding刻畫的query表達,在泛化過程中不太受控,容易引入大量的噪聲,清洗難度大,同時存在顯著case的漏召。

  • 同義詞:該方法召回非常受限,且得到的query不一定符合使用者的自然表達。

  • Session上下文:地圖場景的session普遍較短,召回受限且語義有偏離,準召均不高。

  • 推薦方法:繼續考慮點選日誌的挖掘,將各個query比作user,點選的POI作為item,考慮引入推薦的思想進行相似query挖掘——即點選相同或相似POI的query具有某種程度上的相似性,而query和POI點選關係天然構成一個社交網路,由此參考了兩種基於圖的推薦方式:

  1. SimRank,透過query與POI間的點選關係形成二部圖,兩個節點間的相似度由他們共同關聯的其他所有點加權平均得到,透過反覆迭代多輪後,相似度趨於穩定,得到兩兩query間相似度;

a、b表示圖中的兩個節點,定義自相關度為1,即s(a, a)=1,I(a)、I(b)表示與ab相連的節點集合,對於不同的a、b,其相似度描述為:

  1. DeepWalk,是一種學習網路中節點的表示的新的方法,是把language modeling的方法用在了網路結構上,從而使用深度學習方式學習網路中節點間的關係表示。類似simrank方式,透過query與POI間的點選關係構成點選網路,在點選網路上進行隨機遊走,透過對遊走片段的學習,得到query的向量表達,再透過向量表達計算query的相似召回。

推薦方法的兩種方案中,simrank計算量極大,在小資料量上實驗經過了較長時間的迭代,而數千萬點選資料計算資源和計算時間都將變得極大,成本上不合算;而DeepWalk隨機遊走方式在實際測試中取得了較好的效果:

比如,原始query為塗料,泛化得到其子分類、品牌等,ETC可以得到一些地方性的命名錶達。

不同於將query分詞後學習其word粒度embedding表達,DeepWalk在這裡直接學習整個query,即Sentence的表達,避免了將query分詞為多個word再pooling過程中語義偏移;而且直接query粒度的表示學習,得到的挖掘結果更加符合線上的實際表達,便於我們後續召回點選POI樣本的操作;同時粗粒度的學習對網路節點間社會關係會有更優的保留。

整體上,透過query泛化步驟,樣本集合的低頻表達比例明顯提升。

模型設計與迭代

使用分類的方式解決打標問題,是業類相似場景的通用做法。具體到業務角度,我們需要模型解決的打標資料範疇主要分為四類:

  • 高頻字尾識別

  • 低頻字尾識別

  • 品牌識別

  • 非文字識別(typecode、來源類別等)

前三類可以使用純文字分類模型,但非文字特徵無法直接用文字模型進行整合;同時,樣本資料在前期具有噪聲大、分佈不均衡的特點,都需要兼顧。

分層多分類

前期使用多分類模型解決分類問題,對於每一個非葉節點構建一個多分類器,從根部開始構建,分到最後一級輸出為葉節點。其特點是直觀,和標籤體系比較匹配。

這種方式有比較明顯的缺陷:方案結構複雜不穩定,維護難,樣本組織相當繁雜;上級分類模型的錯漏,將層層影響下級的分類效果。

每個標籤二分類

業務前期受限於最佳化前的搜尋效果,樣本集有一定量的噪聲,同時體系在調研期間也會時常迭代,不斷最佳化,需要一個解釋性強、相容變化,同時又能直接支援多標籤的模型。

因此,我們嘗試了對每個標籤訓練二分類模型,待識別的POI經過所有的二分類模型預測後結果合併使用,再進行後續的業務邏輯建設,該方式較好地解決了業務多標籤的場景,避免同一POI多個標籤間的衝突。

在樣本方面,使用ovr方式組織樣本,樣本比例可調整(正負例比例、負例來源比例等),相容了業務樣本不均衡問題。

統一模型

單標籤的二分類模型具有良好的解釋性,以及每個標籤建模帶來的靈活性,很好匹配了業務的前期需求,迅速推進標籤效果落地,線上惡劣case大量收斂,同時較原來的人工專家規則方式,召回明顯提升的同時,效率也提升十倍以上。

前期為了短平快地推進業務,使用簡單二分類模型迅速解決了主要問題,隨著搜尋效果的不斷提升,業務上也有了更高的質量要求,而LR二分類模型依然存在一些問題:

  • 使用詞袋特徵,維度膨脹

  • 特徵選擇造成低頻特徵損失

  • 泛化效能一般,需要大量建設業務規則

  • 獨立建模,標籤間的關係識別不充分(父子、共現、互斥)

  • 負樣本大量降取樣,浪費樣本

  • 模型數量極多,維護成本高

為了達到更好的效果,深度模型的升級有了必要,深度文字分類,常用的模型有cnn、rnn以及基於attention的各種模型,而attention模型主要解決的是長文字的深層語義理解問題,我們業務場景需要解決的是短文字簡單語義的泛化問題,同時考慮到需要和非文字特徵結合,以及分類效率方面的考慮,我們選擇textCNN模型。

而textCNN是一個純文字的多分類模型,不能解決多標籤情況,也無法相容非文字特徵,同時樣本不均衡問題也導致小樣本類別學習不充分。為了匹配實際的業務,我們對原始的textCNN進行了業務改造,如圖:

原始textCNN對文字進行詞嵌入、卷積核池化後,直接進行softmax多分類,而在當前業務下:

  • 將文字表示經過池化後,拼接了外部的其他非文字特徵,對文字使用深度的特徵提取與表示,而簡單的非文字特徵使用類似wide&deep的方式接入,共同參與預測;

  • softmax只能輸出歸一化的預測結果,不適用與多標籤場景;透過改造輸出層,使用多路的sigmoid輸出,每一路輸出對應一個標籤的預測結果;

  • 對同一樣本多標籤的情況進行了壓縮,多個label合併為一個向量;

  • 重新設計損失函式,多分類交叉熵不適用於多個二分類輸出未歸一化的場景。

如此,解決了多標籤場景&非文字特徵接入的問題,同時使用深度模型取得更好的泛化效果。

另一方面,所有樣本在同一模型中訓練,原本樣本不均衡問題造成了一些負面影響。比如大類家居建材、服飾鞋包有數十萬的樣本,而勞保用品、美容美髮用品等標籤只有幾千樣本,在訓練時很容易直接丟棄對整體準確率影響較小的小樣本集。因此對每個樣本集計算權重:

ck為k類別的樣本數,h為平滑超參,效果上類別樣本數量越少,權重越大。將類別權重加入到損失函式:

λ1、λ2分別代表對文字特徵和非文字特徵的正則化約束比重因子。

經過改造和最佳化後:

以上幾個標籤間樣本數量差距極大,但分類效果都維持在一個比較高的準召率上。此外,我們還根據改造後的模型,開發了模型解釋工具。對於一些不符合預期的case,透過解釋工具,可以直接觀察:

  • 分類時起主要作用的因子,是文字特徵,還是非文字特徵,以及具體是哪個特徵及其value顯示;

  • 如果是文字特徵,顯示權重最大的若干個卷積視窗位置,以及具體視窗中每個term的權重

透過該工具可以在使用深度模型預測時,保持如同LR一般的解釋性,方便定位與迭代。

總體上經過以上textCNN的業務改造與迭代,隨機資料準確率提升5%以上,同時業務規則減少66%,同時在長尾case(低頻文字、品牌)上取得比較明顯的效果。

相關工作

前面主要介紹了我們在類別標籤建設方面的一些工作。

在另一方面,類別標籤在地圖搜尋中生效,則需要識別哪些query需要使用標籤進行召回。在前期,我們人工標註了高德地圖搜尋頭部query和標籤的對應關係。但人工的標註方式始終覆蓋有限:

  • 不能取得中低頻query的標籤召回收益,從而標籤利用率不夠高;

  • 對於應該使用標籤召回的query,如果因為未能識別而使用文字召回,也影響了線上的效果,降低使用者體驗,造成badcase。

因此,在完成體系建設後,我們另外建模,主要使用文字語義和點選方面的特徵,識別query和標籤的對應召回關係,即識別哪些query可以使用類別標籤召回,透過這一系列的工作,對中低頻的標籤召回進行了深挖,高德地圖中類別搜尋流量中使用標籤召回比例高達94%。

收益

標籤資料產出後,需要進行兩方面的評估:

  • 從輸出資料的質量上,即本身標籤的準確率和覆蓋率:

高質量的資料,不光利於搜尋的業務支撐,還利於我們的類別標籤體系在整個BU的推廣和落地。

  • 上線後對線上泛搜實際query的搜尋效果提升評估:

除了資料質量的評估,還會結合新的標籤資料對搜尋效果進行評估,即對新標籤體系和舊標籤體系的對照效果評估。在人工效果評估中,gsb效果上,每個大類的資料上線,都帶來了非常明顯的類別搜尋質量提升,從而讓搜尋更準確、更全面的輔助使用者決策。

小結

當前工作的重點在於使用通用特徵解決了主體的類別打標問題,對於通用特徵不可解的問題,往往透過外部知識、資源的建設方式解決,如品牌庫建設、A級景區資源收集等方式。

而實際上,使用通用特徵外,不通用特徵對於部分資料的分類效果提升應用並不充分,後續應該安排一系列的專項最佳化,比如:

  • 評論、簡介等特徵,應用一些Attention方法,可能取得比較好的補充效果;

  • POI圖片中往往隱含一些類別相關資訊,對圖片識別可以充分利用這些資訊;

  • 外部百科、知識圖譜等知識的引入,輔助中低頻品牌庫的建設等。

在業務閉環建設上還要持續,比如惡劣case的流轉與自動修復機制建設,新品牌、新標籤的發現等問題,以避免打標系統長期執行後的效果退化等。

無論機器學習還是外部資源輔助的方式,對於海量的長尾資料往往乏力,實際線上很多的POI特徵相當匱乏,只有一個簡單的名稱,從中很難準確預測其類別。如何引導使用者自己提交類別資訊,或者眾包方式完成類別標籤的標註,也是我們後續需要著重考慮的解決方案。

關注高德技術,找到更多出行技術領域專業內容



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69941357/viewspace-2655118/,如需轉載,請註明出處,否則將追究法律責任。

相關文章