文本分類有哪些論文中很少提及卻對性能有重要影響的tricks?

2022-01-31 夕小瑤的賣萌屋

收錄於話題 #賣萌屋@自然語言處理 69個

前言

一年前小夕在知乎上提問過這麼一個問題

文本分類有哪些論文中很少提及卻對性能有重要影響的tricks?
連結:https://www.zhihu.com/question/265357659/answer/578944550

當時正好在刷一個比較有趣的task,結果發現奇奇怪怪的tricks可以帶來不少的性能收益。再加上後來為了驗證一個小idea跑了一堆公開的文本分類數據集,雖然idea沒有多亮,倒是積累和摸索了不少刷性能的tricks╮( ̄▽ ̄」」)╭然後呢,小夕後續又用這些tricks刷了不少相關的比賽(哪怕是文本匹配這種特殊的文本分類問題),發現baseline+一堆tricks+簡單集成就可以隨隨便便刷到一個文本分類的水比賽的top10甚至top3,甚感調參和tricks的重要性。

然鵝,最近好一段時間都沒有文本分類這個基礎問題了,感覺都快忘了,趁著還有點模糊的記憶就整理下來分享給大家叭~希望能在大家刷論文實驗、比賽或實際項目的時候提供點幫助或者啟發。

首先來一個結論,tricks用的好,調參調的妙,TextCNN也能吊打絕大多數花裡胡哨的深度模型。tricks沒用好,SOTA模型也會性能差的讓你懷疑人生。下面就不分重點,沒有邏輯的開始本文辣。

關於分詞器

中文也好,英文也好,拿過來數據集無可避免的就是要看看要不要做分詞(有的小夥伴以為英文數據集就完全不用分詞真的讓人很無奈鴨),如果要做,就要糾結分詞器的選擇了。

路人丙:我廠有全方位吊打各種開源分詞工具的分詞器了
小夕:好了你可以往下劃了

首先就有一個問題,真的是算法越「先進」的分詞器就會給下遊任務帶來越好的性能嗎?

很多人走到這一步的時候會忽略一個東西,詞向量!!!

其實比起分詞算法本身的先進程度,在神經網絡使用預訓練詞向量的大背景下,確保分詞器與詞向量表中的token粒度match其實是更更重要的事情!畢竟哪怕你詞分的再好,一旦詞向量表裡沒有的話,那麼就變成OOV了,分的再好也木用了╮( ̄▽ ̄」」)╭(除非你不嫌麻煩多寫點代碼去對相對於詞向量表的OOV進行特殊處理,反正我一般嫌麻煩╮(╯▽╰)╭)於是這裡就有了兩種情況。

1. 已知預訓練詞向量的分詞器

一般像word2vec、glove、fasttext這些官方release的預訓練詞向量都會公布相應訓練語料的信息,包括預處理策略如分詞等,這種情況真是再好不過了,不用糾結,如果你決定了使用某一份詞向量,那麼直接使用訓練該詞向量所使用的分詞器叭!此分詞器在下遊任務的表現十之八九會比其他花裡胡哨的分詞器好用。

2. 不知道預訓練詞向量的分詞器

這時就需要去「猜」一下分詞器了。怎麼猜呢?首先,拿到預訓練詞向量表後,去裡面search一些特定詞彙比如一些網站、郵箱、成語、人名等,英文裡還有n't等,看看訓練詞向量使用的分詞器是把它們分成什麼粒度,然後跑幾個分詞器,看看哪個分詞器的粒度跟他最接近就用哪個,如果不放心,就放到下遊任務裡跑跑看啦。

當然,最理想的情況當然是先確定最適合當前任務數據集的分詞器,再使用同分詞器產出的預訓練詞向量啦。可惜網際網路上不可能有那麼多版本的公開詞向量供選擇,因此自己在下遊任務訓練集或者大量同分布無監督語料上訓練詞向量顯然更有利於進一步壓榨模型的性能。不過,怎麼為當前的任務去預訓練一份兒好用的詞向量又夠寫一篇文章的。。這裡就不展開講啦,小夕以後再寫~(沒關注小夕的趕緊關注!)

當然,除了分詞器跟詞向量表要match上,另外還要保證大小寫、OOV的定義等跟詞向量表match上。如果使用了一個區分了大小寫的詞向量表,但是你還將下遊任務的單詞全都小寫,那麼不用想了,絕對性能丟N多個百分點。

關於中文字向量

