首页/新闻资讯/正文详情

PaddleSpeech 标点恢复实战:基于 ERNIE 的 IWSLT2012-中文标点预测全流程指南

发布时间:2026/9/25 2:36:01 来源:云帆数科 栏目:资讯中心
PaddleSpeech 标点恢复实战:基于 ERNIE 的 IWSLT2012-中文标点预测全流程指南
人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载本指南以 PaddleSpeech 仓库中的 examples/iwslt2012/punc0 示例为主线系统讲解如何基于 ERNIE 预训练语言模型完成中文标点恢复Punctuation Restoration任务从数据下载预处理、模型微调训练、指标评估到对无标点文本进行推理补全。读完本文你将掌握使用run.sh一键跑通标点恢复全流程的能力并能结合配置文件与源码理解ErnieLinear模型的底层实现原理。任务背景为什么 ASR 系统需要标点恢复语音识别ASR输出的原始文本通常是不含标点的连续字符流直接阅读或交由 NLP 下游任务处理时语义歧义严重。标点恢复任务的目标就是为这类无标点文本重新插入逗号COMMA、句号PERIOD、问号QUESTION等标点显著提升文本可读性并为后续的断句、机器翻译、信息抽取等任务提供基础。在 PaddleSpeech 中标点恢复作为文本处理text能力的一部分常被串联在语音识别流水线之后例如 speech_server 等部署场景中可对 ASR 结果进行标点还原。本示例选择 IWSLT2012 中文语料作为训练数据采用「ERNIE 预训练模型 线性分类头」的范式将标点恢复建模为逐 token 的序列标注问题对每个中文字符/词预测其后方应插入的标点类别。这是当前仓库中punc0示例的核心技术路线。示例目录结构与执行入口examples/iwslt2012/punc0目录的组织如下run.sh总控脚本通过--stage/--stop-stage控制执行阶段path.sh环境与路径初始化声明MAIN_ROOT、PYTHONPATH并指向paddlespeech/text/exps/ernie_linear下的可执行脚本conf7 个 YAML 配置文件对应不同 ERNIE 版本localdata.sh数据准备、train.sh训练、test.sh评估、punc_restore.sh推理、preprocess.py数据处理RESULTS.mdErnie 1.0 的基准测试结果。run.sh中定义了若干可在命令行覆盖的默认参数gpus0,1 stage0 stop_stage100 conf_pathconf/default.yaml train_output_pathexp/default ckpt_namesnapshot_iter_12840.pdz text今天的天气真不错啊你下午有空吗我想约你一起去吃饭其中conf_path决定使用哪套 ERNIE 预训练权重与训练超参ckpt_name指定用于评估/推理的 checkpoint 文件名text是标点恢复推理阶段的输入文本示例。脚本通过source ${MAIN_ROOT}/utils/parse_options.sh解析--stage、--stop-stage等命令行参数从而可以精确控制只运行某个阶段。一、数据准备Stage 0执行./run.sh --stage 0 --stop-stage 0该阶段实际调用 local/data.sh逻辑非常简单若data目录不存在则从 PaddleSpeech 官方 CDN 下载iwslt2012.tar.gz并解压if [ ! -d data ]; then wget -c https://paddlespeech.cdn.bcebos.com/datasets/iwslt2012.tar.gz tar -xzf iwslt2012.tar.gz fi解压后得到data/iwslt2012_zh/目录其中包含train.txt训练集含标点的原始文本逐行一句dev.txt开发集test.txt测试集punc_vocab标点词表。标点词表与配置文件中model.num_classes: 4相对应推理代码中读取词表后在行首补一个0作为“无标点”类别见下文punc_restore.py的punc_list [0] punc_list因此模型实际输出 4 类无标点、COMMA、PERIOD、QUESTION。若希望增加句内顿号、冒号等更多标点需要同步扩展词表与num_classes。二、模型训练Stage 1执行./run.sh --stage 1 --stop-stage 1该阶段调用 local/train.sh传入配置文件路径与输出目录以单卡 GPU 启动训练python3 ${BIN_DIR}/train.py \ --config${config_path} \ --output-dir${train_output_path} \ --ngpu1train.py位于 paddlespeech/text/exps/ernie_linear/train.py是完整的训练入口其内部流程包括环境初始化依据--ngpu与 CUDA 编译状态决定paddle.set_device(gpu/cpu)多卡时初始化并行环境随机种子调用seed_everything(config.seed)固定 Paddle / random / numpy 的随机种子保证实验可复现数据集构建通过DefinedDataset注册表按dataset_type选择数据集类Ernie类型对应PuncDatasetFromErnieTokenizer即直接用 ERNIE 分词器对文本做 tokenize不再需要额外的 BPE 词表模型构建通过DefinedClassifier注册表按model_type: ErnieLinear实例化 ErnieLinear损失与优化器默认使用nn.CrossEntropyLossloss_type缺省时自动回退到ce优化器为Adam配合ExponentialDecay学习率衰减与weight_decay的 L2 正则训练调度复用paddlespeech/t2s/training的Trainer、Snapshot、VisualDL扩展训练期间会保存多个 checkpoint 到exp/default/checkpoints/目录并可通过 VisualDL 观察训练曲线。训练产物默认落在exp/default/checkpoints/下例如snapshot_iter_12840.pdz。checkpoint 文件内以main_params为键保存模型状态字典评估与推理脚本加载时均使用state_dict[main_params]。ErnieLinear 模型结构ErnieLinear 是一个轻量的序列标注模型核心代码仅几十行class ErnieLinear(nn.Layer): def __init__(self, num_classesNone, pretrained_tokenernie-1.0, ...): self.ernie ErnieForTokenClassification.from_pretrained( pretrained_token, num_labelsnum_classes, **kwargs) self.softmax nn.Softmax() def forward(self, input_ids, token_type_idsNone, position_idsNone, attention_maskNone): y self.ernie(input_ids, token_type_idstoken_type_ids, attention_maskattention_mask, position_idsposition_ids) y paddle.reshape(y, shape[-1, self.num_classes]) logits self.softmax(y) return y, logits其实现要点直接基于 PaddleNLP 的ErnieForTokenClassification加载预训练 ERNIE 权重把 ERNIE 当作特征提取器分类头输出维度为num_classes即标点类别数对每个 token 输出各类别概率forward同时返回ylogits 或 loss与logitsSoftmax 归一化后的概率训练与推理共用也支持从本地cfg_pathckpt_path加载模型from_pretrained(os.path.dirname(cfg_path))便于离线部署。三、配置文件详解默认配置文件为 conf/default.yaml对应 ERNIE 1.0 预训练模型目录下还提供 ernie-3.0-base.yaml、ernie-3.0-medium.yaml、ernie-3.0-mini.yaml、ernie-3.0-nano-zh.yaml、ernie-tiny.yaml等变体结构与 default 完全一致仅将data_params.pretrained_token与model.pretrained_token替换为对应 ERNIE 版本如ernie-3.0-base-zh。下面以 default.yaml 为准逐段解读DATA SETTING数据设置dataset_type: Ernie train_path: data/iwslt2012_zh/train.txt dev_path: data/iwslt2012_zh/dev.txt test_path: data/iwslt2012_zh/test.txt batch_size: 64 num_workers: 2 data_params: pretrained_token: ernie-1.0 punc_path: data/iwslt2012_zh/punc_vocab seq_len: 100dataset_type: Ernie使用 ERNIE 分词器构建数据集PuncDatasetFromErnieTokenizertrain_path / dev_path / test_path三段数据文件均为逐行纯文本batch_size: 64批次大小显存紧张时可适当调小num_workers: 2DataLoader 的数据加载子进程数pretrained_token预训练 ERNIE 模型名与模型侧保持一致punc_path标点词表文件路径推理时用于将类别索引映射回标点字符seq_len: 100序列最大长度超过部分会被截断是显存与上下文信息量的权衡参数。MODEL SETTING模型设置model_type: ErnieLinear model: pretrained_token: ernie-1.0 num_classes: 4model_type通过注册表映射到ErnieLinear类pretrained_token预训练权重标识对应 PaddleNLP 中可直接下载的 ERNIE 权重num_classes: 4分类类别数无标点、COMMA、PERIOD、QUESTION。OPTIMIZER / SCHEDULER SETTING优化器与调度设置optimizer_params: weight_decay: 1.0e-6 # weight decay coefficient. scheduler_params: learning_rate: 1.0e-5 # learning rate. gamma: 0.9999 # scheduler gamma must between(0.0, 1.0) and closer to 1.0 is better.weight_decay: 1.0e-6L2 权重衰减系数用于抑制过拟合learning_rate: 1.0e-5初始学习率。微调预训练语言模型时学习率通常设置得很小1e-5 量级避免破坏预训练学到的语义表示gamma: 0.9999ExponentialDecay的衰减因子必须落在(0.0, 1.0)区间且越接近 1.0学习率衰减越平缓适合较长周期的微调。train.py中这两组参数的实际使用方式为lr_schedule ExponentialDecay(**config[scheduler_params]) optimizer Adam(learning_ratelr_schedule, parametersmodel.parameters(), weight_decaypaddle.regularizer.L2Decay(config[optimizer_params][weight_decay]))TRAINING / OTHER SETTING训练与杂项设置max_epoch: 20 num_snapshots: 5 # 训练循环中快照间隔相关 num_snapshots: 10 # 最多保留的 checkpoint 数量 seed: 42 # 随机种子max_epoch: 20最大训练轮数num_snapshots配置文件中出现两次后者生效表示训练过程中最多保留 10 个快照checkpoint超出后按策略覆盖旧快照seed: 42固定全局随机种子确保结果可复现。四、模型评估Stage 2执行./run.sh --stage 2 --stop-stage 2该阶段调用 local/test.shpython3 ${BIN_DIR}/test.py \ --config${config_path} \ --checkpoint${train_output_path}/checkpoints/${ckpt_name}test.py位于 paddlespeech/text/exps/ernie_linear/test.py加载指定 checkpoint在测试集上计算逐类别的Precision精确率、Recall召回率与 F1 值分别统计 COMMA、PERIOD、QUESTION 三类标点并汇总 OVERALL 整体指标。这类按标点类别分别统计的方式可以直观看出模型对句号、问号、逗号各自的恢复能力差异例如从下方结果可见问号类别的表现通常最好因为问句结构线索明显。五、标点恢复推理Stage 3执行./run.sh --stage 3 --stop-stage 3该阶段调用 local/punc_restore.sh对run.sh中定义的示例文本今天的天气真不错啊你下午有空吗我想约你一起去吃饭进行标点恢复python3 ${BIN_DIR}/punc_restore.py \ --config${config_path} \ --checkpoint${train_output_path}/checkpoints/${ckpt_name} \ --text${text}推理脚本 punc_restore.py 的完整流程如下文本清洗_clean_text统一转小写剔除[A-Za-z0-9\u4e00-\u9fa5]之外的字符并去掉词表中已有的标点得到干净的无标点文本分词与编码preprocess使用ErnieTokenizer.from_pretrained(pretrained_token)将字符列表 tokenize产出input_ids、token_type_idsseg_ids、seq_len注意需开启is_split_into_wordsTrue前向推理将编码结果unsqueeze(0)后送入ErnieLinear得到每个 token 的类别概率paddle.argmax(logits, axis-1)取最大概率类别作为预测标点标点回插遍历tokens[1:seq_len-1]与对应预测标签将punc_list [0] punc_list中的标点字符拼接到对应 token 之后标签为 0 表示不加标点最终打印Punctuation Restoration Result: ...。也就是说输入无标点文本经过模型后会输出类似「今天的天气真不错啊你下午有空吗我想约你一起去吃饭。」这样的带标点结果可直接作为 ASR 后处理输出。六、预训练模型官方提供了已训练好的标点恢复模型与配套 ERNIE 预训练权重可直接下载使用下载后在推理时通过--checkpoint指定标点恢复模型路径并通过配置文件的pretrained_token指定 ERNIE 权重版本标点恢复模型ernie_linear_p3_iwslt2012_zh_ckpt_0.1.1.zipERNIE 预训练权重ernie-3.0-base.tar.gzernie-3.0-medium.tar.gzernie-3.0-micro.tar.gzernie-mini.tar.gzernie-nano.tar.gzernie-tiny.tar.gz不同规模的 ERNIE 权重对应 conf 目录下不同配置文件可按算力与精度需求灵活选择模型规模越大base medium mini micro nano tiny效果上限越高但推理耗时与显存占用也相应增加。七、测试结果官方在不同 ERNIE 版本下于 IWSLT2012-中文测试集上报告的指标如下Precision / Recall / F1按标点类别及整体统计Ernie 1.0COMMAPERIODQUESTIONOVERALLPrecision0.5109550.5264620.8207550.619391Recall0.5174330.5641790.8613860.647666F10.5141730.5446690.8405800.633141Ernie-tinyCOMMAPERIODQUESTIONOVERALLPrecision0.7331770.7214480.7547170.736447Recall0.3807400.5246460.7339450.546443F10.5012040.6075060.7441860.617632Ernie-3.0-base-zhCOMMAPERIODQUESTIONOVERALLPrecision0.8059470.7641600.8584910.809532Recall0.3990700.5679780.8504670.605838F10.5338170.6516230.8544600.679967Ernie-3.0-medium-zhCOMMAPERIODQUESTIONOVERALLPrecision0.7308290.6991640.7075470.712514Recall0.3881960.5332860.7978720.573118F10.5070580.6050620.7500000.620707Ernie-3.0-mini-zhCOMMAPERIODQUESTIONOVERALLPrecision0.7574330.7084490.7075470.724477Recall0.3557520.5069770.7352940.532674F10.4841210.5910150.7211540.598763Ernie-3.0-micro-zhCOMMAPERIODQUESTIONOVERALLPrecision0.7339590.6796660.7264150.713347Recall0.3327420.4834870.7129630.509731F10.4578960.5650330.7196260.580852Ernie-3.0-nano-zhCOMMAPERIODQUESTIONOVERALLPrecision0.6932710.6824510.7547170.710146Recall0.3277840.4919680.6666670.495473F10.4451140.5717620.7079650.574947从表格中可以观察到两个规律其一Ernie-3.0-base-zh 的整体 F1 最高0.679967说明模型容量对下游标注任务效果有明显增益其二各版本普遍呈现「精确率高、召回率偏低」的特点即模型倾向于少插标点但插得较准其中QUESTION问号类别的各项指标在各版本中都显著优于 COMMA 与 PERIOD这与问句的句法模式更易被模型捕获有关。小结与扩展方向通过examples/iwslt2012/punc0这个示例可以完整掌握 PaddleSpeech 标点恢复能力的落地路径数据run.sh --stage 0一键下载 IWSLT2012-中文数据集训练run.sh --stage 1基于 ERNIE 线性分类头微调配置集中在 conf/default.yaml评估run.sh --stage 2输出按标点类别统计的 P/R/F1推理run.sh --stage 3对任意无标点文本执行标点恢复。在此基础上可以进一步扩展的方向包括将标点恢复接入 ASR 输出流水线形成「语音 → 文本 → 带标点文本」的完整链路尝试更丰富的标点类别扩展punc_vocab并同步调整num_classes或在更大规模中文语料上训练以逼近 RESULTS.md 中报告的基准水平。仓库内 paddlespeech/text/exps/ernie_linear 与 paddlespeech/text/models/ernie_linear 下的源码即为全部实现读者可据此做进一步定制。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 的 iwslt2012 中文标点恢复实验Ernie 基线结果解读与完整复现链路PaddleSpeech 的 iwslt2012 中文标点恢复实验Ernie 基线结果解读与完整复现链路 本篇以 PaddleSpeech 仓库中 examp人工智能语音音频PaddleHub auto_punc 中文标点恢复基于 ERNIE 的标点自动补全模型实战指南PaddleHub auto_punc 中文标点恢复基于 ERNIE 的标点自动补全模型实战指南 auto_punc 是 PaddleHub 中一款专用于中文人工智能大模型微调模型推理服务PaddleSpeech 视频自动字幕生成实战基于 ASR 与标点恢复的完整流程PaddleSpeech 视频自动字幕生成实战基于 ASR 与标点恢复的完整流程 导读 视频字幕自动生成是语音识别ASR在实际场景中最直接的应用之一给定人工智能语音音频NLP媒体生成上一篇GeographicLib终极指南5步掌握高精度地理与地磁计算下一篇Vue-Pull-To终极下拉刷新与上拉加载组件完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

