☰
PaddleSpeech Tiny 示例实战:基于 LibriSpeech 子集训练 DeepSpeech2 与 Transformer/Conformer 流式 ASR
2026/10/14 17:39:47 网站建设 项目流程
  • 人工智能
  • 语音
  • 音频
  • 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.

项目地址:https://gitcode.com/paddlepaddle/PaddleSpeech
点击查看免费下载

PaddleSpeech 的examples/tiny示例目录提供了在极小规模数据(LibriSpeech 的 64 条样本子集)上快速跑通完整 ASR 训练流水线的参考实现,涵盖 DeepSpeech2(offline/online)与 Transformer/Conformer(U2 架构,支持流式与非流式)两大类主流模型。读完本文,你将掌握 PaddleSpeech 阶段化实验脚本run.sh的完整用法:从数据下载、CMVN 统计、词表构建、模型训练、Top-k 模型平均、评测,到静态图导出与 CTC 对齐,并能读懂每一份 YAML 配置背后的含义,结合仓库源码理解其底层实现。

Tiny 示例目录与三种模型路线

examples/tiny/README.md是一个导航索引,它把整个 Tiny 示例分成两个子目录、三条实验路线:

目录模型路线特点
asr0DeepSpeech2 Streaming/Non-Streaming支持离线与在线两种模型配置
asr1Transformer Streaming/Non-StreamingU2 架构(hybrid CTC/attention)
asr1Conformer Streaming/Non-StreamingU2 架构 + 相对位置编码、因果卷积

其中asr1对应 U2 模型(论文 Unified Streaming and Non-streaming Two-pass End-to-end Model for Speech Recognition 提出的架构),编码器可以替换为 Transformer 或 Conformer。Tiny 数据集取自 LibriSpeech 的一部分(dev-clean的前 64 条样本),主要用于验证工具链、脚本与配置的正确性,是完整数据集(如examples/librispeech)训练的“最小可运行”前置演练。

前置环境:path.sh 与 parse_options.sh

两个子目录的path.sh结构一致(asr0/path.sh、asr1/path.sh),核心是导出仓库根目录MAIN_ROOT、把utils加入PATH、设置PYTHONPATH,并指明本目录使用的模型 bin 目录:

export MAIN_ROOT=`realpath ${PWD}/../../../` export PATH=${MAIN_ROOT}:${MAIN_ROOT}/utils:${PATH} export LC_ALL=C export PYTHONIOENCODING=UTF-8 export PYTHONPATH=${MAIN_ROOT}:${PYTHONPATH} export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/ MODEL=deepspeech2 # asr0 MODEL=u2 # asr1 export BIN_DIR=${MAIN_ROOT}/paddlespeech/s2t/exps/${MODEL}/bin

因此每个实验目录里的脚本都要先执行:

source path.sh source ${MAIN_ROOT}/utils/parse_options.sh

parse_options.sh(位于 utils/parse_options.sh)为后续所有 shell 脚本提供了--variable value形式的命令行参数解析能力,这是整个示例体系能通过bash run.sh --stage 0 --stop_stage 0方式控制流程的基础。

run.sh 阶段化流水线总览

两个子目录的run.sh都把实验拆成若干 stage,可通过stage与stop_stage自由组合执行区间。

asr0(DeepSpeech2)的阶段划分:

Stage功能
0数据处理:下载数据集、计算训练集 CMVN、生成词表、生成 train/dev/test 的 manifest
1模型训练
2对 Top-k 个模型做参数平均得到最终模型(k=1 表示选最优单模型)
3测试最终模型性能
4导出静态图(jit)模型

asr1(Transformer/Conformer)的阶段划分:

Stage功能
0数据处理:下载数据集、计算 CMVN、生成词表、生成 manifest、训练 sentencepiece 模型
1模型训练
2对 Top-k 个模型做参数平均
3测试最终模型性能
4用最终模型对测试数据做 CTC 对齐
51导出静态图模型(在 asr1 的 run.sh 中以独立 stage 51 呈现)

用法示例(只跑第 2、3 阶段):

bash run.sh --stage 2 --stop_stage 3

只跑第 0 阶段:

bash run.sh --stage 0 --stop_stage 0

