ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleSpeech Codelab 实战:基于 runtime 引擎的流式 ASR 离线开发与测试指南

PaddleSpeech Codelab 实战:基于 runtime 引擎的流式 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点击查看免费下载导读本文面向希望深入 PaddleSpeechruntimeC 推理引擎内部、做离线开发与单元测试的开发者完整梳理runtime/examples/codelab/目录下的四个核心测试模块——nnet网络推理、feat音频特征、decoder解码器与u2端到端流式识别。读完本文你将掌握 runtime 引擎编译 → 模型下载 → 特征提取 → 网络前向 → 解码输出的完整测试链路理解各测试二进制的输入输出约定并能在本地复现 Deepspeech2 OnlineDS2与 U2/U2PP 流式 ASR 的离线推理流程。注意codelab 目录的根 README 明确提示该套件仅用于开发与离线测试developing and offline testing不应在未明确了解其用途的情况下直接运行。本文严格以该定位为前提展开。一、Codelab 是什么runtime 引擎的测试工坊在 PaddleSpeech 仓库中runtime/是独立的 C 推理引擎内部代号 speechx而 runtime/examples/codelab/README.md 是其配套的最小可运行测试集合。它并不承担生产级推理任务而是把 runtime 的四个关键能力拆成四个可单独构建、单独运行的实验模块模块目录测试对象nnetruntime/examples/codelab/nnet/Deepspeech2 OnlineDS2流式神经网络前向推理featruntime/examples/codelab/feat/流式 ASR 音频特征linear / fbank / mfcc计算decoderruntime/examples/codelab/decoder/CTC BeamSearch 解码器与 WFST 解码器u2runtime/examples/codelab/u2/U2/U2PP 端到端流式识别全链路每个模块遵循统一的组织约定README.md说明用途path.sh注入二进制搜索路径run.sh提供一条可复现的完整执行流程部分模块还附带valgrind.sh用于内存检查。这套一模块一脚本的组织方式天然适合作为理解 runtime 引擎内部调用链的入口。二、构建与运行环境path.sh 与 build.sh所有子模块的run.sh第一步都是调用bash build.sh编译 runtime 引擎第二步则依赖各自目录下的path.sh注入环境变量。以 nnet/path.sh 为例其核心逻辑是SPEECHX_ROOT$PWD/../../../ SPEECHX_BUILD$SPEECHX_ROOT/build/speechx SPEECHX_TOOLS$SPEECHX_ROOT/tools TOOLS_BIN$SPEECHX_TOOLS/valgrind/install/bin [ -d $SPEECHX_BUILD ] || { echo Error: build/speechx directory not found. please ensure that the project build successfully; } SPEECHX_BIN$SPEECHX_BUILD/codelab/nnet export PATH$PATH:$SPEECHX_BIN:$TOOLS_BIN从源码结构可以推断runtime 使用 CMake 构建仓库根目录存在 runtime/CMakeLists.txt产物输出到build/speechx/下codelab 各模块的测试二进制则位于对应的build/speechx/codelab/module子目录。path.sh的作用就是把编译产物目录和 valgrind 工具目录加入PATH同时用export LC_ALC规避 locale 相关干扰。若build/speechx不存在脚本会直接报错提示先完成构建。feat/path.sh稍有不同其二进制路径同时包含解码器与前端音频目录SPEECHX_BIN$SPEECHX_ROOT/build/speechx/decoder:$SPEECHX_ROOT/build/speechx/frontend/audio这反映出特征计算依赖 frontend前端与 decoder 两类动态库/二进制后续文章会看到这些二进制的具体调用方式。三、nnetDeepspeech2 Online 流式网络推理测试nnet/README.md 将本模块定位为Deepspeech2 Streaming NNet Test用于 DS2 流式网络的推理测试Using for ds2 streaming nnet inference test。nnet/run.sh 给出了完整流程. path.sh # 1. compile if [ ! -d ${SPEECHX_EXAMPLES} ]; then pushd ${SPEECHX_ROOT} bash build.sh popd fi # 2. download model if [ ! -f data/model/asr0_deepspeech2_online_aishell_ckpt_0.2.0.model.tar.gz ]; then mkdir -p data/model pushd data/model wget -c https://paddlespeech.cdn.bcebos.com/s2t/aishell/asr0/asr0_deepspeech2_online_aishell_ckpt_0.2.0.model.tar.gz tar xzfv asr0_deepspeech2_online_aishell_ckpt_0.2.0.model.tar.gz popd fi ckpt_dir./data/model model_dir$ckpt_dir/exp/deepspeech2_online/checkpoints/ ds2_model_test_main \ --model_path$model_dir/avg_1.jit.pdmodel \ --param_path$model_dir/avg_1.jit.pdiparams要点解读模型来源脚本会下载官方发布的asr0_deepspeech2_online_aishell_ckpt_0.2.0模型包并解压模型目录约定为data/model/exp/deepspeech2_online/checkpoints/。下载动作带-c断点续传且以文件存在性判断是否跳过体现离线可重复性。推理入口ds2_model_test_main是 nnet 模块的测试二进制只接收两个参数——--model_path指向 Paddle 静态图的*.pdmodel文件--param_path指向*.pdiparams权重文件。这与 Paddle Inference 的典型加载方式一致模型与参数分离的静态图格式也从侧面印证该测试直接复用 Paddle 推理库加载训练好的 DS2 流式模型。测试粒度该二进制只做网络前向不包含特征提取与解码属于对模型推理能力的纯单元测试。四、feat以流式方式计算 ASR 音频特征feat/README.md 说明本模块用于Deepspeech2 Streaming Audio Feature测试目标是验证 linear / fbank / mfcc 等 ASR 特征能否以**流式streaming**方式逐帧产出。文档点名了compute_linear_spectrogram_main.cc这一测试源文件——它负责compute linear spectrogram without db norm in streaming manner不加 dB 归一化的流式线性频谱计算。feat/run.sh 的完整执行链如下. ./path.sh # 1. compile if [ ! -d ${SPEECHX_EXAMPLES} ]; then pushd ${SPEECHX_ROOT} bash build.sh popd fi # 2. download model模型包下载逻辑与 nnet 相同 # 3. produce wav scp if [ ! -f data/wav.scp ]; then mkdir -p data pushd data wget -c https://paddlespeech.cdn.bcebos.com/PaddleAudio/zh.wav echo utt1 $PWD/zh.wav wav.scp popd fi # 4. run feat export GLOG_logtostderr1 cmvn_json2kaldi_main \ --json_file$model_dir/data/mean_std.json \ --cmvn_write_path$exp_dir/cmvn.ark \ --binaryfalse echo convert json cmvn to kaldi ark. compute_linear_spectrogram_main \ --wav_rspecifierscp:$data_dir/wav.scp \ --feature_wspecifierark,t:$exp_dir/feats.ark \ --cmvn_file$exp_dir/cmvn.ark echo compute linear spectrogram feature. compute_fbank_main \ --num_bins161 \ --wav_rspecifierscp:$data_dir/wav.scp \ --feature_wspecifierark,t:$exp_dir/fbank.ark \ --cmvn_file$exp_dir/cmvn.ark echo compute fbank feature.该流程包含三个关键步骤也是理解 runtime 特征前端的重要线索CMVN 格式转换cmvn_json2kaldi_main读取 PaddleSpeech 训练产出的mean_std.jsonJSON 格式的均值/方差统计转换为 Kaldi 惯例的cmvn.ark文本格式--binaryfalse表示输出文本而非二进制 ark。这说明 runtime 前端复用了 Kaldi 的 CMVN 数据布局便于与工具链中其他 Kaldi 风格组件衔接。线性频谱compute_linear_spectrogram_main以scp:前缀读取 wav 列表wav_rspecifier以ark,t:前缀写出文本格式特征feature_wspecifier并挂载 CMVN 文件完成归一化——与 README 描述的不加 dB 归一化特性对应即特征在谱域直接做 CMVN 而非先做对数幅度归一化。Fbankcompute_fbank_main --num_bins161输出 161 维 fbankAIShell 数据集的典型配置接口签名与线性频谱一致同样的 scp/ark 约定说明二者共用同一套流式前端框架。export GLOG_logtostderr1将 glog 日志输出到标准错误便于调试时实时观察每个阶段的运行日志。整体上feat 模块验证了wav → 特征linear/fbank→ ark的流式特征管线是后面 decoder 模块的数据上游。五、decoderCTC BeamSearch 与 WFST 解码器测试decoder/README.md 明确列出三个测试二进制及其分工decoder_test_main.cc直接喂入 nnet 输出的 logprob只测解码器本身不涉及特征与网络offline_decoder_sliding_chunk_main.cc喂入流式音频特征以流式方式解码滑动 chunk 策略offline_wfst_decoder_main.cc喂入流式音频特征使用WFST 解码器以流式方式解码。也就是说decoder 模块覆盖两种解码路线纯 CTC BeamSearch配合语言模型与 WFST 图解码。前者侧重声学模型输出到文字序列的搜索后者则依赖编译好的 WFST 图fst 相关工具链可见 runtime/examples/codelab/u2/utils/fst/ 下的make_tlg.sh、compile_lexicon_token_fst.sh等脚本。decoder/run.sh 展示了一条完整的特征 CTC BeamSearch 语言模型流式识别链路. path.sh # 1. compile 模型/wav 下载与 feat 一致 lm$data/zh_giga.no_cna_cmn.prune01244.klm # 中文 Giga 语言模型 # 2. CMVN 转换 cmvn_json2kaldi_main \ --json_file $ckpt_dir/data/mean_std.json \ --cmvn_write_path $cmvn \ --binaryfalse # 3. 流式线性特征 compute_linear_spectrogram_main \ --wav_rspecifierscp:$data/wav.scp \ --feature_wspecifierark,t:$feat_wspecifier \ --cmvn_file$cmvn # 4. CTC BeamSearch 流式解码 ctc_beam_search_decoder_main \ --result_wspecifierark,t:$exp_dir/result.txt \ --feature_rspecifierark:$feat_wspecifier \ --model_path$model_dir/avg_1.jit.pdmodel \ --param_path$model_dir/avg_1.jit.pdiparams \ --dict_file$vocb_dir/vocab.txt \ --lm_path$lm参数细节值得展开参数含义--result_wspecifierark,t:.../result.txt识别结果以文本 ark 形式写出--feature_rspecifierark:.../feats.ark读取上一步生成的线性特征二进制 ark--model_path / --param_pathDS2 在线模型的静态图与权重--dict_file$vocb_dir/vocab.txt字符词典来自模型包内data/lang_char/--lm_path$lmKaldi 格式的 klm 语言模型用于 BeamSearch 的 LM 融合脚本会从公开渠道下载zh_giga.no_cna_cmn.prune01244.klm值得注意的是该脚本同时展示了 decoder 模块的两种数据来源decoder_test_main只关心 logprob 序列解码器单元测试而ctc_beam_search_decoder_main则把特征、网络、解码器串成完整流水线——这正是 runtime 引擎各层解耦设计的体现特征前端、网络、解码器各自可独立测试亦可组合联调。六、u2U2/U2PP 端到端流式识别全链路u2/README.md 只有一行定位u2/u2pp Streaming Test——即对 U2/U2PP 模型进行流式识别测试。与前三者不同u2 模块把流程拆成了local/feat.sh、local/nnet.sh、local/decode.sh三个子脚本由 u2/run.sh 统一编排. path.sh # 1. compile # 2. 下载 asr1_chunk_conformer_u2pp_wenetspeech_static_1.1.0.model.tar.gz 并解压 # 3. 下载 zh.wav 生成 wav.scp ckpt_dir./data/model model_dir$ckpt_dir/asr1_chunk_conformer_u2pp_wenetspeech_static_1.1.0.model/ ./local/feat.sh ./local/nnet.sh ./local/decode.sh这里使用的模型是Chunk Conformer U2PPWenetspeech 静态图版模型目录约定为data/model/asr1_chunk_conformer_u2pp_wenetspeech_static_1.1.0.model/。U2/U2PP 是 PaddleSpeech 的端到端流式 ASR 方案联合 CTC/Attention 架构通过固定 chunk 大小实现流式解码而chunk参数正是在识别阶段传入。三个子脚本的职责可以从入口脚本 u2/local/recognizer.sh 反推——它将特征、网络、解码全部封装进一个u2_recognizer_main二进制这是与前三者最大的区别u2_recognizer_main \ --use_fbanktrue \ --num_bins80 \ --cmvn_file$exp/cmvn.ark \ --model_path$model_dir/export.jit \ --nnet_decoder_chunk16 \ --receptive_field_length7 \ --subsampling_rate4 \ --vocab_path$model_dir/unit.txt \ --wav_rspecifierscp:$data/wav.scp \ --result_wspecifierark,t:$exp/result.ark关键参数解读参数含义--use_fbanktrue --num_bins80使用 80 维 fbank 作为输入特征--cmvn_file归一化统计文件由local/feat.sh转换产出--model_path$model_dir/export.jitU2PP 静态图模型单文件export.jit区别于 DS2 的 pdmodel/pdiparams 双文件--nnet_decoder_chunk16网络与解码器的 chunk 大小帧数是流式延迟的核心控制项--receptive_field_length7感受野长度配合 subsampling 补偿卷积/下采样带来的帧偏移--subsampling_rate4帧下采样率Conformer 前端通常 4 倍下采样用于把特征帧对齐到解码帧--vocab_path$model_dir/unit.txt子词/单元词典Wenetspeech 模型使用 BPE/子词单元--wav_rspecifier / --result_wspecifier与前述模块一致的 scp 输入 / ark 文本输出约定从这些参数可以推断 U2PP 流式识别的工作原理音频按 chunk16 帧进入网络网络结合 7 帧感受野、按 4 倍下采样输出每个 chunk 的预测分布解码器再以 CTC/Attention 方式产出文字。chunk / receptive_field / subsampling三个参数的组合直接决定了流式系统的看到多远的未来与多快吐出结果是调试 U2PP 延迟表现时的核心旋钮。七、贯穿四个模块的通用设计模式把四个run.sh放在一起看可以总结出 runtime codelab 的通用执行范式环境自举. path.sh注入二进制路径bash build.sh保证引擎已编译资产下载幂等所有下载都以目标文件存在性判断为前提模型包用tar xzfv解压音频用echo utt1 $PWD/zh.wav wav.scp生成 Kaldi 风格列表数据格式统一输入统一为scp:wav 列表中间产物统一为ark,t:文本特征或ark:二进制特征与 Kaldi 工具链风格一致CMVN 中转训练产出的 JSON 统计文件先经cmvn_json2kaldi_main转为 kaldi ark再挂载到特征计算模块可分可合nnet / feat / decoder 提供独立单元测试二进制u2 则通过u2_recognizer_main一体化封装满足单点调试与端到端验证两种需求。此外部分模块附带valgrind.sh如 decoder/valgrind.sh、feat/valgrind.sh配合path.sh中注入的valgrind/install/bin工具路径用于在开发阶段做内存泄漏与越界检测——这正是开发与离线测试定位的又一佐证。八、使用建议与注意事项适用场景runtime 引擎开发者的回归测试、模型静态图导出后的快速冒烟验证、特征/解码器算法调参的独立实验环境前置条件必须先成功执行 runtime 的build.sh完成编译path.sh才能定位到build/speechx/codelab/*下的二进制运行环境需具备网络以下载模型与示例音频资源消耗DS2 模型包、中文 Giga 语言模型约数百 MB 量级与 U2PP Wenetspeech 模型包体积较大建议在磁盘充足的环境执行模型约定DS2 链路使用pdmodel/pdiparams双文件静态图U2PP 链路使用export.jit单文件替换模型时必须保持目录结构与参数命名一致定位边界该目录刻意保持最小可运行不包含训练、量化、服务化等能力生产部署请参考 runtime/examples/ 下其他示例或 runtime/README.md。总而言之codelab 是理解 PaddleSpeech runtime 引擎内部机制的绝佳切入点从 nnet 的纯网络推理、feat 的流式特征、decoder 的两种解码路线到 u2 的端到端识别四个模块恰好覆盖了一条流式 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点击查看免费下载相关推荐PaddleSpeech 实战基于 LibriSpeech 训练 DeepSpeech2 离线/在线 ASR 全流程指南PaddleSpeech 实战基于 LibriSpeech 训练 DeepSpeech2 离线/在线 ASR 全流程指南 导读 本文以 PaddleSpeec人工智能语音音频NLP媒体生成LeetCode-Go 题解 | 1648. Sell Diminishing-Valued Colored Balls贪心 二分搜索求最优售卖价值LeetCode Go 题解 | 1648. Sell Diminishing Valued Colored Balls贪心 二分搜索求最优售卖价值 本文人工智能语音音频PaddleSpeech 基于 SpeechXruntime的 U2/U2 流式 ASR C 工业部署实战指南PaddleSpeech 基于 SpeechXruntime的 U2/U2 流式 ASR C 工业部署实战指南 PaddleSpeech 仓库中的人工智能语音音频NLP媒体生成上一篇SideMenu 开源项目安装与使用教程下一篇【亲测免费】 Unity Package Extractor 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表