1.概率论基础
1.1 单事件概率
定义:一个事件发生的概率
例如:设事件A表示"一个文本是正向文本",则其发生概率P(A) = 正向文本数 / 总文本数
下图中,绿色格表示正向文本、橙色格表示负向文本,则P(A) = 绿格数 / 总格数 = 13/20 = 0.65
即表示从该语料库中任取一个文本其是正向文本的概率为0.65
1.2 多事件概率
定义:多个事件发生的概率
例如:设事件"正向文本出现happy",由两个子事件构成,即
A:一个文本是正向文本
B:该文本中出现happy
其组合概率P(A,B) = P(A∩B) = 3/20
1.3 条件概率
定义:在已知事件B已经发生的情况下,事件A发生的概率,记作P(A|B)
计算法则:
功能:能有效降低搜索空间
例:在已知一个单词是happy的情况下,该文本是正向文本的概率为P(Positive|"happy") = P(Positive ∩ "happy") / P("happy")
此时只需要在蓝色圈中进行搜索,极大减少了搜索范围
1.4 贝叶斯定理
定义:计算已知事件Y发生情况下,事件X的发生概率,由条件概率推广而来
公式:
推导过程(选修):
2.朴素贝叶斯法(Naïve Bayes)
2.1 基本概念
概述:朴素贝叶斯法是基于贝叶斯定理和条件独立假设的分类方法;属于概率分类器,是生成模型;实现简单,学习与预测效率高,常作为比较基准
简要流程:对于给定训练数据,首先基于条件独立假设学习输入输出的联合概率分布;然后基于模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y
条件独立假设:
定义:用于分类的特征在类确定的条件下都是条件独立的,即
功能:该假设极大降低了计算复杂度、简化了模型,但同时牺牲了一定分类准确度
根据机器学习三要素,任何模型都由模型、学习准则(策略)、优化算法(算法)构成,其含义如下:
模型:一个映射函数,输入数据输出预测结果,即该机器学习方法的功能和目的
学习准则:评价模型好坏的标准,预测值与真实值的差异的期望,可以认为是损失函数
优化算法:一个最优化问题,寻找最优模型的方法,即最小化损失函数的方法,机器学习的训练过程就是求解最优化问题的过程
2.2 模型
朴素贝叶斯模型
定义:输入数据x,输出其最有可能出现在的类别
数学推导(选修):
2.3 学习策略
极大似然估计(MLE)
概述:在朴素贝叶斯法中,学习意味着对先验概率和条件概率进行估计,因此可以使用极大似然估计法分别对这两部分进行估计
方法:
先验概率的极大似然估计:
条件概率的极大似然估计:
2.4 优化算法
后验概率最大化准则
定义:朴素贝叶斯法将结果分到后验概率最大的类中,就等价于期望风险最小化
数学推导(选修):
2.5 优化技巧
2.5.1 拉普拉斯平滑 (Laplacian Smoothing)
原因:由于朴素贝叶斯法中通过累乘来计算最终概率,因此只要其中一个值为0,最终结果就会变为0,失去意义
功能:防止出现概率为0的情况,且仍保证概率和为1
方法:计算条件概率时,分子+1,分母+V(词汇表中不同单词的个数);
例子:
2.5.2 对数似然 (Log Likelihood)
(1)概率比值(ratio)
定义:用正向条件概率/负向条件概率;越大于1越正向,越接近0越负向,等于1即中性
功能:判断一个词是正向还是负向
例:对于happy,ratio("happy") = 0.14 / 0.1 = 1.4 > 1,因此其为正向情感词
(2)对数先验(log prior)
定义:对数先验 = log(正向样本数 / 负向样本数)
功能:修正不平衡数据集的影响;对于已经平衡的数据集(正向文本数=负向文本数),其对数先验为0,不产生影响
(3)对数似然(log likelihood)
定义:对概率比值再求log
原因:计算时连乘了很多小数,可能发生数值下溢
功能:可以避免数值过小发生下溢
例:
(4)对数先验+对数似然
功能:判断整个文本的情感倾向
定义:计算对数先验+对数似然的和;其值越大于0就越正向,越小于0就越负向,等于0为中性
例子:
3.利用朴素贝叶斯法进行情感分析
3.1 整体流程
总体流程:
(1)获取数据
(2)数据预处理
(3)构建正负词频表:统计语料库中各个单词分别在正负文本中出现次数
(4)计算条件概率表:统计各单词在正向/负向文本中出现次数,分别除正向/负向文本总数,得到各单词在正向文本/负向文本中出现的概率
(5)计算各单词的对数似然λ:
(6)计算对数先验:修正不平衡数据集的影响
(7)进行预测:若对数先验+对数似然 >0 则为正向情感,反之为负向情感
3.2 模型评价
准确度:即 预测正确文本数 / 总本文数
3.3 朴素贝叶斯法的其它应用
3.4 问题 / 缺点
(1)条件独立假设
原因:由于朴素贝叶斯法中使用了条件独立假设,假设句子中各单词间都是独立的,但显然一个句子的上下文间存在联系,因此会造成一定的错误
例子:如下两句话,若不考虑上下文,将无法准确预测出空缺处单词
(2)非平衡数据集
原因:在实际情况下,数据集往往是非平衡的,且存在许多噪音,该模型无法解决这些问题
(3)其他问题
去标点:某些情况下,标点会表达情感,甚至改变整句话含义
去停用词:中性词/非情感词在某些语境下也会表达情感
语句顺序:不同的语序可能表达完全不同的含义
反讽/夸张:对人类很容易理解,但机器无法理解其深层含义
4.编程实战
作业/编程实战:使用朴素贝叶斯实现情感分类
代码:https://github.com/Ogmx/Natural-Language-Processing-Specialization
内容汇总:https://blog.csdn.net/weixin_43093481/article/details/114989382
可将代码与数据下载至本地,使用jupyter notebook打开