- 人工智能
- 语音
- 音频
- NLP
- 媒体生成
【免费下载链接】PaddleSpeech
Easy-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.
本文以 PaddleSpeech 仓库中的 ASR 功能清单文档 为主体,系统梳理飞桨语音工具包在语音识别(ASR)方向提供的完整能力:从数据集覆盖、流式/非流式模型、语言模型与解码策略,到语音前端、数据增强、Tokenizer 与 G2P 等工程化细节。读完本文,你将能对照仓库源码定位每项功能的实现位置,并为搭建自己的识别系统挑选合适的技术组合。
一、功能清单概览
PaddleSpeech 的 ASR 功能清单(feature_list.md)以模块化清单的形式,勾勒出从"原始音频"到"识别文本"的完整技术栈。整份清单可归纳为三大层次:
- 数据与前端层:数据集(Dataset)、语音前端(Speech Frontend)、数据增强(Speech Augmentation);
- 模型与解码层:语音识别模型(Speech Recognition)、语言模型(Language Model)、解码器(Decoder)、对齐(Alignment);
- 工程化能力:Tokenizer、分词(Word Segmentation)、字音转换(Grapheme To Phoneme)、部署(Deployment)。
这样的分层设计也与仓库目录结构高度对应:paddlespeech/s2t/下集中了 models(模型)、decoders(解码器)、frontend(前端与增强)等实现,而dataset/目录则对应各数据集的下载与处理脚本。下文逐项展开。
二、数据集(Dataset):多语言、多场景覆盖
功能清单列出了四个经典 ASR 数据集:
| 数据集 | 语言 | 特点 |
|---|---|---|
| Aishell | 中文 | 开源中文普通话语料,约 178 小时,带拼音与汉字标注 |
| Librispeech | 英文 | 约 960 小时英文朗读语音,多子集划分(dev/test-clean 与 other) |
| THCHS30 | 中文 | 清华 30 小时中文语料,覆盖新闻、对话等场景 |
| TIMIT | 英文 | 包含句子级与音素级标注,常用于音素识别与学术对比 |
在仓库中,这些数据集均有独立的处理脚本与 README,例如 dataset/aishell/aishell.py、dataset/librispeech/librispeech.py、dataset/thchs30/thchs30.py 与 dataset/timit/timit.py。其中 TIMIT 目录下还提供了 timit_kaldi_standard_split.py,用于生成 Kaldi 标准划分,方便直接复现公开论文的评测口径。
从源码结构看,这些数据集脚本遵循同一套模式:先通过data_utils下载并解压原始语料,再生成包含音频路径、时长、文本标注的 manifest 文件,供后续特征提取与训练管线消费。此外,仓库还进一步扩展了 mini_librispeech.py、aidatatang_200zh.py 等更多数据集,功能清单列出的四者是 ASR 入门与复现最常用的一组。
三、语音识别模型:非流式与流式两条技术路线
功能清单将识别模型明确划分为Non-Streaming(非流式)与Streaming(流式)两类,这是 ASR 系统设计中最关键的一个架构决策:离线系统追求整句精度,在线系统需要在语音未说完时就开始输出结果。
3.1 非流式模型
- Baidu's DeepSpeech2:端到端的卷积循环网络,是百度的经典开源方案。仓库实现位于 paddlespeech/s2t/models/ds2/deepspeech2.py,由卷积层(conv.py)与双向循环层堆叠构成,配合 CTC 损失端到端训练。
- Transformer:基于注意力机制的 seq2seq 架构,编码器实现位于 paddlespeech/s2t/modules/encoder.py,解码器位于 paddlespeech/s2t/modules/decoder.py。
- Conformer:在 Transformer 基础上引入卷积模块,兼顾局部上下文建模与全局注意力。其编码器同样封装在 encoder.py 中,配合 encoder_layer.py 中的 Conformer 层实现。
3.2 流式模型
- Baidu's DeepSpeech2(流式):通过只使用单向循环层或截断双向结构,让网络可以在语音流式输入时逐帧输出。
- U2(Unified Streaming and Non-streaming):同一模型同时支持流式与非流式两种解码模式。核心实现在 paddlespeech/s2t/models/u2/u2.py,训练时使用 CTC + Attention 联合优化(
ctc_att),推理时既可按 CTC 前缀束搜索流式解码,也可切换为完整的注意力重打分非流式解码。
仓库还进一步扩展了 U2 到语音翻译场景的 u2_st,并在 models/wav2vec2、models/wavlm、models/hubert 中集成了预训练自监督模型作为语音编码器,这超出了功能清单的基本范围,可作为后续进阶方向。
四、语言模型(Language Model)与解码器(Decoder)
4.1 Ngram 语言模型
功能清单中语言模型一项列出Ngram。仓库中 ngram 语言模型以解码期外部评分器的形式接入,实现在 paddlespeech/s2t/decoders/scorers/ngram.py,提供NgramFullScorer(整句打分)与NgramPartScorer(前缀部分打分)两种策略。训练工具链则放在 utils/build_kenlm_model_from_arpa.sh 与 utils/ngram_train.sh,配合 tools/extras/install_kenlm.sh 安装 KenLM 依赖。
4.2 解码器:从贪心到重打分
功能清单列出的五种解码策略,在 paddlespeech/s2t/decoders 中均有对应实现:
| 解码策略 | 类型 | 实现位置 |
|---|---|---|
| ctc greedy | CTC 贪心(最佳路径) | ctcdecoder/swig_wrapper.py 中的ctc_greedy_decoding |
| ctc prefix beam search | CTC 前缀束搜索 | scorers/ctc_prefix_score.py |
| greedy | 注意力贪心解码 | 基于 beam_search.py 的束大小为 1 特例 |
| beam search | 注意力束搜索 | beam_search.py |
| attention rescore | 注意力重打分 | 先 CTC 解码生成候选,再用注意力模型重打分排序 |
这些解码器通过 recog.py 统一调度。从该文件的实现可以看到一个完整的"多评分器加权融合"解码框架:CTCI 权重、语言模型、ngram、长度惩罚等评分器以weights字典加权组合,再交给BeamSearch:
scorers = model.scorers() # decoder 与 ctc 评分器 scorers["lm"] = lm # 可选:RNN/Transformer 语言模型 scorers["ngram"] = ngram # 可选:ngram 语言模型 scorers["length_bonus"] = LengthBonus(len(char_list)) weights = dict( decoder=1.0 - args.ctc_weight, ctc=args.ctc_weight, lm=args.lm_weight, ngram=args.ngram_weight, length_bonus=args.penalty, ) beam_search = BeamSearch( beam_size=args.beam_size, vocab_size=len(char_list), weights=weights, scorers=scorers, sos=model.sos, eos=model.eos, token_list=char_list, pre_beam_score_key=None if args.ctc_weight == 1.0 else "full", )其中ctc_weight、lm_weight、ngram_weight、penalty、beam_size等参数在各类 example 配置文件 中可自由调节。CTC 类解码还依赖 C++ 加速实现,通过 ctcdecoder/swig_wrapper.py 封装paddlespeech_ctcdecoders,其中ctc_beam_search_decoding支持cutoff_prob(剪枝概率阈值)与cutoff_top_n(保留概率最高的前 N 个字符)两个剪枝参数,用于平衡速度与精度。
五、部署(Deployment):Paddle Inference 推理引擎
功能清单中部署能力列为Paddle Inference。仓库对应提供了完整的 C++ 推理引擎,位于 runtime/engine/asr,支持将训练好的模型导出为静态图后,通过 Paddle Inference 高性能推理。相关的依赖与构建配置(如paddleinference.cmake)集中在 runtime/cmake,示例程序可参考 runtime/examples/codelab 与 runtime/examples/custom_asr 下的脚本与文档。
需要说明的是,Paddle Inference 部署主要面向离线/服务端场景的 ASR 推理;实时流式场景下,仓库还提供了基于 WebSocket 的流式服务器方案,见 demos/streaming_asr_server 与 demos/custom_streaming_asr。
六、对齐(Alignment):MFA 与 CTC Alignment
功能清单列出两种对齐方案:
- MFA(Montreal Forced Aligner):基于 HMM 的强制对齐工具,用于给训练语料生成音素级别的帧级对齐,在 TTS 数据准备中尤为常用。仓库提供了安装脚本 tools/extras/install_mfa_v1.sh、tools/extras/install_mfa_v2.sh,以及 examples/other/mfa 下的使用示例(含特征提取、文本规整、对齐脚本与词典)。
- CTC Alignment:利用 CTC 解码输出的帧级对齐结果来切分语音与文本。仓库的 fst 工具集 utils/fst(如 ctc_token_fst.py、make_lexicon_token_fst.sh)用于构造 token 级 FST,而 examples/thchs30/align0 提供了一个完整的中文 CTC 对齐示例,包含 3 个 shell 脚本、对齐 Python 脚本与词典。
七、语音前端(Speech Frontend):增益控制与特征提取
功能清单将语音前端分为 Audio 与 Feature 两层:
Audio 层包含Auto Gain(自动增益控制),用于把不同录制设备产生的音量差异归一化,保证特征提取的数值稳定性。
Feature 层包含四类经典特征:
| 特征 | 说明 | 仓库实现参考 |
|---|---|---|
| kaldi fbank | Kaldi 风格 FilterBank 特征,ASR 最常用的输入 | audio/paddleaudio/kaldi/kaldi.py(fbank 计算) |
| kaldi mfcc | Kaldi 风格 MFCC 特征,带倒谱系数与 liftering | 同上文件中的 mfcc 实现 |
| linear | 线性谱特征(直接使用幅度谱) | 特征层定义见 paddlespeech/s2t/frontend/featurizer |
| delta delta | 一阶/二阶差分(动态特征) | 通过特征拼接配置引入,增强时序动态信息 |
fbank/mfcc 的底层计算由 C++ 扩展提供高性能实现,构建说明见 audio/CMakeLists.txt 与 audio/src。实际训练配置中,通常会组合使用 fbank + delta delta,并在 frontend 配置文件 中通过fbank与delta参数控制。
八、语音增强(Speech Augmentation):音频与频谱双维度
功能清单列出了最完整的数据增强矩阵,这是提升 ASR 泛化能力的关键一环。所有增强器由统一的增强管线 paddlespeech/s2t/frontend/augmentor/augmentation.py 组装,通过 JSON 配置描述"类型 + 参数 + 概率"三元组:
[ { "type": "noise", "params": {"min_snr_dB": 10, "max_snr_dB": 20, "noise_manifest_path": "datasets/manifest.noise"}, "prob": 0.0 }, { "type": "speed", "params": {"min_speed_rate": 0.9, "max_speed_rate": 1.1}, "prob": 1.0 }, { "type": "shift", "params": {"min_shift_ms": -5, "max_shift_ms": 5}, "prob": 1.0 }, { "type": "volume", "params": {"min_gain_dBFS": -10, "max_gain_dBFS": 10}, "prob": 0.0 } ]各增强器与清单逐项对应如下:
音频域(Audio)增强:
- Volume Perturbation(音量扰动):
volume→ impulse_response.py 中的VolumePerturbAugmentor,按min_gain_dBFS/max_gain_dBFS随机增益; - Speed Perturbation(语速扰动):
speed→ speed_perturb.py 中的SpeedPerturbAugmentor,按min_speed_rate/max_speed_rate变速,是效果最显著的鲁棒性增强手段; - Shifting Perturbation(时间平移):
shift→ shift_perturb.py 中的ShiftPerturbAugmentor,按min_shift_ms/max_shift_ms平移音频; - Online Bayesian normalization(在线贝叶斯归一化):
bayesian_normal→ online_bayesian_normalization.py,在特征上做在线统计归一化; - Noise Perturbation(噪声扰动):
noise→ noise_perturb.py 中的NoisePerturbAugmentor,按min_snr_dB/max_snr_dB叠加指定噪声 manifest 中的噪声; - Impulse Response(脉冲响应):
impulse→ impulse_response.py 中的ImpulseResponseAugmentor,通过卷积房间冲击响应模拟混响。
频谱域(Spectrum)增强:
- SpecAugment:
specaug→ spec_augment.py 中的SpecAugmentor,对频谱的时间与频率轴做随机掩蔽(mask),显著缓解过拟合; - Adaptive SpecAugment(自适应 SpecAugment):根据输入时长的长短自动调节掩蔽力度,即掩蔽宽度随样本时长成比例缩放,对长短不一的语音更友好。
通过给每项增强配置prob(应用概率),可以在训练与验证阶段复用同一管线:训练开启增强,验证时通过preprocess_args={"train": False}关闭,这一逻辑在 recog.py 的LoadInputsAndTargets调用中可以看到。
九、Tokenizer 与分词(Word Segmentation)
功能清单列出三种 Tokenizer 策略:
- Chinese/English Character(中英文字符级):默认的字符级切分,中文按字、英文按字母,词典紧凑,是仓库各 示例配置 中
chartokenizer 的默认形态; - English Word(英文词级):按空格切分词,适合英文识别,词典较大;
- Sentence Piece(子词级):基于 BPE/Unigram 的无监督子词切分,能平衡 OOV 与词典大小。工具链位于 utils 目录,包括训练脚本 utils/spm 与 examples/other/spm 下的完整示例(生成原始文本、训练 spm 模型、转换到词典三个步骤)。
Word Segmentation(分词)一项列出 mmseg(MMSeg 中文分词算法),用于中文场景下的词边界切分,常与词级建模或语言模型配合使用。
十、Grapheme To Phoneme(字音转换)
功能清单将 G2P 能力分为两级:
- syllable(音节级):输出音节标注(如中文拼音音节);
- phoneme(音素级):输出更细粒度的音素序列。
G2P 是 TTS 前端(text frontend)的核心能力之一,仓库实现在 paddlespeech/t2s/frontend 及 paddlespeech/text 中,支持中英文混合文本的规整与字音转换,并提供了 examples/other/g2p 的独立使用示例。音素序列可用于构建发音词典,进而支撑 CTC/Attention 混合模型的词典约束解码,或为 TTS 提供声学建模的输入标注。
十一、总结:如何用这份清单搭建你的 ASR 系统
结合功能清单与仓库源码,可以梳理出一条可落地的选型路径:
- 数据准备:从 Aishell(中文)或 Librispeech(英文)等清单内数据集入手,按 dataset 下脚本生成 manifest;
- 特征提取:默认选择kaldi fbank,必要时叠加delta delta,配合 Auto Gain 预处理;
- 增强策略:先开启speed + volume + SpecAugment这一性价比最高的组合,再按需引入 noise / impulse(RIR);
- 模型选型:离线场景选Conformer/Transformer(非流式),实时场景选U2或流式 DeepSpeech2;
- 解码配置:以ctc greedy / beam search起步,需要更高精度时叠加ngram + 注意力重打分,并通过
ctc_weight、lm_weight、beam_size等参数调优; - 部署:精度达标后将模型导出为 Paddle Inference 静态图,接入 runtime/engine/asr 的 C++ 服务,或使用流式服务器方案支撑在线识别。
各环节的配置模板可在 examples 目录按数据集与任务(如aishell/asr1、librispeech/asr1)找到,配合本文的清单逐项对照,即可快速定位仓库中每一项能力的真实落点。
- 人工智能
- 语音
- 音频
- NLP
- 媒体生成
【免费下载链接】PaddleSpeech
Easy-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.
相关推荐
PaddleSpeech 语音识别功能全景解析:从数据集、识别模型、解码器到强制对齐与数据增强
PaddleSpeech 语音识别功能全景解析:从数据集、识别模型、解码器到强制对齐与数据增强 本文基于 PaddleSpeech 官方 ASR 功能列表( d
人工智能语音音频PaddleSpeech SpecAugment 模块全解析:时间扭曲与频率/时间掩码的 ASR 数据增强实战
PaddleSpeech SpecAugment 模块全解析:时间扭曲与频率/时间掩码的 ASR 数据增强实战 SpecAugment 是一种经典的语音识别数据
人工智能语音音频NLP媒体生成RescueSpeech 数据集全解析:面向搜救场景的德语 ASR 与语音增强数据(SpeechBrain)
RescueSpeech 数据集全解析:面向搜救场景的德语 ASR 与语音增强数据(SpeechBrain) 本指南以 SpeechBrain 仓库内 Resc
人工智能深度学习语音音频NLP预训练
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考