当stage与stop_stage相等时即只执行该单个 stage。

可调本地变量

两个run.sh在文件头部设置了若干本地变量(以 asr0/run.sh 为例):

gpus=4 stage=0 stop_stage=100 conf_path=conf/deepspeech2.yaml ips= #xx.xx.xx.xx,xx.xx.xx.xx decode_conf_path=conf/tuning/decode.yaml avg_num=1
变量含义备注
gpus使用的 GPU 编号置空gpus=表示只用 CPU
stage起始阶段号
stop_stage结束阶段号
conf_path模型配置 YAML 路径asr0 默认conf/deepspeech2.yaml,asr1 默认conf/transformer.yaml
decode_conf_path解码配置路径asr0/asr1 均为conf/tuning/decode.yaml
avg_numTop-k 平均的 k 值
ckptcheckpoint 前缀由conf_path文件名自动推导,如deepspeech2、transformer
avg_ckpt平均后的 checkpoint 名由avg_num推导,如avg_1

ips用于多机分布式训练时指定节点地址(以逗号分隔)。命令行可覆盖除ckpt外的变量:

bash run.sh --gpus 0,1 --avg_num 1

ckpt并非手工指定,而是由脚本自动从配置文件推导:ckpt=$(basename ${conf_path} | awk -F'.' '{print $1}'),即去掉 YAML 扩展名后的文件名。

Stage 0:数据处理流水线

两个子目录的 stage 0 均调用./local/data.sh,但特征与词表方案不同,体现了 DeepSpeech2 与 U2 模型的差异。

asr0(DeepSpeech2):char 词表 + Linear 频谱

asr0/local/data.sh 内部包含 4 个细分阶段:

  1. 下载数据并生成 manifest(stage -1):
python3 ${TARGET_DIR}/librispeech/librispeech.py \ --manifest_prefix="data/manifest" \ --target_dir="${TARGET_DIR}/librispeech" \ --full_download="False" head -n 64 data/manifest.dev-clean > data/manifest.tiny.raw

即通过 dataset/librispeech/librispeech.py 下载 LibriSpeech(full_download=False时只下载 dev-clean 等少量子集),然后取前 64 条样本构成 Tiny 原始 manifest。

  1. 计算 CMVN 统计量(stage 0):
python3 ${MAIN_ROOT}/utils/compute_mean_std.py \ --manifest_path="data/manifest.tiny.raw" \ --num_samples=64 \ --spectrum_type="linear" \ --delta_delta=false \ --sample_rate=16000 \ --stride_ms=10 \ --window_ms=20 \ --use_dB_normalization=False \ --num_workers=2 \ --output_path="data/mean_std.json"

这里使用 linear 频谱(非 fbank),帧移 10ms、窗长 20ms,得到特征归一化所需的均值/方差文件mean_std.json。

  1. 构建词表(stage 1,unit 类型为 char):
python3 ${MAIN_ROOT}/utils/build_vocab.py \ --unit_type char \ --count_threshold=0 \ --vocab_path="data/lang_char/vocab.txt" \ --manifest_paths="data/manifest.tiny.raw"
  1. 格式化 manifest(stage 2),把文本转成 token id 并绑定 CMVN:
python3 ${MAIN_ROOT}/utils/format_data.py \ --cmvn_path "data/mean_std.json" \ --unit_type char \ --vocab_path="data/lang_char/vocab.txt" \ --manifest_path="data/manifest.tiny.raw" \ --output_path="data/manifest.tiny"

最终data/目录结构如下:

data/ |-- dev.meta |-- lang_char | `-- vocab.txt |-- manifest.dev |-- manifest.dev.raw |-- manifest.test |-- manifest.test.raw |-- manifest.train |-- manifest.train.raw |-- mean_std.json |-- test.meta `-- train.meta

asr1(Transformer/Conformer):sentencepiece BPE 词表 + fbank 特征

asr1/local/data.sh 的差异点在于:

  1. 特征为 80 维 fbank(--spectrum_type="fbank" --feat_dim=80,帧移 10ms、窗长 25ms),符合 U2 编码器的输入习惯;
  2. 词表用 sentencepiece 训练(unit_type="spm"),默认nbpe=200、bpemode=unigram:
