1. 程式人生 > >長文字分類的總結

長文字分類的總結

笨妞很少做文字分類,因為工作中文字分類確實不怎麼用得到,唯一一個專案用到短文字分類,驗證集acc和f1都到90%以上,所以在笨妞印象中文字分類應該是很簡單的分類問題,都不屬於NLP問題。偶然碰到DC競賽中“達觀杯”文字分類大賽,嘗試了一下新聞類文字的分類。其實並沒有那麼簡單。

資料概況

“達觀杯”的主題是19類新聞分類,資料包含4個欄位:id(文章索引)、article(字級別文章)、word_seg(詞級別文章)、class(類別),其中字和詞全部用數字代替。

以詞度量文章的長度,其分散式這樣的:

總體來說,算是長文字吧,且長度分佈比較分散。

各類別的分佈是這樣的:

{'14': 6740, '3': 8313, '12': 5326, '13': 7907, '1': 5375, '10': 4963, '19': 5524, '18': 7066, '7': 3038, '9': 7675, '4': 3824, '17': 3094, '2': 2901, '8': 6972, '6': 6888, '11': 3571, '15': 7511, '5': 2369, '16': 3220}。

過程總結

之前做短文字分類的時候用了兩個模型——bilstm和cnn,兩個模型的驗證acc都在90%以上,所有首先考慮這兩個演算法。回過頭去看,有這麼高的精度主要還是分類的文章規則性比較強,且屬於特定領域,詞量不多,類別差異可能比較明顯。

搜了一下別人對“文字分類”的總結,貌似中文,基於詞的效果會好於字。因此用第三個欄位(詞級別文章)作為訓練資料。首先訓練詞向量,分別訓練了200維和100維的詞向量做備用。

模型很快搭好,接下來設定輸入長度,一般是以最長的文字長度作為輸入長度,然而這個資料中,最長的文字達到幾萬字,不太適合,於是設定最長為1000(80%滿足)。

  1. 首先跑bilstm,沒有GPU,200維詞向量且詞向量在模型中不參與訓練,跑一輪需要20個小時左右,第一輪驗證準確率達到0.74的樣子,沒有勇氣跑第二輪了。

  1. 換上TextCNN,和bilstm相比,速度快到飛起來,30分鐘便可跑一輪,看別人說Textcnn做文字分類容易過擬合,於是採用了變換batch_size和lr,batch_size變化範圍(32, 64, 128, 256), lr從0.0005開始,val_loss連續2次不下降,則lr變為原來的0.2倍。這樣訓練後,驗證集f1到了0.8,測試集預測後提交,f1只有0.74。CNN並聯和串聯都嘗試過,其中並聯比串聯更容易過擬合。

  2. doc2vec+mlp,這個沒什麼好說的,充數,驗證集f1為0.7019。

  3. keras版本的fasttext。fasttext之前沒有接觸過,算是一個新收穫。fasttext也是mikolov大神的傑作,原生版的原理基本上和word2vec類似,採用cbow和skgram兩種模型,同樣是一個輸入層+一個隱藏層(對映)+softmax。不同的是,輸入不僅僅是詞,採用了ngram。原生的還需要安裝,於是自組了keras版本的,後來發現,不用原生的是大失誤。keras版本的,ngram設為2,16G的記憶體就很吃緊了,原因在於,按照ngram=2遍歷,embedding層最大有幾百萬的節點,句子長度為1000,算一算確實比較可怕。用ngram=1,跑下來,f1只能到0.72,放棄。

4. 機器學習經典文字分類演算法嘗試

   tfidf+svm,選錯了svm的kernel,選了非線性kernel,tfidf特徵有100多萬維,用非線性kernel速度太慢了,且效果不好,即便壓縮到5000維,速度還是跟不上。後來別人給的baseline,用linearsvc,速度快,且測試集f1能到0.77。這就是經驗呀。 

tfidf+nb: 原本覺得樸素貝葉斯效果應該不會比mlp差的,但我做出來f1只有 0.59。

5. 文字inception:這是“看山杯”文字分類大賽第一名自創的模型,訓練過程中過擬合嚴重,訓練acc到0.92,驗證集val_acc只有0.75.

