面试AI技术内参-112什么是文档情感分类?


112 什么是文档情感分类?

到目前为止,我们讲完了对话系统的基础知识。一般来说,对话系统分为"任务型"和"非任务型"这两种基本类型。针对任务型对话系统,我们重点介绍了其各个组件的任务,以及这些组件都有哪些模型给予支撑。针对非任务型对话系统,也就是"聊天机器人”,我们主要介绍了如何利用深度学习技术来对一个聊天机器人进行建模,以及非任务型对话系统所面临的挑战都有哪些。

今天,我们转入文本分析的另外一个领域,同时也是在实际系统中经常会使用的一个子领域,那就是文本"情感分析”(Sentiment Analysis)。所谓情感分析,就是指我们要针对一段文本来判断这段文本的文字"色彩”,到底是褒义,还是贬义,到底是抒发了什么情感。

文本情感分析是一个非常实用的工具,比如,我们需要分析用户对于商品的评价带有什么样的情感,从而能够更好地为商品的推荐和搜索结果服务。再比如,通过文本的情感分析,我们可以了解到用户针对某一个时事的观点异同,以及观点分歧在什么地方,从而能够更加清晰地了解新闻的舆情动态。

今天,我们首先从最基础的文档情感分类(Document Sentiment Classification)这个问题说起。

基于监督学习的文档情感分类

文档情感分类属于文本情感分析中最基本的一种任务。这种任务的假设是,一段文本的作者通过这段文本是想对某一个”实体“(Entity)表达一种情绪。这里的实体其实包括很多种类型的对象,比如可能是商品,某个事件,也可能是某个人物。我们这里讨论的文本单元可以是一个文档,也可以是一个句子等其他的文本段落。

值得注意的是,我们在这一类任务中,限制一个文本单元只表达,或者主要表达一种情感。很明显,这种假设是比较局限的。一般来说,在实际的应用中,一个文本单元,特别是比较长的单元例如文章,则往往包含多于一种的情绪。因此,我们可以看到文档情感分类其实是一种简化了的情感分析任务

同时,一个文本单元还可能对多个"实体"进行情感表达。比如一个用户针对某种款式相机的多个方面进行了评价,那么每一个方面都可以作为一个实体,而这种时候,用户的情感可能就更难仅以一种情感来加以概括了。

在最基本的文档情感分类的情况下,我们往往把这类任务转化成为一种监督学习任务,也就是说,我们希望通过一个有标签的训练集学习到一个分类器(Classifier)或者回归模型(Regression),从而能够在未知的数据上预测用户的情感。

这里往往有两种形式的监督学习任务。一种是把文档分类为几种,最简单的情况下是两种情感。这就是二分或者多类分类问题。另外一种则是认为文档会有一种情感,但是每一种情感之间有好坏的顺序区分,比如,评分"好”,就比"一般"要好,也就是说,这些评分之间有一个次序问题。那么,很多时候,这种问题会被归结为一种**“次序回归”(Ordinal Regression)问题**。

在明确了我们需要构建什么样的监督学习任务以后,对于这些任务而言,如何选取"特性”(Feature)就是一个很重要的工作了。诚然,对于每一个具体的任务而言,我们往往需要选取不同的特性,但是在过去的很多实践中,经过反复验证,有一些特性可能会有比较好的效果。我在这里做一个简单的总结。

首先,我们曾经多次提到过的”词频 “(Term Frequency)以及更加复杂一些的TF-IDF词权重法都是经常使用的文字特性。在文档情感分类中,这一类特性被认为非常有效。

另外一种使用得比较频繁的特性就是”词类“(Part of Speech)。词类提供了句子中每个词的成分,比如哪些词是动词,哪些词是名词等等。这些词性可以跟某种特定的情感有很密切的联系。

还有一种很直观的特性就是”情感词汇“。比如,我们已经知道了"好”、“不错"等词表达了正向的情感,而"差”、“不好”、“不尽人意"等词表达了负向的情感。我们可以事先收集一个这类情感词汇的集合。这个集合里的词汇可以跟最后文档的情感有很直接的联系。

最后,需要指出的是,如何开发一个合适的特性往往是文档分类的重点工作。

除了特性以外,在文档情感分类这个任务中,传统上经常使用的文字分类器有”朴素贝叶斯 “(Naïve Bayes)分类器、“支持向量机“(Support Vector Machines)等。

基于非监督学习的文档情感分类