python3 ${MAIN_ROOT}/utils/build_vocab.py \ --unit_type "spm" \ --spm_vocab_size=${nbpe} \ --spm_mode ${bpemode} \ --spm_model_prefix "data/lang_char/bpe_unigram_200" \ --vocab_path="data/lang_char/vocab.txt" \ --manifest_paths="data/manifest.tiny.raw"

format_data.py相应传入--unit_type "spm" --spm_model_prefix完成 token id 化。

最终data/目录额外包含:

data/ |-- lang_char | |-- bpe_unigram_200.model | |-- bpe_unigram_200.vocab | `-- vocab.txt

Stage 1:模型训练

两个子目录的训练脚本逻辑一致(asr0/local/train.sh、asr1/local/train.sh),核心调用为:

CUDA_VISIBLE_DEVICES=${gpus} ./local/train.sh ${conf_path} ${ckpt}

train.sh 内部会依据CUDA_VISIBLE_DEVICES数量自动区分单机与分布式:

  • ngpu==0(纯 CPU):直接运行${BIN_DIR}/train.py;
  • ngpu>0:通过python3 -m paddle.distributed.launch --gpus=${CUDA_VISIBLE_DEVICES} ${ips_config}拉起分布式训练,ips非空时追加--ips参数。

两个脚本都设置了若干 Paddle 运行期环境变量,值得注意:

# seed may break model convergence seed=0 # default memory allocator strategy may case gpu training hang # for no OOM raised when memory exhausted export FLAGS_allocator_strategy=naive_best_fit

seed=0时不设置确定性算子(注释明确说明固定 seed 可能破坏收敛);FLAGS_allocator_strategy=naive_best_fit用于规避默认内存分配策略在显存耗尽时不报 OOM 反而导致训练挂起的问题。asr1 的 train.sh 额外支持--benchmark-batch-size与--benchmark-max-step两个 benchmark 选项。当seed != 0时会临时开启FLAGS_cudnn_deterministic=True并在训练结束后复位。

命令行最小运行示例(纯 CPU):

source path.sh bash ./local/data.sh CUDA_VISIBLE_DEVICES= ./local/train.sh conf/deepspeech2.yaml deepspeech2

所有 checkpoint 输出到exp/${ckpt}/目录下。

Stage 2:Top-k 模型平均

训练过程中每个 epoch 都会保存 checkpoint,因此可以选择验证集 loss 最优的单个模型,也可以对 Top-k 个最优模型的参数做平均得到更稳的最终模型:

avg.sh best exp/${ckpt}/checkpoints ${avg_num}

avg.sh位于仓库根目录的 utils/avg.sh,由path.sh加入 PATH,实际调用 utils/avg_model.py 对应的paddlespeech/dataset/s2t/avg_model.py实现。其工作机制(见 paddlespeech/dataset/s2t/avg_model.py):

  1. 扫描ckpt_dir下所有[!train]*.json元数据文件(按修改时间倒序);
  2. 读取每个 checkpoint 的val_loss与epoch,在[min_epoch, max_epoch]区间内筛选;
  3. --val_best模式下按 val_loss 升序排序,取前num个 epoch 对应的.pdparams;
  4. 逐参数累加后除以num求平均,保存为avg_${num}.pdparams,并输出avg_${num}.avg.json元信息。

完整命令行示例:

source path.sh bash ./local/data.sh CUDA_VISIBLE_DEVICES= ./local/train.sh conf/deepspeech2.yaml deepspeech2 avg.sh best exp/deepspeech2/checkpoints 1

Stage 3:模型测试

asr0 的测试脚本 asr0/local/test.sh 会先下载英文语言模型,再进行 beam search 解码:

# download language model bash local/download_lm_en.sh python3 -u ${BIN_DIR}/test.py \ --ngpu ${ngpu} \ --config ${config_path} \ --decode_cfg ${decode_config_path} \ --result_file ${ckpt_prefix}.rsl \ --checkpoint_path ${ckpt_prefix}

语言模型由 asr0/local/download_lm_en.sh 从deepspeech.bj.bcebos.com下载(common_crawl_00.prune01111.trie.klm,MD5 校验099a601759d467cd0a8523ff939819c5),保存到data/lm/。测试结果写入${ckpt_prefix}.rsl文件。对应源码实现在 paddlespeech/s2t/exps/deepspeech2/model.py 的test():它从decode_cfg读取decode_batch_size、decoding_method、lang_model_path、alpha、beta、beam_size、cutoff_prob、cutoff_top_n、num_proc_bsearch初始化解码器,逐 batch 计算 WER(errors_sum / len_refs),最后通过del_decoder()释放资源。

asr1 的测试脚本 asr1/local/test.sh 更有代表性——它会依次用 4 种解码方式评测并各自输出结果文件:

  1. attention(纯 attention 解码,decode_batch_size=64);
  2. ctc_greedy_search(CTC 贪心搜索,decode_batch_size=64);
  3. ctc_prefix_beam_search(CTC prefix beam search,batch_size=1);
  4. attention_rescoring(CTC 结果经 attention 重打分,batch_size=1)。

脚本还通过--opts decode.decoding_method ${type}动态覆盖配置。若配置文件名匹配chunk_.*yaml(流式 chunk 模型),则chunk_mode=true,attention/ctc_greedy_search 也强制batch_size=1(注释说明流式解码只支持 batchsize=1)。

asr1 的测试命令(纯 CPU):

CUDA_VISIBLE_DEVICES= ./local/test.sh conf/transformer.yaml exp/transformer/checkpoints/avg_1

Stage 4:静态图导出与 CTC 对齐

asr0:导出静态图模型

CUDA_VISIBLE_DEVICES=0 ./local/export.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} exp/${ckpt}/checkpoints/${avg_ckpt}.jit

asr0/local/export.sh 内部调用${BIN_DIR}/export.py,把动态图 checkpoint 转为静态图。源码层面对应 paddlespeech/s2t/exps/deepspeech2/model.py 的export():通过DeepSpeech2InferModel.from_pretrained构建推理模型,调用infer_model.export()得到静态模型后paddle.jit.save(static_model, self.args.export_path),输出${avg_ckpt}.jit供部署(如 demos/asr_deployment、runtime C++ 引擎)使用。

独立导出命令:

source path.sh ./local/export.sh deepspeech2.yaml exp/deepspeech2/checkpoints/avg_1 exp/deepspeech2/checkpoints/avg_1.jit

asr1:CTC 对齐

U2 模型额外提供 CTC 对齐能力(asr1/local/align.sh),用于获得音频与文本之间的帧级对齐:

CUDA_VISIBLE_DEVICES=0 ./local/align.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt}

align.sh 调用${BIN_DIR}/alignment.py,强制batch_size=1,把对齐结果 dump 到${ckpt_prefix}/目录下(.align结果文件,以及可供标注工具使用的.tier、.TextGrid文件)。如果不做测试只做对齐,可以跳过 stage 3:

bash run.sh --stage 0 --stop_stage 2 bash run.sh --stage 4 --stop_stage 4

配置文件逐项解读

asr0 模型配置:deepspeech2.yaml / deepspeech2_online.yaml

asr0/conf/deepspeech2.yaml 分为四大部分:

数据段:train_manifest/dev_manifest/test_manifest指向data/manifest.tiny;min_input_len/max_input_len(0.0/30.0 秒)与min_output_len/max_output_len(0/400)用于过滤样本;min_output_input_ratio/max_output_input_ratio(0.05/10.0)约束输出文本长度与输入音频长度的比值。

Dataloader 段:vocab_filepath(char 词表)、unit_type: 'char'、preprocess_config: conf/preprocess.yaml、feat_dim: 161(161 维 linear 特征)、stride_ms: 10.0、window_ms: 25.0;sortagrad: 0表示按最短到最长排序只在指定 epoch 生效(-1 全部 epoch、0 关闭、其他值表示在“其他”epoch 开启);batch_size: 4、maxlen_in: 512/maxlen_out: 150(超出时自动缩减 batchsize);num_workers: 8、subsampling_factor: 1、num_encs: 1。

网络结构段(离线版核心差异):

num_conv_layers: 2 num_rnn_layers: 3 rnn_layer_size: 2048 rnn_direction: bidirect # [forward, bidirect] num_fc_layers: 0 fc_layers_size_list: -1, use_gru: False blank_id: 0

离线模型使用双向 RNN(bidirect)、GRU 关闭;而 asr0/conf/deepspeech2_online.yaml 的在线版配置为单向 RNN(rnn_direction: forward)、4 层 RNN、2 层 FC(fc_layers_size_list: 512, 256)、use_gru: True,符合流式解码“只能看过去、不能看未来”的约束。

训练段:n_epoch: 5、accum_grad: 1、lr: 1.0e-5、lr_decay: 0.8(在线版为 1.0)、weight_decay: 1.0e-6、global_grad_clip: 5.0;checkpoint.kbest_n: 3/latest_n: 2控制保存策略。

asr0 预处理配置:preprocess.yaml

asr0/conf/preprocess.yaml 描述了在线特征提取与数据增强流程:

process: - type: fbank_kaldi fs: 16000 n_mels: 161 n_shift: 160 win_length: 400 dither: 0.1 - type: cmvn_json cmvn_path: data/mean_std.json - type: time_warp max_time_warp: 5 inplace: true mode: PIL - type: freq_mask F: 30 n_mask: 2 inplace: true replace_with_zero: false - type: time_mask T: 40 n_mask: 2 inplace: true replace_with_zero: false

先提取 Kaldi 风格 fbank(采样率 16k、161 个 mel 滤波器、帧移 160 点、窗长 400 点、抖动 0.1),再做 CMVN 归一化,最后三个增强步骤即 SpecAugment:时间扭曲(最大 5 帧)、频率掩蔽(F=30,2 个 mask)、时间掩蔽(T=40,2 个 mask)。

asr0 解码配置:tuning/decode.yaml

asr0/conf/tuning/decode.yaml(chunk 版见 chunk_decode.yaml):

decode_batch_size: 128 error_rate_type: wer decoding_method: ctc_beam_search lang_model_path: data/lm/common_crawl_00.prune01111.trie.klm alpha: 2.5 beta: 0.3 beam_size: 500 cutoff_prob: 1.0 cutoff_top_n: 40 num_proc_bsearch: 8

这是外部语言模型 + CTC beam search 解码的参数:alpha/beta为语言模型与词数惩罚权重,beam_size: 500是搜索束宽,cutoff_prob/cutoff_top_n用于剪枝,num_proc_bsearch: 8为并行搜索进程数。这些参数会被 paddlespeech/s2t/exps/deepspeech2/model.py 中的init_decoder逐项消费。

asr1 模型配置:transformer.yaml / conformer.yaml 与流式变体

asr1/conf/transformer.yaml 的编码器部分:

encoder: transformer encoder_conf: output_size: 256 # dimension of attention attention_heads: 4 linear_units: 2048 # the number of units of position-wise feed forward num_blocks: 12 # the number of encoder blocks dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.0 input_layer: conv2d # encoder input type, you can chose conv2d, conv2d6 and conv2d8 normalize_before: true

解码器为 6 层 Transformer decoder;model_conf中ctc_weight: 0.3(CTC 与 attention 损失的混合权重)、lsm_weight: 0.1(标签平滑)、length_normalized_loss: false,即 U2 的 hybrid CTC/attention 训练范式。

asr1/conf/conformer.yaml 在 Transformer 基础上增加 Conformer 专属结构:

encoder: conformer encoder_conf: ... use_cnn_module: True cnn_module_kernel: 15 activation_type: 'swish' pos_enc_layer_type: 'rel_pos' selfattention_layer_type: 'rel_selfattn'

使用卷积模块(核宽 15)、swish 激活、相对位置编码(rel_pos)与相对自注意力(rel_selfattn),这是 Conformer 论文(Conformer: Convolution-augmented Transformer for End-to-End Speech Recognition)的核心设计。训练段还设置了accum_grad: 4(梯度累积)与checkpoint.kbest_n: 10。

流式变体:chunk_transformer.yaml(examples/tiny/asr1/conf/chunk_transformer.yaml)增加use_dynamic_chunk: true、use_dynamic_left_chunk: false;chunk_confermer.yaml(examples/tiny/asr1/conf/chunk_confermer.yaml)额外设置causal: True(因果卷积)、cnn_module_norm: 'layer_norm',从而把模型限制为只能看到当前 chunk 及之前的输入,实现流式推理。

asr1 解码配置与数据增强

asr1/conf/tuning/decode.yaml:

decode_batch_size: 8 #64 error_rate_type: wer decoding_method: attention # 'attention', 'ctc_greedy_search', 'ctc_prefix_beam_search', 'attention_rescoring' beam_size: 10 ctc_weight: 0.5 # ctc weight for attention rescoring decode mode. decoding_chunk_size: -1 # decoding chunk size. Defaults to -1. # <0: for decoding, use full chunk. # >0: for decoding, use fixed chunk size as set. # 0: used for training, it's prohibited here. num_decoding_left_chunks: -1 # number of left chunks for decoding. Defaults to -1. simulate_streaming: False # simulate streaming inference. Defaults to False.

decoding_chunk_size是流式解码的关键开关:<0用全 chunk(非流式)、>0用固定 chunk 大小、0仅限训练使用;num_decoding_left_chunks控制左侧历史 chunk 数量;simulate_streaming可模拟流式推理行为。test.sh会把这套配置分别与attention、ctc_greedy_search、ctc_prefix_beam_search、attention_rescoring四种解码方式组合评测。

asr1 的数据增强采用 asr1/conf/augmentation.json,以 JSON 形式按概率配置三段增强:变速(speed,0.9~1.1 倍速、3 档,prob 1.0)、时移(shift,±5ms,prob 1.0)、SpecAugment(specaug,时间扭曲 W=0、频率掩蔽 F=10×2、时间掩蔽 T=50×2、replace_with_zero: true)。其preprocess.yaml(asr1/conf/preprocess.yaml)与 asr0 类似,但n_mels: 80,与feat_dim: 80的 fbank 配置一致。

源码印证:训练、解码与对齐的调用链

从源码结构看,Tiny 示例是 PaddleSpeechs2t训练体系的“最小化入口”,其背后对应的训练器实现在:

  • DeepSpeech2:paddlespeech/s2t/exps/deepspeech2/model.py(DeepSpeech2Trainer、DeepSpeech2Tester、DeepSpeech2ExportTester);
  • U2:paddlespeech/s2t/exps/u2/model.py(U2Trainer)与 paddlespeech/s2t/exps/u2/trainer.py。

以 U2 为例,训练时train_batch内同时计算 attention loss 与 ctc loss(见 paddlespeech/s2t/exps/u2/model.py),损失按accum_grad归一化,这正是配置中ctc_weight起作用的环节。流式能力则来自模型层:paddlespeech/s2t/models/u2/u2.py中的forward_encoder_chunk(paddlespeech/s2t/models/u2/u2.py)提供了 C++ 调用所需的 chunk 增量编码接口,forward_attention_decoder支持对 CTC prefix beam search 的多个假设做 attention 重打分(paddlespeech/s2t/models/u2/u2.py),与decode.yaml中的decoding_chunk_size、attention_rescoring一一对应。

适用前提与限制

  • Tiny 示例仅取 64 条 LibriSpeech 样本,n_epoch: 5、batch_size: 4等参数只适合验证流程,不能代表真实效果;生产级实验请参考 examples/librispeech 的完整配置;
  • 脚本基于 bash 与 PaddlePaddle 分布式启动器,纯 CPU 时需将gpus置空;多机训练需配置ips;
  • asr0 测试阶段会额外下载约数百 MB 的英文语言模型(见 asr0/local/download_lm_en.sh),离线环境需提前准备;
  • 流式(chunk)模型解码仅支持 batch size 为 1,这是test.sh中强制batch_size=1的原因。

从examples/tiny/README.md出发,你可以沿着 asr0(DeepSpeech2)与 asr1(Transformer/Conformer)两条路线快速验证 PaddleSpeech 的完整 ASR 工具链,并以此为基础平滑迁移到librispeech、aishell、wenetspeech等更大规模的示例目录。

  • 人工智能
  • 语音
  • 音频
  • 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.

项目地址:https://gitcode.com/paddlepaddle/PaddleSpeech
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询