文本分类任务是自然语言处理中最常见的任务,文本分类任务简单来说就是对给定的一个句子或一段文本使用文本分类器进行分类。
文本分类任务广泛应用于长短文本分类、情感分析、新闻分类、事件类别分类、政务数据分类、商品信息分类、商品类目预测、文章分类、论文类别分类、专利分类、案件描述分类、罪名分类、意图分类、论文专利分类、邮件自动标签、评论正负识别、药物反应分类、对话分类、税种识别、来电信息自动分类、投诉分类、广告检测、敏感违法内容检测、内容安全检测、舆情分析、话题标记等各类日常或专业领域中。
常见问题:
总体流程
主要场景
文本分类任务可以根据标签类型分为多分类(multi class)、多标签(multi label)、层次分类(hierarchical等三类任务,接下来我们将以下图的新闻文本分类为例介绍三种分类任务的区别。
方案一 :预训练模型微调
【方案选择】对于大多数任务,我们推荐使用预训练模型微调作为首选的文本分类方案,预训练模型微调提供了数据标注-模型训练-模型分析-模型压缩-预测部署全流程,有效减少开发时间,低成本迁移至实际应用场景。
预训练模型微调在预训练模型 [CLS]
输出向量后接入线性层作为文本分类器,用具体任务数据进行微调训练文本分类器,使预训练模型”更懂”这个任务。
[CLS] 输出向量 是针对整个输入序列的全局表示,用于下游任务中对序列的整体属性进行分类或判断,
[MASK] 向量 则是在预训练阶段代表被遮盖词汇的预测表示,用于学习语言模型并通过预测任务提升模型对上下文的理解能力。
方案二:提示学习
提示学习(Prompt Learning)适用于标注成本高、标注样本较少的文本分类场景。在小样本场景中,相比于预训练模型微调学习,提示学习能取得更好的效果。
提示学习的主要思想是将文本分类任务转换为构造提示中掩码 [MASK]
的分类预测任务,也即在掩码 [MASK]
向量后接入线性层分类器预测掩码位置可能的字或词。提示学习使用待预测字的预训练向量来初始化分类器参数(如果待预测的是词,则为词中所有字的预训练向量平均值),充分利用预训练语言模型学习到的特征和标签文本,从而降低样本需求。
我们以下图情感二分类任务为例来具体介绍提示学习流程,分类任务标签分为 0:负向
和 1:正向
。在文本加入构造提示 我[MASK]喜欢。
,将情感分类任务转化为预测掩码 [MASK]
的待预测字是 不
还是 很
。具体实现方法是在掩码[MASK]
的输出向量后接入线性分类器(二分类),然后用不
和很
的预训练向量来初始化分类器进行训练,分类器预测分类为 0:不
或 1:很
对应原始标签 0:负向
或 1:正向
。
预训练模型微调则是在预训练模型[CLS]
向量接入随机初始化线性分类器进行训练,分类器直接预测分类为 0:负向
或 1:正向
。
二分类/多分类任务指南
基于预训练模型微调的二分类/多分类端到端应用方案,打通数据标注-模型训练-模型调优-模型压缩-预测部署全流程
二分类/多分类数据集的标签集含有两个或两个以上的类别,所有输入句子/文本有且只有一个标签。在文本多分类场景中,我们需要预测输入句子/文本最可能来自 n
个标签类别中的哪一个类别。在本项目中二分类任务被视为多分类任务中标签集包含两个类别的情况,以下统一称为多分类任务。
多分类数据标注-模型训练-模型分析-模型压缩-预测部署流程图
PaddleNLP/applications/text_classification/multi_class at develop · PaddlePaddle/PaddleNLP · GitHub
2.2 代码结构
2.3 数据准备
训练需要准备指定格式的本地数据集
训练、开发、测试数据集 文件中文本与标签类别名用tab符'\t'
分隔开,文本