情感识别,主要就是正和负的识别,偶尔也有中性。类别比较少,所以相对于广义的文本分类来说,看起来要简单很多,特别是很多词汇都有很强的倾向性。当然这是针对某一特定的领域。一般的话,情感识别主要用于商品评论,因为不同的商品会有不同的术语之类的专门的某一词汇,所以如果将某一领域的数据集上学到的模型应用在另一个领域的话,可能效果会不很理想。
Stephan Raaijmakers等的这篇文章[1]提出的是一种基于阀值投票的方法,即使用独立的分类器去分各个类别的数据,最后使用新领域的数据对分类结果进行投票校验。这个方法只要使用新数据的一小部分有标即可。大概是下面这张图所描述的意思。虽然这张图是下面的paper里面的。
Shoushan Liand Chengqing Zong的这篇文章[2]同样是对多领域数据的分类研究,他们提出的方法是把特征层面和分类器层面进行融合。此文首先是批判了上图所描述的独立分类的不足,然后提出了自己的新的方法,即在分类的同时进行分类器间的融合,具体步骤如下图:
按照我的理解,相当于在初次分类结束后,进行交叉验证。
John Blitzer等人的这篇文章[3]使用的是一种叫做结构一致学习 (SCL) 算法。他们不仅用频率,也用互信息来选取关键特征,然后对目标领域,计算与源领域之间的距离,用距离的大小来分辨目标域属于哪一个领域,最后再进行分类。
Chenghua Lin等的这篇文章[4]对三种与贝叶斯关系紧密的模型在无监督的情感识别方面进行了研究。这三个模型分别是latent sentiment model隐藏情感模型 (LSM), the joint sentiment topic 连接情感话题模型(JST) model, and the Reverse-JST model逆JST模型。
在看到以上paper的之前,本人还确实不知道情感倾向识别会有这么多的人在用不同的模型进行研究,也说明这个领域有难度。
下面我的实现就没有那么高端洋气了,我使用的是一种叫做感知机(Perceptron)的方法,也叫做单层神经网络。感知机使用特征向量来表示网络,特征向量即可看成是矩阵,通过把输入的矩阵映射到一个特殊的目标函数上,通过判断目标函数的输出值来确定类别。函数表示如下:
具体的实现是:将输入的语料转换成向量,使用上面的公式进行计算,即算是学习到了一个模型,多次迭代之后,用测试数据对这些学习到的模型进行分类测试,选择正确率最高的最为以后分类的标准模型。
具体的实现代码可看:https://github.com/laozhaokun/sentimentclassify
这里是利用学习到的模型实现的在线分类的源码:https://github.com/laozhaokun/sentimentclass
具体效果可看:http://sentimentclass.sinaapp.com/
Reference
[1] Stephan Raaijmakersand Wessel Kraaij , TNO ICT, Delft, The Netherlands , Classifier Calibration for Multi-Domain Sentiment Classification
[2] Shoushan Liand Chengqing Zong, National Laboratory of Pattern Recognition Institute of Automation, Chinese Academy of Sciences, Beijing 100190, China
[3] John Blitzer Mark Dredze Fernando Pereira , Biographies,Bollywood, Boom-boxes and Blenders: Domain Adaptation for SentimentClassification
[4] Chenghua Lin,Yulan He,Richard Everson, A Comparative Study of Bayesian Models for Unsupervised Sentiment
Detection
一个简单的情感识别系统的实现