情感分析了解一下?一个比情感词典、机器学习更好的方法

判断一部网文是否好评如潮,一个很好的指标就是读者评论。然而评论千千万万,光凭肉眼就想扫过所有评论的内容,从而判断出读者的褒贬实在是太naive了,一个常用的解决方法就是情感分析

情感分析即对带有主观色彩的文本进行正向负向中性等感情色彩的确定的方法。我们输入大量真实的评论文本,通过情感分析对每条网文评论进行正向负向中性判断,再进行统计分析,从而得出作品的好评度。

基于情感词典和基于机器学习的情感分析是目前比较主流的两种方法。

为了让大家更好的理解这两种情感分析方法,我们结合简单的案例进行实操比较,帮助大家了解这两种方法的优势与不足。

情感词典法

情感词典法,即基于情感词,否度副词等大量词库,利用相关计算公式对每条评论进行打分,最后基于得分判断评论的褒贬性。

举一个栗子:

网友A评论:“我很喜欢这部小说。”

网友B评论:“我很不喜欢这部小说。”

网友C评论:“我不是很喜欢这部小说。”

开始分析:

针对网友A,分词结果为“我、很、喜欢、这、部、小说”,其中“我、这、部”意义不大,处理掉。剩下“很、喜欢”。“很”作为一个程度词,程度分值为+1.75,整个句子的情感程度要乘以1.75。“喜欢”作为一个情感词,而且是一个正向的情感词,情感得分为+5,最终,整个句子的情感得分为:1.75*5=8.75

针对网友B,分词结果为“我、很、不、喜欢、这、部、小说”,预处理后剩下“很、不、喜欢”。“很”作为一个程度词,程度分值为+1.75,整个句子的情感程度要乘以1.75。“不”作为一个否定词,且在情感词“喜欢”之前,表示情感的反转,所以整个句子的情感方向反转,情感得分要乘以-1。“喜欢”作为一个情感词,而且是一个正向的情感词,情感得分为+5,最终,整个句子的情感得分为:1.75*-1*5=-8.75

针对网友C,分词结果为“我、不、是、很、喜欢、这、部、小说”,预处理后剩下“不、很、喜欢”。“很”作为一个程度词,程度分值为+1.75,整个句子的情感程度要乘以1.75。“不”作为一个否定词,且在程度词“很”之前,表示情感的削弱,所以整个句子的情感程度削弱,情感得分要乘以1/2。“喜欢”作为一个情感词,而且是一个正向的情感词,情感得分为+5,最终,整个句子的情感得分为:1/2*1.75*5=4.375

得分为正就是正向评论啦,如果是负分就是负向评论,0就是中性评论。其中情感词、程度词、否定词的来自于我们丰富的情感词库,其权重是由我们根据已有论文中提出的权重来赋予的。

这就是通过基于情感词典的情感分析方法,需要注意的是,计算出的得分是我们通过算法进行的判断,不一定是真实的结果。为了使得判断结果更可信,我们可以通过人工标注对大量评论进行真实准确的判断,通过对比算法判断和人工标注的判断来检验算法的准确性。

但是此算法过度依赖于情感词库的覆盖程度,词语情感剂量的准确性和计算公式的有效性。我们利用该算法对三部网络小说《流光夜雪》《如果你是菟丝花》《受害人总来找我》的评论进行情感判断。

结果见下表:

查准率: 在所有被判断为正样本中, 真正正样本的数量

召回率:在所有正样本中, 被识别为正样本的数量

AUC:Roc曲线下的面积,介于0.1和1之间。Auc作为数值可以直观的评价分类器的好坏,值越大越好。

我们发现AUC的值在0.5左右徘徊,《如果你是菟丝花》的值只有可怜的0.37,判断的结果并不够理想。

我们换另一种方法:完全基于机器学习的统计算法——TF-IDF模型

机器学习法

TF意思是词频(Term Frequency),IDF意思是逆向文件频率(Inverse Document Frequency)。TF-IDF是一种统计方法,用于评估一个字词对于一个语段或文章的重要程度。字词的重要性随着它在语段中出现的频率成正比增加,但同时会随着它在整个语料库中出现的频率成反比下降。可用以下公式计算:

TF-IDF= TF × IDF= 字词在某语段中出现的频率×lg()

再举一个栗子:

有一篇关于柴犬的文章,总词语数是100个,而词语“柴犬”出现了10次,那么“柴犬”一词在该文章中的词频就是10/100=0.1。如果“柴犬”一词在1,000篇文章中出现过,而语料库包含的文章总数是10,000,000份的话,其逆向文件频率就是 lg(10,000,000 / 1,000)=4。最后的TF-IDF的分数为0.1 * 4=0.4。如果字词“的”出现了30次,那么“的”在该文章中的词频就是30/100=0.3。但是“的”在1,000,000篇文章中出现过,其逆向文件频率就是 lg(10,000,000 / 9,000,000)=0.046。最后的TF-IDF的分数为0.3 * 0.046=0.014。

将TF-IDF运用于评论的情感分析的具体步骤如下:

其中TF-IDF矩阵是个m*n的矩阵,m为训练集中评论条数数目,n为m条评论中过滤后分词的最大数目。

最终测试得三篇小说的AUC值均在0.5以上,有了小幅度的提升,但是最好的AUC值仍停留在0.65左右难以上升。将模型的学习曲线画出后发现模型出现非常严重的过拟合现象。说明TF-IDF矩阵的维数过大,包含了太多与情感分析无关的词汇,在有限的小数据集情况下导致了严重的过拟合。如:“我喜欢这部小说”,分词后为“我”,“喜欢”,“这部”,“小说”,通过过滤步骤去除单字“我”,计算得到的TF-IDF的特征矩阵为[0.4,0.01,0.02]。然而特征矩阵中对最后情感分析有直接影响的仅仅是“喜欢”这个词语的TF-IDF值。

因此小编猜想,能否只将每条评论的情感词挑选出来计算TF-IDF特征矩阵,从而避免过拟合的情况呢?因此就诞生了同时基于词库和TF-IDF统计模型的情感分析算法,具体步骤如下:

情感词典与机器学习结合法

我们看一下最终的结果:

注:①流光夜雪 ②如果你是菟丝花 ③受害人总来找我

其中总条数表示获得的所有评论,可训练条数表示已经人工标注好情感倾向的评论条数。由于我们希望训练出通用的模型,所以运用一部分小说的评论作为训练集,而另一部分小说的评论作为测试集,如果通过A小说评论中训练出的模型在BC小说中表现良好,说明模型泛化能力很强,具有通用性。

有了不错的提升!AUC都提升到了0.7左右。在训练集规模较小的情况下还是一个较为不错

的结果。说明通过这种同时基于词库和TF-IDF的算法,我们得到了较好的改进!

好,说一下分析的结论吧!

如果要提升基于情感词典的结果,则要积累更多的情感词,并根据汉语博大精深、与时俱进的表达方式扩充得分的计量方法。而要提升基于TF-IDF的情感分析结果,需要给分析算法喂更多标注好的训练预料。而二者的合体,则要根据训练语料的内容扩充情感词典。将更多的训练与更多的词典结合起来,才会得到比较合理的情感分析结果。

后续针对文本情感分析,一鱼还会持续研究并分享给大家,敬请期待吧~

· END·

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180316G1AXGV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券