本文介绍的是如何进行情感识别。
在自然语言中(尤其社交媒体和购物网站中),每一句话都隐含了具体的情感倾向,比如中性、正面、负面。比如:今天天气不错;今天心情不太好;苹果手机不错;地球是圆的。对于人来说,可以很轻易的就分辨出上述句子是正面的、中性的、负面的。
但是在自然语言处理中是如何进行判断的呢?下面就对基本的情感分析方法进行介绍。
1.准备
1.1 种子词库
在真正开始前,首先想想人看到一句话是如何思考的。
比如:今天天气不错。对于今天和天气来说,只是具体的对话对象,表明讨论的是今天的天气;而真正起作用的是‘不错’,表明今天的天气令人很舒畅,或者心情变好。因为才会得出‘今天天气不错’是正面的评价。
这里我们不关心具体的评价对象,但是可以很清楚看出某些词对于情感倾向识别是起关键作用的。那么我们是否可以建立一个标准情感词库作为情感分析的种子词库呢?答案是肯定的。
情感倾向的种子词库建立是通过分析语料库,首先对语料库去除停用词,然后对与其中的词进行分类,分别为:正面、负面、中性。比如:
正面:不错、很好、很棒、伟大
负面:不好、很坏、讨厌、无用
中性:手机、地球、一般、还行
1.2 文档频率和文档共现频率
文档频率是指某一个词在文档中出现的次数,用p(w)表示。
文档共现频率是指在同一个文档中共同出现的词的出现次数,用p(w1,w2)表示。
假设我们有很多商品评价或者微博比如下面的形式:
1.xxxxxxxx
2.xxxxxxx
3.xxxx
4.xxxxxx
那么如何统计p(w)和p(w1,w2)的呢?
p(w)通过(词出现的文档数)/(总文档数)计算得到。
p(w1,w2)通过(w1,w2共同出现的文档数)/(总文档数)计算得到。
1.3 PMI
PMI(Pointwise Mutual Information),中文称为互信息,描述的是两个事件在概率分布上的近似度量。计算公式如下:
如果w1和w2分布是相互独立的,那么p(w1,w2)=p(w1)∗p(w2),pmi(w1,w2)=log1=0。
相反,如果w1和w2的分布不是相互独立的,那么p(w1,w2)>p(w1)∗p(w2),并且相关性越强pmi的值越大,说明w1和w2共现携带的讯息越多。这个也很好理解,比如美国和川普是经常一起出现的,因为美国的总统是川普。相反,川普和我的名字大概率是不会共现的,因为我两根本没啥关系。
1.4 情感分析
我们给每一个句子都给出一个得分score,得分通过∑(待测短语的正面情感词的PMI)−∑(待测短语的负面情感词PMI)得到。
对于socre:
score>0表示正面情感
score=0表示中性情感
socre<0表示负面情感
2.编码
有了上文的准备工作就可以进行编码了,代码逻辑为:
- 1.统计和保存p(w)和p(w1,w2)
- 2.统计和保存pmi(w_1,w_2)矩阵
- 3.分别计算待测短语中词与正面情感词库所有词的PMI,将得到的PMI相加得到∑pmi(wi,wp)
- 4.分别计算待测短语中词与负面情感词库所有词的PMI,将得到的PMI相加得到∑pmi(wi,wn)
- 5.计算情感倾向总得分score=∑pmi(wi,wp)−∑pmi(wi,wn)
3.总结
本文介绍的只是简单的情感分析方法,实际的工作并不是这么简单。本文介绍的方法也有很多不足的地方:
- 需要的人工参与量大
- 模型效果对语料库依赖度高
- 某些修饰词和否定词的作用被忽略,比如不伟大,不开心
这些都是需要后续改进的地方。
另外新申请了个个人公众号,分享关于学习AI的经历,欢迎关注!
version_1_20171008
1202

被折叠的 条评论
为什么被折叠?



