用 Python 做文本分類

分類問題是 NLP(Natural Language Processing,自然語言處理)領域的經典常見任務,而隨着預訓練模型的發展,預訓練時代下的文本分類算法逐步成爲了我們從事 NLP 相關工作的必備技能。

本文作爲 NLP 經典任務入門的實踐總結,結合了最前沿的算法、開源工具(飛槳自然語言處理模型庫 PaddleNLP)與代碼實操、工作實踐,希望藉此拋磚引玉,能多多交流探討當前預訓練模型在文本分類上的應用,供大家一起參考學習。

一、場景介紹

文本分類,顧名思義,就是對給定的一個句子或一段文本進行分類。文本分類在互聯網、金融、醫療、法律、工業等領域都有廣泛的應用,例如文章主題分類、商品信息分類、對話意圖分類、論文專利分類、郵件自動標籤、評論正負傾向識別、投訴事件分類、廣告檢測以及敏感違法內容檢測等,這些應用場景全部都可以抽象爲文本分類任務。

根據任務類別定義,可以將文本分類劃分爲二分類 / 多分類、多標籤、層次分類三類場景。以下面的新聞分類爲例:

圖片

圖:三類文本分類場景

二、技術方案選型與開源工具推薦

預訓練模型微調、提示學習是當前解決分類任務的主流思路。此外,筆者最近還使用了 PaddleNLP 中開源的基於語義索引的技術方案,下面一一介紹。

方案一:預訓練模型微調

預訓練模型微調是目前 NLP 領域最通用的文本分類方案。預訓練模型與具體的文本分類任務的關係可以直觀地理解爲,預訓練模型已經懂得了通用的句法、語義等知識,採用具體下游任務數據微調訓練可以使得模型” 更懂” 這個任務,在預訓練過程中學到的知識基礎可以使文本分類效果事半功倍。

圖片

圖:模型精度 - 時延圖

在預訓練模型選擇上,推薦使用百度開源的文心 ERNIE 系列模型,其在精度和性能上的綜合表現已全面領先於 UER/RoBERTa、Huawei/TinyBERT、HFL/RBT、RoBERTa-wwm-ext-large 等中文模型。PaddleNLP 開源瞭如下多種尺寸的 ERNIE 系列預訓練模型,滿足多樣化的精度、性能需求:

除中文模型外,PaddleNLP 也提供 ERNIE 2.0 英文版、以及基於 96 種語言(涵蓋法語、日語、韓語、德語、西班牙語等幾乎所有常見語言)預訓練的多語言模型 ERNIE-M,滿足不同語言的文本分類任務需求。

方案二:提示學習

提示學習(Prompt Learning)適用於標註成本高、標註樣本較少的文本分類場景。在小樣本場景中,相比於預訓練模型微調學習,提示學習能取得更好的效果。提示學習的主要思想是將文本分類任務轉換爲構造提示(Prompt)中掩碼的分類預測任務,使用待預測字的預訓練向量來初始化分類器參數,充分利用預訓練語言模型學習到的特徵和標籤文本,從而降低樣本量需求。PaddleNLP 集成了 R-Drop 和 RGL 等前沿策略,幫助提升模型效果。

圖片

圖:預訓練模型微調 vs 提示學習

如下圖,在多分類、多標籤、層次分類任務的小樣本場景下,提示學習比預訓練模型微調方案,效果上有顯著優勢。

圖片

方案三:語義索引

基於語義索引的文本分類方案適用於標籤類別不固定、或大規模標籤類別的場景。在新增標籤類別的情況下,無需重新訓練模型。語義索引的目標是從海量候選召回集中快速、準確地召回一批與輸入文本語義相關的文本。基於語義索引的文本分類方法具體來說是將標籤集作爲召回目標集,召回與輸入文本語義相似的標籤作爲文本的標籤類別,尤其適用於層次分類場景。

圖片

