情感识别,主要就是正和负的识别,偶尔也有中性。类别比較少。所以相对于广义的文本分类来说。看起来要简单非常多,特别是非常多词汇都有非常强的倾向性。
当然这是针对某一特定的领域。一般的话,情感识别主要用于商品评论,由于不同的商品会有不同的术语之类的专门的某一词汇,所以假设将某一领域的数据集上学到的模型应用在还有一个领域的话,可能效果会不非常理想。
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