路人丁:好麻煩,我不分詞了,我要用字向量了哼
小夕:別逃( ̄∇ ̄)

如果你真的將char-level作為主力,那麼別忘了中文的字向量也要預訓練!並且預訓練的時候記得把窗口開大一些,不要直接使用word-level的窗口大小哦,其他預訓練超參數也隨手調一調更好了,絕對比隨機初始化的字向量明顯的好。

如果數據集噪聲很嚴重

這裡噪聲嚴重有兩種情況。對於數據集D(X, Y),一種是X內部噪聲很大(比如文本為口語化表述或由廣大網際網路用戶生成),一種是Y的噪聲很大(一些樣本被明顯的錯誤標註,一些樣本人也很難定義是屬於哪一類,甚至具備類別二義性)。

對於前一種噪聲,一個很自然的想法是去使用語言模型或者基於編輯距離去做文本糾錯,然鵝實際中由於專有名詞和超出想像的「假噪聲」存在,在實際場景中往往效果並不是很好。

這裡小夕一般有兩種思路,一種是直接將模型的輸入變成char-level(中文中就是字的粒度),然後train from scratch(不使用預訓練詞向量)去跟word-level的對比一下,如果char-level的明顯的效果好,那麼短時間之內就直接基於char-level去做模型叭~

如果性能差不太多,或者char的已經做到頭了,想做一下word-level呢?

不要急,先幫小夕買根棒棒糖唄( ̄∇ ̄)

一個很work但是貌似沒有太多人發現的trick就是使用特殊超參的FastText去訓練一份詞向量啦。

為什麼說特殊呢?一般來說fasttext在英文中的char ngram的窗口大小一般取值3~6,但是在處理中文時,如果我們的目的是為了去除輸入中的噪聲,那麼我們可以把這個窗口限制為1~2,這種小窗口有利於模型去捕獲錯別字(想像一下,我們打一個錯誤詞的時候,一般都是將其中的一個字達成同音異形的另一個字),比如word2vec學出來的「似乎」的最近詞可能是「好像」,然而小ngram窗口fasttext學出來的「似乎」最近詞則很有可能是「是乎」等內部包含錯別字的詞,這樣就一下子讓不太過分的錯別字構成的詞們又重新回到了一起,甚至可以一定程度上對抗分詞器產生的噪聲(把一個詞切分成多個字)。當然,如果數據集很乾淨的話,這樣訓練詞向量的話可能就gg了。

而對於後一種噪聲的情況(即Y中的噪聲),一種很直接的想法是做標籤平滑,然而小夕在實戰中使用多次發現效果並不是太明顯。

最後總結的trick是,首先忽略這個噪聲,強行的把模型儘可能好的訓出來,然後讓訓練好的模型去跑訓練集和開發集,取出訓練集中的錯誤樣本和開發集中那些以很高的置信度做出錯誤決策的樣本(比如以99%的把握把一個標籤為0的樣本預測為1),然後去做這些bad cases的分析,如果發現錯誤標註有很強的規律性,則直接擼一個腳本批量糾正一下(只要確保糾正後的標註正確率比糾正前明顯高就行)。

如果沒有什麼規律,但是發現模型高置信度做錯的這些樣本大部分都是標註錯誤的話,就直接把這些樣本都刪掉吧~常常也可以換來性能的小幅提升,畢竟測試集都是人工標註的,困難樣本和錯標樣本不會太多。

baseline選用CNN還是RNN?路線沿著CNN還是RNN走?

在文本分類中真的不要太糾結這個問題,個人傾向於CNN,主要是因為跑得快呀。。。可以多跑幾組實驗,多好。而且實際經驗感覺TextCNN這種基礎款CNN模型不僅實現特別容易,而且很容易成為一個數據集上的很強的baseline(除非這個分類任務很難),花一兩個小時把這個baseline做出來後再去做其他模型一點也不遲~也有助於早期就能糾正大方向。

而如果要談到客觀的思路決策上,那就去花一個小時好好看一下數據集吧~如果你感覺數據集裡很多很強的ngram可以直接幫助生成正確決策,那就CNN起步吧。如果感覺很多case都是那種需要把一個句子看完甚至看兩三遍才容易得出正確tag,那就RNN起步吧。

當然,如果數據大,又有顯卡,還可以嘗試Transformer。時間多的話,還可以CNN、RNN的模型都跑出來簡單集成一下。

Dropout加在哪裡

