来源:【NLP最佳实践】Huggingface Transformers实战教程 - Heywhale.com
01-认识transformers
02-文本分类实战:基于Bert的企业隐患排查分类模型
03-文本多标签分类实战:基于Bert对推特文本进行多标签分类
04-句子相似性识别实战:基于Bert对句子对进行相似性二分类
05-命名实体识别实战:基于Bert实现文本NER任务
06-多项选择任务实战:基于Bert实现SWAG常识问题的多项选择
07-文本生成实战:基于预训练模型实现文本文本生成
08-文本摘要实战:基于Bert实现文本摘要任务
09-文本翻译实战:基于Bert实现端到端的机器翻译
10-问答实战:基于预训练模型实现QA
展示使用现代预训练语言模型解决基础的nlp任务
各任务目录下有单独说明任务特点和解决过程的readme,欢迎查看
此处总结一下使用到的库:
- Welcome to ⚡ PyTorch Lightning — PyTorch Lightning 2.5.5 documentation
- Lightning in 15 minutes — PyTorch Lightning 2.5.5 documentation
- Pytorch Lightning 完全攻略 - 知乎
应用背景:原生 PyTorch 需手动编写训练循环、日志记录、GPU 适配等代码,在多轮实验中重复工作量大且易出错。
首先是一般流程,一图说明:
然后是其他的训练设置,调整pytorch_lightning Trainer的初始化参数即可,完成训练还可以跟模型一起作为checkpoint保存,如:
- gradient_clip_val 梯度剪裁
- accumulate_grad_batches 梯度累积
- max_epochs 训练轮次
- logger 可以使用tensorboard
- fast_dev_run 可以跑一个epoch来验证LightningModule的流程写对了没有
实际效果:训练流程更标准化,训练参数能够自动保存,简单配置即可调整训练过程和添加训练监控
应用背景:PyTorch Lightning 侧重简化训练流程,而在 NLP 任务中,模型与数据集的获取、不同任务的模型适配仍需大量手动工作 —— 如寻找开源模型需逐个适配接口、十分常见的任务(分词标注、多选、文本分类)需自行定义模型结构、训练过程和损失函数
- 生态优势:统一加载开源模型与数据集,通过AutoModel系列接口可直接调用 BERT、GPT 等数千种预训练模型,datasets库一键加载 GLUE、IMDB 等标准数据集,无需处理格式差异
- 高封装性:针对不同任务提供专用模型类,我只需要通过模型名指定加载的transformer层,训练和损失已由内部处理:
- AutoModelForTokenClassification:用于命名实体识别、词性标注等 token 级任务
- AutoModelForMultipleChoice:用于选择题、文本匹配等多选任务
- AutoModelForSequenceClassification:用于情感分析、文本分类等序列级任务
- 配套工具:自带Tokenizer处理文本分词、编码
实际效果:更容易的加载开源模型和数据集并进行快速验证,且提供了适合不同任务的预设模型
在04 句子相似性的任务中,可以看到其继承了hf transformers的主要类,所以可以以hf的习惯使用,并且在句子处理和指标计算方面提供了一些便利
- 【简单、高效、性能好】SetFit:无需Prompts的高效小样本学习 - 知乎
- SetFit: 高效的无提示少样本学习
- Sentence Transformers Finetuning (SetFit)
该库的总体思路是分为两阶段:embedding训练和分类层训练,在文本分类任务中将不同的样本组成对进行embedding的对比学习
所以在02任务中,使用每类16个样本就可以获得85%的准确率