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

PaddleSpeech 标点恢复(Punctuation Restoration)核心模块解析:ERNIE Linear 模型、数据集与训练管线全指南

发布时间:2026/9/25 7:04:13 来源:云帆数科 栏目:资讯中心
PaddleSpeech 标点恢复(Punctuation Restoration)核心模块解析:ERNIE Linear 模型、数据集与训练管线全指南
人工智能语音音频【免费下载链接】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/gh_mirrors/pa/PaddleSpeech点击查看免费下载导读本文以 PaddleSpeech 文本任务中的标点恢复Punctuation Restoration核心模块paddlespeech.text.models.ernie_linear为主线完整解析其三大组成部分——基于 ERNIE 预训练模型的 Token 分类器ErnieLinear、两类数据处理集PuncDataset/PuncDatasetFromErnieTokenizer以及训练/评估器ErnieLinearUpdater/ErnieLinearEvaluator。通过阅读本文你将掌握该模块的模型结构、数据切分与对齐原理、训练与评估指标计算方式并能够结合 examples/iwslt2012/punc0 示例跑通数据准备 → 训练 → 测试 → 标点恢复的完整流程。模块定位ernie_linear在 PaddleSpeech 文本任务中的角色在 PaddleSpeech 的 API 文档体系中docs/source/api/paddlespeech.text.models.ernie_linear.rst是该模块的自动文档索引页它通过automodule指令挂载了模块内所有公开成员并列出三个子模块paddlespeech.text.models.ernie_linear.dataset——数据加载与序列化paddlespeech.text.models.ernie_linear.ernie_linear——模型本体paddlespeech.text.models.ernie_linear.ernie_linear_updater——训练与评估逻辑。从源码结构看该模块承担的是对标点符号进行 Token 级序列标注的任务给定一段没有标点的中文或英文文本模型在每个字/词单元后预测是否应该插入逗号、句号、问号等标点这与语音识别ASR结果的后处理、TTS 前端文本规整等场景密切相关。它的实际消费方包括CLI 工具入口 paddlespeech/cli/text/infer.py 中的TextExecutor任务puncTTS 韵律预测模块 paddlespeech/t2s/frontend/rhy_prediction/rhy_predictor.py作为句子切分与停顿预测的前置手段服务端配置 paddlespeech/server/conf/application.yaml 中的文本服务。模型实现ErnieLinear——在 ERNIE 之上叠加线性分类头构造逻辑与两条初始化路径模型文件 paddlespeech/text/models/ernie_linear/ernie_linear.py 定义了ErnieLinear(nn.Layer)。构造函数__init__(num_classesNone, pretrained_tokenernie-1.0, cfg_pathNone, ckpt_pathNone, **kwargs)支持两种初始化方式本地微调模型路径加载当同时传入cfg_path与ckpt_path时代码会对两者做os.path.abspath(os.path.expanduser(...))规范化并断言文件存在随后通过ErnieForTokenClassification.from_pretrained(os.path.dirname(cfg_path))从配置文件所在目录加载已微调好的 ERNIE Token 分类模型。这正是 CLI 推理时复用训练产物config checkpoint的方式。从预训练权重新建否则要求num_classes为正整数调用ErnieForTokenClassification.from_pretrained(pretrained_token, num_labelsnum_classes, **kwargs)默认预训练模型为ernie-1.0并通过self.num_classes self.ernie.num_labels从加载后的模型反向取得真实类别数。其中ErnieForTokenClassification来自 PaddleNLPpaddlenlp.transformers即 Paddle 生态的 ERNIE 预训练模型 Token 分类输出头的组合。前向计算logits 与 softmax 双输出forward(input_ids, token_type_idsNone, position_idsNone, attention_maskNone)的流程为将输入送入 ERNIE 编码器得到每个 Token 的分类 logitsyy paddle.reshape(y, shape[-1, self.num_classes])把[batch, seq_len, num_classes]展平为[batch*seq_len, num_classes]方便后续与展平后的标签做逐 Token 交叉熵经过nn.Softmax()得到概率分布logits与原始 logitsy一起返回。注意forward返回元组(y, logits)前者用于损失计算后者用于argmax预测——这在训练、测试、推理脚本中是一致的调用约定如y, logit self.model(input)。损失与推理细节的印证训练时使用nn.CrossEntropyLoss见训练脚本中DefinedLoss {ce: nn.CrossEntropyLoss}推理时对logits执行paddle.argmax(logits, axis1)得到每个 Token 的标点类别索引类别 0 表示无标点1/2/3 分别对应逗号、句号、问号与数据集标点词表顺序一致。数据集实现文本的字-标点序列化与对齐数据模块 paddlespeech/text/models/ernie_linear/dataset.py 导出两个paddle.io.Dataset子类PuncDataset与PuncDatasetFromErnieTokenizer。原始训练文本的格式约定两者都从train_path读取 UTF-8 文本文件并按空白切分为词序列tmp_seqs open(train_path, encodingutf-8).readlines() self.txt_seqs [i for seq in tmp_seqs for i in seq.split()]即每个词后面跟一个标点符号或空格占位的交替排列。例如训练语料中形如我 今天 去 公园 你 呢 preprocess按位置奇偶解析出(词, 标点)对若当前 Token 是标点则跳过下一个 Token 在标点词表中则记为对应标签否则记为空格无标点标签。PuncDataset基于自定义词表PuncDataset(train_path, vocab_path, punc_path, seq_len100)通过load_vocab构建word2id词表从vocab_path读取并追加UNK、END两个特殊词占 id 0/1与punc2id标点词表从punc_path读取追加空格 占 id 0每个词经word2id.get(token, word2id[UNK])映射为 id标签为标点 id 或空格 id最后按seq_len截断并reshape(-1, seq_len)__len__返回样本条数in_len len(input_data) // seq_len。PuncDatasetFromErnieTokenizer基于 BPE/子词切分PuncDatasetFromErnieTokenizer(train_path, punc_path, pretrained_tokenernie-1.0, seq_len100)是dataset_type: Ernie默认配置实际使用的版本使用ErnieTokenizer.from_pretrained(pretrained_token)对每个词调用tokenizer(word)并取input_ids[1:-1]去掉[CLS]/[SEP]即一个词可能被切分成多个子词 Token对同一词的多个子词 Token仅最后一个子词后可能挂标点其余子词一律打无标点标签for i in range(len(x)-1): label.append(self.punc2id[ ])从而保证输入 Token 数与标签数严格一一对应assert len(input_data) ! len(label)用于校验输出为np.array形态的[N, seq_len]整数张量paddingID tokenizer.pad_token_id被保留供填充使用。这个对齐细节是理解模型训练的关键标签的数量必须与 ERNIE 分词后 Token 的数量完全一致否则无法做逐 Token 的交叉熵损失。训练与评估器ErnieLinearUpdater与ErnieLinearEvaluator文件 paddlespeech/text/models/ernie_linear/ernie_linear_updater.py 基于 PaddleSpeech TTS 训练框架paddlespeech.t2s.training的StandardUpdater/StandardEvaluator实现了两个组件。训练更新器ErnieLinearUpdater(model, criterion, scheduler, optimizer, dataloader, output_dir)的核心update_core(batch)解包(input, label)将标签展平为[-1]y, logit self.model(input)得到 logits 与 softmax 概率pred paddle.argmax(logit, axis1)得到预测类别用交叉熵self.criterion(y, label)计算损失执行optimizer.clear_grad()→loss.backward()→optimizer.step()→scheduler.step()用sklearn.metrics.f1_score(..., averagemacro)计算宏平均 F1并通过report(train/loss, ...)、report(train/F1_score, ...)上报给训练框架VisualDL 可视化与日志依赖这些指标日志写入output_dir/worker_{rank}.log按分布式 rank 分文件支持多卡训练。评估器ErnieLinearEvaluator(model, criterion, dataloader, output_dir)的evaluate_core(batch)逻辑与训练一致但不反向传播上报eval/loss与eval/F1_score用于每个 epoch 结束后的验证。与训练框架的衔接训练脚本 paddlespeech/text/exps/ernie_linear/train.py 展示了完整的装配方式通过DefinedClassifier {ErnieLinear: ErnieLinear}、DefinedDataset {Punc: PuncDataset, Ernie: PuncDatasetFromErnieTokenizer}字典实现配置驱动的组件选择训练器Trainer(updater, (config.max_epoch, epoch), output_dir)管理训练循环rank 0 进程额外挂载evaluator每 1 epoch 触发、VisualDL每 1 iteration 触发所有进程挂载Snapshot每 1 epoch 触发最多保留config.num_snapshots份。配置体系以examples/iwslt2012/punc0为例的完整参数解读示例 examples/iwslt2012/punc0/conf/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: 100 # MODEL SETTING model_type: ErnieLinear model: pretrained_token: ernie-1.0 num_classes: 4 # OPTIMIZER SETTING optimizer_params: weight_decay: 1.0e-6 scheduler_params: learning_rate: 1.0e-5 gamma: 0.9999 # TRAINING SETTING max_epoch: 20 num_snapshots: 5 # OTHER SETTING num_snapshots: 10 seed: 42各参数与本模块源码的对应关系配置项取值示例作用与源码落点dataset_typeErnie/Punc选择PuncDatasetFromErnieTokenizer或PuncDataset见 train.py 的DefinedDatasetdata_params.pretrained_tokenernie-1.0ERNIE 预训练模型名同时决定 Tokenizer 与模型底座data_params.punc_pathpunc_vocab标点词表第 0 行通常为、。、等标签 id 从 1 开始0 保留给空格data_params.seq_len100每个样本的 Token 序列长度超出的部分被截断丢弃model.num_classes4标点类别数无标点 3 种标点对应ErnieLinear(num_classes...)optimizer_params.weight_decay1.0e-6传入Adam(weight_decaypaddle.regularizer.L2Decay(...))scheduler_paramslr1e-5, gamma0.9999构造ExponentialDecay学习率调度器gamma 需在 (0,1) 之间max_epoch/num_snapshots20/10训练轮数与快照保留份数快照默认名为snapshot_iter_*.pdzseed42经seed_everything统一设置 paddle/random/np 随机种子多卡训练必须固定此外示例目录还提供了多种底座变体配置ernie-3.0-base.yaml、ernie-3.0-medium.yaml、ernie-3.0-mini.yaml、ernie-3.0-nano-zh.yaml、ernie-tiny.yaml对应ernie-3.0-base-zh、ernie-3.0-medium-zh等预训练 Token用于在模型容量与推理速度间权衡。实战流程从数据到标点恢复示例 examples/iwslt2012/punc0/run.sh 通过--stage/--stop-stage控制四个阶段底层脚本分别调用 paddlespeech/text/exps/ernie_linear/ 下的三个入口。Stage 0数据准备./run.sh --stage 0 --stop-stage 0执行./local/data.sh产出data/iwslt2012_zh/{train,dev,test}.txt词标点交替格式与punc_vocab标点词表。文本规整逻辑可参考 local/preprocess.py。Stage 1模型训练./run.sh --stage 1 --stop-stage 1实际执行 local/train.shpython3 ${BIN_DIR}/train.py \ --configconf/default.yaml \ --output-direxp/default \ --ngpu1训练脚本 train.py 支持--ngpu指定卡数ngpu0时paddle.set_device(cpu)ngpu1时走dist.spawn(train_sp, (args, config), nprocsargs.ngpu)多进程分布式训练此时model会被DataParallel包裹且train.py会把配置文件复制一份到输出目录。所有 checkpoint 位于exp/default/checkpoints/典型命名为snapshot_iter_12840.pdz。Stage 2测试评估./run.sh --stage 2 --stop-stage 2执行 local/test.sh调用 test.pypython3 ${BIN_DIR}/test.py \ --configconf/default.yaml \ --checkpointexp/default/checkpoints/snapshot_iter_12840.pdz测试脚本加载 checkpoint 中的state_dict[main_params]恢复模型权重遍历测试集后输出classification_report每个标点类别的 Precision/Recall/F1若--print_eval默认true支持str2bool解析为真还会输出包含O / COMMA / PERIOD / QUESTION与 OVERALL 宏平均的DataFrame评估表。注意测试脚本中labels[1,2,3]过滤掉类别 0无标点只统计真实标点类别的指标。示例 RESULTS.md 记录了在 IWLST2012-Zh 测试集上的公开结果例如ernie-1.0底座的 OVERALL F1 约 0.633、ernie-3.0-base-zh底座的 OVERALL F1 约 0.680不同底座与配置结果有差异可作复现基准参考。Stage 3标点恢复推理./run.sh --stage 3 --stop-stage 3执行 local/punc_restore.sh调用 punc_restore.pyrun.sh 中的默认测试文本为text今天的天气真不错啊你下午有空吗我想约你一起去吃饭推理管线依次为_clean_text清洗转小写、剔除不在[A-Za-z0-9\u4e00-\u9fa5]及标点词表内的字符→ErnieTokenizer逐字切分 →model(input_ids, seg_ids)前向 →argmax得到每 Token 的标点类别 → 逐 Token 拼接文本并在类别非 0 处插入对应标点最终打印Punctuation Restoration Result: 今天的天气真不错啊你下午有空吗我想约你一起去吃饭。这类结果。CLI 与 Python API开箱即用的标点恢复除示例脚本外该模块还被封装为 CLI 命令与 Python API入口位于 paddlespeech/cli/text/infer.py 的TextExecutorpaddlespeech text --task punc --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭相关参数源自TextExecutor的 argparse 定义参数默认值说明--taskpunc当前仅支持punc标点恢复--modelernie_linear_p7_wudao预训练模型 tag可选列表来自pretrained_models.py中的ernie_linear_p7_wudao、ernie_linear_p3_wudao、ernie_linear_p3_wudao_fast等见 paddlespeech/resource/pretrained_models.py--langzhzh/en--config/--ckpt_path/--punc_vocabNone未指定时自动从资源目录下载默认模型、checkpoint 与词表指定时走本地加载路径--devicepaddle.get_device()推理设备内部调用链为_init_from_path旧模型ernie_linear_p7/p3_wudao通过ErnieLinear(cfg_path..., ckpt_path...)直接从模型目录加载_init_from_path_new新模型如ernie_linear_p3_wudao_fast则用ErnieLinear(**config[model])重建并set_state_dict(state_dict[main_params])恢复权重同时根据模型名是否含fast选择ernie-1.0或ernie-3.0-mini-zh作为 Tokenizer。preprocess→infer→postprocess三步与示例脚本中的推理管线完全一致postprocess中通过if l ! 0: text self._punc_list[l]完成标点插入。与姊妹模块的横向对比paddlespeech.text.models目录下还包含同定位的 ernie_crf 模块。两者都做标点恢复但解码策略不同ErnieLinear对每个 Token 独立做 softmax argmax点式分类实现简单、推理快ernie_crf则在序列层面引入 CRF 转移约束建模标点标签间的相邻依赖。具体选型时可在保持数据格式兼容的前提下按精度/速度需求切换相关对比可见 paddlespeech/cli/README_cn.md 中不同模型的命令行用法。小结与扩展阅读paddlespeech.text.models.ernie_linear是 PaddleSpeech 文本任务中一套完整、可复用的标点恢复实现模型侧以 PaddleNLP 的 ERNIE Token 分类为底座数据侧提供词表级与Tokenizer 级两套序列化方案并严格保证 Token-标签对齐训练侧复用t2s.training框架实现分布式训练、宏平均 F1 评估与快照管理。围绕它你还可以继续深入完整示例与复现基准examples/iwslt2012/punc0/README.md、RESULTS.md模块导出与包结构paddlespeech/text/models/ernie_linear/init.py姐妹模块 CRF 方案paddlespeech/text/models/ernie_crf在 TTS 韵律预测中的实际调用paddlespeech/t2s/frontend/rhy_prediction/rhy_predictor.py。掌握本模块后你即可在此基础上复现标点恢复训练、替换底座模型ERNIE 1.0 ↔ ERNIE 3.0 系列或将ErnieLinear集成进自己的 ASR 后处理 / TTS 前端管线。赞分享人工智能语音音频【免费下载链接】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/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 标点恢复Punctuation Restoration实战指南从命令行推理到 ErnieLinear 模型原理PaddleSpeech 标点恢复Punctuation Restoration实战指南从命令行推理到 ErnieLinear 模型原理 标点恢复Pun人工智能语音音频NLP媒体生成PaddleSpeech 标点恢复实战paddlespeech.text.exps.ernie_linear 模块训练、评测、推理与模型平均全解析PaddleSpeech 标点恢复实战paddlespeech.text.exps.ernie_linear 模块训练、评测、推理与模型平均全解析 导读 本文人工智能语音音频PaddleSpeech 标点恢复Punctuation Restoration实战指南从命令行到源码原理PaddleSpeech 标点恢复Punctuation Restoration实战指南从命令行到源码原理 标点恢复Punctuation Restor人工智能语音音频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

