3- 分类-分析情感
讨论分类,普遍研究。
- 是否是垃圾邮件
- 是运动话题还是政治话题,亦或是娱乐话题
餐厅点评
从主题预测情感:智能餐厅评价系统
今天是个好日子,我想要在一家日本餐厅预定一个座位
mark- 正面的评价不能代表所有方面都是正面的。
- 亲眼看大厨创作一道难以置信的可食用的艺术品是一个非常独特的体验。
- 我的妻子尝试了拉面,它的口味很一般。
- 这里的寿司都是非常美味的,可以说是西雅图最好吃的寿司了。
从评价到主题情感。
将餐厅的所有评价拆分成句子。
核心构造分类模块。
mark把所有的评价分解成句子 -> 选择包含"sushi"的句子(我关心的)
-> 句子情感分类器 -> 平均预测(整个餐馆的评价) 以及 最正面的评价。
分类器
mark该分类器获取输入值x。放进我们的分类模型,输出我们的y(预测的类)
- 示例多元分类器,输出的y多于两类。
输入x(网页),输出y
- 垃圾邮件过滤系统
输入x:邮件内容文本,发送者,ip。 输出y 非垃圾和垃圾邮件。
- 图像分类
输入x: 图像像素. 输出y: 预测对象(这是一条什么样的狗)
- 个性化医学诊断
- 读懂你的心
卡耐基梅隆大学的教授 实现了一种令人惊异的新技术。
通过frmi的技术获得你大脑的影像,扫描你的大脑。预估你正在阅读的文字。
线性分类器
markmark最简单的阈值分类器:统计句子中正面/负面的词语个数。看正面和负面的谁多,情感就是谁。
正面单词两个大于负面单词所以是正向情感。
阈值分类器的问题
-
我们如何得到正面 / 负面词语的列表。
-
词语的情感程度不同:
- Great > good
- 我们如何度量词语的情感程度。
-
单独的单词是不够的:
- Good 正面
- Not good 负面
1.2 问题我们可以通过学习分类器解决。 3问题我们可以通过更多的特征解决。
(线性分类器)加入权值
- 我们通过训练数据得到每个词语的权重。
- 通过给定单词的权值给句子打分。
输入: x
mark对于句子进行评分。评分大于0时正向情感,小于0时负面情感。
mark这叫做线性分类器,这是因为输出是输入的加权和
mark决策边界
理解决策边界,我们假设只有两个非零权重的词语。
mark mark可以通过这两个词语&权重 计算出句子的分数。
mark横轴为awesome数量,纵轴为awful数量。每一个点代表一条句子。
mark上图可以看到评分大于0小于0的点被一条线分割开。
在线上的点我们无法决定它是正类还是负类。这条线的方程就是score函数等于0的这条线
线性决策边界,将正类与负类分开。
决策边界区区分了正面和负面的预测
mark非零权重越多,则决策边界的维数越高,会从直线到平面,直到更复杂空间。
训练和评估分类器
mark训练分类器 = 学习权重
训练集训练学习分类器,学习每一个词语的权重。
通过这些词语权重给测试集的句子进行打分。用来评估分类效果。
分类误差
mark将不带最后输出结果的测试样本交给分类器,使其预测出他得到的结果。
然后与测试样本原本真实的分类进行对比。
将测试集中的每一个数据都这么来一遍,统计出错误个数与正确个数。
分类误差 / 精度
误差测试了错误的比率 。
mark误差率是分类器分类错误的数量 / 测试集样本数量。
- 误差率的最优可能值为0.0
通常,测量精度是正确率:
- 正确的预测比率
- 最优可能值为1.0
什么是好的精度
分类器是否优于随机猜测。
对于二元分类:
- 有一半概率可以猜中(平均情况下)
- 精度 = 0.5
我们构建的分类器的目标就是高于50%
对于k类分类,精度是1/k
mark在最差的情况下,分类器至少要比随机猜测好,否则分类器就没有意义。
但是实际上看起来分类的不错是否是有意义的。
90%精度的分类器足够好吗?这取决于具体的问题
mark多数预测,多数类预测。比如将每一封邮件都看成是垃圾邮件。
那么我的精度高达90%。在这类别不平衡的情况下有很好的性能。
所以在实践中我们一定要对报告出的精度问题进行深度研究。
- 类别是否不平衡?
- 它与简单的基线方法相比怎么样?
- 随机猜测
- 多数类
- ...
最重要的是:我的应用需要多少精度。
- 对于用户体验,它足够好么?
- 如果分类错误,会有什么影响。
混淆矩阵
False positive, false negative 和混淆矩阵
错误的种类:
mark真实标签与预测标签之间的关系。
排列组合我们会出现两种正确情况,和两种错误情况。
不同应用中不同类型的错误成本也会不同。
markFalse negative, 这封信实际是个垃圾邮件negative,但是被我们归类进了邮件列表(归类错误 False)。 - 气愤 | 疾病没有被医治
False positive, 这封信实际是个正常邮件positive, 但是被我们归类进了垃圾箱(归类错误 False)。 - 邮件丢失 | 医疗浪费
混淆矩阵- 二元分类
mark如上图是我们假设有100个测试样本最终得出的混淆矩阵。
我们的分类正确率 (50+35)/100
混淆矩阵- 多元分类
mark顺着对角线我们可以看到我们预测对了60个健康人,12个感冒人,8个流感人。
精度 为 0.8
对于健康的人我们预测错了10个。我们更容易把健康的人和普通感冒的人搞混,不容易和流感搞混。
学习曲线:我到底需要多少数据
模型需要多少数据?
- 越多越好(在数据质量是最重要的因素)
理论结果通常对于需要的数据定义一个界限。
- 对于实际应用来说,这个界限通常太松了。
- 但是可以作为一个指导。
在实践中:
- 越复杂的模型需要更多的数据
- 经验分析可以作为指导。
学习曲线将我们数据的多少与我们的误差率(测试集)联系到了一起。
训练数据越多那么我们的测试误差将会越低。
mark曲线是否有个极限?
mark模型偏差。不可能变为0.
一般情况下: 越复杂的模型偏差越小。
mark更小的偏差 -> 会更准确,但是需要更多的数据学习。
小偏差的模型如果有更多的数据会学习的更好。
mark单词对模型仍然存在偏差,但是会比单词模型偏差小。
类别概率
你的预测有多可信?
到现在,我们已经输出了预测 (正负情感)
但是对于我们的预测,有多少确信度?
分类器常常不止给出结果是正是负,还要给出对于这个结果的信息有多大。
mark比如第一个句子正面评价的程度要高于第二个句子。
很多分类器提供了置信等级
输入句子x输出这个句子为正为负的概率。
mark如上图给定句子1为正的概率为0.99 | 给定句子2为正的概率为0.55
分类总结
mark输入x单词计数,w单词的权重。计算出y冒。我们的输出结果。正面情绪大于0.负面情绪小于0。评估预测结果,并让模型根据评估结果进行参数的修正。
分类准确率的提高。循环不断的更新权重。
我们学到了:
- 识别分类问题和一些常用应用
- 描述决策边界和线性分类器
- 训练分类器
- 测量误差
- 解释分类中的错误类型
- 描述模型偏差和数据集大小之间的权衡
- 应用类别概率来表述预测的置信度
实际的构建商品评价的情感分析
见ipython notebook 构建商品评价情感分类器
网友评论