如今NLP可以說(shuō)是預(yù)訓(xùn)練模型的時(shí)代纷铣,希望借此拋磚引玉,能多多交流探討當(dāng)前預(yù)訓(xùn)練模型在文本分類上的應(yīng)用战转。
1. 任務(wù)介紹與實(shí)際應(yīng)用
文本分類任務(wù)是自然語(yǔ)言處理(NLP)中最常見(jiàn)搜立、最基礎(chǔ)的任務(wù)之一,顧名思義槐秧,就是對(duì)給定的一個(gè)句子或一段文本使用文本分類器進(jìn)行分類啄踊。根據(jù)文本分類的類別定義,可以分為二分類/多分類刁标、多標(biāo)簽颠通、層次分類,以下面的新聞分類為例:
- 二分類/多分類也即標(biāo)簽集中有兩個(gè)或以上的標(biāo)簽類別膀懈,每個(gè)樣本有且只有一個(gè)標(biāo)簽
- 多標(biāo)簽也即樣本可能有一個(gè)或多個(gè)標(biāo)簽
- 層次分類是特殊的多分類或多標(biāo)簽任務(wù)顿锰,數(shù)據(jù)集的標(biāo)簽之間具有層次關(guān)系。比如下圖樣本的一級(jí)標(biāo)簽是體育启搂,二級(jí)標(biāo)簽是足球硼控,體育為足球的父標(biāo)簽。
文本分類廣泛應(yīng)用于長(zhǎng)短文本分類胳赌、情感分析牢撼、新聞分類、事件類別分類匈织、政務(wù)數(shù)據(jù)分類、商品信息分類、商品類目預(yù)測(cè)缀匕、文章分類纳决、論文類別分類、專利分類乡小、案件描述分類阔加、罪名分類、意圖分類满钟、論文專利分類胜榔、郵件自動(dòng)標(biāo)簽、評(píng)論正負(fù)識(shí)別湃番、藥物反應(yīng)分類夭织、對(duì)話分類、稅種識(shí)別吠撮、來(lái)電信息自動(dòng)分類尊惰、投訴分類、廣告檢測(cè)泥兰、敏感違法內(nèi)容檢測(cè)弄屡、內(nèi)容安全檢測(cè)、輿情分析鞋诗、話題標(biāo)記等日嘲蚪荩或?qū)I(yè)領(lǐng)域中。
- 情感分析:情感分析是針對(duì)數(shù)據(jù)的情感傾向進(jìn)行分類削彬,可以是二分類(正向或負(fù)向)或者是多分類(按照不同的細(xì)粒度劃分情感)全庸,情感分析在影音評(píng)論、商品評(píng)價(jià)吃警、輿情分析糕篇、股民基金情感分析等都有重要的應(yīng)用。
- 主題分類:主題分類也是常見(jiàn)的文本分類應(yīng)用場(chǎng)景酌心,根據(jù)內(nèi)容或標(biāo)題進(jìn)行分類拌消,即可以是多分類、多標(biāo)簽也可以是層次分類安券,根據(jù)實(shí)際場(chǎng)景需要進(jìn)行標(biāo)簽體系構(gòu)造和劃分墩崩。
- 金融數(shù)據(jù)分類:金融數(shù)據(jù)繁多復(fù)雜,文本分類可以應(yīng)用于金融新聞分類侯勉、股民評(píng)論情感分析鹦筹、基金類型分類、金融問(wèn)答分類址貌、金融情緒分析等多種任務(wù)铐拐,有助于從大量數(shù)據(jù)挖掘有效信息徘键。
- 醫(yī)療數(shù)據(jù)分類:目前,文本分類已有許多醫(yī)療領(lǐng)域的成功應(yīng)用遍蟋,如藥物反應(yīng)分類吹害、癥狀和患者問(wèn)題分類,健康問(wèn)答分類虚青、電子病歷分類它呀、藥品文本分類等等。
- 法律數(shù)據(jù)分類:文本分類在法律領(lǐng)域也有許多成果的探索棒厘,如罪名分類纵穿、案情要素分類、刑期預(yù)測(cè)奢人、法律條文分類谓媒、法律情感分析、判決預(yù)測(cè)达传、法律文本挖掘篙耗、合規(guī)審查等等,幫助我們從海量的法律數(shù)據(jù)抽取有效信息宪赶。
2. 文本分類中文數(shù)據(jù)集
2.1 多分類數(shù)據(jù)集
THUCNews新聞分類數(shù)據(jù)集: http://thuctc.thunlp.org/
百科問(wèn)答分類數(shù)據(jù)集: https://github.com/brightmart/nlp_chinese_corpus#3%E7%99%BE%E7%A7%91%E7%B1%BB%E9%97%AE%E7%AD%94json%E7%89%88baike2018qa
頭條新聞標(biāo)題數(shù)據(jù)集(tnews):https://github.com/aceimnorstuvwxz/toutiao-text-classfication-dataset
復(fù)旦新聞文本數(shù)據(jù)集:https://www.heywhale.com/mw/dataset/5d3a9c86cf76a600360edd04
IFLYTEK app應(yīng)用描述分類數(shù)據(jù)集:https://storage.googleapis.com/cluebenchmark/tasks/iflytek_public.zip
CAIL2018 刑期預(yù)測(cè)宗弯、法條預(yù)測(cè)、罪名預(yù)測(cè) https://cail.oss-cn-qingdao.aliyuncs.com/CAIL2018_ALL_DATA.zip
CAIL 2022事件檢測(cè):https://cloud.tsinghua.edu.cn/d/6e911ff1286d47db8016/
2.2 情感分類數(shù)據(jù)集
亞馬遜商品評(píng)論情感數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/yf_amazon/intro.ipynb
財(cái)經(jīng)新聞情感分類數(shù)據(jù)集: https://github.com/wwwxmu/Dataset-of-financial-news-sentiment-classification
ChnSentiCorp 酒店評(píng)論情感分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/tree/master/datasets/ChnSentiCorp_htl_all
外賣(mài)評(píng)論情感分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/waimai_10k/intro.ipynb
weibo情感二分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/weibo_senti_100k/intro.ipynb
weibo情感四分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/simplifyweibo_4_moods/intro.ipynb
商品評(píng)論情感分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/online_shopping_10_cats/intro.ipynb
電影評(píng)論情感分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/dmsc_v2/intro.ipynb
大眾點(diǎn)評(píng)分類數(shù)據(jù)集:https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/yf_dianping/intro.ipynb
2.3 多標(biāo)簽數(shù)據(jù)集
學(xué)生評(píng)語(yǔ)分類數(shù)據(jù)集:https://github.com/FBI1314/textClassification/tree/master/multilabel_text_classfication/data
CAIL2019婚姻要素識(shí)別:https://aistudio.baidu.com/aistudio/projectdetail/3996601
2.4 層次分類數(shù)據(jù)集
頭條新聞標(biāo)題分類(tnews的升級(jí)版):https://github.com/aceimnorstuvwxz/toutiao-multilevel-text-classfication-dataset
網(wǎng)頁(yè)層次分類數(shù)據(jù)集:https://csri.scu.edu.cn/info/1012/2827.htm
Chinese Medical Intent Dataset(CMID): ?https://github.com/liutongyang/CMID
2020語(yǔ)言與智能技術(shù)競(jìng)賽事件分類:https://github.com/percent4/keras_bert_multi_label_cls/tree/master/data
3. 預(yù)訓(xùn)練模型簡(jiǎn)介
隨著Transformer 和 Bert 的出現(xiàn)搂妻,NLP模型大步跨向了預(yù)訓(xùn)練模型的時(shí)代蒙保,剛?cè)腴T(mén)的NLP的同學(xué)可能會(huì)疑惑什么是預(yù)訓(xùn)練模型?預(yù)訓(xùn)練模型和文本分類模型是什么關(guān)系欲主?我該使用什么預(yù)訓(xùn)練模型邓厕?只有CPU能訓(xùn)練嗎?怎么開(kāi)源加載預(yù)訓(xùn)練模型扁瓢?
什么是預(yù)訓(xùn)練模型详恼?
通常來(lái)說(shuō)模型復(fù)雜度越高參數(shù)越多,模型越能擬合復(fù)雜的問(wèn)題引几,模型的預(yù)測(cè)精度越高昧互。隨著深度學(xué)習(xí)的發(fā)展,模型參數(shù)的數(shù)量飛速增長(zhǎng)伟桅。為了訓(xùn)練這些參數(shù)敞掘,需要更大的數(shù)據(jù)集來(lái)避免過(guò)擬合,而構(gòu)建大規(guī)模的標(biāo)注數(shù)據(jù)集非常困難(成本過(guò)高楣铁,標(biāo)數(shù)據(jù)的苦?_?)玖雁。所以目前的做法是先在超大規(guī)模的語(yǔ)料采用無(wú)監(jiān)督或者弱監(jiān)督的方式訓(xùn)練模型,模型能夠獲得語(yǔ)言語(yǔ)義盖腕、語(yǔ)法相關(guān)的知識(shí)赫冬,然后再用具體的任務(wù)數(shù)據(jù)訓(xùn)練浓镜,這樣的模型稱為預(yù)訓(xùn)練模型。
預(yù)訓(xùn)練模型首先會(huì)將輸入的句子使用分成多個(gè)token劲厌,英文句子通常是subword-level的分詞策略竖哩,中文句子由于最小的單位就是字,所以通常是一個(gè)字符即為一個(gè)token脊僚,例如句子 "今天是個(gè)好天氣!" 切分為8個(gè)token ['今', '天', '是', '個(gè)', '好', '天', '氣', '!'];在多語(yǔ)言模型中也有將詞作為token的情況遵绰,還是上面的例子辽幌,句子切分為5個(gè)token ['今天', '是個(gè)', '好', '天氣', '!']。(分詞細(xì)節(jié)可以參見(jiàn) tokenizers小結(jié))
此外椿访,模型會(huì)在每個(gè)輸入的開(kāi)頭加入一個(gè)[CLS]的token乌企,在句子對(duì)間加入一個(gè)[SEP]的token。如下圖所示成玫,每個(gè)輸入token會(huì)映射為一個(gè)對(duì)應(yīng)的特征表示加酵,經(jīng)過(guò)預(yù)訓(xùn)練模型得到每個(gè)token的輸出特征表示,token輸出的特征表示會(huì)用于不同的任務(wù)哭当,[CLS]的輸出特征通常被認(rèn)為是整個(gè)句子的語(yǔ)義表示猪腕。
接下來(lái)就是預(yù)訓(xùn)練钦勘,不同預(yù)訓(xùn)練模型的預(yù)訓(xùn)練方式略有不同陋葡,常用的無(wú)監(jiān)督任務(wù)包括MLM和NSP任務(wù):
Mask Language Model(MLM):掩碼預(yù)測(cè)任務(wù),也即將一個(gè)句子中某一個(gè)token用掩碼[MASK]替換彻采,然后讓模型預(yù)測(cè)出這個(gè)token腐缤。例如:"今天出太陽(yáng)了,是個(gè)[MASK]天氣"肛响,希望模型預(yù)測(cè)[MASK] -> 好岭粤。具體來(lái)說(shuō)就是用[MASK]的模型輸出特征,后接一個(gè)分類器進(jìn)行分類特笋。
Next sentence Prediction(NSP):從文章中摘取兩個(gè)句子A和B剃浇,50%是上下文關(guān)系,50%不是雹有,訓(xùn)練模型預(yù)測(cè)句子A和句子B是否為上下文關(guān)系偿渡,也即在[CLS]的模型輸出特征后接一個(gè)分類器進(jìn)行二分類。
關(guān)于預(yù)訓(xùn)練模型結(jié)構(gòu)和訓(xùn)練細(xì)節(jié)就不在這里贅述了霸奕,現(xiàn)在已經(jīng)有許多寫(xiě)的很好文章講解溜宽。
預(yù)訓(xùn)練模型和文本分類模型關(guān)系?
預(yù)訓(xùn)練模型學(xué)習(xí)到的文本語(yǔ)義表示能夠避免從零開(kāi)始訓(xùn)練模型质帅,他們之間的關(guān)系可以直觀地理解為适揉,預(yù)訓(xùn)練模型已經(jīng)懂得了相關(guān)句法留攒、語(yǔ)義的語(yǔ)言知識(shí),用具體任務(wù)數(shù)據(jù)訓(xùn)練使得預(yù)訓(xùn)練模型”更懂”這個(gè)任務(wù)嫉嘀,在預(yù)訓(xùn)練過(guò)程中學(xué)到的知識(shí)基礎(chǔ)使學(xué)習(xí)文本分類任務(wù)事半功倍炼邀。
我該使用什么預(yù)訓(xùn)練模型拭宁?
目前已經(jīng)有許多開(kāi)源的預(yù)訓(xùn)練集模型,雖然英文預(yù)訓(xùn)練模型有GLUE 榜單瓣俯,中文預(yù)訓(xùn)練模型有CLUE榜單杰标,多語(yǔ)言模型有XTREME榜單,但選擇模型還是要根據(jù)具體的任務(wù)和硬件條件進(jìn)行選擇彩匕。我中文分類任務(wù)做的比較多腔剂,我常用的預(yù)模型包括 ERNIE (多尺寸模型選擇真的香)、Roformer-v2驼仪、Mengzi掸犬、RoBERTa-wwm-ext。
只有CPU能訓(xùn)練嗎绪爸?
能湾碎,但耗時(shí)比較長(zhǎng)。CPU開(kāi)發(fā)者推薦使用層數(shù)比較少的小模型奠货,或選擇白嫖一些在線AI平臺(tái)免費(fèi)算力比如AI Studio(每天白嫖8小時(shí)V100胜茧,Paddle)、Google Colab(要翻墻仇味,Pytorch Tensorflow都支持)呻顽。
怎么加載開(kāi)源的預(yù)訓(xùn)練模型?
目前最方便的方法就是在PaddleNLP(Paddle)或 HuggingFace(Pytorch)直接根據(jù)模型名稱使用AutoModel的方式調(diào)用丹墨,也可以在github上找開(kāi)源模型參數(shù)下載鏈接廊遍。
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
4. 基于預(yù)訓(xùn)練模型的文本分類算法
講了這么多,終于到文本分類算法介紹了贩挣。文本分類算法最最常用的就是模型微調(diào)喉前,當(dāng)然也還包括在最近討論度很高的預(yù)訓(xùn)練新范式提示學(xué)習(xí)(Prompt Tuning),之前看到基于檢索的方法做文本分類也還蠻有意思的王财。
4.1 常用方法——預(yù)訓(xùn)練模型微調(diào)
基于預(yù)訓(xùn)練模型微調(diào)的想法非常簡(jiǎn)單直接卵迂,也即將[CLS]的模型輸出特征表示作為輸入句子的特征表示,通常為768維或1024維的向量绒净,然后接入一個(gè)線性分類器(通常為單層全連接層)進(jìn)行文本分類任務(wù)訓(xùn)練见咒。
4.2 小樣本——提示學(xué)習(xí)(Prompt Tuning)
近來(lái),提示學(xué)習(xí)的火熱挂疆,主要還是在小樣本場(chǎng)景的優(yōu)秀表現(xiàn)改览。
提示學(xué)習(xí)的主要思想是將文本分類任務(wù)轉(zhuǎn)換為構(gòu)造提示(Prompt)中掩碼 [MASK] 的分類預(yù)測(cè)任務(wù)下翎,也即在掩碼 [MASK]模型輸出特征后接入線性層分類器預(yù)測(cè)掩碼位置可能的字或詞。提示學(xué)習(xí)使用待預(yù)測(cè)字的預(yù)訓(xùn)練向量來(lái)初始化分類器參數(shù)(如果待預(yù)測(cè)的是詞宝当,則為詞中所有字的預(yù)訓(xùn)練向量平均值)视事,充分利用預(yù)訓(xùn)練語(yǔ)言模型學(xué)習(xí)到的特征和標(biāo)簽文本,從而降低樣本需求庆揩。
我們以下圖情感二分類任務(wù)為例來(lái)具體介紹提示學(xué)習(xí)流程俐东。在輸入文本后加入構(gòu)造提示"我[MASK]喜歡。"订晌,將"負(fù)向"或"正向"的情感二分類任務(wù)轉(zhuǎn)化為掩碼[MASK]"不"或"很"的二分類任務(wù)犬性,構(gòu)造提示[MASK]分類器預(yù)測(cè)分類與原始標(biāo)簽的對(duì)應(yīng)關(guān)系為"不"->"負(fù)向" 、"很"->"正向" 腾仅。具體實(shí)現(xiàn)方法是在掩碼[MASK]的輸出向量后接入線性分類器(二分類),然后用"不"和"很"的預(yù)訓(xùn)練向量來(lái)初始化分類器進(jìn)行訓(xùn)練套利。
4.3 創(chuàng)新方法——檢索
除了以上兩種方法推励,還試過(guò)用檢索的方式做文本分類。檢索的方法適合標(biāo)簽類別較多或者是標(biāo)簽類別不固定(有時(shí)候會(huì)新增標(biāo)簽)肉迫。
基于檢索的方法做文本分類有兩種思路验辞,一種是把標(biāo)簽集作為召回庫(kù),一種是把訓(xùn)練數(shù)據(jù)作為召回庫(kù)喊衫。這兩種思路在訓(xùn)練階段的方法是一致的跌造,可以用雙塔模型(也就是兩個(gè)預(yù)訓(xùn)練模型),一個(gè)模型輸入句子族购,另一個(gè)模型輸入標(biāo)簽壳贪,進(jìn)行訓(xùn)練拉近句子和標(biāo)簽的[CLS]輸出特征表示之間距離。在預(yù)測(cè)階段寝杖,召回集有所不同:
思路一把標(biāo)簽作為召回集违施,每個(gè)標(biāo)簽的向量表示(也即[CLS]輸出特征表示)是固定的,我們構(gòu)建一個(gè)標(biāo)簽向量庫(kù)瑟幕。我們用待預(yù)測(cè)的句子的向量在標(biāo)簽向量庫(kù)進(jìn)行檢索磕蒲,找到特征相似度最大的標(biāo)簽,也即為待預(yù)測(cè)句子的標(biāo)簽只盹。
思路二則是把訓(xùn)練數(shù)據(jù)作為召回集辣往,構(gòu)建一個(gè)訓(xùn)練集文本的向量庫(kù),我們用待預(yù)測(cè)的句子的向量表示(也即[CLS]輸出特征表示)在文本向量庫(kù)進(jìn)行檢索殖卑,找到特征相似度最大的訓(xùn)練集文本站削,待預(yù)測(cè)句子的標(biāo)簽也即召回文本的標(biāo)簽。
5. 文本分類實(shí)戰(zhàn)
接下來(lái)將帶你快速使用PaddleNLP完成實(shí)現(xiàn)多分類孵稽、多標(biāo)簽钻哩、層次分類任務(wù)屹堰。你可以仿照數(shù)據(jù)集格式,替換數(shù)據(jù)集目錄街氢,直接訓(xùn)練你自己的數(shù)據(jù):
- 多分類實(shí)踐代碼notebook(只有一個(gè)標(biāo)簽):https://aistudio.baidu.com/aistudio/projectdetail/4535085
- 多標(biāo)簽實(shí)踐代碼notebook(有一個(gè)或多個(gè)標(biāo)簽):https://aistudio.baidu.com/aistudio/projectdetail/4540529
- 層次分類實(shí)踐代碼notebook(標(biāo)簽間存在層次關(guān)系):https://aistudio.baidu.com/aistudio/projectdetail/4540619
代碼詳解 ?? ? 施工ing
6. 實(shí)踐經(jīng)驗(yàn)總結(jié)
6.1 數(shù)據(jù)為王時(shí)代
在實(shí)踐代碼開(kāi)始之前更想討論一下數(shù)據(jù)珊肃,我個(gè)人的實(shí)踐經(jīng)驗(yàn)來(lái)說(shuō)荣刑,提高文本分類精度最快、最有效的方法是既不是模型伦乔,也不是算法調(diào)參厉亏,而是數(shù)據(jù)質(zhì)量。文本分類總的來(lái)說(shuō)不是個(gè)復(fù)雜的自然語(yǔ)言處理任務(wù)(甚至可以說(shuō)是最基本的任務(wù))烈和,如何更好地進(jìn)行數(shù)據(jù)標(biāo)簽地劃分減少混淆重合情況和高質(zhì)量的數(shù)據(jù)標(biāo)注(正確標(biāo)注爱只,標(biāo)準(zhǔn)統(tǒng)一,且訓(xùn)練集與預(yù)測(cè)數(shù)據(jù)分布一致)是得到高精度的文本分類模型的關(guān)鍵招刹。
- 標(biāo)簽體系劃分恬试。文本分類任務(wù)的標(biāo)簽體系依具體的任務(wù)而定,沒(méi)有固定標(biāo)準(zhǔn)疯暑,一個(gè)清晰分界明確的標(biāo)簽體系有利于數(shù)據(jù)標(biāo)注和分類训柴。如果是多分類任務(wù)的話盡量減少標(biāo)簽之間范圍重合,這樣有助于標(biāo)注標(biāo)準(zhǔn)的統(tǒng)一妇拯,減少出現(xiàn)在標(biāo)注的時(shí)候相似的樣本有的被標(biāo)記為A幻馁,有的標(biāo)記為B,降低準(zhǔn)確率越锈。
- 標(biāo)注正確仗嗦。"Garbage in, garbage out(垃圾進(jìn),垃圾出)"甘凭,如果訓(xùn)練數(shù)據(jù)包含很多錯(cuò)誤儒将,可想而知模型不會(huì)有很好的預(yù)測(cè)結(jié)果。人工檢查所有數(shù)據(jù)標(biāo)注是否準(zhǔn)確对蒲,成本不低钩蚊,因此可以通過(guò)一些算法計(jì)算訓(xùn)練數(shù)據(jù)對(duì)模型的擾動(dòng),來(lái)篩選出臟數(shù)據(jù)進(jìn)行重新標(biāo)注蹈矮。(這點(diǎn)之后會(huì)寫(xiě)新的文章細(xì)講)
- 訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)分布一致砰逻。深度學(xué)習(xí)模型可以理解為擬合訓(xùn)練數(shù)據(jù)的分布,雖然大規(guī)模語(yǔ)料預(yù)訓(xùn)練泛鸟,能夠有效幫助模型有更好的泛化能力蝠咆,但只有模型學(xué)習(xí)與預(yù)測(cè)場(chǎng)景相似的訓(xùn)練樣本,才能在預(yù)測(cè)數(shù)據(jù)有更好的表現(xiàn)。在實(shí)踐場(chǎng)景中遇到許多效果不好的基本是這個(gè)問(wèn)題刚操,比如遇到多標(biāo)簽分類訓(xùn)練集的數(shù)據(jù)只有一個(gè)標(biāo)簽闸翅,模型理所應(yīng)當(dāng)傾向于只預(yù)測(cè)一個(gè)標(biāo)簽,而測(cè)試集有多個(gè)標(biāo)簽菊霜,效果可想而知不太好坚冀。
- 文本數(shù)據(jù)精選有效信息。目前預(yù)訓(xùn)練模型通常支持的max_length最大為512鉴逞,有些模型可能會(huì)應(yīng)用一些策略使模型能夠接受輸入長(zhǎng)度最長(zhǎng)2048记某,當(dāng)然還有一些支持長(zhǎng)文本的模型例如Longformer,ERNIE-Doc构捡。但輸入文本過(guò)長(zhǎng)液南,容易爆顯存,訓(xùn)練速度過(guò)慢勾徽,并且由于文本包含過(guò)多無(wú)用的信息干擾使模型效果變差滑凉。因?yàn)槲谋緮?shù)據(jù)十分多樣,如何精選文本數(shù)據(jù)需要按實(shí)際數(shù)據(jù)而定喘帚,常見(jiàn)方法按句號(hào)對(duì)句子截?cái)喑╂ⅰ⒗靡恍┱齽t式匹配的方法篩選有效文本內(nèi)容等。
- 充足的數(shù)據(jù)啥辨。雖然文本分類在零樣本和小樣本領(lǐng)域有許多探索,但效果暫時(shí)還是很難超越在充足訓(xùn)練數(shù)據(jù)進(jìn)行微調(diào)盯腌。充足的數(shù)據(jù)優(yōu)先的方法當(dāng)然是選擇數(shù)據(jù)標(biāo)注的方式溉知,數(shù)據(jù)增強(qiáng)策略也是常見(jiàn)擴(kuò)充數(shù)據(jù)的方法。
總而言之腕够,高質(zhì)量的訓(xùn)練數(shù)據(jù)是高精度文本分類模型的關(guān)鍵级乍。
6.2 實(shí)踐經(jīng)驗(yàn)記錄
現(xiàn)實(shí)場(chǎng)景中的數(shù)據(jù)并不總是那么理想,需要根據(jù)一些實(shí)際情況進(jìn)行靈活變化帚湘。使用的也許不一定是最好的解法玫荣,歡迎各位大佬們討論。
- 文本分類的類別非常多大诸,幾百上千甚至萬(wàn)級(jí)別捅厂。這時(shí)候用預(yù)訓(xùn)練模型微調(diào)的方法,效果表現(xiàn)可能非常一般甚至可能難以收斂资柔。如果還要使用預(yù)訓(xùn)練模型微調(diào)的話焙贷,建議是使用多個(gè)分類模型,先訓(xùn)練一個(gè)文本分類模型(大類分類器)把數(shù)據(jù)分為具體的大類贿堰,每個(gè)大類再訓(xùn)練一個(gè)文本分類模型(子類分類器)對(duì)樣本類別進(jìn)行預(yù)測(cè)(缺點(diǎn)就是要訓(xùn)練多個(gè)分類器)辙芍;另一個(gè)方法就是用檢索的方法去做,不再是分類,而是召回與文本最相似的標(biāo)簽故硅。
- 多分類任務(wù)預(yù)測(cè)可能會(huì)出現(xiàn)訓(xùn)練集沒(méi)有出現(xiàn)的類別庶灿,希望可以預(yù)測(cè)成"其他"。前面也提到訓(xùn)練數(shù)據(jù)最好與預(yù)測(cè)數(shù)據(jù)一致吃衅,否則效果可能有限往踢,但現(xiàn)實(shí)場(chǎng)景還是很難避免。最直接的想法是在多分類中構(gòu)建一個(gè)"其他"的類別捐晶,但這種方法也有缺點(diǎn)菲语,比如就是訓(xùn)練的時(shí)候一點(diǎn)其他類別的數(shù)據(jù)沒(méi)有,另外也可能由于"其他"類別的數(shù)據(jù)分布差異很大惑灵,導(dǎo)致這個(gè)類別預(yù)測(cè)效果較差山上。最終選擇的實(shí)踐方法是使用多標(biāo)簽的方式進(jìn)行訓(xùn)練,然后預(yù)測(cè)時(shí)候選擇置信度最高的類別作為標(biāo)簽類別英支,如果置信度低于閾值(比如0.5)佩憾,則這個(gè)類別為"其他"。訓(xùn)練的時(shí)候干花,如果有"其他"類別的數(shù)據(jù)妄帘,則該數(shù)據(jù)的標(biāo)簽為[0,0,0...,0]。
- 關(guān)于調(diào)參池凄。超參數(shù)設(shè)置我自己常用的是learning rate [1e-5,3e-5,5e-5]抡驼,batch size[16, 24, 32],使用早停策略肿仑,選擇開(kāi)發(fā)集精度最高的模型參數(shù)致盟。如果要進(jìn)一步提高精度的話,會(huì)選定epoch數(shù)(不使用早停策略)應(yīng)用warmup策略尤慰。個(gè)人感覺(jué)馏锡,超參設(shè)置對(duì)模型效果影響不大(除非把batch size設(shè)為1,learning rate設(shè)的超大或超小這種)伟端,warmup策略也是小幅度的提高杯道,在文本分類任務(wù)通過(guò)調(diào)參實(shí)現(xiàn)精度10%幅度這種大提高的可能性非常小。(參考:CLUE超參搜參結(jié)果)
7.參考
BERT 論文: https://arxiv.org/pdf/1810.04805.pdf
PaddleNLP文本分類應(yīng)用:PaddleNLP/applications/text_classification at develop · PaddlePaddle/PaddleNLP