情感词汇已经为我们对大段文字乃至整个文档的分类有了很强的指导意义,因此,也有一些方法寻求利用非监督学习的方式来对文档进行情感分类。注意,这里所谓的非监督学习,是指我们并不显式地学习一个分类器,也就是说,不存在一个训练数据集,不需要我们提前收集数据的标签。

这一类思想的核心其实就是设计一套”打分机制“(Scoring Heuristics),来对整个文档做一种粗浅的判断。当然,这种打分机制背后都有一种理论来支撑。

比如,有一种打分模式依靠首先识别的"词类"进行分析,特别是大量的相邻的两个词的词性,诸如"特别好”。这里,“特别"是副词,“好"是形容词,然后就可以得出在某些情况下,副词和形容词的这种搭配特别多的时候,并且在正向的情感词比较多的时候,整个文档也许就是比较偏向正向的情感。

我们需要指出的是,这种方法虽然听上去比较"山寨”,但是对于很多产品和项目来说,获取大量高质量的标签信息往往是非常耗时,甚至是不可能的,例如上百万的用户对产品的评价数据。因此,在没有训练数据的情况下,利用某种打分机制,可以通过最简单的一些情感词库开发出文档情感分类的算法,这其实也不失为一种快速迭代的方式

总结

今天我为你介绍了一类基础的文字情感分析任务——文档情感分类的基本技术要点。

一起来回顾下要点:第一,我们讲了基于监督学习的文档情感分类任务以及这类任务下的重要特性和模型;第二,我们聊了如何在没有大规模训练数据的基础上进行非监督的文档情感分类。

最后,给你留一个思考题,如何把文档情感分类任务扩展到可以针对多种实体多种情感的分析呢?

文章列表

更多推荐

更多
  • Pharo敏捷人工智能-第一部分:神经网络
    Apache CN

  • Pharo敏捷人工智能-第二部分:遗传算法
    Apache CN

  • Pharo敏捷人工智能-# 第三部分:神经进化 第三部分:神经进化
    Apache CN

  • Java测试驱动开发-十二、通过实现连续交付利用 TDD 案例研究可怕的赌博公司,探索代码库,释放程序,部署到生产环境,增加测试覆盖率,结论,可能的改进,实施持续集成,走向持续交付,詹金斯装置,自动化构建,第一次执行,下一步是什么?,这仅仅是开始,这不一定是结束, “没有什么比结果更能说
  • Java测试驱动开发-一、为什么我应该关心测试驱动的开发? 为什么是 TDD?,理解 TDD,红绿重构,速度是关键,这与测试无关,测试,黑盒测试,白盒试验,质量检查和质量保证之间的区别,更好的测试,嘲笑,可执行文件,无调试, 这本书是由开发人员为开发人员编写的。因此,大部分学习将通过代码进
  • Java测试驱动开发-十一、把它们放在一起 简而言之,TDD,最佳做法,命名约定,过程,开发实践,工具, “如果你总是做你一直做的事,那么你将永远得到你一直得到的。”——阿尔伯特·爱因斯坦我们经历了大量的理论和更多的实践。整个旅程就像一列高速行驶的火车,我们几乎没有
  • Java测试驱动开发-零、前言 这本书是给谁的,充分利用这本书,下载示例代码文件,下载彩色图像,使用的惯例, 测试驱动开发已经有一段时间了,很多人还没有采用它。这背后的原因是 TDD 很难掌握。尽管这个理论很容易掌握,但要真正精通它需要大量的实践。本书的作者多年
  • Java测试驱动开发-四、单元测试—关注你做了什么,而不是已经做了什么 单元测试什么是单元测试?,为什么要进行单元测试?,代码重构,为什么不专门使用单元测试呢?,用 TDD 进行单元测试,TestNG,TestNG 与 JUnit 摘要,遥控船舶要求,遥控船舶的研制,项目设置,助手类,需求–起点和方向,规格
  • Java测试驱动开发-五、设计—如果它不可测试,那么它就设计得不好 我们为什么要关心设计?,设计原则,你不会需要它的,不要重复你自己,保持简单和直接,奥卡姆剃刀,坚实的原则,连接 4,要求,测试 Connect 4 的最后一个实现,要求 1–游戏的棋盘,要求 2–介绍光盘,要求 3–球员轮换,要求 4–
  • Java测试驱动开发-二、工具、框架和环境 吉特,虚拟机,Vagrant,Docker,构建工具,综合发展环境,创意演示项目,单元测试框架,朱尼特,TestNG,Hamcrest 和 AssertJ,汉克雷斯特,资产,代码覆盖工具,杰科科,模拟框架,Mockito,轻松的,模拟的
  • 近期文章

    更多
    文章目录

      推荐作者

      更多