【人人都能学得会的NLP - 文本分类篇 01】使用ML方法做文本分类任务
【人人都能学得会的NLP - 文本分类篇 01】使用ML方法做文本分类任务
NLP Github 项目:
-
NLP 项目实践:fasterai/nlp-project-practice
介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用,分享大模型算法工程师的日常工作和实战经验
-
AI 藏经阁:https://gitee.com/fasterai/ai-e-book
介绍:该仓库主要分享了数百本 AI 领域电子书
-
AI 算法面经:fasterai/nlp-interview-handbook#面经
介绍:该仓库一网打尽互联网大厂NLP算法面经,算法求职必备神器
-
NLP 剑指Offer:https://gitee.com/fasterai/nlp-interview-handbook
介绍:该仓库汇总了 NLP 算法工程师高频面题
1、文本分类介绍
NLP中, 文本分类是一项基础且广泛应用的任务, 它将文本依据规则和标准划分到为特定的类别空间,并且它能够应用到多种应用场景:
- 垃圾邮件识别:判断一封邮件“是”“否”为垃圾邮件
- 情感分析: 判断一篇文章情感极性为“正面”“负面”“中性”
- 聊天意图:判断聊天文本中用户的意图为“发货时间”、“运费价格”等
……
以新闻文本分类为例,我们来了解文本分类任务的类型:
1、“今天大盘涨了3%,地产、传媒板块领涨”
2、“NBA湖人队赢下了与掘金队的比赛”
上述分别属于财经和体育类新闻。
3、“汪峰今天发布了新歌,娱乐圈又将有大事发生”
以3为例的新闻既可以归为音乐类新闻,又可以归为娱乐类新闻,与1和2有一定区别。
定义:
由上述例子,我们可以得到不同的分类任务类型****:多分类任务和多标签分类任务。
- 多分类任务中一条数据只有一个标签,但是标签有多种类别,就比如1、2的新闻属于具体的单一新闻类别。
- 多标签分类任务指的是一条数据可能有一个或者多个标签,就比如3的新闻具有多个新闻类别。
任务实现过程:
完成的分类任务一般需要经历两个阶段,分别是训练阶段和预测阶段。
- 训练阶段的目标是基于训练集数据(带label)。训练文本分类模型
- 预测阶段的目标是使用上一阶段训练好的模型,对于新数据(无label),预测其类别。
技术演化:
分类模型随着技术的进步也经历从规则匹配—>机器学习—>传统深度学习—>前沿深度学习以下四个阶段的演化:
- 规则匹配:基于关键词匹配等方法
- 机器学习:基于LR、SVM、集成学习等方法
- 传统深度学习:基于FastText、TextCNN、BiLSTM等神经网络方法
- 前沿深度学习:基于Transformer、BERT的pretrain-finetune和prompt范式。
效果评估:
在模型完成后,需要根据预测结果对模型的效果进行整体评估
对于分类任务,直观指标可以由准确率(accuracy)进行表示:
- 准确率:分类正确的样本数占样本总数的比例,通过记录正确的数量占比即可。
但是上述指标评估存在一定局限,以情感分析任务为例,如果我们想评测模型(1)返回的正面情绪结果中的正确数量,或者在(2)所有真实的正面情绪文本中,模型识别出来的数量,只依靠准确率无法实现任务。(3)且在样本类别数量极度不平衡下,准确率的意义不大,例如,一批数据中,正样本只有几个,即使没能正确预测出来,准确率依旧很高。
基于上述情况,需要考虑新的评测指标,如果我们用的是个二分类的模型,那么把预测情况与实际情况的所有结果两两混合,结果就会出现以下4种情况,就组成了如下所示的混淆矩阵。
精准率(Precision)又叫查准率,它是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确,其公式如下,它能够解决上述局限中(1)的情况:
召回率(Recall)又叫查全率,它是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率,其公式如下,它能够解决上述局限中(2)的情况:
一般来讲,准确率和召回率会互相矛盾,假设你想实现较高的召回率,那尽可能召回的样本越多越好,这样子的精准率就会下降。通常,如果想要找到精准率与召回率之间的一个平衡点,我们就需要一个新的指标:F1分数。F1分数同时考虑了查准率和查全率,让二者同时达到最高,取一个平衡,其计算公式如下,一般任务用F1进行衡量较为科学。
举例如下:
模型预测结果:0,1,0,0,1
实际样本结果:1,1,0,1,0
各项评测指标如下所示:
准确率(accuracy):2/5 = 0.4
精准率(precision):1/2 = 0.5
召回率(recall):1/3 = 0.333
F1:2*p*r/(p+r) = 0.4
当回顾文本分类的全流程后,我们接下来引入较为主流的模型进行文本分类任务的处理。
2、机器学习模型
由于文本的模式较为复杂,普通的规则匹配已经无法跟上潮流,我们需要机器学习模型的进一步帮助。机器学习模型是基于统计方法,自动地从文本数据中学习模式,然后自动地对文本进行分类。而集成学习作为各类机器学习的集成版本,在竞赛、科研等实践中起着重要作用,因此,本章节主要讨论集成学习在文本分类中的应用。
集成学习思路:
从任务实现角度来看:
首先产生一组“个体学习器”,也称作基学习器,这都来源于各类机器学习模型,在各个基学习器完成训练之后,通过一定的集成策略结合产生最终的输出结果。
其中有几个重要概念需要厘清:
首先,各类基学习器可以是同质学习器也可以是异质学习器,同质和异质的区别在于集成的多个模型是否为同一种学习器。
其次,在集成策略上也有不同的做法,可分为平均法、加权法和投票法。
集成学习的思想如上所示,但在实践中,根据基学习器的生成方式不同,集成学习也产生了两种不同的方法。
第一种方法是并行生成基学习器的Bagging方式,其代表模型为随机森林。
第二种方法是串行生成基学习器的Boosting方式,其代表模型为GBDT等。
Bagging
“三个臭皮匠,顶个诸葛亮” 是对Bagging方式的形象解释,Bagging相比于各类基学习器的较好效果更关注其不同。
其实现流程主要经历以下几个步骤:
1、 首先使用有放回取样的方法,采样N个样本子集
2、 分别使用N个样本子集,训练N个基学习器
3、 最终使用合适的集成策略来产生最终的输出
流程如下图所示:
以Bagging方式中经典模型随机森林模型作为介绍,
首先解释随机森林的字面含义,随机指方法思路,通过bagging方式使样本异质,并且特征同样随机抽取;森林指多棵决策树。
其任务流程如下所示:
- 首先选择决策树作为所有的基学习器
- 维持了Bagging的有放回抽取的方式去产生个体学习器的训练样本子集
- 同时引入了随机属性选择;(标准的决策树每次划分时,考虑所有属性;这里每次划分时,考虑一个属性子集)
随机森林简单、容易实现、计算开销小, 在很多任务中展现出强大的性能, 被誉为“代表集成学习技术水平的方法”。
通过sklearn提供的接口,我们能够很容易的实现随机森林这种方法,为方便大家理解,我们对其中重要参数做了详细注解:
Boosting
如果说“三个臭皮匠,顶个诸葛亮”是Bagging的特征反映,那么“知错能改,善莫大焉”是Boosting的形象解释,它更关注基学习的训练出好的效果。
其实现流程主要经历以下几个步骤:
- 先从初始训练集训练出一个基学习器
- 再根据个体学习器的表现,对训练样本分布进行调整,使得上个基学习器分错的样本,在后续受到更多的关注;
- 基于调整后的样本分布,来训练下一个基学习器
- 如此重复,直到训练满N个学习器
- 将N个学习器的输出进行加权结合
这里以最常用的GBDT(梯度提升决策树) 为例分析,
它的思想是用本轮基学习器(一颗CART回归树),去拟合上一个学习器的残差,流程如下图所示:
举例辅助大家理解:
- 假如有个人30岁, 首先用第一个CART树去拟合, 输出为20岁, 损失还差10岁;
- 这时第二个CART树去拟合剩下的10岁, 输出为6岁, 损失还差4岁;
- 第三轮用第三个CART树去拟合剩下的4岁, 输出为3岁, 损失还差1岁;
- 不断拟合, 直到满 T 个CART树;
其中,sklearn也提供了关于GBDT的接口,为了方便大家理解,我们同样对其参数提供了注解:
【动手学 RAG】系列文章:
- 【RAG 项目实战 01】在 LangChain 中集成 Chainlit
- 【RAG 项目实战 02】Chainlit 持久化对话历史
- 【RAG 项目实战 03】优雅的管理环境变量
- 【RAG 项目实战 04】添加多轮对话能力
- 【RAG 项目实战 05】重构:封装代码
- 【RAG 项目实战 06】使用 LangChain 结合 Chainlit 实现文档问答
- 【RAG 项目实战 07】替换 ConversationalRetrievalChain(单轮问答)
- 【RAG 项目实战 08】为 RAG 添加历史对话能力
- More...
【动手部署大模型】系列文章:
- 【模型部署】vLLM 部署 Qwen2-VL 踩坑记 01 - 环境安装
- 【模型部署】vLLM 部署 Qwen2-VL 踩坑记 02 - 推理加速
- 【模型部署】vLLM 部署 Qwen2-VL 踩坑记 03 - 多图支持和输入格式问题
- More...
【人人都能学得会的NLP】系列文章:
- 【人人都能学得会的NLP - 文本分类篇 01】使用ML方法做文本分类任务
- 【人人都能学得会的NLP - 文本分类篇 02】使用DL方法做文本分类任务
- 【人人都能学得会的NLP - 文本分类篇 03】长文本多标签分类分类如何做?
- 【人人都能学得会的NLP - 文本分类篇 04】层次化多标签文本分类如何做?
- 【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务
- 【人人都能学得会的NLP - 文本分类篇 06】基于 Prompt 的小样本文本分类实践
- More...
本文由mdnice多平台发布
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库