綜上,針對多分類、多標籤、層次分類等高頻分類場景,推薦使用 PaddleNLP 中開源的預訓練模型微調、提示學習、語義索引三種端到端全流程分類方案。

PaddleNLP 文本分類方案提供了簡單易用的數據標註 - 模型訓練 - 模型調優 - 模型壓縮 - 預測部署全流程方案,如下圖所示。

開發者僅需輸入指定格式的數據,一行命令即可開啓文本分類訓練。對於訓練結果不理想情況,分析模塊提供了多種模型調優方案,解決文本分類數據難題。

對於模型部署上線要進一步壓縮模型體積的需求,可一行代碼調用 PaddleNLP 的 模型壓縮 API ——採用了 DynaBERT 中寬度自適應裁剪策略,對預訓練模型多頭注意力機制中的頭(Head )進行重要性排序,保證更重要的頭(Head )不容易被裁掉,然後用原模型作爲蒸餾過程中的教師模型,寬度更小的模型作爲學生模型,蒸餾得到的學生模型就是我們裁剪得到的模型。實驗表明模型裁剪能夠有效縮小模型體積、減少內存佔用、提升推理速度。此外,模型裁剪去掉了部分冗餘參數的擾動,增加了模型的泛化能力,在部分任務中預測精度得到提高。通過模型裁剪,可以得到更快、更準的模型

圖片

表:模型裁剪效果

完成模型訓練和裁剪後,開發者可以根據需求選擇是否進行低精度(FP16/INT8)加速,快速高效實現模型離線或服務化部署。

對預訓練時代 NLP 任務入門感興趣的小夥伴,可以掃碼報名進羣,獲取 PaddleNLP 官方近期組織的直播鏈接,進羣還可獲得 10GB NLP 學習大禮包等超多福利~ 此外,課程中還將介紹數據增強、稀疏數據與髒數據挖掘等數據、模型調優策略,親測好用,這部分是課程精華,非常推薦各位 NLPer 去學習交流。

挖掘該工具更多的潛力和驚喜,請進傳送門(STAR 收藏起來,不易走丟~)

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification

圖片

圖:PaddleNLP 文本分類詳細文檔介紹

接下來,我們來看如何進行數據、模型調優。

三、數據、模型調優

在實際工作中,除了技術方案選型、如何進行模型調優、如何解決少樣本等問題,使很多開發者望而卻步,遲遲難以上線。

有這麼一句話在業界廣泛流傳,"數據決定了機器學習的上限,而模型和算法只是逼近這個上限",可見數據質量的重要性。PaddleNLP 文本分類方案依託 TrustAI 可信增強能力和數據增強 API 開源了模型分析模塊,針對標註數據質量不高、訓練數據覆蓋不足、樣本數量少等文本分類常見數據痛點,提供稀疏數據篩選、髒數據清洗、數據增強三種數據優化策略,解決訓練數據缺陷問題,用低成本方式獲得大幅度的效果提升。

集可信分析和增強於一體的可信 AI 工具集 - TrustAI,能夠有效識別和優化 NLP 領域數據標註的常見問題,如『訓練數據中存在髒數據阻礙模型效果提升』,『數據標註成本太高但又不清楚該標註什麼數據』,『數據分佈有偏導致模型魯棒性差』等,TrustAI 能幫助 NLP 開發者解決訓練數據缺陷問題,用最小的標註成本獲得最大幅度的效果提升

可戳項目地址瞭解詳情:

https://github.com/PaddlePaddle/TrustAI

策略一:稀疏數據篩選

基於 TrustAI 中可信增強方法挖掘待預測數據中缺乏訓練集數據支持的數據(稀疏數據),然後使用特徵相似度方法選擇能夠提供證據支持的訓練數據進行數據增強,或選擇能夠提供證據支持的未標註數據進行數據標註,這兩種稀疏數據篩選策略均能有效提升模型表現。

圖片

策略二:髒數據清洗

