贝叶斯,支持向量机,深度学习
机器学习定义类别 类别A 类别B 类别C收集数据 A类文本 B类文本 C类文本模型训练 分类器预测 未知类别文本 预测文本贝叶斯算法全概率公式:设事件组{Bi} 是样本空间的一个划分, 且P(Bi) 0(i1,2,...n)则对任一事件,有P(A) P(Bi)P(A|Bi) (i1,2,3,...n)举例P(B1) 结果为奇数P(B2) 结果为偶数P(A) 结果为5P(A) P(B1)*P(A|B1) P(B2)*P(A|B2)贝叶斯公式在NLP中的应用用贝叶斯公式处理文本分类任务一个合理假设:文本属于哪个类别,与文本中包含哪些词相关任务:知道文本中有哪些词,预测文本属于某类别的概率文本分类假定有3个类别 A1,A2A3一个文本S有n个词组成W1,W2,W3...Wn想要计算文本S属于A1类别的概率P(A1|S) P(A1|W1,W2,W3..Wn)贝叶斯公式P(W1,W2..Wn|A3) 就是 P(W1|A3) 可能会出现0那么就会出现平滑问题贝叶斯算法的缺点1. 如果样本不均衡就会极大影响先验概率2. 对于未见过的特征或样本,条件概率为零失去预测的意义(可以引入平滑)3. 特征独立假设只是个假设4.没有考虑语序,也没有词义支持向量机在灰线和黑线我们采取黑线因为无论离蓝色还是红色距离都比较远那如果难点呢,上面的问题颜色不同的球差那么远一条直线就够了如果两侧都有颜色不同的点怎么办那么怎么做到线性不可分的问题神经网络的激活函数可以让模型本身变成非线性模型那么支持向量机则是通过升维的思想认为低纬的线性不可分的点变成高维可分的向高维映射如何解决线性不可分问题考虑一组一维数据[-1,0,1] 为正样本,[-3,-2,2,3] 为负样本将x 映射为[x,x^2]可以用直线划分但是这样出现了一个问题,维度过高的向量计算在进行内积运算非常耗时,而SVM的求解中内积运算很频繁所以我们希望内有一种方法快速计算 y(x1)*y(x2)所谓的核函数即为满足条件:K(x1,x2) y(x1)*y(x2) 的函数统称那么向量机怎么解决多分类问题呢假设要解决一个K分类问题,即有K个目标类别one VS one 方式建立 K(K-1)/2 个svm分类器,每个分类器负责k个类别中的两个类别,判断1输入样本属于哪个类别对于一个待预测的样本,使用所有分类器进行分类,最后保留被预测词数最多的类别假设类别有[A,B,C]X - SVM(A,B) -AX - SVM(A,C) -AX - SVM(B,C) -B最终判断 X-A还有另一方法深度学习代码框架config.py 输入模型配置参数,如学习率loader.py 加载数据集,做预处理,为训练做准备model.py 定义神经网络模型结构evaluate.py 定义评价指标,每轮训练后做评测main.py 模型训练主流程文本分类 - fastText文本分类 -TextRNN使用RNN对文本进行编码,使用最后一个位置的输出向量进行分类x - embedding -BiLSTM -Dropout - LSTM -Linear -softmax - yRNN虽然能解决上下文问题但是依然存在长期依赖问题不足而LSTM则是加强版的RNN文本分类-LSTM将RNN的隐单元复杂化一定程度上规避了梯度消失和信息遗忘问题ft 是遗忘门 it是输入们 ot是输出们 Ct是细胞状态 ht隐藏状态另外 W的权重是4个拼起来的文本分类 -TextCNN 卷积神经网络 不是只能用于图像也可以用于文本利用一维卷积对文本进行编码编码后的文本矩阵通过pooling转化为向量,用于分类文本分类 -TextRCNN 就是 先过RNN再过CNN文本分类 - BertBert作为Encoder将文本转化为向量或矩阵对于Bert的编码结果有多种的使用方式1. 去[cls] token对应的向量2. 将整句话的向量取max/average pooline3. 将Bert编码后的向量再输入LSTM或CNN4. 将Bert中间层的结果取出加入运算等数据稀疏问题训练数据量小模型在训练样本上能收敛,但预测准确率很低解决方案:1.标注更多的数据2. 尝试构造训练样本(数据增强)3. 更换模型(如使用预训练模型等) 减少数据需求4. 增加规则弥补5. 调整阈值,用召回率换准确率6. 重新定义类别(减少类别)标签不平衡问题部分类别样本充裕,部分类别样本极少解决办法:解决数据稀疏的所有的方法依然适用1.过样本: 复制指定类别的样本,在采样中重复2.降样本 减少多样本类别的采样,随机使用部分3.调整样本权重 通过损失函数权重调整来体现多标签分类多标签问题的转化1.分解为多个独立的二分类问题2.将多标签分类问题转换为多分类问题3.更换loss直接由模型进行多标签分类 (BCELOSS)多标签不同于多分类多标签 是 m选n多分类 是 n选一