word embedding層後、pooling層後、FC層(全聯接層)後,哦了。起步階段dropout概率保持統一,有時間再單獨微調就好(從來沒有這個時間過)。

至於偶爾有人吹捧的word dropout策略(將一些token隨機mask成[PAD],或者說0。注意這個操作跟dropout加在embedding層後不等價哈),最後有時間的話試一下就好,親測在dropout調好的情況下一般並不會發揮多大作用。

關於二分類

二分類問題一定要用sigmoid作為輸出層的激活函數?當然不是,嘗試一下包含倆類別的softmax吧。可能多一條分支就多一點信息叭,雖然後者在數學形式上更醜一點,但是實踐中常常帶來零點幾個點的提升也是比較玄學了。

關於多標籤分類

如果一個樣本同時擁有多個標籤,甚至標籤同時還構成了DAG(有向無環圖),不要著急,先用binary-cross-entropy訓出個baseline來(即把每個類別變成一個二分類問題,這樣N個類別的多標籤分類問題就變成了N個二分類問題),畢竟這個都在tensorflow裡有現成API了,即tf.nn.sigmoid_cross_entropy_with_logits。因此實現代價很小。

然後你還可能驚喜的發現,這個baseline做好後好像多標籤問題不大了,DAG問題自己也基本解決了(雖然模型層並沒有專門針對這個問題作處理),然後就可以安心做模型辣。什麼?問題木有解決?去查論文吧╮( ̄▽ ̄」」)╭小夕還沒有接觸過這方面太難的數據集。

類別不均衡怎麼辦

像網上說的那樣趕緊各種上採樣下採樣boosting策略用起來?nono,正負樣本比才9:1的話,繼續做你的深度模型調你的超參吧,模型做好後你會發現這點不均衡對模型來說不值一提,決策閾值也完全不用手調。但!是!如果你發現經常一個batch中完全就是同一個類別的樣本,或者一些類別的樣本經過好多batch都難遇到一個的話,均衡就非常非常有必要了。類別不均衡問題傳送門->

【小夕精選】如何優雅而時髦的解決不均衡分類問題

別太糾結系列

別太糾結文本截斷長度使用120還是150

別太糾結對性能不敏感的超參數帶來的開發集性能的微小提升

別太糾結未登陸詞的embedding是初始化成全0還是隨機初始化,別跟PAD共享embedding就行

別太糾結優化器用Adam還是MomentumSGD,如果跟SGD的感情還不深,就無腦Adam,最後再用MomentumSGD跑幾遍

還是不會用tricks但是就是想跑出個好結果怎麼辦

BERT了解一下。

Over。

暫時想起來的就是這些啦,剩下有想起來的tricks小夕會更新到知乎上,傳送門:

https://www.zhihu.com/question/265357659/answer/578944550

話說,小夕跟大家分享了這麼多tricks,親愛的們有沒有秘藏tricks在評論區分享給小夕呢( ̄∇ ̄)

