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