概述
背景
目前在实际的业务中,需要对原始数据做数据标注,标注后的数据格式整理为JSON如下:
[
{
"text": "xxxxx",
"tag": "初始*第一次*开始"
}
]
这里的tag标注是一个层次分类。开始训练的一部分数据是人工标注的监督数据,那么对于新的数据,就是无监督数据,因此需要有一个模型来解决此问题。
介绍
PaddleNLP[1]是一款简单易用且功能强大的自然语言处理和大语言模型(LLM)开发库。聚合业界优质预训练模型并提供开箱即用的开发体验,覆盖NLP多场景的模型库搭配产业实践范例可满足开发者灵活定制的需求。
PaddleNLP主要的内容如下:
-
大模型全流程工具链[2],包含主流中文大模型的全流程方案。 -
精选模型库[3],包含优质预训练模型的端到端全流程使用。 -
多场景示例[4],了解如何使用PaddleNLP解决NLP多种技术问题,包含基础技术、系统应用与拓展应用。 -
交互式教程[5],在免费算力平台AI Studio上快速学习PaddleNLP。
区别于ModelScope魔塔社区更侧重于提供一个平台,让用户可以直接使用预训练模型,同时也有自己的社区支持模型分享和交流。
PaddleNLP是百度开源的NLP工具包,基于PaddlePaddle深度学习平台。它旨在为研究人员和开发者提供NLP任务的工具和预训练模型,以便于构建和训练NLP应用。
PaddleNLP提供了预训练模型示例 Model Zoo[6],场景示例文档 examples[7];在这两个资源库中,可以挖掘到许多的NLP应用场景。
层次分类任务
介绍
什么是层次分类?那就要先谈到自然语言处理(NLP)下的文本分类任务。
文本分类简单来说就是对给定的一个句子或一段文本使用分类模型分类。文本分类应用涵盖多分类(multi class)、多标签(multi label)、层次多标签分类(Hierarchical-Multilabel-Text-Classification,hmtc)三种场景。如下所示:
PaddleNLP库提供了文本分类应用[8]的支持,针对多分类、多标签、层次分类等高频场景开源了产业级分类应用方案,打通数据标注-模型训练-模型调优-模型压缩-预测部署全流程,旨在解决细分场景应用的痛点和难点,快速实现文本分类产品落地。PaddleNLP的文本分类方案全覆盖:

层次文本分类任务的中数据样本具有多个标签且标签之间存在特定的层级结构,目标是预测输入句子/文本可能来自于不同级标签类别中的某一个或几个类别。
层次多标签数据集
PaddleNLP提供通用场景下基于预训练模型微调的层次分类端到端应用方案,打通数据标注-模型训练-模型调优-模型压缩-预测部署全流程,有效缩短开发周期,降低AI开发落地门槛。官方文档:层次分类指南[9]。
预训练模型指的是ERNIE系列基座模型,文心一言大模型的基座模型也是它。
PaddleNLP库的文档中,要求训练、开发、测试数据集的格式与我要求的格式是一致的——层次分类。如下:
<文本>'t'<标签>','<标签>','<标签>
<文本>'t'<标签>','<标签>
...
样例如下:
又要停产裁员6000!通用汽车罢工危机再升级股价大跌市值蒸发近300亿! 组织行为,组织行为##罢工,组织关系,组织关系##裁员
上海一改建厂房坍塌已救出19人其中5人死亡 人生,人生##死亡,灾害/意外,灾害/意外##坍/垮塌
车闻:广本召回9万余辆;领动上市,10.98万起;艾力绅混动 产品行为,产品行为##召回
86岁老翁过马路遭挖掘机碾压身亡警方:正在侦办中 灾害/意外,灾害/意外##车祸,人生,人生##死亡
...
分类标签文件: 包含数据集中所有标签,每个标签一行。
-
label.txt 文件格式:
<一级标签>
<一级标签>'##'<二级标签>
<一级标签>'##'<二级标签>'##'<三级标签>
...
-
label.txt 文件样例:
人生
人生##死亡
灾害/意外
灾害/意外##坍/垮塌
灾害/意外##车祸
产品行为
产品行为##召回
...
待预测数据文件: 包含需要预测标签的文本数据,每条数据一行。
-
data.txt 文件格式:
<文本>
<文本>
...
-
data.txt 文件样例:
金属卡扣安装不到位,上海乐扣乐扣贸易有限公司将召回捣碎器1162件
卡车超载致使跨桥侧翻,没那么简单
消失的“外企光环”,5月份在华裁员900余人,香饽饽变“臭”了
...
完整的内容可以查看官方文档说明。从这里来看,完全符合层次多标签文本分类数据格式。只是说要将原始数据整理出来即可。也可以通过doccano数据标注平台来做。
预训练模型微调
在源码的 /PaddleNLP/applications/text_classification/hierarchical
下,基于预训练模型上,做领域业务数据的微调。脚本如下:
python train.py
--dataset_dir "data"
--device "gpu"
--max_seq_length 128
--model_name "ernie-3.0-medium-zh"
--batch_size 32
--early_stop
--epochs 100
生成checkpoint文件夹,这就是最终的微调参数文件。

模型导出与推理
训练好数据后,将参数文件导出,并做推理。
导出命令:
python export_model.py --params_path ./checkpoint/ --output_path ./export
微调命令:源码的 /PaddleNLP/applications/text_classification/hierarchical/deploy/predictor
下执行如下脚本
python infer.py
--device "gpu"
--model_path_prefix "../../export/float32"
--model_name_or_path "ernie-3.0-medium-zh"
--max_seq_length 128
--batch_size 32
--dataset_dir "../../data"
总结
在实际的业务中,总会涉及到自然语言处理NLP的方方面面,只是受限于认知了解的局限性,没有意识到NLP是比较恰好的解决方案。
虽然阿里云PAI平台也提供了一些数据标注的解决方案,但相比较来说,还是PaddleNLP这种开源库的性价比高。不过对于CRUDer来说,多了解接触下,还是很有必要的。
PaddleNLP: https://github.com/PaddlePaddle/PaddleNLP
[2]
大模型全流程工具链: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm
[3]
精选模型库: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo
[4]
多场景示例: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples
[5]
交互式教程: https://aistudio.baidu.com/aistudio/personalcenter/thirdview/574995
[6]
Model Zoo: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo
[7]
examples: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples
[8]
文本分类应用: https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification
[9]
层次分类指南: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/hierarchical/README.md
原文始发于微信公众号(阿郎小哥的随笔驿站):聊聊PaddleNLP库与层次多标签文本分类任务
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/281924.html