文字分類方法有哪些

  • 作者:由 匿名使用者 發表于 收藏
  • 2022-12-28

文字分類方法有哪些拋下思念17 2022-06-14

文字分類問題: 給定文件p(可能含有標題t),將文件分類為n個類別中的一個或多個

文字分類應用: 常見的有垃圾郵件識別,情感分析

文字分類方向: 主要有二分類,多分類,多標籤分類

文字分類方法: 傳統機器學習方法(貝葉斯,svm等),深度學習方法(fastText,TextCNN等)

本文的思路: 本文主要介紹文字分類的處理過程,主要哪些方法。致力讓讀者明白在處理文字分類問題時應該從什麼方向入手,重點關注什麼問題,對於不同的場景應該採用什麼方法。

文字分類的處理大致分為

文字預處理

、文字

特徵提取

分類模型構建

等。和英文文字處理分類相比,中文文字的預處理是關鍵技術。

針對中文文字分類時,很關鍵的一個技術就是中文分詞。特徵粒度為詞粒度遠遠好於字粒度,其大部分分類演算法不考慮詞序資訊,基於字粒度的損失了過多的n-gram資訊。下面簡單總結一下中文分詞技術:基於字串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法 [1]。

1,基於字串匹配的分詞方法:

過程:這是

一種基於詞典的中文分詞

,核心是首先建立統一的詞典表,當需要對一個句子進行分詞時,首先將句子拆分成多個部分,將每一個部分與字典一一對應,如果該詞語在詞典中,分詞成功,否則繼續拆分匹配直到成功。

核心: 字典,切分規則和匹配順序是核心。

分析:優點是速度快,時間複雜度可以保持在O(n),實現簡單,效果尚可;但對歧義和未登入詞處理效果不佳。

2,

基於理解的分詞方法:基於理解的分詞方法是透過讓計算機模擬人對句子的理解

,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法資訊和語義資訊來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和資訊。由於漢語語言知識的籠統、複雜性,難以將各種語言資訊組織成機器可直接讀取的形式,因此目前基於理解的分詞系統

還處在試驗階段

3,基於統計的分詞方法:

過程:統計學認為分詞是一個

機率最大化問題

,即拆分句子,基於語料庫,統計

相鄰的字組成的詞語出現的機率

,相鄰的詞出現的次數多,就出現的機率大,

按照機率值進行分詞

,所以一個完整的語料庫很重要。

主要的統計模型有: N元文法模型(N-gram),隱馬爾可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),條件隨機場模型(Conditional Random Fields,CRF)等。

1,

分詞

: 中文任務分詞必不可少,一般使用jieba分詞,工業界的翹楚。

2,

去停用詞:建立停用詞字典

,目前停用詞字典有2000個左右,停用詞主要包括一些副詞、形容詞及其一些連線詞。透過維護一個停用詞表,實際上是一個特徵提取的過程,本質 上是特徵選擇的一部分。

3,

詞性標註

: 在分詞後判斷詞性(動詞、名詞、形容詞、副詞…),在使用jieba分詞的時候設定引數就能獲取。

文字分類的核心都是如何從文字中抽取出能夠體現文字特點的關鍵特徵,抓取特徵到類別之間的對映。 所以特徵工程很重要,可以由四部分組成:

1,基於詞袋模型的特徵表示:以詞為單位(Unigram)構建的詞袋可能就達到幾萬維,如果考慮二元片語(Bigram)、三元片語(Trigram)的話詞袋大小可能會有幾十萬之多,因此基於詞袋模型的特徵表示通常是極其稀疏的。

(1)詞袋特徵的方法有三種:

(2)優缺點:

2,基於embedding的特徵表示: 透過詞向量計算文字的特徵。(主要針對短文字)

4,基於任務本身抽取的特徵:主要是針對具體任務而設計的,透過我們對資料的觀察和感知,也許能夠發現一些可能有用的特徵。有時候,這些手工特徵對最後的分類效果提升很大。舉個例子,比如對於正負面評論分類任務,對於負面評論,包含負面詞的數量就是一維很強的特徵。

