AllenNLP——有史以來最便捷的中文文本分類

使用AllenNLP進行中文文本分類或者其他任務都非常方便,初學NLP的同學一定不要錯過!

AllenNLP使用的分詞工具主要是spacy,主要用於英文,不能用於中文,但是這個庫是可以處理各種語言的,因此我們只需要新增中文的WordSplitter,就可以使用AllenNLP處理中文數據了。此外,該NLP庫會將各種複雜的預處理以及後處理幫助你完成,多數情況下只需要自己編輯讀取數據的DatasetReader、model以及配置文件,使用起來比較方便。

在前幾篇文章中,我們實現了thulac和jieba的中文分詞。
https://zhuanlan.zhihu.com/p/72459893
https://zhuanlan.zhihu.com/p/68228177

接下來,我嘗試使用AllenNLP處理中文數據,實驗選擇最簡單的中文分類,僅用來驗證處理中文數據的可行性,不追求太高的準確度。

準備數據:

  1. THUCNews的一個子集(10類),形式是一行爲一個標籤和一段文本,中間用中文空格隔開。
    https://blog.csdn.net/qq_36047533/article/details/88360833
    在這裏插入圖片描述
    在這裏插入圖片描述

  2. 中文詞向量,我選擇了一個300維的,形式是一行爲一個詞加300個數字,中間用空格隔開。https://github.com/Embedding/Chinese-Word-Vectors
    在這裏插入圖片描述

  3. 讀取數據的DatasetReader。需要注意的就是這個數據集中,標籤和文本是用中文空格隔開的。
    https://github.com/Whu-wxy/allennlp/blob/master/allennlp/data/dataset_readers/text_classification_txt.py

  4. 編輯config文件。這個我嘗試了兩個基於LSTM的模型,稍有不同。一個是embedding->seq2seq->classifier,另一個是embedding->seq2seq->seq2vec->classifier。
    https://github.com/Whu-wxy/allennlp/blob/master/training_config/cnews.json
    https://github.com/Whu-wxy/allennlp/blob/master/training_config/cnews2.json

訓練模型:

1.分詞速度對比
jieba
jieba1
jieba2
thulac
thulac
可以看出jieba比thulac分詞速度快了好多,所以我最終選擇用速度更快的jieba。

2. 訓練
訓練只需要在控制檯輸入

allennlp train ./path/config.json -s ./save_path

訓練的超參數我僅參考了其他的config文件,隨便設置了一下,最終得到的準確度還不錯,驗證集上最高都是大約95%。

得到的詞典如下圖所示:
在這裏插入圖片描述
兩個模型的訓練曲線如下圖所示:
在這裏插入圖片描述
在這裏插入圖片描述
可以看出效果還是很不錯的。

3. Predict
訓練完成後,可以在保存的目錄下看到model.tar.gz,之後可以使用這個文件進行預測。但是仍然會遇到編碼的問題,需要對predictor進行稍微修改。

親測以下修改方法可行。
在這裏插入圖片描述
然後將需要預測的文本保存到一個txt文件,格式是{“sentence”:“預測內容”}
然後在控制檯輸入類似下面的命令進行預測。

 allennlp predict ./cnews2/model.tar.gz ./pred.txt --cuda-device
 0 --batch-size 1 --predictor text_classifier --output-file ./pred_output

得到的結果如下:(左邊是源文件,右邊是輸出結果的文件)
在這裏插入圖片描述

我從新浪新聞隨便找了幾個新聞進行預測,結果如下圖,感覺很有趣。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章