一、文本分类简介
在nlp中,文本分类是一个非常常见的任务,它将一个文本归结于特定的标签。
目标:
- 基于训练数据,训练分类模型。
- 使用训练好的模型,预测新数据类型。
典型应用场景:
- 垃圾邮件识别
- 情感分析
- 意图识别
技术演化:
- 规则
- 机器学习:lr,svm,集成学习
- 传统深度学习:fastrnn、textcnn、bilistm
- 前沿:transformer、bert
任务拓展
- 序列标注任务
- 句子对分类任务
- 多标签任务
二、机器学习技术
集成模型:
产生一组个体学习器,再通过某种策略组合起来,产生输出
结合策略:平均或投票、学习法
集成:
- bagging
- boosting
bagging思路:
- 使用自助法,采样T个子集
- 分别使用t个子集,训练t个个体学习器
- 然后使用平均或者投票来产生输出
- 通过训练样本不同划分来实现
随机森林:
- 样本随机:假设训练数据集共有M个对象的数据,从样本数据中采取有放回(Boostrap)随机抽取N个样本(因为是有放回抽取,有些数据可能被选中多次,有些数据可能不被选上),每一次取出的样本不完全相同,这些样本组成了决策树的训练数据集;
- 特征随机:假设每个样本数据都有K个特征,从所有特征中随机地选取 k(k<=K)个特征,选择最佳分割属性作为节点建立CART决策树,决策树成长期间k的大小始终不变(在Python中构造随机森林模型的时候,默认取特征的个数k是K的平方根);
- 重复前面的步骤,建立 m棵CART树,这些树都要完全的成长且不被修剪,这些树形成了森林;
- 根据这些树的预测结果进行投票,决定样本的最后预测类别。(针对回归模型,是根据这些决策树模型的平均值来获取最终的结果)
boosting:
Boosting是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。它可以用来提高其他弱分类算法的识别率,也就是:
- 将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;
- 每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,
- 这样在给定训练轮数 n 后,就可产生 n 个基分类器,
- 然后Boosting框架算法将这 n个基分类器进行加权融合,产生一个最后的结果分类器,
在这 n个基分类器中,每个单个的分类器的识别率不一定很高,但他们联合后的结果有很高的识别率,这样便提高了该弱分类算法的识别率。在产生单个的基分类器时可用相同的分类算法,也可用不同的分类算法。
gbdt:
拟合上一个学习器的残差
xgboost:
在GBDT的基础上进行改进,使之更强大,适用于更大范围。
三、深度学习分类
textcnn:
- embedding输入一句话
- 卷积核拥有多种高度的卷积核
- 池化层是一个1-max pooling
- 全连接层做多分类
bilstm:
- 文本输入序列x,进过前后两个lstm,结果被拼接起来;
- lstm最后一个输出,接入全连接层,做n分类
- 最后对n个数值用softmax函数,返回每个标签对应的概率
bert:
- 分类任务,输入单个句子,然后将输出的c接入全连接层,做多分类
- c的维度为(batch,768)
四、正则化
过拟合是大容量模型经常面临的问题,实践中,好的模型往往是适当正则化的大模型:
常用正则化:
- l2正则
- 数据增强
- dropout
- 标签平滑
- 对抗训练