6. 原生版fasttext: 認真讀了一下fasttext的論文,並看了官網,發現原生版和自己的keras版本還是很不同的,原生版採用C語言,讀入文字沒有最大長度之分。所有資料全部讀進去,且可分bucket,不像一般的深度學習框架,需要對句子進行padding。同時,原生版處理學習率是從0.1開始,然後按照訓練步數來折算學習率的變化值,這也是keras不好操作的。不太明白的一點是:為什麼word2vec和fasttext用0.1這麼大的學習率,loss也並不震盪。

用原生版fasttext分別訓練了字級別文章和詞級別文章,驗證集準確率分別是0.761和0.77,詞級別測試集f1也達到0.774。好悲傷,搞了這麼久才和人家的baseline同分。

想了一下,tfidf+svm和fasttext都有一個共同點——句子的長度對模型沒有影響。而這個資料集中,句子長度分佈太廣了,很難一個模型照顧到短的文字和長文字。那麼要不要做了個多輸入的CNN什麼的呢?想法雖好,但多通路選擇性輸入,訓練的時候怎麼反向傳播呢?好吧,暫時到這兒吧。

總結

在cnn和lstm中,嘗試了embedding層訓練和不訓練兩種,參與訓練速度會慢一些,效果也並沒有很好的提升。

複雜的模型未必會有很好的結果,簡單模型效果未必不理想,沒必要一味追求深度學習、複雜模型什麼的。選什麼樣的模型還是要根據資料來的。

同一類問題,不同的資料效果差異很大,不要小看任何一類問題,例如分類,我們通常覺得它很簡單,但有些資料並非你所想。本次“達觀杯”到目前為止,第一名最高也只有0.80。

相關推薦

文字分類總結

笨妞很少做文字分類,因為工作中文字分類確實不怎麼用得到,唯一一個專案用到短文字分類,驗證集acc和f1都到90%以上,所以在笨妞印象中文字分類應該是很簡單的分類問題,都不屬於NLP問題。偶然碰到DC競賽中“達觀杯”文字分類大賽,嘗試了一下新聞類文字的分類。其實並沒有那麼簡單。

達觀資料曾彥能:如何用深度學習做好文字分類與法律文書智慧化處理

在NLP領域中,文字分類輿情分析等任務相較於文字抽取,和摘要等任務更容易獲得大量標註資料。因此在文字分類領域中深度學習相較於傳統方法更容易獲得比較好的效果。正是有了文字分類模型的快速演進,海量的法律文書可以通過智慧化處理來極大地提高效率。我們今天就來分析一下當前state of art的文

如何用深度學習做好文字分類與法律文書智慧化處理[轉]

在NLP領域中,文字分類輿情分析等任務相較於文字抽取,和摘要等任務更容易獲得大量標註資料。因此在文字分類領域中深度學習相較於傳統方法更容易獲得比較好的效果。正是有了文字分類模型的快速演進,海量的法律文書可以通過智慧化處理來極大地提高效率。我們今天就來分析一下當前state o

深度學習與文字分類總結第二篇--大規模多標籤文字分類

上一篇部落格中我們已經總結了文字分類中常用的深度學習模型,因為知乎的本次競賽是多標籤的文字分類任務,這也是我第一次接觸多標籤分類,所以想單獨寫一篇部落格來記錄這方面的相關知識。 在這裡首先列出幾篇參考的文章: 基於神經網路的多標籤分類可以追溯到周志華在20

BAPI_EQUI_CREATE(IE01/IE02)建立裝置後,建立文字問題總結

裝置建立長文字問題總結 問題描述 在開發實施中,當我們通過BAPI_EQUI_CREATE建立裝置後,我們希望建立“附件資料 1”頁籤中的長文字; 其中,建立裝置使用:BAPI_EQUI_CREATE,實現程式碼後面給出簡單示例; 另外,建立長文字我們

深度學習與文字分類總結

前面一段時間一直忙著參加知乎看山杯機器學習挑戰賽,現在比賽結束了想著總結一下最近的收穫。因為這是一個多標籤多類別的文字分類問題,而且題目非常適合用深度學習相關的知識去做,正好結合著這個競賽把之前一段時間的學習成果檢驗一下。接下來我會分成常用模型總結、多標籤/多類別專題

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

1. 比賽介紹 這是一個文字多分類的問題:目標是“參賽者根據知乎給出的問題及話題標籤的繫結關係的訓練資料,訓練出對未標註資料自動標註的模型”。通俗點講就是:當用戶在知乎上提問題時,程式要能夠根據問題的內容自動為其新增話題標籤。一個問題可能對應著多個話題標籤,如下圖所示。