wheel-picker-cj 源码拆解:双 Scroll 同步实现滚轮吸附的底层原理
wheel-picker-cj 源码拆解:双 Scroll 同步实现滚轮吸附的底层原理

wheel-picker-cj 源码拆解:双 Scroll 同步实现滚轮吸附的底层原理 【免费下载链接】wheel-picker-cj 滚轮选择UI组件 项目地址: https://gitcode.com/Cangjie-TPC/wheel-picker-cj wheel-picker-cj 是一款基于仓颉(Cangjie)语言开发的… · 2026/9/25 2:36:01

阿里云部署OpenClaw:79元/年搭24小时AI代理,TaoToken统一Key接入配置指南
阿里云部署OpenClaw:79元/年搭24小时AI代理,TaoToken统一Key接入配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:36:01

Comp AI CRM 渲染性能实践:用 useTransition 取代手动加载状态,告别多余重渲染
Comp AI CRM 渲染性能实践:用 useTransition 取代手动加载状态,告别多余重渲染

后端前端CRM人工智能AI Agent 【免费下载链接】crm Comp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM. 项目地址: https://gitcode.com/gh_mirrors/crm48/crm 点击查看 免费下载 本指南基于 Comp AI CRM 仓库内置的 Vercel React 最… · 2026/9/25 2:35:55

