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

前言

        基于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.mzph.cn/news/777812.shtml

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

相关文章

水位计在水利工程安全监测中起到的作用

水利工程,作为人类调控水资源、抵御水患以及利用水能的重要工具,其安全性、稳定性与高效性显得尤为关键。水位是水利工程中最基础且至关重要的参数,其精确且实时的监测对于工程的日常运行与管理具有无可替代的重要性。水位计,作为…

设计模式 - 简单工厂模式

文章目录 前言 大家好,今天给大家介绍一下23种常见设计模式中的一种 - 工厂模式 1 . 问题引入 请用C、Java、C#或 VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符 号,得到结果。 下面的代码实现默认认为两个操作数为Inte…

设计模式-设配器模式

目录 🎊1.适配器模式介绍 🎃2.适配器类型 🎏3.接口适配器 🎐4.类的适配器 🎎5.优缺点 1.适配器模式介绍 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设…

LeetCode 406. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组 peopl…

戴尔电脑Dell SupportAssist占用内存高,卸载Dell SupportAssist

咨询戴尔客服了解到,SupportAssist是机器出厂自带的一款应用,主要的功能是可以检查驱动更新以及做一些硬件方面的健康检测,有时候后台运行可能会导致进程占用内存比较大,导致访问被的应用崩溃。 咨询卸载不影响之后,然…

计算机网络——29ISP之间的路由选择:BGP

ISP之间的路由选择:BGP 层次路由 一个平面的路由 一个网络中的所有路由器的地位一样通过LS,DV,或者其他路由算法,所有路由器都要知道其他所有路由器(子网)如何走所有路由器在一个平面 平面路由的问题 …

flutter 修改app名字和图标

一、修改名字 在Android中修改应用程序名称&#xff1a; 在AndroidManifest.xml文件中修改应用程序名称&#xff1a; 打开Flutter项目中的android/app/src/main/AndroidManifest.xml文件。找到<application>标签&#xff0c;然后在android:label属性中修改应用程序的名称…

安卓Activity上滑关闭效果实现

最近在做一个屏保功能&#xff0c;需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的&#xff0c;内部是一个viewpager 做这个效果的时候&#xff0c;关键就是要注意外层拦截触摸事件时&#xff0c;需要有条件的拦截&#xff0c;不能影响到内部viewpager的滑动处理…

爬取豆瓣电影分类排行榜中的电影详情数据

进入界面&#xff0c;右键打开检测&#xff0c;选择网络 然后网页滚动条拉倒最下面使其刷出新的数据&#xff0c;然后查看数据包 编写代码 import requests import jsonif __name__ __main__:get_url https://movie.douban.com/j/chart/top_listheaders {User-Agent:Mozil…

边缘计算与云计算总结

一. EdgeGallery 简介 MEC场景下的EdgeGallery是让资源边缘化&#xff0c;实时完成移动网络边缘的业务处理&#xff0c;MEC场景下的EdgeGallery让开发者能更便捷地使用 5G 网络能力&#xff0c;让5G能力在边缘触手可及。 EdgeGallery是由华为、信通院、中国移动、中国联通、…

语音模块摄像头模块阿里云结合,实现垃圾的智能识别

语音模块&摄像头模块&阿里云结合 文章目录 语音模块&摄像头模块&阿里云结合1、实现的功能2、配置2.1 软件环境2.2 硬件配置 3、程序介绍3.1 程序概况3.2 语言模块SDK配置介绍3.3 程序文件3.3.1 开启摄像头的程序3.3.2 云端识别函数( Py > C ) & 串口程序…

Spring Boot 防护 XSS + SQL 注入攻击

XSS跨站脚本攻击 ① XSS漏洞介绍 跨站脚本攻击XSS是指攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被解析执行&#xff0c;从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击&#xff01; ② XSS…

【 MyBatis 】| 关于多表联查返回 List 集合只查到一条的 BUG

目录 一. &#x1f981; 写在前面二. &#x1f981; 探索过程2.1 开端 —— 开始写 bug2.2 发展 —— bug 完成2.3 高潮 —— bug探究2.4 结局 —— 效果展示 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 今天又是 BUG 气满满的一天&#xff0c;一个 xxxMapper.xm…

spark核心概念

DAG 所谓DAG就是有向无环图&#xff0c;其实就是个无环的流程&#xff0c;Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler!则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据…

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS&#xff1a;Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点&#xff1a; 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…

Docker进阶:使用Docker部署Harbor私有镜像仓库

Docker进阶&#xff1a;使用Docker部署Harbor私有镜像仓库 1、安装Docker和Docker Compose1、安装Docker、Docker Compose2、验证Docker和Docker Compose是否成功安装3、先启动运行docker服务 2、下载并配置Harbor1、下载最新版本的Harbor离线安装包2、配置Harbor的主机名和管理…

京东云搭建幻兽帕鲁Palworld多人游戏联机服务器教程,1分钟开服

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

uni-app(使用阿里图标)

1.注册阿里矢量图标库 注册阿里图标库账号并登录&#xff0c;https://www.iconfont.cn/ 2.加入购物车 搜索适合自己的图标&#xff0c;加入购物车&#xff0c;如下图&#xff1a; 3.加入项目 我的->资源管理->我的项目->创建项目&#xff0c;然后返回购物车&#…

中国信通院 X StarRocks金融用户社区正式成立

在国家战略的推动下&#xff0c;开源技术正逐渐成为金融行业创新发展的重要驱动力。2024 年 3 月 26 日&#xff0c;中国信息通信研究院 X StarRocks 金融用户社区&#xff08;以下简称“社区”&#xff09;正式成立&#xff0c;这一举措旨在深化国内金融领域的开源生态建设&am…

粗略总结AI大模型学习需要了解的要点

目录 一、概念简介 二、兴起原因 三、相关要点 四、不足之处 五、总结 一、概念简介 AI大模型学习是指利用大规模数据集和强大计算能力进行深度学习模型的训练。随着数据的爆炸式增长和计算资源的提升&#xff0c;AI大模型学习成为了现代人工智能研究的重要方向。 二、兴起…