文字分類的演算法總結

本文對文字分類中的常用演算法進行了小結,比較它們之間的優劣,為演算法的選擇提供依據。 一、決策樹(Decision Trees) 優點: 1、決策樹易於理解和解釋.人們在通過解釋後都有能力去理解決策樹所表達的意義。 2、對於決策樹,資料的準備往往是

基於深度學習的大規模多標籤文字分類任務總結

自然語言處理方向的論文模擬到現在,有以下想法: 1. 很多模型都為啟發式演算法,從直觀上很好理解,但是對於大多數人來說,就是一個黑盒,70%時間都在處理資料和調參。 2. 在資料競賽中,常用的模型就是CNN和RNN,先調出baseline,然後再進行模型融合

2017知乎看山杯總結(多標籤文字分類)

任務描述:參賽者需要根據知乎給出的問題及話題標籤的繫結關係的訓練資料,訓練出對未標註資料自動標註的模型。 標註資料中包含 300 萬個問題,每個問題有 1 個或多個標籤,共計1999 個標籤。每個標籤對應知乎上的一個「話題」,話題之間存在父子關係,並通

文字分類之深度學習應用總結

總覽本教程分為五個部分,分別是:詞嵌入(Word Embeddings) + 卷積神經網路(CNN,Convolutional Neural Network) = 文字分類使用一個單層 CNN 架構調整 CNN 超引數考慮字元級的 CNN考慮用更深層的 CNN 進行分類1.詞

SAP建立物料主資料(維護文字,質量檢視中質量型別,分類檢視)

        gw_mvke,gw_mvkex,gw_marc,gw_marcx,gw_mbew,         gw_mbewx,gw_mlan,gt_mlan,gw_mltx,gt_mltx.     "檢視選擇     gw_head-material  = gw_mat01-matnr.  "物料

html學習——基礎分類總結

rect log 內容 sem ron text html pid 頁面 1. html 超文本標記語言HyperText Markup Language。html文檔基本結構: <!DOCTYPE html><head> &

軟件測試分類總結

子程序 最小 基本功 覆蓋 存在 靜態 測試用例設計 轉化 引入 在這之前,如果你問我,軟件測試的分類有哪些,我可能會回答的語無倫次。最近溫習了一下軟件測試分類的知識,覺得有必要總結一下。 從不同的角度可以將軟件測試分為六種分類方式:項目流程階段

python字符串操作分類總結

imp 文件名 step isspace 開始 rst 大小寫 解碼 als 1、切片操作: str[start:end:step]包括頭,不包括尾巴step為步長,意思是每隔step-1個元素,取一個字符"while"[::-1] 反向取字符串,實現字符串的反轉--》"e

R語言常用包分類總結

arr const poisson string arm ova 處理 port 線性規劃 常用包: ——數據處理:lubridata ,plyr ,reshape2,stringr,formatR,mcmc; ——機器學習:nnet,rpart,tree,party,la

java中緩存分類總結

後臺 mon 一級緩存 計算機系 memcache ava 本地 維基百科 場景 在平時的開發中會經常用到緩存,比如locache、redis等,但一直沒有對緩存有過比較全面的總結。下面從什麽是緩存、為什麽使用緩存、緩存的分類以及對每種緩存的使用分別進行分析,從而對緩存有更

5.1、文字分類

1、樸素貝葉斯 NB   三大概率     1、條件概率       Ω是全集,A、B是其中的事件(子集),p是事件發生的概率,則:p(A | B) = p(AB) / p(B),事件B發生,A發生的概率              

tensorflow 教程 文字分類 IMDB電影評論

昨天配置了tensorflow的gpu版本,今天開始簡單的使用一下 主要是看了一下tensorflow的tutorial 裡面的 IMDB 電影評論二分類這個教程 教程裡面主要包括了一下幾個內容:下載IMDB資料集,顯示資料(將陣列轉換回評論文字),準備資料,建立模型(隱層設定,優化器和損失函式的配置),

使用條件隨機場模型解決文字分類問題(附Python程式碼)

對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.tensorflownews.com。我們的公眾號:磐創AI。   一. 介紹 世界上每天都在生成數量驚人的文字資料。Google每秒處理超過40,000次搜尋,而根據福布斯報道,