2026年选网站建设公司全指南:从需求定义到合同避坑的实操策略
2026年选网站建设公司全指南:从需求定义到合同避坑的实操策略

1. 选网站建设公司之前,先定义你的官网是干什么用的很多老板来找我咨询时,开口第一句话就是:“想做个官网,预算3万,帮我推荐一家靠谱的公司。”这话听着爽快,其实是最难接的需求,因为“官网”两… · 2026/9/25 3:05:55

HowToGraphQL Ember 教程详解:用 ember-apollo-client 发送 GraphQL Mutation 创建 Link
HowToGraphQL Ember 教程详解:用 ember-apollo-client 发送 GraphQL Mutation 创建 Link

【免费下载链接】howtographql The Fullstack Tutorial for GraphQL 项目地址: https://gitcode.com/gh_mirrors/ho/howtographql 点击查看 免费下载 本文基于 HowToGraphQL 教程仓库中 Ember Apollo 前端轨道的第三章文档 3-mutations-creating-links.md 展开&am… · 2026/9/25 3:05:55

Learn-Algorithms 链表排序专题:单链表归并排序、相交检测与环入口定位
Learn-Algorithms 链表排序专题:单链表归并排序、相交检测与环入口定位

教程 【免费下载链接】Learn-Algorithms 算法学习笔记 项目地址: https://gitcode.com/gh_mirrors/le/Learn-Algorithms 点击查看 免费下载 导读:本文围绕仓库 9 Algorithms Job Interview/2.1 链表-排序.md 中记录的微软面试题展开——给定单链表头指针… · 2026/9/25 3:05:55

