基於jieba和doc2vec的中文情感語料分類

Chinese-sentiment-analysis-with-Doc2Vec

簡介

中文語料的情感分析基本步驟以下:html

  • 爬取相關的語料或者下載相關語料(本文使用了對於賓館評價的相關語料做爲例子)
  • 將語料進行預處理並分詞
  • 用某種量化的表達形式來對語料進行數字化處理
  • 基於監督學習的分類器訓練

開發環境Python-v3(3.6)git

gensim==3.0.1
    jieba==0.39
    scikit-learn==0.19.1
    tensorflow==1.2.1
    numpy==1.13.1+mkl

示例代碼參考Chinese-sentiment-analysis-with-Doc2Vec
https://github.com/lybroman/C...github

在repo中有兩個zip文件分別爲train.ziptest.zip數據,固然你也能夠直接在加載語料時將部分數據用做測試數據(詳見後文)。函數

數據預處理(preprocess.py)

  • zip數據中爲大量的txt文檔,每個的後綴是評分,例如72_1380108_2006-11-9_1.0.txt,那麼該評分爲1.0分(其實就是差評啦)。咱們須要作的是將全部評分劃分爲一、二、三、4,5檔,顧名思義就是評價由壞到好。這裏用了一些簡單的字符串處理來獲取分數並使用round函數來對分數取整。
  • 將不一樣的評分txt按folder分類放好

分詞(words_segment.py

  • 分詞是經過第三方的jieba實現的。
  • 分詞以前須要作一些簡單的處理,好比過濾一些不感興趣的字符。
filter_chars = "\r\n,。;!,.:;:、"
    trans_dict = dict.fromkeys((ord(_) for _ in filter_chars), '')
    line = line.translate(trans_dict)
  • 將分完詞的語料按照分數歸併到同一個文本作爲訓練作準備

文本向量化模型(main.py:step 1-3

  • 這裏只要使用到了gensim.models.doc2vec,該模塊提供了將不定長的文本映射到維度大小固定的向量的功能。這對於計算類似度仍是用做後續的CNN分類器訓練(後續有時間的話會實現基於TensorFlow的分類器)都是十分有幫助的。
  • 具體的原理能夠參考distributed-representations-of-sentences-and-documents
  • gensim doc2vec
  • 本文旨在經過簡單的示例介紹如何經過訓練模型來自動判斷某個新的輸入評價是好評(5分)仍是差評(1分),因此在後續的代碼中,使用的樣本就來自於這兩類樣本的集合(後續有時間的話會繼續實現多分類問題)

訓練分類器(main.py:step 4-5

  • 這裏使用了sklearn中的分類器(LR、SVM、決策樹等等,最新版本的sklearn還提供了NN的實現)。具體參考scikit-learn
  • 數據的標記十分簡單,將5分的訓練集標記爲1,1分的訓練集標記爲0便可(若是實現多分類,按照分數標記便可。)
  • 其中我把20%的訓練集抽出做爲測試數據:
train, test, train_label, test_label = ms.train_test_split(
        train_arrays, train_labels, test_size=0.2)
  • 最後進行驗證,通常>0.6就認爲是一個有不錯預測能力的模型了

新樣本預測(prediction.py

  • 經過加載以前訓練的model和分類器對測試樣本進行預測
  • 同時記錄了每個測試樣本最近似的訓練樣本

後續工做

  • 實現多分類
  • 基於TF的CNN分類器
相關文章
相關標籤/搜索