文本情感分析

来源:互联网 发布:java为什么垃圾 编辑:程序博客网 时间:2024/04/27 00:56

给出一系列文本,判定它们的情感倾向性(positive or negative)。

一般都会采用机器学习的算法,要求有训练数据和测试数据。处理训练数据得到一个model,使用它来处理测试数据,得出每个测试样例的结果。这里有几个细节需要注意:测试数据和训练数据尽量要是同一个主题,不要相差太远,不然会降低训练处的model的适用效果;训练数据中正例和负例的比例要尽可能平衡。

主要的处理过程为:文本预处理,文本分词和提取特征,训练model,应用至测试数据并调整参数以提高效果,效果评测。

首先说一下编码问题。中文采用utf-8或Unicode编码都是OK的,在进行处理时,需要将文本数据的TXT文本编码格式和编程代码的编码格式调整统一,或者采用utf-8或者采用Unicode编码。这两种编码是有所差异的,并不等同。编程语言推荐使用Python 3.x 或者 Java,二者对中文编码的支持比较好。


文本预处理包括文本采集,标注情感倾向性,划分训练数据和测试数据,删除不规范和错误语句。

文本分词和特征提取。我在这里先进行了中文分词,分词工具有很多,推荐 jieba 分词工具,支持多种编程语言,支持自定义词典,还有汉语言处理包HanLP也很强大,不过仅限于Java的接口。显然,决定文本的情感倾向性的词语并非语句中的所有词,只是一些情感类词汇,包括一些情感类形容词语,带有感情色彩的名词,程度和否定副词。在这里对训练数据进行处理,最终将文本情感倾向性反映到词语上。。。对文本分词之后,统计词语出现的词频,统计信息如下表。词语t和文本类别的数目关系统计表 正向语句数目(c)负向语句数目(~c)含有词语t(t)AB不含词语t(~t)CD

(注:N=A+B+C+D)

然后就是关于词语和倾向性之间关系的表示,常用的方法有很多,比如卡方统计量,TF-IDF方法等,这里说互信息MI,以下是计算公式,

MI(t,c) =log_10⁡〖(p(t,c))/p(t)p(c)=log_10⁡〖AN/(A+B)(A+C)

由于是平衡的训练数据,所以可以转化为:

对每一个词语都可以计算其互信息值,用于对测试集的分类。

对测试数据的处理。对测试文本进行分词处理,提取情感类词汇,将得到一系列情感词汇,每个都有自己的MI值,以一定的权重进行求和,就得到了该文本的情感倾向性。

最后设置一个合适的阈值,进行分类,并不断调整阈值,得到最佳效果。

0 0