天天看點

閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

先上效果

閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

圖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家族。

方案架構

閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

圖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所示:

閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

圖3 - StrutBert的預訓練任務目标(引用自StrutBert論文)

  • Word Structural Objective:StrutBert在Bert的MLM任務基礎上,加上了打亂詞序并迫使其重構正确詞序的任務:論文中是随機抽取一個三元詞組(trigram)進行打亂,然後加上了如下公式作為MLM損失函數的限制。StrutBert的這個靈感也許來自于網上的一個段子:“研表究明,漢字序順并不定一影閱響讀,事證明明了當你看這完句話之後才發字現都亂是的”。
閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

圖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%+),且誤內插補點均遠小于上線限制,并已經上線應用在閑魚主要類目的商品上。

效果展示

閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

圖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

閑不住?來閑魚!

閑魚是怎麼讓二手屬性抽取準确率達到95%+的?

PICK ME

閑魚技術團隊通過創新追尋更多價值,不斷驅動業務變革。

從閑置生意的老本行,到打造“無憂購”“會玩社群““新線下”,

從出版書籍、峰會發聲,到開源專利、海外傳播,

閑不住,上閑魚——技術團隊對極緻的探索與深耕是我們的底氣。

 立即加入 

1、招用戶端/服務端/前端/架構/品質工程師

2、發履歷給[email protected]

3、您還可以在頭條、知乎、掘金、facebook、twitter找到我們