先上效果

圖1 - 二手屬性抽取算法效果Demo(個護美妝)
背景
閑魚作為一款C2X的app,站在商品釋出的角度,閑魚商品相對于淘寶商品的特點有:
-
輕釋出導緻商品資訊不足
閑魚采用圖文描述的輕釋出模式,迎合了使用者快速釋出的體驗,但也導緻了商品結構化資訊不足的問題。如果平台希望更了解商品到底是什麼,就需要算法去識别使用者描述的圖檔和文本。
- 商品具有獨特的二手屬性
-
- 不同于淘寶新品的一手屬性(例如品牌、型号、規格參數等),二手屬性指的是在商品入手一段時間後,能夠反映商品折損/保值情況的屬性,比如商品的【使用次數】、【購買管道】、【包裝/配件是否完整】等。
- 不同類目有該類目獨特的二手屬性,比如個護美妝有【保存期限】,手機有【螢幕外觀】、【拆修情況】,服裝類有【是否下過水】等。
問題和難點
二手屬性抽取在NLP領域屬于資訊抽取(Information Extraction)問題,通常的做法是拆解為命名實體識别(NER)任務和文本分類(Text Classification)任務。
二手屬性抽取任務的難點有:
- 不同的類目、不同的二手屬性/屬性簇,需要建構不同的模型。
- 如果使用有監督學習(Bert家族),打标工作會非常的繁重,開發周期會變得很長。
解決方案
方法論
在當今NLP環境,依舊是Bert家族(或Transformer衍生的各種算法)大行其道,霸榜GLUE、CLUE等各大NLP榜單,資訊抽取任務也不例外,是以筆者在本方案中的某些場景也使用了Bert家族。不過筆者認為,沒有一種算法在各種場景下都是全能的,隻有在給定領域、指定場景下最适用的算法。此外,筆者總結了自己的一套屬性抽取的方法論:
- 句式相對固定,或者句式受模闆限制,如文本描述模闆是典型的時間+地點+人物+事件(某事某地某人做了啥事),用NER,建議方法:CRF、BiLSTM+CRF、Bert家族、Bert家族+CRF等。
- 句式不固定,但領域/場景關鍵詞相對固定,或者有一些關鍵詞模闆、俗稱、行話等,用文本分類:
-
- 近義詞、近義表述不是特别多的情況(≤幾十種到上百種),關鍵詞呈對數正态分布/指數分布(即有很多高頻且集中的關鍵詞),建議方法:正規表達式+規則。
- 近義詞、近義表述非常多的情況(≥幾百種到上千種),典型的如地名識别,建議方法:用Bert家族。
- 句式和詞語都不固定,典型的如社交評論/聊天的情感分析,建議方法:用Bert家族。
方案架構
圖2 - 二手屬性抽取方案架構圖
NLP任務
如前所述,将不同的二手屬性識别需求拆解為文本多分類、多标簽分類以及NER任務。
- 文本多分類:即“n選1”問題,比如根據文本判斷商品是否包郵(二分類)。
- 多标簽分類:即同時進行多個“n選1”問題,比如同時判斷某手機商品的螢幕外觀(好/中/差)和機身外觀(好/中/差)。多标簽分類通常的做法是對不同标簽共享網絡層,并将損失函數以一定權重疊加,由于多個标簽之間有一定程度的聯系,效果有時候會比做多個單獨的“n選1”問題更好,同時由于是多個屬性(屬性簇)一起模組化,在訓練和推斷的時候也會更省事。
- NER:即命名實體識别。
模組化方法
1. 人工打标階段
由于打标的人工成本比較高,需要設法利用集團的AliNLP進行輔助。方法是,首先利用AliNLP的電商NER模型對輸入文本進行解析。然後進行拆解,對屬于NER任務的二手屬性,如保存期限/保修期/容量/使用次數/服裝風格等,可以直接定位到相關詞性或實體的關鍵詞進行BIO标注;對屬于分類任務的其它二手屬性,則可以在電商NER的分詞結果基礎上打标,提高人工标注的效率。
2. 算法訓練階段
此為方案核心,本方案訓練算法主要通過3種途徑:
(1)使用Albert-Tiny:模組化采用主流對預訓練+finetune的方案。由于該模型推斷速度更快,用于對QPS和響應要求非常高的實時線上場景。對于NER任務也可以嘗試在網絡最後面接一層CRF或不接。
Albert:Albert意指“A lite bert”,名副其實,它的優點在訓練速度快。
Albert的源碼相比Bert的源碼基本如出一轍,但網絡結構有幾點重要的差別:
- Word Embedding層做了因式分解,在詞向量上大大減少了參數量。設詞表大小為V,詞向量長度為H,對Bert,詞向量參數量為VH;對Albert,先把詞向長度量縮減為E,再擴充為H,參數量為VE+E*H,由于E遠小于H,H遠小于V,用于訓練的參數量得到銳減。
- 跨層參數共享:以albert-base為例,albert會在12層之間共享每層的attention參數或全連接配接層ffn的參數,預設是兩者都共享。源碼中通過tenorflow.variable_scope的reuse參數可以輕松實作。參數共享進一步減少了需要訓練的參數量。
除此之外,Albert還有一些訓練任務和訓練細節上的優化,此處按下不表。
Albert依據網絡深度不同分為:
•Albert-Large/xLarge/xxLarge:24層•Albert-Base:12層•Albert-Small:6層•Albert-Tiny:4層
一般來說,層數越多,訓練和推斷耗時都會越久。考慮到線上部署的實時性要求更快的推斷速度,本方案選擇了最小的Albert-Tiny。其中文推斷速度相對bert-base提高約10倍,且精度基本保留(資料引用自github/albert_zh[1])。
(2)使用StrutBert-Base:模組化采用主流對預訓練+finetune的方案。經測算,在二手屬性識别上,它比Albert-Tiny準确率相對提升約1%到1.5%,可用于離線T+1場景。對于NER任務也可以嘗試在網絡最後面接一層CRF或不接。
StructBert:為阿裡自研算法,優點在精度高,GLUE榜單[2]上已經排到第3名。
StrutBert論文相比Bert的主要優化點在預訓練任務的兩個目标上,如圖3所示:
圖3 - StrutBert的預訓練任務目标(引用自StrutBert論文)
- Word Structural Objective:StrutBert在Bert的MLM任務基礎上,加上了打亂詞序并迫使其重構正确詞序的任務:論文中是随機抽取一個三元詞組(trigram)進行打亂,然後加上了如下公式作為MLM損失函數的限制。StrutBert的這個靈感也許來自于網上的一個段子:“研表究明,漢字序順并不定一影閱響讀,事證明明了當你看這完句話之後才發字現都亂是的”。
圖4 - Word Structural 的目标函數(引用自StrutBert論文)
- Sentence Structural Objective:與Bert的NSP任務不同,對一組句子對(A,B),它不是預測B是否A的下一句(二分類),而是去預測B是A的下一句、上一句還是随機抽取的(三分類)。對于(A,B)這樣的句子對,它在訓練集中讓這三種情況出現的頻率各為1/3。
本方案之是以選擇StrutBert,是因為集團内有該算法在電商領域專屬的預訓練模型(接口),它依據網絡深度不同分為:
•StrutBert-Base:12層•StrutBert-Lite:6層•StrutBert-Tiny:4層
在離線T+1場景下,追求精度更高而對實時性無太大要求,是以本方案選擇了StrutBert-Base。
(3)使用正規表達式:優點:速度最快,比Albert-Tiny還快10-100倍以上;且在許多句式和關鍵詞相對固定的二手屬性上,準确率比上面兩種算法更高;且易于維護。缺點:非常依賴業務知識、行業經驗和資料分析對大量正則模式進行梳理。
3. 規則修正階段
-
識别結果歸一化:對于NER任務,許多識别出來的結果不能直接使用,需要做“歸一化”,例如某件男裝衣服的尺碼識别出來為“175/88A”,那麼應該自動映射到“L碼”。
-
某些二手屬性之間可能會存在沖突或依賴,是以在算法識别之後,需要對識别結果依據業務規則進行一定修正。比如某商品賣家聲稱是“全新”,但是同時又表明“僅用過3次”,那麼“全新”會自動降級為“非全新”(99新或95新,不同類目分級略有不同)。
算法部署
- 離線T+1場景:通過ODPS(現名MaxCompute)+UDF的方式進行部署,即算法會通過Python寫成UDF腳本,模型檔案則作為資源上傳到ODPS上。
- 線上實時場景:模型通過PAI-EAS進行分布式部署,資料互動通過iGraph(一種實時圖資料庫)和TPP完成。
算法評估
對每個類目的每個二手屬性,制定好評測的标準,然後抽樣一定量級的資料,交由外包進行人工評估。評估工作通過對比人工識别的結果和算法識别的結果是否一緻,給出準确率、精确率、召回率等。
最終效果
準确率
本方案識别結果經過人工評估,每個類目無論是準确率、精召率都達到了非常高的水準(98%+),且誤內插補點均遠小于上線限制,并已經上線應用在閑魚主要類目的商品上。
效果展示
圖5 - 二手屬性抽取算法效果Demo(手機)
應用場景&後續展望
二手屬性抽取的結果目前已應用的場景包括:
- 定價場景
- 聊天場景
- 優質商品池挖掘
- 搜尋導購
- 個性化商品推薦
後續展望:
- 目前二手屬性抽取總共覆寫閑魚主流類目商品,随着開發進行,後續計劃覆寫到全部類目。
- 目前二手屬性抽取主要依賴于文本識别,閑魚商品是圖文描述,後續可以考慮在圖檔上下功夫,通過圖像算法完善商品的結構化資訊。
- 利用和分析商品二手屬性,形成優質商品标準,擴充優質商品池。
參考
Albert論文:https://arxiv.org/abs/1909.11942
StructBert論文:https://arxiv.org/abs/1908.04577
Albert_zh源碼:https://github.com/brightmart/albert_zh
GLUE排行榜:https://gluebenchmark.com/leaderboard
References
[1]
github/albert_zh: https://github.com/brightmart/albert_zh
[2]
GLUE榜單: https://gluebenchmark.com/leaderboard
閑不住?來閑魚!
PICK ME
閑魚技術團隊通過創新追尋更多價值,不斷驅動業務變革。
從閑置生意的老本行,到打造“無憂購”“會玩社群““新線下”,
從出版書籍、峰會發聲,到開源專利、海外傳播,
閑不住,上閑魚——技術團隊對極緻的探索與深耕是我們的底氣。
立即加入
1、招用戶端/服務端/前端/架構/品質工程師
2、發履歷給[email protected]
3、您還可以在頭條、知乎、掘金、facebook、twitter找到我們