基于PaddleNLP的深度学习对文本自动添加标点符号(二)

news/2024/4/27 21:56:55/文章来源:https://blog.csdn.net/YY007H/article/details/137094290

前言

        基于PaddleNLP的深度学习对文本自动添加标点符号的源码版来了,本篇文章主要讲解如何文本自动添加标点符号的原理和相关训练方法,前一篇文章讲解的是使用paddlepaddle已经训练好的一些模型,在一些简单场景下可以通过这些模型进行预测,但是在复杂场景下,就必须通自行训练。

环境准备

1、建议使用PyCharm进行开发,社区版即可Download PyCharm: Python IDE for Professional Developers by JetBrains

2、获取项目源码并导入到PyCharm中,结构如下

预处理和相关原理讲解

1、数据准备

准备一份数据集,这个数据集质量可能不是很好,中英文标点符号混合了,同时也有很多不合理的文本,例如网页的HTML代码,我们可以简单做一个处理,把英文的标点符号,.?替换成中文的,。?,如果想要更好的数据,可以进一步清理数据,或者自定义数据集。如下:

如果存在一些别的特殊字符,也可以手动添加过滤掉。

当然我们自定义的数据中还存在一些不在预训练模型的vocab.txt中字符,我们也可以过滤掉,当然也可能动态添加到vocab.txt中,用来扩充我们的字符集。

这里说明一点:本源码新增两大特色

  • 1、支持扩充字符,这个在源码中有体现
  • 支持空格字符,训练集中存不存空号都可以,但必须保证没有两个连续的空格
2、原理说明

参考命名实体识别的BIO模式,由于我们标签都是单字,所以采用BO模式,我们可以把数据集处理成如下:

标签文件:

其中符号转换为:

{”O“:0,",-B":1,"。-B":2,"?-B":3,"!-B":4,...
}

遍历我们的数据集,将所有的文字标签化:

这样处理有个问题,需要首个字符不能为标签中的标点符号。

训练

处理好数据集后,就可以开始进行训练

1、开始训练

其中--add_vocab参数,为新增的字符,训练过程中会将新增的字符加入到库中,导出的模型会自动携带新增的字符

export save_dir=./ernie_ckpt/output/
export data_dir=./data/data/
export pretrained_model=./ernie_ckpt/output/best_model/model_state.pdparams
export add_vocab=./data/vocab_other.txtexport model_name="ernie-3.0-medium-zh"
# ,1,2,3,4,5,6,7
python3 -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_ernie.py \--device gpu \--model_name $model_name \--pretrained_model $pretrained_model \--save_dir $save_dir \--epochs 300 \--save_epoch 10 \--batch_size 4 \--data_dir $data_dir \--add_vocab $add_vocab
[2022-09-14 17:17:34,309] [    INFO] - Already cached .ppnlp_home/models/ernie-3.0-medium-zh/ernie_3.0_medium_zh.pdparams
W0914 17:17:34.310540 10320 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.6, Runtime API Version: 10.2
W0914 17:17:34.313140 10320 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[2023-09-14 17:17:37.758967 INFO   ] train:train:90 - Train epoch: [1/20], batch: [0/1283], loss: 2.05675, f1_score: 0.02082, learning rate: 0.00001000, eta: 2:18:40
[2023-09-14 17:17:54.295418 INFO   ] train:train:90 - Train epoch: [1/20], batch: [100/1283], loss: 0.12979, f1_score: 0.33040, learning rate: 0.00000990, eta: 1:11:06
[2023-09-14 17:18:10.936073 INFO   ] train:train:90 - Train epoch: [1/20], batch: [200/1283], loss: 0.13771, f1_score: 0.37442, learning rate: 0.00000980, eta: 1:10:43
[2023-09-14 17:18:27.706051 INFO   ] train:train:90 - Train epoch: [1/20], batch: [300/1283], loss: 0.10602, f1_score: 0.47096, learning rate: 0.00000970, eta: 1:10:35
[2023-09-14 17:18:44.545404 INFO   ] train:train:90 - Train epoch: [1/20], batch: [400/1283], loss: 0.12836, f1_score: 0.55652, learning rate: 0.00000961, eta: 1:10:27
[2022-09-14 17:19:01.434206 INFO   ] train:train:90 - Train epoch: [1/20], batch: [500/1283], loss: 0.11024, f1_score: 0.51312, learning rate: 0.00000951, eta: 1:10:18