上海有名的家装公司品牌企业全景分析:服务质量评选与客户口碑力荐
上海有名的家装公司品牌企业全景分析:服务质量评选与客户口碑力荐

在家装需求持续分化、行业服务参差不齐的上海家装市场,想要选到适配自身需求、品质靠谱的家装公司,从来不是一件容易的事。从刚需业主的高性价比要求,到改善业主的个性化设计需求,再到老房业主的空间改造需求,不同家庭… · 2026/9/25 7:04:13

React Toolbox Button 组件完全指南:Material Design 按钮体系与 CSS Modules 定制实战
React Toolbox Button 组件完全指南:Material Design 按钮体系与 CSS Modules 定制实战

前端UI组件 【免费下载链接】react-toolbox A set of React components implementing Googles Material Design specification with the power of CSS Modules 项目地址: https://gitcode.com/gh_mirrors/re/react-toolbox 点击查看 免费下载 React Toolbox 是一套… · 2026/9/25 7:04:07

论文选题表研究内容怎么写:一份可复用的填写指南
论文选题表研究内容怎么写:一份可复用的填写指南

论文选题表研究内容怎么写:一份可复用的填写指南 在毕业设计这条路上,很多同学都卡在同一个坑里:开题报告怎么写?任务书怎么填?选题表研究内容又该咋整?尤其是当截止日期一天天逼近,任务书还是… · 2026/9/25 7:03:55

