基于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分类器
相关文章
相关标签/搜索