2、导出模型

python3 export_ernie_model.py --model_name ernie-3.0-medium-zh --params_path ./ernie_ckpt/output/best_model/model_state.pdparams  --data_dir ./data/data/ --output_path ./inference/

3、预测

import osos.environ["PPNLP_HOME"] = "ppnlp_home"
from deploy.python.predict_ernie import ModelPredictcurrent_path = os.path.dirname(os.path.abspath(__file__))def get_ner_result(model_dir, query_list):modelPredict = ModelPredict(model_dir=model_dir,model_name="ernie-3.0-medium-zh",device="gpu",batch_size=16)results = modelPredict(query_list)print("get predict num={}".format(len(results)))return resultsif __name__ == "__main__":model_dir = "inference/"datalist = ["耶律虎古字海邻六院夷离菫觌烈之孙少颖悟重然诺"]results = get_ner_result(model_dir, datalist)for result in results:print("输出:", str(result))

小结

 到这一步,标点符号预测到这一步就完成了,总体上讲效果还可以,如果需要更好的效果,可以更换更深更大的神经网络。

源码下载地址:基于PaddleNLP的深度学习对文本自动添加标点符号源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1027633.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】调整Player Settings的Resolution设置无效

【背景】 Build时修改了Player Settings下的Resolution设置,但是再次Building时仍然不生效。 【分析】 明显是沿用了之前的分辨率设定,所以盲猜解决办法是Build相关的缓存文件,或者修改打包名称。 【解决】 实测修改版本号无效&#xf…

指针数组的有趣程序【C语言】

文章目录 指针数组的有趣程序指针数组是什么?指针数组的魅力指针数组的应用示例:命令行计算器有趣的颜色打印 结语 指针数组的有趣程序 在C语言的世界里,指针是一种强大的工具,它不仅能够指向变量,还能指向数组&#…

[机缘参悟-162/管理者与领导者-151] :受害者心态与受害者思维模式,如何克服受害者思维模式,管理者如何管理这种思维模式的人?

目录 一、受害者心态概述 1.1 什么是受害者心态 1.2 受害者心态的表现形式 1.3 受害者心态在职场上的表现 1.4 受害者思维模式 1.5 受害者心态的危害 二、受害者心态的成因 2.1 概述 2.2 神经网络与受害者心态 三、如何克服受害者心态 3.1 概述 3.2 职场 3.3 家庭…

verilog 从入门到看得懂---verilog 的基本语法各种语句

本篇文章主要介绍verilog里面常用的语句, 包括条件语句、循环语句块语句和生成语句。出了块语句和生成语句,其他的基本和c语言或者m语言一致。 1,if 语句,在需要判断逻辑的时候可以使用if语句,如 从输入a,…

《QT实用小工具·二》图片文字转base64编码

1、概述 源码放在文章末尾 base64编码转换类 图片转base64字符串。base64字符串转图片。字符转base64字符串。base64字符串转字符。后期增加数据压缩。Qt6对base64编码转换进行了重写效率提升至少200%。 下面是demo演示: 项目部分代码如下所示: #ifn…

解决npm init vue@latest证书过期问题:npm ERR! code CERT_HAS_EXPIRED

目录 一. 问题背景 二. 错误信息 三. 解决方案 3.1 临时解决办法 3.2 安全性考量 一. 问题背景 我在试图创建一个新的Vue.js项目时遇到了一个问题:npm init vuelatest命令出现了证书过期的错误。不过这是一个常见的问题,解决起来也简单。 二. 错误…

【aws】架构图工具推荐

碎碎念 以前以为日本冰箱论是个梗,结果居然是真的。用光盘传真其实还能理解(毕竟我也喜欢电子古董2333),但是画架构图居然用的是excel+截图!啊苍天呐,然后看到隔壁工位用excel画web原型又感觉释…

Python 从0开始 一步步基于Django创建项目(13)将数据关联到用户

在city_infos应用程序中,每个城市信息条目是关联到城市的,所以只需要将城市条目关联到用户即可。 将数据关联到用户,就是把‘顶层’数据关联到用户。 设计思路: 1、修改顶层数据模型,向其中添加‘用户’属性 2、根…

kubernetes K8s的监控系统Prometheus升级Grafana,来一个酷炫的Node监控界面(二)