5,特徵融合:對於特徵維數較高、資料模式複雜的情況,建議用非線性模型(如比較流行的GDBT, XGBoost);對於特徵維數較低、資料模式簡單的情況,建議用簡單的線性模型即可(如LR)。

6,主題特徵:

LDA(文件的話題): 可以假設文件集有T個話題,一篇文件可能屬於一個或多個話題,透過LDA模型可以計算出文件屬於某個話題的機率,這樣可以計算出一個DxT的矩陣。LDA特徵在文件打標籤等任務上表現很好。

LSI(文件的潛在語義): 透過分解文件-詞頻矩陣來計算文件的潛在語義,和LDA有一點相似,都是文件的潛在特徵。

這部分不是重點,傳統機器學習演算法中能用來分類的模型都可以用,常見的有:NB模型,隨機森林模型(RF),SVM分類模型,KNN分類模型,神經網路分類模型。

這裡重點提一下貝葉斯模型,因為工業用這個模型用來識別垃圾郵件[2]。

1,fastText模型:

fastText 是word2vec 作者 Mikolov 轉戰 Facebook 後16年7月剛發表的一篇論文: Bag of Tricks for Efficient Text Classification [3]。

模型結構:

改進:注意力(Attention)機制是自然語言處理領域一個常用的建模長時間記憶機制,能夠很直觀的給出每個詞對結果的貢獻,基本成了Seq2Seq模型的標配了。實際上文字分類從某種意義上也可以理解為一種特殊的Seq2Seq,所以考慮把Attention機制引入近來。

過程:

利用前向和後向RNN得到每個詞的前向和後向上下文的表示:

詞的表示變成詞向量和前向後向上下文向量連線起來的形式:

模型顯然並不是最重要的: 好的模型設計對拿到好結果的至關重要,也更是學術關注熱點。但實際使用中,模型的工作量佔的時間其實相對比較少。雖然再第二部分介紹了5種CNN/RNN及其變體的模型,實際中文字分類任務單純用CNN已經足以取得很不錯的結果了,我們的實驗測試RCNN對準確率提升大約1%,並不是十分的顯著。最佳實踐是先用TextCNN模型把整體任務效果除錯到最好,再嘗試改進模型。

理解你的資料: 雖然應用深度學習有一個很大的優勢是不再需要繁瑣低效的人工特徵工程,然而如果你只是把他當做一個黑盒,難免會經常懷疑人生。一定要理解你的資料,記住無論傳統方法還是深度學習方法,資料 sense 始終非常重要。要重視 badcase 分析,明白你的資料是否適合,為什麼對為什麼錯。

超參調節:

可以參考 深度學習網路調參技巧 - 知乎專欄

一定要用 dropout: 有兩種情況可以不用:資料量特別小,或者你用了更好的正則方法,比如bn。實際中我們嘗試了不同引數的dropout,最好的還是0。5,所以如果你的計算資源很有限,預設0。5是一個很好的選擇。

未必一定要 softmax loss: 這取決與你的資料,如果你的任務是多個類別間非互斥,可以試試著訓練多個二分類器,也就是把問題定義為multi lable 而非 multi class,我們調整後準確率還是增加了>1%。

類目不均衡問題: 基本是一個在很多場景都驗證過的結論:如果你的loss被一部分類別dominate,對總體而言大多是負向的。建議可以嘗試類似 booststrap 方法調整 loss 中樣本權重方式解決。

避免訓練震盪: 預設一定要增加隨機取樣因素儘可能使得資料分佈iid,預設shuffle機制能使得訓練結果更穩定。如果訓練模型仍然很震盪,可以考慮調整學習率或 mini_batch_size。

知乎的文字多標籤分類比賽,給出第一第二名的介紹網址:

NLP大賽冠軍總結:300萬知乎多標籤文字分類任務(附深度學習原始碼)

2017知乎看山杯 從入門到第二

Top