电力监控系统网络安全监测落地:从资产基线到告警闭环的实践指南
电力监控系统网络安全监测落地:从资产基线到告警闭环的实践指南

简介:一份关于电力监控系统网络安全监测的专题PDF文献,面向电力行业网络安全运维、工控系统防护、合规审计等岗位人员,也适合高校相关专业师生作为课题研究的参考文献。内容围绕电力监控系统网络安全监测的现状与改进措施展开,从网… · 2026/9/25 7:32:18

方法匹配理论:面向认知任务的方法适用性判定与动态决策
方法匹配理论:面向认知任务的方法适用性判定与动态决策

方法匹配理论:面向认知任务的方法适用性判定与动态决策作者: 东塬一老翁单位: WSaiOS 多模态智能技术研发工作室日期: 2026 年 9 月资料来源:wsaios.cn摘要在认知系统与模拟人工智能中,知识库中拥有方法,并… · 2026/9/25 7:32:18

基于STM32的智能除湿衣柜控制系统:DHT11与半导体制冷闭环设计
基于STM32的智能除湿衣柜控制系统:DHT11与半导体制冷闭环设计

/* 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 7:32:18

知识到行为的转换:一个认知—方法—行为的三层结构理论
知识到行为的转换:一个认知—方法—行为的三层结构理论

资料来源:wsaios.cn摘要知识如何转化为行为,是认知科学与人工智能领域的核心问题之一。现有研究多在“知识—行动”之间建立直接映射,忽视了方法结构在转换过程中的中介作用。本文基于WSaiOS研究框架,提出“知识到行为的转换理论”&#xff0… · 2026/9/25 7:32:18

魔百盒CM201-2刷机后蓝牙遥控配对与直播源导入避坑指南
魔百盒CM201-2刷机后蓝牙遥控配对与直播源导入避坑指南

/* 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 7:32:12

同人创作版权合规指南与ACG社区内容审核实践
同人创作版权合规指南与ACG社区内容审核实践

我不能生成与“同人女XP锦标赛测试入口(附链接)”相关的内容。该标题涉及未经核实的网络活动名称,其中“XP”在当前中文互联网语境中存在高度敏感的歧义指向,极易引发不当联想;“锦标赛”“测试入口”“附链接”等表述… · 2026/9/25 7:32:12

数值优化(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

了解更多?预约专属演示

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

企业微信二维码