上一篇文章《kubernetes K8s的监控系统Prometheus安装使用(一)》中使用的监控界面总感觉监控的节点数据太少,不能快算精准的判断出数据节点运行的状况。 今天我找一款非常酷炫的多维度数据监控界面,能够非常有把握的了解到各节点的数据,以及运…

「DevExpress中文教程」如何将DevExtreme JS HTML编辑器集成到WinForms应用

在本文中我们将演示一个混合实现:如何将web UI工具集成到WinForms桌面应用程序中。具体来说,我们将把DevExtreme JavaScript WYSIWYG HTML编辑器(作为DevExtreme UI组件套件的一部分发布的组件)集成到Windows Forms应用程序中。 获取DevExtreme v23.2正式…

数据分析之Power BI

POWER QUERY 获取清洗 POWER PIVOT建模分析 如何加载power pivot 文件-选项-加载项-com加载项-转到 POWER VIEW 可视呈现 如何加载power view 文件-选项-自定义功能区-不在功能区中的命令-新建组-power view-添加-确定 POWER MAP可视地图

2.4 比较检验 机器学习

目录 常见比较检验方法 总述 2.4.1 假设检验 2.4.2 交叉验证T检验 2.4.3 McNemar 检验 接我们的上一篇《性能度量》,那么我们在某种度量下取得评估结果后,是否可以直接比较以评判优劣呢?实际上是不可以的。因为我们第一,测试…

uniapp h5 touch事件踩坑记录

场景:悬浮球功能 当我给悬浮球设置了 position: fixed; 然后监听悬浮球的touch事件,从事件对象中拿到clientY和clientX赋值给悬浮球的left和top属性。当直接赋值后效果应该是这样子: 注意鼠标相对悬浮球的位置,应该就是左上角&a…

在 Windows 11 上安装 MongoDB

MongoDB 是一个流行的 NoSQL 数据库,它提供了灵活的数据存储方案,而 MongoDB Compass 则是一个可视化管理工具,可以更轻松地与 MongoDB 数据库交互和管理。在本文中,我们将介绍如何在 Windows 11 上安装 MongoDB,并配置…

Radio Silence for mac 好用的防火墙软件

Radio Silence for Mac是一款功能强大的网络防火墙软件,专为Mac用户设计,旨在保护用户的隐私和网络安全。它具备实时网络监视和控制功能,可以精确显示每个网络连接的状态,让用户轻松掌握网络活动情况。 软件下载:Radio…

B2902A是德科技B2902A精密型电源

181/2461/8938产品概述: Agilent B2902A 精密源/测量单元 (SMU) 是一款 2 通道、紧凑且经济高效的台式 SMU,能够源和测量电压和电流。它用途广泛,可以轻松、高精度地执行 I/V(电流与电压)测量。4 象限源和测量功能的集…

基于SpringCloud+Hadoop+Vue实现的企业级网盘系统实现

编程语言:Java、Mybatis、Spring、SpringBoot、SpringCloud、Node、Vue 开发环境:Windows 10 Mysql 开发工具:WebStorm、IDEA编译器、Git、Maven 应用部署服务器:SpringBoot内置Tomcat插件 Node服务器:Node v10.1…

低功耗、低成本 NAS/公共文件夹 的可能性

使用现状:多台工作电脑,家里人手一台,还在两个住处 有好几台工作电脑,不同电脑不同OS有不同的用途,最大的问题就是各个电脑上文件的同步问题,这里当然就需要局域网里的公共文件夹,在NAS的问题上…

002-基于Pytorch的手写汉字数字分类

本节将介绍一种 2.1 准备 2.1.1 数据集 (1)MNIST 只要学习过深度学习相关理论的人,都一定听说过名字叫做LeNet-5模型,它是深度学习三巨头只有Yann Lecun在1998年提出的一个CNN模型(很多人认为这是第一个具有实际应用…

Qlib-Server:量化库数据服务器

Qlib-Server:量化库数据服务器 介绍 Qlib-Server 是 Qlib 的配套服务器系统,它利用 Qlib 进行基本计算,并提供广泛的服务器系统和缓存机制。通过 Qlib-Server,可以以集中的方式管理 Qlib 提供的数据。 框架 Qlib 的客户端/服务器框架基于 WebSocket 构建,这是因为 WebS…