PaddleSpeech 标点恢复Punctuation Restoration实战一行命令为 ASR 文本智能补全标点【免费下载链接】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标点恢复Punctuation Restoration是语音识别ASR系统的常见后处理步骤负责为没有标点的原始转录文本自动补全标点从而提升文本可读性并为后续自然语言处理NLP任务提供更高质量的输入。本文将基于 PaddleSpeech 官方 demodemos/punctuation_restoration/README_cn.md展开结合仓库内 CLI 与模型源码完整讲解如何通过单条命令或数行 Python 代码为原始文本恢复标点并深入剖析其基于 ERNIE 的模型实现、输入预处理与推理全链路帮助你在实际项目中快速接入标点恢复能力。标点恢复在语音识别链路中的位置语音识别系统直接输出的往往是没有任何标点的纯文本流例如“今天的天气真不错啊你下午有空吗我想约你一起去吃饭”。这样的文本对人类读者不友好也会影响分词、命名实体识别、机器翻译等下游 NLP 任务的准确率。标点恢复的作用就是为这类原始文本自动插入句号、逗号、问号、感叹号等标点属于 ASR 后处理post-processing中的关键一环。在 PaddleSpeech 中标点恢复以text任务的形式提供其 CLI 命令为paddlespeech textPython 侧对应的执行器为TextExecutor定义于 paddlespeech/cli/text/infer.py。从源码看TextExecutor继承自BaseExecutorpaddlespeech/cli/executor.py遵循preprocess → infer → postprocess的标准三段式执行框架。环境安装使用该 demo 前需要先安装 PaddleSpeech。项目提供了 easy、medium、hard 三种安装方式可参考仓库内的安装文档按需选择easy使用 pip 直接安装预编译包适合快速体验medium在虚拟环境中从源码安装适合开发调试hard在 Docker 等隔离环境中完整编译安装适合深度定制。无论选择哪种方式标点恢复功能本身只需要 PaddlePaddle 与 PaddleSpeech 两个核心依赖即可运行。准备输入标点恢复 demo 的输入是通过参数传递的、特定语言的原始文本字符串目前官方预训练模型以中文zh为主。输入文本应为不含标点的连续字符序列例如今天的天气真不错啊你下午有空吗我想约你一起去吃饭使用方法命令行方式推荐安装完成后直接执行单条命令即可完成标点恢复paddlespeech text --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭执行后终端输出[2021-12-14 19:50:22,200] [ INFO] [log.py] [L57] - Text Result: 今天的天气真不错啊你下午有空吗我想约你一起去吃饭。查看全部可用参数paddlespeech text --help各参数含义如下与源码 paddlespeech/cli/text/infer.py#L39-L91 中的 argparse 定义一一对应参数说明默认值input原始文本必填Nonetask子任务当前仅支持puncpuncmodel文本模型类型ernie_linear_p7_wudaolang模型语言zhconfig文本任务的配置文件不设置时使用预训练模型内置配置Noneckpt_path模型参数文件不设置时自动下载预训练模型Nonepunc_vocab标点恢复任务的标点词表文件Nonedevice执行推理的设备当前环境下 paddlepaddle 的默认 device-d/--job_dump_result将任务结果保存到文件False-v/--verbose提升当前任务日志输出级别False其中task的choices仅为[punc]infer.py#L43-L46lang可选[zh, en]infer.py#L59-L61model的可选项由预训练模型注册表中的 key 动态生成infer.py#L47-L55。自定义模型参数的使用当你不使用默认的预训练模型而是希望加载自己训练的模型时可以同时指定config、ckpt_path、punc_vocab三个参数例如paddlespeech text \ --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭 \ --model ernie_linear_p3_wudao \ --config /path/to/model_config.json \ --ckpt_path /path/to/model_state.pdparams \ --punc_vocab /path/to/punc_vocab.txt从源码 infer.py#L109-L124 可以看到当三者均为None时执行器会根据模型名-任务-语言拼出的 tag如ernie_linear_p7_wudao-punc-zh自动从资源表中定位并下载预训练模型否则会将传入路径转换为绝对路径后直接加载。Python API 方式在 Python 脚本中通过TextExecutor几行代码即可完成相同功能import paddle from paddlespeech.cli.text import TextExecutor text_executor TextExecutor() result text_executor( text今天的天气真不错啊你下午有空吗我想约你一起去吃饭, taskpunc, modelernie_linear_p7_wudao, langzh, configNone, ckpt_pathNone, punc_vocabNone, devicepaddle.get_device()) print(Text Result: \n{}.format(result))输出Text Result: 今天的天气真不错啊你下午有空吗我想约你一起去吃饭。TextExecutor.__call__的完整签名定义于 infer.py#L307-L317参数含义与命令行一致。该方式特别适合将标点恢复嵌入到你自己的 ASR 后处理流水线中。预训练模型列表PaddleSpeech 为标点恢复任务提供了以下可直接被命令行与 Python API 使用的预训练模型模型语言标点类型数ernie_linear_p3_wudaozh3。ernie_linear_p7_wudaozh7。、这些模型在 paddlespeech/resource/pretrained_models.py#L1077-L1120 的text_dynamic_pretrained_models注册表中登记包含下载 URL、MD5 校验值以及包内三个关键文件的相对路径cfg_pathckpt/model_config.json模型结构配置ckpt_pathckpt/model_state.pdparams模型权重vocab_filepunc_vocab.txt标点词表每行一个标点字符。两者唯一的区别在于输出层预测的标点类别数p3仅区分逗号、句号、问号 3 类p7进一步细分为逗号、句号、感叹号、问号、顿号、冒号、分号 7 类可覆盖更丰富的标点粒度。此外注册表中还包含一个ernie_linear_p3_wudao_fast-punc-zh变体其 tokenizer 使用更轻量的ernie-3.0-mini-zh见 infer.py#L195-L200推理速度更快。深入源码模型结构与推理流程模型结构ErnieLinear标点恢复的核心模型是ErnieLinearpaddlespeech/text/models/ernie_linear/ernie_linear.py它本质上是基于 ERNIE 预训练模型的 Token 分类器Token Classificationclass ErnieLinear(nn.Layer): def __init__(self, num_classesNone, pretrained_tokenernie-1.0, cfg_pathNone, ckpt_pathNone, **kwargs): super(ErnieLinear, self).__init__() if cfg_path is not None and ckpt_path is not None: # 从本地 checkpoint 加载 self.ernie ErnieForTokenClassification.from_pretrained( os.path.dirname(cfg_path)) else: # 从预训练 token 初始化num_classes 为标点类别数 self.ernie ErnieForTokenClassification.from_pretrained( pretrained_token, num_labelsnum_classes, **kwargs) self.num_classes self.ernie.num_labels self.softmax nn.Softmax()在forward中模型对输入序列中的每个 token 输出一个分类 logits经 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推理三段式流程TextExecutor的推理过程严格遵循preprocess → infer → postprocess三段式1. preprocess文本清洗与分词_clean_textinfer.py#L205-L210先将输入转为小写并用正则剔除除字母、数字、中文之外的字符再进一步移除标点词表中除首位外的所有标点符号确保送入模型的输入是“干净”的无标点文本。随后用 ERNIE tokenizer 按字符切分并转换为input_ids、seg_idstoken_type_ids与seq_lentokenized_input self.tokenizer( list(clean_text), return_lengthTrue, is_split_into_wordsTrue) self._inputs[input_ids] tokenized_input[input_ids] self._inputs[seg_ids] tokenized_input[token_type_ids] self._inputs[seq_len] tokenized_input[seq_len]2. infer模型前向推理在paddle.no_grad()下将输入张量送入ErnieLinear对每个 token 取 logits 的 argmax 得到预测类别下标logits, _ self.model(input_ids, seg_ids) preds paddle.argmax(logits, axis-1).squeeze(0)3. postprocess标点回填将模型预测的每个位置类别与 token 对齐类别下标为 0 表示不加标点非 0 时在 token 后拼接对应标点词表中的字符for t, l in zip(tokens, labels): text t if l ! 0: # Non punc. text self._punc_list[l]值得注意的细节是标点词表在加载时每行一个标点字符第 0 位语义上代表“无标点”空格占位因此模型输出类别下标l直接作为self._punc_list的索引即可回填正确的标点。资源自动下载机制当config、ckpt_path、punc_vocab均为None时执行器按模型-任务-语言拼出 tag 并在资源表中查找infer.py#L109-L120tag -.join([model_type, task, lang]) # 例如 ernie_linear_p7_wudao-punc-zh self.task_resource.set_task_model(tag, versionNone) self.cfg_path os.path.join(self.task_resource.res_dir, self.task_resource.res_dict[cfg_path]) self.ckpt_path os.path.join(self.task_resource.res_dir, self.task_resource.res_dict[ckpt_path]) self.vocab_file os.path.join(self.task_resource.res_dir, self.task_resource.res_dict[vocab_file])也就是说首次运行时 PaddleSpeech 会自动从 CDN 下载ernie_linear_p7_wudao-punc-zh.tar.gz并校验 MD5解压后自动定位模型配置、权重与标点词表对用户完全透明。进阶模型训练与评估选读如果你需要针对特定领域如法律、医疗等标点习惯特殊的文本训练自己的标点恢复模型PaddleSpeech 在paddlespeech/text/exps/ernie_linear/下提供了完整的训练、测试脚本paddlespeech/text/exps/ernie_linear/train.py训练入口支持多卡分布式训练训练过程中以CrossEntropyLoss为损失函数、macro F1-score作为训练/验证指标见 ernie_linear_updater.py 中的update_core与evaluate_corepaddlespeech/text/exps/ernie_linear/test.py模型测试paddlespeech/text/exps/ernie_linear/punc_restore.py标点恢复推理工具paddlespeech/text/exps/ernie_linear/avg_model.py多 checkpoint 权重平均。训练数据的组织方式可参考 paddlespeech/text/models/ernie_linear/dataset.py 中的PuncDataset与PuncDatasetFromErnieTokenizer训练文本按空格切分为 token 序列相邻的“词 标点”构成监督信号标点词表首位的空格字符 作为“无标点”标签。自训练模型训练完成后即可通过前面介绍的自定义参数方式接入推理。总结标点恢复是提升 ASR 转录文本可读性、为下游 NLP 任务铺路的关键后处理环节。通过 PaddleSpeech你既可以用一条paddlespeech text命令快速完成中文标点恢复也可以在 Python 中以TextExecutor形式将其嵌入既有流水线仓库同时开放了基于 ERNIE 的完整训练链路支持按需定制。从源码看其实现以 ERNIE Token 分类为核心配以“文本清洗 → 分词 → 分类 → 标点回填”的简洁流程部署与二次开发都非常轻量。相关代码与文档索引Demo 说明demos/punctuation_restoration/README_cn.mdCLI 执行器paddlespeech/cli/text/infer.py模型实现paddlespeech/text/models/ernie_linear/ernie_linear.py数据与训练paddlespeech/text/models/ernie_linear/dataset.py、paddlespeech/text/exps/ernie_linear/train.py预训练模型注册表paddlespeech/resource/pretrained_models.py【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
5分钟玩转一键发布:release-it 发布自动化工具完整入门指南 5分钟玩转一键发布:release-it 发布自动化工具完整入门指南 【免费下载链接】release-it 🚀 Automate versioning and package publishing 项目地址: https://gitcode.com/gh_mirrors/re/release-it
对于需要频繁发布软件包或 Git 项目的开发者来… · 2026/9/23 12:03:48
good翻译实战:5个源码解析细节让你避开90%的坑 good翻译实战:5个源码解析细节让你避开90%的坑 官方文档往往长篇大论,新手读得云里雾里,抓不住重点。别慌,今天咱们直接切入【good翻译】的核心逻辑,用【源码解析】的方式把底层原理拆明白。很多培训机构学员问我,为什么同样的代码,在嵌入… · 2026/9/23 12:03:48
MDX61B二进制设定值(Binary Setpoint)调试全指南 简介:本资源是一份面向工业自动化工程师、SEW变频器现场调试人员及机电一体化专业学习者的实操型技术指南,聚焦SEW MOVIDRIVE MDX61B在汽车产线(如转台、升降机、输送系统)中基于二进制设定点的完整软件调试流程。内容以PPTX格式呈… · 2026/9/23 12:03:48
监控 500 节点后 Prometheus 内存去哪了:沿数据链路拆解调优路径 监控 500 节点后 Prometheus 内存去哪了:沿数据链路拆解调优路径 【免费下载链接】prometheus The Prometheus monitoring system and time series database. 项目地址: https://gitcode.com/GitHub_Trending/pr/prometheus
监控节点数突破 500 台后… · 2026/9/23 14:09:55
vdbench存储压测实战:从配置到分布式校验的完整指南 简介:面向存储性能测试人员与运维工程师的 Vdbench 工具资源包,用于模拟随机读写、顺序读写、混合读写等场景,帮助快速评估硬盘、SSD 及存储阵列的极限 I/O 性能,适合从基础调优到生产环境压力验证的各阶段使用者。压缩包共 61 个… · 2026/9/23 14:09:48
搞定下载阅读器性能优化:3步解决版本升级后的API报错 搞定下载阅读器性能优化:3步解决版本升级后的API报错 刚把项目里的下载模块从 v2.0 升级到 v3.0,运行测试用例直接报红,满屏都是 AttributeError 和 DeprecationWarning 。更坑的是,新版本的… · 2026/9/23 14:09:48
中国气功大师排名源码解析:保姆级教程助你从零搭项目 中国气功大师排名源码解析:保姆级教程助你从零搭项目 刚写完Hello World,脑子还热乎,一打开编辑器想做个真项目,脑子就一片空白。 这种“学会语法却不知怎么搭项目”的断层,坑了太多初学者。… · 2026/9/23 14:09:48
项目启动|运匠科技 × 恒立液压,共建一体化智能物流平台 一、关于恒立液压恒立液压是中国液压行业的龙头企业、上交所上市公司,总市值超千亿元,总部位于中国常州。 经过30多年的专注与创新,恒立液压已发展成为集液压元件、精密铸件、液压系统等产业于一体的大型综合性企业,在全球各地分别… · 2026/9/23 14:09:42
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29