SAP安全审计日志实战:SM19配置与SM20查询全指南
SAP安全审计日志实战:SM19配置与SM20查询全指南

做 SAP 运维这些年,被问得最多的问题之一就是:“帮我查一下某某用户昨天登录了系统没有?他到底跑了哪些事务码?”每次接到这类需求,我第一反应就是打开 SM19 和 SM20 这对组合。很多顾问平时不太碰这两个事务码&#x… · 2026/9/25 3:05:55

使用宝塔面板部署 MediaGo:Docker 应用商店一键安装与服务端口详解
使用宝塔面板部署 MediaGo:Docker 应用商店一键安装与服务端口详解

音视频桌面应用后端 【免费下载链接】mediago 跨平台视频提取工具:支持流媒体下载、视频下载、m3u8 下载及 B站视频下载,提供 Windows 和 Mac 桌面客户端。Cross-platform video extraction tool: Supports streaming download, video download, m3u8 do… · 2026/9/25 3:05:49

Havoc Demon Agent 源码结构深度解析:C2 植入体的模块化设计与实现
Havoc Demon Agent 源码结构深度解析:C2 植入体的模块化设计与实现

网络安全 【免费下载链接】Havoc The Havoc Framework 项目地址: https://gitcode.com/gh_mirrors/ha/Havoc 点击查看 免费下载 Demon 是 Havoc 框架(Havoc Framework)中的 Windows 端植入体(Agent),其源码… · 2026/9/25 3:05:49

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码