基於 TrustAI 的可信增強能力,採用表示點方法 (Representer Point) 計算訓練數據對模型的影響分數,分數高的訓練數據表明對模型影響大,這些數據有較大概率爲髒數據(被錯誤標註的樣本)。髒數據清洗策略通過高效識別訓練集中髒數據,有效降低人力檢查成本。

我們在多分類、多標籤、層次分類場景中評測髒數據清洗策略,實驗表明髒數據清洗策略對文本分類任務有顯著提升效果。

圖片

策略三:數據增強

PaddleNLP 內置數據增強 API,支持詞替換、詞刪除、詞插入、詞置換、基於上下文生成詞(MLM 預測)、TF-IDF 等多種數據增強策略,只需一行命令即可實現數據集增強擴充。我們在某分類數據集(500 條)中測評多種數據增強 策略,實驗表明在數據量較少的情況下,數據增強策略能夠增加數據集多樣性,提升模型效果。

圖片

圖:數據增強策略效果

總結一下 PaddleNLP 開源的文本分類場景方案特色:

四、實踐經驗總結

1、數據爲王時代

以筆者個人的實踐經驗來說,提高文本分類精度最快、最有效的方法是既不是模型,也不是算法調參,而是數據質量。文本分類總的來說不是個複雜的自然語言處理任務(甚至可以說是最基本的任務),如何更好地進行數據標籤的劃分,減少混淆重合情況和高質量的數據標註(正確標註,標準統一,且訓練集與預測數據分佈一致)是得到高精度的文本分類模型的關鍵。

標籤體系劃分

文本分類任務的標籤體系依具體的任務而定,一個清晰分界明確的標籤體系有利於提升數據標註質量。在多分類任務中需儘量避免標籤之間範圍重合,避免標註環節中遇到相似的樣本時,有的被標記爲 A,有的標記爲 B,降低模型準確率。

標註正確

"Garbage in, garbage out(垃圾進,垃圾出)",如果訓練數據包含很多錯誤,可想而知模型不會有很好的預測結果。人工檢查所有數據標註是否準確,成本不低,因此可以藉助前文介紹的 TrustAI 工具,計算訓練數據對模型的擾動,來篩選出髒數據進行重新標註。

訓練數據和測試數據分佈一致

模型學習的過程可以理解爲擬合訓練數據分佈的過程,只有模型學習與預測場景相似的訓練樣本,才能在預測數據上有更好的表現。在實踐場景中效果差,基本是這個問題。

精選有效信息

目前預訓練模型通常支持的 max_length 最大爲 512,有些模型可能會應用一些策略使模型能夠接受輸入長度最長 2048,當然還有一些支持長文本的模型例如 Longformer,ERNIE-Doc。但輸入文本過長,容易爆顯存,訓練速度過慢,並且由於文本包含過多無用的信息干擾使模型效果變差。如何精選文本數據需要根據實際情況而定,常見方法如按句號對句子截斷、利用正則匹配篩選有效文本內容等。

充足的數據

雖然文本分類在零樣本和小樣本領域有許多探索,但效果暫時還是很難超越在充足訓練數據下進行微調。人工標註結合數據增強策略是常見擴充數據的方法。

2、更多實戰

PaddleNLP 開源的文本分類方案涵蓋多分類、多標籤、層次分類三大場景,提供微調、提示學習、基於語義檢索等多種分類技術方案。很全了!並且強強結合數據增強能力與可信增強技術,解決髒數據、標註數據欠缺、數據不平衡等問題,能夠大幅提升模型效果,值得一試。

可以快速使用 PaddleNLP 完成實現多分類、多標籤、層次分類任務。你可以仿照數據集格式,替換數據集目錄,直接訓練自己的數據。趕緊實踐起來吧!

地址:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification

PaddleNLP 項目地址:
GitHub: https://github.com/PaddlePaddle/PaddleNLP

TrustAI 項目地址:

GitHub: https://github.com/PaddlePaddle/TrustAI

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/uZ4s2ut8rPAHLKXioxpf7w