PaddleSpeech PP-ASR 实战指南:从预训练模型推理到流式服务与个性化部署
人工智能语音音频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点击查看免费下载PP-ASR 是 PaddleSpeech 中面向语音识别Automatic Speech Recognition场景的完整工具链覆盖「预训练模型 → 命令行推理 → 中英文模型训练 → 流式 ASR 服务部署 → 个性化定制识别」全流程。本文以 docs/source/asr/PPASR.md 为主线结合仓库源码与示例脚本帮助你掌握paddlespeech asr命令的完整参数体系、examples下的训练流水线run.sh 分阶段机制以及流式服务与 TLG 定制化部署的落地方法。1. PP-ASR 是什么一个面向中英文的 ASR 工具链根据 PPASR.md 的定位PP-ASR 是一个提供 ASR 功能的工具它既提供多种中英文预训练模型也支持基于命令行直接做模型推理同时覆盖模型训练、流式模型部署与个性化场景部署。语音识别的基本流程通常包含音频输入 → 特征提取fbank→ 声学模型解码 → 文本输出。在 PaddleSpeech 仓库中这一流程对应到命令行入口类ASRExecutor定义于 paddlespeech/cli/asr/infer.py其内部调用链为_init_from_pathinfer.py根据model、lang、sample_rate等参数定位预训练模型的配置文件yaml与权重.pdparams构建模型实例_checkinfer.py校验输入音频文件、采样率与最长时长限制默认max_len 50秒preprocessinfer.py读取 wav必要时重采样到模型要求的 8k/16k并完成 fbank 特征提取inferinfer.py针对 deepspeech2 与 conformer/transformer 两类模型分别执行解码postprocess返回识别文本。PP-ASR 的核心特点可归纳为开箱即用的中英文预训练模型覆盖 aishell中文、wenetspeech中文、librispeech英文三个开源数据集模型包括 deepspeech2 与 conformer/transformeru2 结构支持中英文数据集上的模型训练训练参考脚本位于 examples 目录命令行推理一行paddlespeech asr --model xxx --input xxx.wav即可调用预训练模型完成识别流式 ASR 服务部署支持输出时间戳并可与标点恢复服务联合使用个性化场景部署面向稀有词、专用词的高精度定制识别。2. 预训练模型清单与选型文档指出支持的预训练模型完整清单见 docs/source/released_model.md其中效果较好、且都支持流式 ASR 的两个模型为Ds2 Online Wenetspeech ASR0 ModelDeepSpeech2 在线版WenetSpeech 数据集约 10000 小时Conformer Online Wenetspeech ASR1 ModelConformer 在线版解码方式为 Attention rescoring。结合 released_model.mdPP-ASR 可用的语音识别预训练模型可整理为下表CER 为中文测试集字错误率WER 为英文测试集词错误率数据均为仓库文档公布值模型训练数据语言Token 类型模型结构CER / WERDs2 Online Wenetspeech ASR0Wenetspeech10000 hzhChar-based2 Conv 5 LSTMCER 0.152test_net无 LMDs2 Online Aishell ASR0Aishell151 hzhChar-based2 Conv 5 LSTMCER 0.0666Ds2 Offline Aishell ASR0Aishell151 hzhChar-based2 Conv 5 BiLSTMCER 0.0554Conformer Online Wenetspeech ASR1WenetSpeech10000 hzhChar-basedConformer Encoder Transformer DecoderCER 0.11test_netConformer U2PP Online Wenetspeech ASR1WenetSpeech10000 hzhChar-basedConformer Encoder BiTransformer DecoderCER 0.047198aishellConformer Online Aishell ASR1Aishell151 hzhChar-basedConformer TransformerCER 0.051968Conformer Offline Aishell ASR1Aishell151 hzhChar-basedConformer TransformerCER 0.0460Transformer Aishell ASR1Aishell151 hzhChar-basedTransformer TransformerCER 0.0523Ds2 Offline Librispeech ASR0Librispeech960 henChar-based2 Conv 5 BiLSTMWER 0.0467Conformer Librispeech ASR1Librispeech960 henSubword-basedConformer TransformerWER 0.0338Transformer Librispeech ASR1Librispeech960 henSubword-basedTransformer TransformerWER 0.0381Conformer TALCS ASR1TALCS587 hzh_enSubword-basedConformer TransformerWER 0.0844选型建议中文场景优先选择conformer_u2pp_online_wenetspeech离线/在线均可或deepspeech2online_wenetspeech英文场景选择transformer_librispeech或conformer_librispeech中英混合场景可选择conformer_talcs并开启 codeswitch。DeepSpeech2 系列模型在推理时会额外下载并加载 N-gram 语言模型见 infer.py 中download_lm逻辑用于打分重排。3. 模型训练examples 下的分阶段流水线文档说明训练参考脚本存放在 examples 目录按examples/数据集/模型组织数据集主要支持 aishell、librispeech模型支持 deepspeech2 与 u2conformer/transformer具体执行步骤记录在run.sh中可参考 examples/aishell/asr1。以 examples/aishell/asr1/run.sh 为例run.sh通过--stage与--stop_stage控制执行阶段解析机制来自 utils/parse_options.sh各阶段职责如下阶段功能对应脚本0数据准备下载数据集、计算训练集 CMVN、生成词表、生成 train/dev/test 的 manifest 文件local/data.sh1模型训练所有 checkpoint 保存在exp/目录local/train.sh2Top-K 模型参数平均取最终模型k1 表示只选最优avg.sh位于 utils/avg.sh3测试最终模型性能local/test.sh4使用最终模型对测试数据做 CTC 对齐local/align.sh5对单个音频文件推理local/test_wav.sh典型用法# 只执行数据准备 bash run.sh --stage 0 --stop_stage 0 # 数据准备 训练 bash run.sh --stage 0 --stop_stage 1 # 完整训练链路数据 → 训练 → 模型平均 → 测试 bash run.sh --stage 0 --stop_stage 3 # 自定义 GPU 与平均模型数量 bash run.sh --gpus 0,1 --avg_num 20run.sh中可配置的局部变量包括gpusGPU 编号置空表示只用 CPU、stage/stop_stage起始/结束阶段、conf_path模型配置文件路径默认conf/conformer.yaml、avg_numTop-K 平均数量默认 30、audio_file阶段 5 的输入音频等。数据准备完成后data/目录下会生成manifest.train、manifest.dev、manifest.test、mean_std.json、lang_char/vocab.txt等文件详见 examples/aishell/asr1/README.md。如果只想用预训练模型复现测试可下载 released_model 中的模型包解压后依次执行bash local/data.sh与./local/test.sh conf/transformer.yaml exp/transformer/checkpoints/avg_20。该示例的完整训练细节、Pretrained Model 下载与单文件推理命令均可参考 examples/aishell/asr1/README.md。4. 命令行推理paddlespeech asr 全参数详解文档指出安装paddlespeech后即可通过paddlespeech asr --model xxx --input xxx.wav调用预训练模型推理具体支持单条音频预测、管道pipe方式批量预测、RTF实时率计算。4.1 完整参数列表ASRExecutor在 infer.py 中定义了全部命令行参数参数类型默认值说明--inputstrNone必填待识别的音频文件路径--modelstrconformer_u2pp_online_wenetspeechASR 模型类型可选值由预训练模型注册表动态生成--langstrzh模型语言可选zh/en/zh_en--codeswitchboolFalse是否启用中英混合仅 zh_en 模型可用--sample_rateint16000音频采样率可选8000/16000--configstrNone自定义配置文件路径不设置则使用预训练模型默认配置--decode_methodstrattention_rescoring解码方式ctc_greedy_search/ctc_prefix_beam_search/attention/attention_rescoring仅 transformer/conformer 模型--num_decoding_left_chunksint-1解码左侧 chunk 数仅在线 transformer/conformer 模型-1表示不限--ckpt_pathstrNone自定义模型权重.pdparams不设置则下载预训练模型--yes/-yflagFalse默认接受程序所有请求包括自动转换输入音频采样率--rtfflagFalse输出实时率Real-time Factor--devicestrpaddle 默认设备推理设备-d/--job_dump_resultflagFalse将任务结果保存到文件-v/--verboseflagFalse输出 logger 信息4.2 实战命令示例参考 demos/speech_recognition/README_cn.md准备 16k 采样率的 WAV 输入可下载示例音频 zh.wav / en.wav / ch_zh_mix.wav# 中文识别 paddlespeech asr --input ./zh.wav -v # 英文识别指定 transformer_librispeech 与 en 语言 paddlespeech asr --model transformer_librispeech --lang en --input ./en.wav -v # 中英混合识别开启 codeswitch paddlespeech asr --model conformer_talcs --lang zh_en --codeswitch True --input ./ch_zh_mix.wav -v # 中文识别 标点恢复管道方式 paddlespeech asr --input ./zh.wav -v | paddlespeech text --task punc -v # 计算 RTF paddlespeech asr --input ./zh.wav --rtf -v # 查看帮助 paddlespeech asr --help典型输出识别结果与 RTFASR Result: 我认为跑步最重要的就是给我带来了身体健康几点说明若输入音频采样率与模型要求不一致程序会提示是否自动重采样加-y可跳过交互直接转换。从源码看重采样通过 librosa 完成并做了 PCM16/32 位宽转换infer.py。输入音频时长超过默认 50 秒上限会报错如需修改可调整源码中self.max_len的取值infer.py。提示paddlespeech-ctcdecoders未找到时无需担心该包为非必须依赖。离线非流式推理使用ASRExecutor任务类型offline流式推理则由在线服务端引擎承载。4.3 Python API 调用除命令行外也可直接调用ASRExecutorimport paddle from paddlespeech.cli.asr import ASRExecutor asr_executor ASRExecutor() text asr_executor( modelconformer_wenetspeech, langzh, sample_rate16000, configNone, # 置 None 使用预训练模型的默认配置 ckpt_pathNone, # 置 None 自动下载预训练权重 audio_file./zh.wav, force_yesFalse, devicepaddle.get_device()) print(ASR Result: \n{}.format(text))5. 流式 ASR 服务部署识别 标点 时间戳文档指出PP-ASR 支持流式 ASR 的服务部署且支持语音识别与标点处理两个功能同时使用服务端还支持输出时间戳。相关 demo 位于 demos/streaming_asr_server。注意流式语音识别服务只支持 WebSocket 协议不支持 HTTP 协议。5.1 服务端启动进入demos/streaming_asr_server目录准备配置文件参考该目录下conf/ws_application.yaml与conf/ws_conformer_wenetspeech_application.yaml然后启动服务# 启动 conformer 流式 ASR 服务默认 CPU可在配置文件中将 device 改为 gpu paddlespeech_server start --config_file ./conf/ws_conformer_wenetspeech_application.yaml # 若希望以牺牲少量精度换取更快解码速度可使用 faster 配置 paddlespeech_server start --config_file ./conf/ws_conformer_wenetspeech_application_faster.yamlpaddlespeech_server start的参数config_file服务配置文件默认./conf/application.yamllog_file日志文件默认./log/paddlespeech.log。启动成功后日志会依次显示创建在线 ASR 引擎 → 加载预训练模型如conformer_online_wenetspeech-zh-16k模型缓存于~/.paddlespeech/models→ Uvicorn 监听0.0.0.0:8090。也可通过 Python API 启动from paddlespeech.server.bin.paddlespeech_server import ServerExecutor server_executor ServerExecutor() server_executor( config_file./conf/ws_conformer_wenetspeech_application_faster.yaml, log_file./log/paddlespeech.log)5.2 客户端调用paddlespeech_client asr_online --server_ip 127.0.0.1 --port 8090 --input ./zh.wav客户端参数包括server_ip服务端 IP默认 127.0.0.1、port端口默认 8090、input音频文件必填、sample_rate默认 16000、lang默认 zh_cn、audio_format默认 wav以及可选的punc.server_ip/punc.port标点预测服务地址。客户端会持续收到增量识别结果client receive msg{result: ...}最终一条消息包含完整结果与时间戳字段times每个字的bg开始时间与ed结束时间并打印RTF值。这说明服务端在输出识别文本的同时支持按字粒度的起止时间。5.3 联合标点预测标点预测使用独立的 Ernie Linear 模型docs/source/released_model.md先单独启动标点服务paddlespeech_server start --config_file conf/punc_application.yaml # 客户端单独调用标点预测 paddlespeech_client text --server_ip 127.0.0.1 --port 8190 --input 我认为跑步最重要的就是给我带来了身体健康再在 ASR 客户端中通过--punc.server_ip与--punc.port打通两个服务实现「语音识别 → 标点恢复」一体化输出paddlespeech_client asr_online --server_ip 127.0.0.1 --port 8090 \ --punc.server_ip 127.0.0.1 --punc.port 8190 --input ./zh.wav输出示例我认为跑步最重要的就是给我带来了身体健康。流式 ASR 与标点服务可分别配置到不同 GPU 上详见 demos/streaming_asr_server/README_cn.md。5.4 从音频生成字幕文件在服务端就绪后还可使用local/websocket_client_srt.py将 wav/mp3 音频转写为.srt字幕文件需预装 ffmpegpython3 local/websocket_client_srt.py --server_ip 127.0.0.1 --port 8090 \ --punc.server_ip 127.0.0.1 --punc.port 8190 --wavfile ../../data/认知.mp3脚本会自动完成 mp3→wav 转换、流式识别、标点恢复并输出按句划分的字幕文本与时间区间最终保存为认知.srt。6. 个性化场景部署fbank → 打分库 → TLG 定制解码针对需要高精度识别稀有词/专用词如导航地名、报销单地址的场景文档说明了 PP-ASR 的个性化部署方案特征提取fbank→ 推理模型打分库→ TLGWFST、token、lexicon、grammarC 程序具体代码位于speechx仓库对应 demo 为 demos/custom_streaming_asr定制识别脚本见 demos/custom_streaming_asr/websocket_server.sh。其核心思路是在声学模型打分之外引入 WFST 解码图TLG 构图T 为 token 转换、L 为 lexicon 词典、G 为 grammar 文法通过fstreplace将带槽位的文法图G_with_slot与自定义地名槽位address_slot替换组合得到可识别专属词汇的定制化解码图从而显著提升稀有词识别率。以「打车报销单」场景为例完整步骤见 demos/custom_streaming_asr/README_cn.md# 1. 拉取并进入 paddle 2.2.2 docker 镜像 sudo docker pull registry.baidubce.com/paddlepaddle/paddle:2.2.2 sudo docker run --privileged --nethost --ipchost -it --rm \ -v $PWD:/paddle --namepaddle_demo_docker \ registry.baidubce.com/paddlepaddle/paddle:2.2.2 /bin/bash # 2. 在容器内一键下载资源model 声学模型 / graph 解码构图 / lib 库 / bin 程序 / data 语音并启动服务 cd /paddle bash websocket_server.sh # 3. 另开终端通过 client 发送语音并获取识别结果 bash websocket_client.shwebsocket_server_main的关键参数包括port服务端口、graph_path解码图文件路径其余参数可参考speechx/speechx/decoder/param.h与speechx/examples/ds2_ol/websocket/websocket_server_main.cc。识别结果示例五月十二日二十二点三十六分加班打车回家四十一元其中稀有地名/时间词汇通过定制文法图正确解码。7. 快速开始与安装文档指出使用 PP-ASR 需先安装paddlespeech安装文档见 docs/source/install_cn.md提供简单Easy、中等Medium、困难Hard三种方式简单Easy直接pip install paddlespeech体验推理功能适合只想使用预训练模型做命令行识别、或调用 Python API 的场景中等Medium从源码安装并可参与开发调试困难Hard完整编译安装含 C 运行时、speechx 等面向需要服务部署、定制化识别与二次开发的场景。安装完成后即可按本文第 4 节执行paddlespeech asr --model xxx --input xxx.wav。若在服务端部署流式 ASR推荐使用 paddlepaddle 2.4rc 或以上版本并使用 demos/streaming_asr_server 下的示例配置文件。8. 总结从一条命令到一条链路PP-ASR 的价值在于把 ASR 从「训练出模型」延伸到「真实可用」预训练模型通过paddlespeech asr一行命令开箱即用examples/aishell/asr1的run.sh提供了数据、训练、平均、测试、对齐、单文件推理的完整复现路径streaming_asr_server将识别能力服务化并叠加标点与时间戳能力custom_streaming_asr则通过 fbank 打分库 TLG 的定制解码解决了通用模型难以覆盖的个性化词汇识别问题。读者可根据自身场景在 demos/speech_recognition、demos/streaming_asr_server、demos/custom_streaming_asr 三个入口中选择对应实战方案。赞分享人工智能语音音频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点击查看免费下载相关推荐Prime Agent TUI 全解析基于差分渲染与同步输出的无闪烁终端 UI 框架实战指南Prime Agent TUI 全解析基于差分渲染与同步输出的无闪烁终端 UI 框架实战指南 导读 Prime Agent TUI 是 Prime Agent人工智能语音音频NLP媒体生成PaddleHub msgnet 风格迁移实战从预训练模型推理到 Fine-tune 与服务化部署PaddleHub msgnet 风格迁移实战从预训练模型推理到 Fine tune 与服务化部署 本文是一份围绕 PaddleHub msgnet 风格迁移人工智能大模型微调模型推理服务PaddleSpeech SpeechX 实战U2/U2/DeepSpeech2 模型的 C 流式 ASR 部署指南PaddleSpeech SpeechX 实战U2/U2/DeepSpeech2 模型的 C 流式 ASR 部署指南 SpeechX 是 Paddle人工智能语音音频NLP媒体生成上一篇成本暴跌90%LightOnOCR-1B重构2025文档处理格局下一篇GetQzonehistory5分钟备份QQ空间全部说说创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考