一、文档情感分类
1.什么是情感分析
所谓情感分析,就是指我们要针对一段文本来判断这段文本的文字“色彩”,到底是褒义,还是贬义,到底是抒发了什么情感。
文本情感分析是一个非常实用的工具,比如,我们需要分析用户对于商品的评价带有什么样的情感,从而能够更好地为商品的推荐和搜索结果服务。再比如,通过文本的情感分析,我 们可以了解到用户针对某一个时事的观点异同,以及观点分歧在什么地方,从而能够更加清晰地了解新闻的舆情动态。
2.基于监督学习的文档情感分类
文档情感分类属于文本情感分析中最基本的一种任务。这种任务的假设是,一段文本的作者 通过这段文本是想对某一个“实体”(Entity)表达一种情绪。这里的实体其实包括很多种 类型的对象,比如可能是商品,某个事件,也可能是某个人物。我们这里讨论的文本单元可 以是一个文档,也可以是一个句子等其他的文本段落。
值得注意的是,我们在这一类任务中,限制一个文本单元只表达,或者主要表达一种情感。 很明显,这种假设是比较局限的。一般来说,在实际的应用中,一个文本单元,特别是比较 长的单元例如文章,则往往包含多于一种的情绪。因此,我们可以看到文档情感分类其实是 一种简化了的情感分析任务。
同时,一个文本单元还可能对多个“实体”进行情感表达。比如一个用户针对某种款式相机 的多个方面进行了评价,那么每一个方面都可以作为一个实体,而这种时候,用户的情感可 能就更难仅以一种情感来加以概括了。
在最基本的文档情感分类的情况下,我们往往把这类任务转化成为一种监督学习任务,也就是说,我们希望通过一个有标签的训练集学习到一个分类器(Classifier)或者回归模型 (Regression),从而能够在未知的数据上预测用户的情感。
这里往往有两种形式的监督学习任务。一种是把文档分类为几种,最简单的情况下是两种情感。这就是二分或者多类分类问题。另外一种则是认为文档会有一种情感,但是每一种情感 之间有好坏的顺序区分,比如,评分“好”,就比“一般”要好,也就是说,这些评分之间 有一个次序问题。那么,很多时候,这种问题会被归结为一种“次序回归”(Ordinal Regression)问题。
在明确了我们需要构建什么样的监督学习任务以后,对于这些任务而言,如何选取“特 性”(Feature)就是一个很重要的工作了。诚然,对于每一个具体的任务而言,我们往往需要选取不同的特性,但是在过去的很多实践中,经过反复验证,有一些特性可能会有比较好的效果。
首先,我们曾经多次提到过的“词频”(Term Frequency)以及更加复杂一些的TF-IDF 词权重法都是经常使用的文字特性。在文档情感分类中,这一类特性被认为非常有效。
另外一种使用得比较频繁的特性就是“词类”(Part of Speech)。词类提供了句子中每个词的成分,比如哪些词是动词,哪些词是名词等等。这些词性可以跟某种特定的情感有很密 切的联系。
还有一种很直观的特性就是“情感词汇”。比如,我们已经知道了“好”、“不错”等词表 达了正向的情感,而“差”、“不好”、“不尽人意”等词表达了负向的情感。我们可以事 先收集一个这类情感词汇的集合。这个集合里的词汇可以跟最后文档的情感有很直接的联系。
最后,需要指出的是,如何开发一个合适的特性往往是文档分类的重点工作。
除了特性以外,在文档情感分类这个任务中,传统上经常使用的文字分类器有“朴素贝叶斯”(Naïve Bayes)分类器、“支持向量机”(Support Vector Machines)等。
3.基于非监督学习的文档情感分类
情感词汇已经为我们对大段文字乃至整个文档的分类有了很强的指导意义,因此,也有一些 方法寻求利用非监督学习的方式来对文档进行情感分类。注意,这里所谓的非监督学习,是 指我们并不显式地学习一个分类器,也就是说,不存在一个训练数据集,不需要我们提前收 集数据的标签。
这一类思想的核心其实就是设计一套“打分机制”(Scoring Heuristics),来对整个文档 做一种粗浅的判断。当然,这种打分机制背后都有一种理论来支撑。
比如,有一种打分模式依靠首先识别的“词类”进行分析,特别是大量的相邻的两个词的词性,诸如“特别好”。这里,“特别”是副词,“好”是形容词,然后就可以得出在某些情况下,副词和形容词的这种搭配特别多的时候,并且在正向的情感词比较多的时候,整个文档也许就是比较偏向正向的情感。
我们需要指出的是,这种方法虽然听上去比较“山寨”,但是对于很多产品和项目来说,获取大量高质量的标签信息往往是非常耗时,甚至是不可能的,例如上百万的用户对产品的评价数据。因此,在没有训练数据的情况下,利用某种打分机制,可以通过最简单的一些情感 词库开发出文档情感分类的算法,这其实也不失为一种快速迭代的方式。
二、如何来提取情感“实体”和“方面”呢
1.“实体”和“方面”的提取
对于文本情感分析而言,“实体”(Entity)和“方面”(Aspect)是两个非常重要的概念。很多情感分析的任务都是围绕着这两个概念而产生的。在谈论如何对这两个概念提取之前,我们先来看看这两个概念的意义。
“实体”其实就是文本中的某一个对象,比如产品的名字、公司的名字、服务的名字、个 人、事件名字等。而“方面”则是实体的某种属性和组建。
比如这么一个句子:“我买了一部三星手机,它的通话质量很不错”。在这里,“三星手 机”就是一个实体,而“通话质量”则是一个方面。更进一步,“很不错”则是一个情感表 达,这里是针对“三星手机”这个实体的“通话质量”这个方面。很明显,如果我们想要精 准地对文本的情感进行分析,就一定得能够对实体和方面进行有效提取。
从广义的范围来说,实体和方面的提取都属于“信息提取”(Information Extraction)的 工作。这是一个非常大的任务类别,用于从大量的非结构化文本中提取出有价值的信息。实 体和方面的提取可以利用一般性的信息提取技术,当然往往也可以利用句子中的一些特殊结构。
2.常用的提取技术
第一种最简单的技术是基于“频率”(Frequency)的提取。在这样的技术中,我们先对文本进行“词类”(Part Of Speech)分析,分析出每个词的词性。然后主要针对句子中 的“名词”,计算这些“名词”出现的频率。当这些频率达到某一个阈值的时候,我们就认为这些名词是一个实体或者方面。
这里的假设是,在一个例如产品评论的文本集合中,如果一个名词反复出现在这个集合的很 多文档中,那么这个名词很有可能就是一个独立的实体或者方面。为了达到更好的效果,更 加复杂的词频技术,例如 TF-IDF 也经常被用在计算名词的频率上,从而提取它们作为实体 和方面的候选词。
另一种比较常见的针对情感分析开发的技术,就是利用句子中的一些特殊的结构从而达到信息提取的目的。比如,回到刚才的那句话:“我买了一部三星手机,它的通话质量很不错”。在这句话 中,“很不错”作为一个情感词汇,一定和某一个方面,甚至是某一个实体成对出现的。那么这个成对出现的情况就是我们可以利用的情感句子的有利特征。
刚才我们说的不管是基于词频的还是利用配对关系的方法,都可以算是无监督的学习方法。 这些方法的本质,其实就是利用某种之前定义好的规则或者是某种洞察来针对文本进行提取。另外一种思维其实就是把信息提取转换成为监督学习任务。
回到例子“我买了一部三星手机,它的通话质量很不错”这句话。这句话的文本作为输入, 我们需要的输出是“三星手机—实体”、“通话质量—方面”这样的标签信息。那么,一 个基本的想法就是,我们其实可以针对这句话构建一些特征,然后学习出一个分类器,从而可以得到这样的标签。
值得注意的是,这一类的监督学习任务和我们常见的例如分类一个文档是不是垃圾信息不一样,这里我们需要输出多个标签。这种需要输出多个标签的任务,特别是这些标签之间可能 还有一定关系的情况,往往被称作是“结构化预测”(Structural Prediction)任务。
在结构化预测这个领域,“条件随机场”(Conditional Random Field),或者简称是 CRF的模型,是对这方面任务进行运作的一个经典模型。然而,需要指出的是,把实体和方 面提取当作监督任务以后,很明显,我们就需要有一个训练集和标签,这个训练集的匮乏常常成为 CRF 产生理想效果的瓶颈。
三、文本情感分析中如何做意见总结和搜索
1.意见总结
简单来说,意见总结就是从无结构的文本中提取出来的各种情感信息的综合表达。我们这里 聊的意见总结主要是指“基于方面的意见总结”(Aspect-based Opinion Summarization)。也就是说,意见的总结主要是围绕着产品的种种方面来产生的。
概括一下,基于方面的意见总结有两个特点。第一,这样的总结主要是针对物体的实体以及对应的方面来进行的。第二,意见总结需要提供数量化的总结。什么是数量化的总结?就是总结里需要指出,持有某种意见的用户占多少百分比,又有多少百分比的用户有其他意见。 很明显,这里还牵涉到如何表达和显示这些意见总结的步骤。
可以说,基于方面的意见总结成为了意见总结的主要任务。另外,基于方面的意见总结还可以与其他文本技术相结合,从而能够延展这个技术的效果。比如,总结语句的生成可以分 为“句子选择”和“人工句子生成”这两种方案。
首先来说一下句子选择这个想法。句子选择的思路是,我们希望在最后的意见总结里,能够 利用已有的非常有代表性的句子,这样用户看到的最后的总结会显得更加真实。那么这里有两个问题:一个问题是如何对所有的句子进行筛选;第二个问题是如果有重复多余的字句,又如何进行进一步的选择。
通常情况下,我们通过对句子打分来筛选,这个时候,一般需要设计一个打分机制,这个机 制往往是看这个句子对某一个实体的方面是否进行了有情感的评价。然后,对所有句子进行 聚类,这样所有评价类似的句子就可以被聚集到一起,从而能够过滤掉重复多余的字句。
那么,人工句子生成又是怎么运作的呢?首先,我们必须知道这个物品的哪些方面得到了用 户的评价,而且都是什么样的评价,比如是正面评价还是负面评价。然后,把这些信息和一 个语言模型,也就是语句生成器相连接,从而能够“生成”最后的总结语句。值得注意的 是,这样生成的总结语句并不会出现在所有用户的原始评价中,因此也可能会对用户的最终 体验有一定的影响。
除了基于方面的意见总结以外,还有一些类似的但是并不完全一样的总结方案。比如,有一种总结方案叫“针对性观点总结”(Contrastive View Summarization)。这个任务更加 突出针对同一个主题的两种截然相反的观点。这种意见总结不仅可以针对商品,也针对新闻 事件,比如某一个政策法规、选举结果等往往比较有争议的话题事件,“针对性观点总结”往往会有比较好的用户体验。
2.意见搜索
我们可以认为“意见搜索”是建立在意见总结之上的一个任务。通常情况下,意见搜索需要完成的任务是用户输入一个主体的名字,我们需要返回和这个主体相关的意见信息,这些意见信息有可能是通过意见总结而呈现给用户的。
意见搜索的难点,或者说是和传统搜索不一样的地方主要还是在于针对意见信息的索引和检索。
第一,我们需要在索引库中找到有哪些文档和字句包含了我们所需要查询的主体。可以说,这一点和传统的搜索是非常类似的。
第二,我们需要在找到的文档和字句中检查是否包含主体的某种意见,以及其褒义或者贬义 的评价。这就是有别于传统搜索的地方。在找到了所有关于某个主体的情感评价以后,我们需要设计一个评分机制从而返回最有说服力的文档,并且还需要在这些文档的基础上进行意 见总结。很显然,这些步骤都是传统的搜索中并没有的。
按照上面所说的这两点,我们可以把意见搜索分为两个阶段。
第一个阶段,就是利用现有的搜索技术,比如我们介绍过的文本搜索或者基于排序学习的搜索等方法,得到最初的一个文档的备选集。然后进入下一个阶段,就是通过一个模型,针对 所有的文档进行基于意见的打分。这个模型可以是简单的分类器,用于分析当前的字句和主 体的意见究竟有没有关系,也可以是一个更加复杂的模型,输出当前的文档和主体的哪一个方面有关系。在这里,任何一种文本分类器都可以被利用起来。
总体来说,意见搜索可以算是对于意见分析和总结的一个综合体现。