地圖POI類別標籤體系建設實踐
導讀
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點選關係天然構成一個社交網路,由此參考了兩種基於圖的推薦方式:
- SimRank,透過query與POI間的點選關係形成二部圖,兩個節點間的相似度由他們共同關聯的其他所有點加權平均得到,透過反覆迭代多輪後,相似度趨於穩定,得到兩兩query間相似度;
a、b表示圖中的兩個節點,定義自相關度為1,即s(a, a)=1,I(a)、I(b)表示與ab相連的節點集合,對於不同的a、b,其相似度描述為:
- 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 畫像標籤體系構建與應用實踐
- 滴滴資料倉儲指標體系建設實踐指標
- 蘑菇街SRE體系建設實踐
- 如何構建標籤畫像工程體系及實現方案
- 標籤的最佳實踐
- 高精地圖資料應用分發引擎建設實踐地圖
- 高精地圖中地面標識識別技術歷程與實踐地圖
- vivo 服務端監控體系建設實踐服務端
- PostgreSQL構建通用標籤系統SQL
- 貨拉拉技術穩定性體系1.0建設實踐
- 一文詳解阿里雲可觀測體系下標籤最佳實踐阿里
- maven中的scope標籤類別詳解Maven
- 2.CNN圖片多標籤分類(基於TensorFlow實現驗證碼識別OCR)CNN
- 直播預約丨《指標體系建設實戰》第五期:指標體系構建方法與案例分享指標
- 直播預約丨《指標體系建設實戰》第四期:如何構建全面的指標管理體系指標
- 直播預約丨《指標體系建設實戰》第三期:指標平臺功能架構及落地實踐指標架構
- html標籤分類HTML
- JSTL標籤工具類JS
- 全鏈路壓測體系建設方案的思考與實踐
- 實踐 | 大型基金管理公司資料脫敏體系建設
- 企業指標設計方法:構建高效指標體系指標
- 使用者標籤體系的設計和效果評估!
- 馬蜂窩大交通業務質量體系建設初步實踐
- 網易雲音樂低程式碼體系建設思考與實踐
- matplotlib畫圖教程,設定座標軸標籤和間距
- 貨拉拉王海華:大資料安全體系建設實踐和思考大資料
- 內容分類擴充套件性標籤設計套件
- 百度地圖POI爬蟲(Python3)地圖爬蟲Python
- 百度地圖POI爬取寫入TXT地圖
- 愛奇藝短視訊智慧標籤生成實踐
- 標籤管理體系之業務應用
- 信創雲安全建設實踐|構建更加智慧、安全的政務雲服務體系
- [平臺建設] HBase平臺建設實踐
- 騰訊地圖Flutter業務實踐——地圖SDK Flutter外掛實現(一)地圖Flutter
- vivo 推送系統的容災建設與實踐
- 雲音樂預估系統建設與實踐
- JavaScript各類標籤的使用JavaScript
- 概念篇-多分類多標籤