相關焦點

  • 【代碼+經驗】阿里雲tianchi新聞文本分類大賽rank4分享
    2.2 比賽使用的深度模型首先是基於深度學習的文本分類的模型介紹: 史博:基於深度學習的文本分類[4]這裡就不進行詳細的介紹了,如果有感興趣的同學可以通過閱讀各種專欄以及比賽分享進行查閱和理解。個人在小瑤的分享上學到了很多:夕小瑤:從經典文本分類模型TextCNN到深度模型DPCNN[5]這篇文章很詳細地講解了對於文本分類到底是卷積層重要還是分類層重要,我通過這個改進了一下自己的TextCNN,加入了一層全連接層效果有1個點的improvement,雖然最後我並沒有選擇這個模型hhh。
  • 文本分類六十年
    也正因為如此,如今很少有文章去關注如何使用淺層學習模型來緩和模型計算和構建數據時的局限性。模型文本分類模型文本分類就是從原始文本語料中提取語義特徵,並基於這些特徵預測文本數據的主題類別。GloVe -具有局部上下文和全局統計功能-訓練單詞-單詞共現矩陣中的非零元素。最後,根據所選特徵將表示的文本輸入分類器。淺層學習方法是機器學習的一種。它從數據中學習,數據是對預測值的性能很重要的預定義功能。但是,要素工程是一項艱巨的工作。在訓練分類器之前,我們需要收集知識或經驗以從原始文本中提取特徵。
  • 乾貨| 深度學習在文本分類中的應用
    ,判斷文本情感屬於{非常消極,消極,中立,積極,非常積極}中的哪一類新聞主題分類:判斷新聞屬於哪個類別,如財經、體育、娛樂等自動問答系統中的問句分類社區問答系統中的問題分類:多標籤分類,如知乎看山杯4%性能(performance);對於不在預訓練的word2vec中的詞,使用均勻分布U[a,a]隨機初始化,並且調整a使得隨機初始化的詞向量和預訓練的詞向量保持相近的方差,可以有微弱提升;可以嘗試其他的詞向量預訓練語料,如Wikipedia[Collobert et al. (2011)]
  • 文本分類經典論文:fasttext,textcnn解讀
    文本分類是自然語言處理領域一個非常經典的任務,一般文本分類分為三種,基於規則的文本分類,基於機器學習的文本分類和基於深度學習的文本分類。本文我們重點關注基於深度學習的文本分類,並為大家介紹文本分類中非常經典的fasttext和textcnn。
  • 文本分類上分利器: Bert微調trick大全
    預訓練模型雖然很強,可能通過簡單的微調就能給我們帶來很大提升,但是大家會發現比賽做到後期,bert等預訓練模型煉丹一定程度的時候很難有所提升,分數達到了瓶頸,這個時候需要針對具體的任務如何進行微調使用,就涉及到了考經驗積累的tricks,這篇論文做了非常大的充足實驗,為我們提供了寶貴的BERT微調經驗及方法論,當需要應用BERT到具體的現實任務上時,可以參照這篇論文提供的調參路線進行優化,我在NLP
  • 谷歌推出新模型「pQRNN」,少量參數下進行文本分類,性能堪比BERT
    同時,谷歌證明了該模型能在參數較少的情況下進行文本分類任務,並達到BERT級別的性能表現。 深層神經網絡的快速發展在過去的十年中徹底改變了自然語言處理(NLP)領域 。同時,諸如保護用戶隱私、消除網絡延遲、啟用離線功能以及降低運營成本等問題,迅速推動了可以在行動裝置而不是在數據中心運行的 NLP 模型的發展。
  • 谷歌推出新模型「pQRNN」,少量參數下進行文本分類,性能堪比BERT
    同時,谷歌證明了該模型能在參數較少的情況下進行文本分類任務,並達到BERT級別的性能表現。深層神經網絡的快速發展在過去的十年中徹底改變了自然語言處理(NLP)領域 。同時,諸如保護用戶隱私、消除網絡延遲、啟用離線功能以及降低運營成本等問題,迅速推動了可以在行動裝置而不是在數據中心運行的 NLP 模型的發展。
  • EMNLP2021論文:元學習大規模多標籤文本分類
    >大規模多標籤文本分類(簡稱LMTC)是自然語言處理領域中一個十分重要的任務,其旨在從一個大規模的標籤集合(標籤集合大小一般以千為數量級)中選取出與文本相關的若干個標籤。比如在EURLEX57K的訓練集中有70%以上的標籤只有不到20個標註樣本,並且標籤全集中有40%左右的標籤沒有在訓練集中出現過。 為了處理這些少樣本和零樣本標籤,現有的方法均通過利用標籤的先驗信息來將多標籤文本分類任務轉化為文本匹配任務。
  • NLP經典論文推薦:baseline paper(文本分類)
    相對於每個詞類型都有獨立向量的傳統詞表示模型,我們的模型只需要每個字符類型一個向量和一組固定的組合模型參數。儘管這個模型很緊湊,更重要的是,語言中形式-功能關係的任意性,我們的「組合」詞表示在語言建模和詞性標註方面產生了最先進的結果。在形態豐富的語言(例如土耳其語)中,優於傳統基線的優勢尤為明顯。
  • 如何用更少的數據自動將文本分類,同時精確度還比原來的方法高
    該論文展示了如何用更少的數據自動將文本分類,同時精確度還比原來的方法高。本文會用簡單的術語解釋自然語言處理、文本分類、遷移學習、語言建模、以及他們的方法是如何將這幾個概念結合在一起的。如果你已經對NLP和深度學習很熟悉了,可以直接進入項目主頁.
  • 膠囊網絡(Capsule Network)在文本分類中的探索
    正如在人類的視覺系統的推理過程中,可以智能地對局部和整體(part-whole)的關係進行建模,自動地將學到的知識推廣到不同的新場景中。到目前為止,並沒用工作將 Capsule Network 應用於自然語言處理中(e.g., 文本分類)。我們針對 Capsule Network 在文本分類任務上的應用做了深入研究。
  • 畢業論文寫作分類有哪些?
    畢業論文的分類方式有很多,我們可以根據畢業論文的性質、內容、研究領域、對象、方法和表達方式對論文進行分類整理。1、根據研究內容和研究方法的性質對論文進行分類,可以將畢業論文分為四大類:分別是理論論文、實驗論文、描述性論文和設計性論文。
  • 文本分類綜述 | 邁向NLP大師的第一步(上)
    (文末 下期預告 別錯過)綜述內涉及的所有文本分類必讀論文清單,我們已經為大家整理打包好啦,訂閱號後臺回復『文本分類』即可獲取喔~文本分類綜述A Survey on Text Classification: From Shallow to Deep Learning,2020[1]文本分類是自然語言處理中最基本,也是最重要的任務
  • 顯式引入對分類標籤的描述,如何提高文本分類的效果?
    我們提出了三種方法引入這種描述:模板法——對每個標籤靜態地指定一個描述;抽取法——對每個標籤在輸入文本中抽取一段文字作為描述;生成法——動態地根據輸入的文本為每個標籤生成一段描述。使用這種技術,我們能夠在單標籤文本分類、多標籤文本分類和多角度情感分析任務的10個數據集上取得顯著更好的效果。
  • 創新工場兩篇論文入選ACL2020 中文分詞和詞性標註新模型性能創新高
    而創新工場的這兩篇文章用記憶神經網絡的方式記錄對分詞結果有影響的 n元組,並引入對詞性標註有影響的句法知識,將分詞結果和自動獲得的知識銜接起來,既發揮了神經網絡的優勢,也把知識的優勢用上,實現了分詞技術上小而有效的改進和突破。
  • 論文推薦|[T-MM 2021] RUArt: 一個以文本為中心的文本視覺問答方法
    該論文提出了一個以文本為中心的文本視覺問答模型,該模型將不同的模態映射到同一特徵空間中,根據其位置構建場景文本上下文,從而引入機器閱讀理解模型進行場景理解,並提出分別基於語義和位置的文本和對象之間的關係推理。在答案預測階段,該模型分別通過文本語義匹配和語義推理從場景文本和外部文本中預測答案。作為人類認識世界的重要途徑,視覺和語言是人類與外界互動過程中的主要信息渠道。
  • 中科院自動化所智能感知與計算研究中心11篇論文被CVPR接收 | CVPR...
    然而,很少有方法研究部分人臉塊識別。我們提出一種動態特徵匹配方法來解決部分人臉識別問題,它結合全卷積網絡和稀疏表達分類。首先,利用全卷積網絡提取 Gallery 和 Probe 的特徵圖;其次,利用一個大小滑動窗口把 Gallery 的特徵圖分解為與 Probe 特徵圖大小相同的子特徵圖,進而動態特徵字典;最後,利用稀疏表達分類來匹配 Probe 特徵圖與動態特徵字典的相似度。
  • 性能堪比GPT-3,但參數量僅為0.1%,LMU團隊推出NLP最強文本生成模型
    這項研究論文已發表至預印論文庫arXiv,論文摘要中顯示:我們證明了使用參數小几個數量級的語言模型也可以獲得類似GPT-3的性能。這是通過將輸入文本轉換成包含任務描述的完形填空,並結合梯度優化來實現的。
  • 深度學習文本分類|模型&代碼&技巧
    文本分類是NLP的必備入門任務,在搜索、推薦、對話等場景中隨處可見,並有情感分析、新聞分類、標籤分類等成熟的研究分支和數據集。本文主要介紹深度學習文本分類的常用模型原理、優缺點以及技巧。P.S.如果訓練數據充足(10w+),也可以從頭訓練加深全連接:原論文只使用了一層全連接,而加到3、4層左右效果會更好[2]TextCNN是很適合中短文本場景的強baseline,但不太適合長文本,因為卷積核尺寸通常不會設很大,無法捕獲長距離特徵。同時max-pooling也存在局限,會丟掉一些有用特徵。
  • 多標籤文本分類模型總結
    什麼是多標籤文本分類學術上常用的說法有兩個,一個是ExtremeMulti-label Learning, 簡稱XML,另一個是Extreme Multi-label Text Classification,簡稱XMTC,本質上都是對文本進行多標籤分類,即對於一個給定的文本,可能有多個標籤,我們需要設計一個模型預測其標籤。