[NLP]如何进行情感分析,kotlin实战

78 阅读2分钟

这里我们不关心具体的评价对象,但是可以很清楚看出某些词对于情感倾向识别是起关键作用的。那么我们是否可以建立一个标准情感词库作为情感分析的种子词库呢?答案是肯定的。

情感倾向的种子词库建立是通过分析语料库,首先对语料库去除停用词,然后对与其中的词进行分类,分别为:正面、负面、中性。比如:


正面:不错、很好、很棒、伟大

负面:不好、很坏、讨厌、无用

中性:手机、地球、一般、还行



1.2 文档频率和文档共现频率

文档频率是指某一个词在文档中出现的次数,用 p(w) p(w)表示。

文档共现频率是指在同一个文档中共同出现的词的出现次数,用 p(w1,w2) p(w_1,w_2)表示。

假设我们有很多商品评价或者微博比如下面的形式:


1.xxxxxxxx

2.xxxxxxx

3.xxxx

4.xxxxxx



那么如何统计 p(w) p(w)和 p(w1,w2) p(w_1,w_2)的呢?

p(w) p(w)通过 (词出现的文档数)/(总文档数) (词出现的文档数)/(总文档数)计算得到。

p(w1,w2) p(w_1,w_2)通过 (w1,w2共同出现的文档数)/(总文档数) (w_1,w_2共同出现的文档数)/(总文档数)计算得到。

1.3 PMI

PMI(Pointwise Mutual Information),中文称为互信息,描述的是两个事件在概率分布上的近似度量。计算公式如下:

pmi(w1,w2)=log(p(w1,w2)p(w1)∗p(w2))

pmi(w_1,w_2)=log(\frac{p(w_1,w_2)}{p(w_1)*p(w_2)})

如果 w1 w_1和 w2 w_2分布是相互独立的,那么 p(w1,w2)=p(w1)∗p(w2) p(w_1,w_2)=p(w_1)*p(w_2), pmi(w1,w2)=log1=0 pmi(w_1,w_2)=log1=0。

相反,如果 w1 w_1和 w2 w_2的分布不是相互独立的,那么 p(w1,w2)>p(w1)∗p(w2) p(w_1,w_2)>p(w_1)*p(w_2),并且相关性越强pmi的值越大,说明 w1 w_1和 w2 w_2共现携带的讯息越多。这个也很好理解,比如美国和川普是经常一起出现的,因为美国的总统是川普。相反,川普和我的名字大概率是不会共现的,因为我两根本没啥关系。

1.4 情感分析

我们给每一个句子都给出一个得分score,得分通过 ∑(待测短语的正面情感词的PMI)−∑(待测短语的负面情感词PMI) \sum(待测短语的正面情感词的PMI)-\sum(待测短语的负面情感词PMI)得到。

对于socre:


score>0表示正面情感



score=0表示中性情感



socre<0表示负面情感

2.编码


有了上文的准备工作就可以进行编码了,代码逻辑为:

  • 1.统计和保存 p(w) p(w)和 p(w1,w2) p(w_1,w_2)

  • 2.统计和保存pmi(w_1,w_2)矩阵

  • 3.分别计算待测短语中词与正面情感词库所有词的PMI,将得到的PMI相加得到 ∑pmi(wi,wp) \sum pmi(w_i,w_p)

写在最后

对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。

![ []

文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等,需要这些文档资料的,直接点击我的GitHub免费领取~