當前位置:成語大全網 - 成語詞典 - 文本分類方法有哪些

文本分類方法有哪些

文本分類問題: 給定文檔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知乎看山杯 從入門到第二