当前位置: 首页 > news >正文

全面解析 ESPnet:Aishell 项目深入指南

项目结构如下

这里我们优先讲解asr1下的run.sh 和asr.sh。asr.sh在run.sh 中被调用

aishell
\---asr1|   asr.sh👈|   cmd.sh|   db.sh|   path.sh|   pyscripts|   README.md|   run.sh👈|   run_streaming.sh|   run_whisper_finetune.sh|   scripts|   steps|   utils|+---conf|   |   decode_asr_branchformer.yaml|   |   decode_asr_rnn.yaml|   |   decode_asr_simu_streaming.yaml|   |   decode_asr_streaming.yaml|   |   decode_asr_transformer.yaml|   |   decode_asr_transformer_ngram.yaml|   |   fbank.conf|   |   pbs.conf|   |   pitch.conf|   |   queue.conf|   |   slurm.conf|   |   train_asr_branchformer.yaml|   |   train_asr_conformer.yaml|   |   train_asr_rnn.yaml|   |   train_asr_streaming_conformer.yaml|   |   train_asr_streaming_transformer.yaml|   |   train_asr_transformer.yaml|   |   train_lm.yaml|   |   train_lm_transformer.yaml|   ||   \---tuning|           decode_asr_whisper_noctc_beam10.yaml|           train_asr_branchformer_e24_amp.yaml|           train_asr_branchformer_fast_selfattn_e24_amp.yaml|           train_asr_conformer.yaml|           train_asr_conformer_e12_amp.yaml|           train_asr_conformer_e12_brctc_intermediate_stage1.yaml|           train_asr_conformer_e12_brctc_intermediate_stage2.yaml|           train_asr_ctc_conformer_e15_linear1024.yaml|           train_asr_ctc_e_branchformer_e12.yaml|           train_asr_e_branchformer_e12_mlp1024_linear1024_mactrue_amp.yaml|           train_asr_transformer.yaml|           train_asr_transformer2.yaml|           train_asr_transformer3.yaml|           train_asr_transformer_lr0.002.yaml|           train_asr_whisper_large_lora_finetune.yaml|           train_asr_whisper_medium_finetune.yaml|           train_asr_whisper_medium_lora_finetune.yaml|           train_lm_rnn.yaml|           train_lm_rnn2.yaml|           train_lm_transformer.yaml|\---localdata.shdownload_and_untar.shpath.sh
  • run.sh
#!/usr/bin/env bash
# 指定脚本使用 bash 作为解释器,env 用于找到 bash 的路径# 设置 bash 为 'debug' 模式,当出现以下情况时,脚本会退出:
# - -e: 一旦有任何命令返回非零状态,立即退出
# - -u: 尝试使用未定义的变量时会导致脚本退出
# - -o pipefail: 如果管道中的任何命令失败,整个管道返回非零状态
set -e
set -u
set -o pipefail# 定义训练集、验证集和测试集的变量
train_set=train  # 训练集名称
valid_set=dev    # 验证集名称
test_sets="dev test"  # 测试集名称,可以包含多个集合# 定义 ASR 训练和推理的配置文件路径
asr_config=conf/train_asr_branchformer.yaml  # ASR 训练配置文件
inference_config=conf/decode_asr_branchformer.yaml  # ASR 推理配置文件# 定义语言模型的配置文件路径和使用标志
lm_config=conf/train_lm_transformer.yaml  # 语言模型的配置文件
use_lm=false  # 是否使用语言模型(此处为 false)
use_wordlm=false  # 是否使用词级语言模型(此处为 false)# 速度扰动相关配置
# 如果指定了 speed_perturb_factors,train_set 将变为 "${train_set}_sp"
speed_perturb_factors="0.9 1.0 1.1"  # 速度扰动因子,增强训练数据的多样性# 调用 asr.sh 脚本,执行 ASR 训练或推理过程
./asr.sh \--nj 32 \  # 指定并行作业的数量,这里设置为 32--inference_nj 32 \  # 指定推理阶段的并行作业数量,也设置为 32--ngpu 4 \  # 指定使用的 GPU 数量,这里设置为 4--lang zh \  # 指定语言,这里设置为中文(zh)--audio_format "flac.ark" \  # 指定音频文件的格式,这里设置为 flac.ark--feats_type raw \  # 指定特征的类型,这里选择原始特征(raw)--token_type char \  # 指定标记类型,这里选择字符级别(char)--use_lm ${use_lm} \  # 是否使用语言模型,使用前面定义的 use_lm 变量--use_word_lm ${use_wordlm} \  # 是否使用词级语言模型,使用前面定义的 use_wordlm 变量--lm_config "${lm_config}" \  # 传递语言模型配置文件的路径--asr_config "${asr_config}" \  # 传递 ASR 训练配置文件的路径--inference_config "${inference_config}" \  # 传递推理配置文件的路径--train_set "${train_set}" \  # 传递训练集的名称--valid_set "${valid_set}" \  # 传递验证集的名称--test_sets "${test_sets}" \  # 传递测试集的名称--speed_perturb_factors "${speed_perturb_factors}" \  # 传递速度扰动因子的设置--asr_speech_fold_length 512 \  # 设置 ASR 语音的折叠长度(输入序列的长度)--asr_text_fold_length 150 \  # 设置 ASR 文本的折叠长度--lm_fold_length 150 \  # 设置语言模型的折叠长度--lm_train_text "data/${train_set}/text" "$@"  # 指定用于训练语言模型的文本文件路径,并传递额外参数

下一步的线索: 就是要着重去看 asr.sh 和 上面提到的几个yaml文件。

  • conf/train_asr_branchformer.yaml
# 网络架构配置# 编码器相关配置
encoder: branchformer  # 使用的编码器架构,这里是 Branchformer
encoder_conf:output_size: 256  # 编码器输出的特征向量大小use_attn: true  # 是否使用注意力机制attention_heads: 4  # 注意力头的数量attention_layer_type: rel_selfattn  # 注意力层类型,此处为相对自注意力pos_enc_layer_type: rel_pos  # 位置编码层类型,使用相对位置编码rel_pos_type: latest  # 相对位置类型,取最新的use_cgmlp: true  # 是否使用 CGMLP(卷积增强的多层感知机)cgmlp_linear_units: 2048  # CGMLP 中线性层的单元数cgmlp_conv_kernel: 31  # CGMLP 中卷积核的大小use_linear_after_conv: false  # 卷积后是否使用线性层gate_activation: identity  # 门控激活函数类型,这里使用恒等函数merge_method: concat  # 合并方法,这里使用拼接cgmlp_weight: 0.5  # 仅在合并方法为 "fixed_ave" 时使用的权重attn_branch_drop_rate: 0.0  # 仅在合并方法为 "learned_ave" 时使用的注意力分支丢弃率num_blocks: 24  # 编码器的块数量dropout_rate: 0.1  # dropout 概率positional_dropout_rate: 0.1  # 位置编码的 dropout 概率attention_dropout_rate: 0.1  # 注意力层的 dropout 概率input_layer: conv2d  # 输入层类型,这里使用二维卷积stochastic_depth_rate: 0.0  # 随机深度的比例# 解码器相关配置
decoder: transformer  # 使用的解码器架构,这里是 Transformer
decoder_conf:attention_heads: 4  # 注意力头的数量linear_units: 2048  # 解码器中的线性层单元数num_blocks: 6  # 解码器的块数量dropout_rate: 0.1  # dropout 概率positional_dropout_rate: 0.1  # 位置编码的 dropout 概率self_attention_dropout_rate: 0.  # 自注意力层的 dropout 概率src_attention_dropout_rate: 0.  # 源注意力层的 dropout 概率# 混合 CTC/注意力模型相关配置
model_conf:ctc_weight: 0.3  # CTC 损失的权重lsm_weight: 0.1  # 标签平滑选项length_normalized_loss: false  # 是否使用长度归一化损失# 小批量相关配置
batch_type: numel  # 批次类型,这里使用元素数量
batch_bins: 25000000  # 批次大小的总元素数# 优化相关配置
accum_grad: 1  # 梯度累积的次数
grad_clip: 5  # 梯度裁剪阈值
max_epoch: 60  # 最大训练轮数
val_scheduler_criterion:  # 验证调度器标准- valid  # 验证集- acc  # 准确率
best_model_criterion:  # 最佳模型标准
-   - valid  # 验证集- acc  # 准确率- max  # 最大值
keep_nbest_models: 10  # 保留的最佳模型数量# 优化器配置
optim: adam  # 使用的优化器,这里是 Adam
optim_conf:lr: 0.001  # 学习率weight_decay: 0.000001  # 权重衰减# 学习率调度器配置
scheduler: warmuplr  # 使用的学习率调度器类型
scheduler_conf:warmup_steps: 35000  # 暖启动步骤数num_workers: 4  # 数据加载器的工作线程数量
use_amp: true  # 是否使用自动混合精度
unused_parameters: false  # 如果在 DDP 中有一些参数未使用,则设置为 true# 规格增强相关配置
specaug: specaug  # 使用的规格增强方法
specaug_conf:apply_time_warp: true  # 是否应用时间扭曲time_warp_window: 5  # 时间扭曲窗口大小time_warp_mode: bicubic  # 时间扭曲模式apply_freq_mask: true  # 是否应用频率遮罩freq_mask_width_range:  # 频率遮罩宽度范围- 0- 27num_freq_mask: 2  # 频率遮罩的数量apply_time_mask: true  # 是否应用时间遮罩time_mask_width_ratio_range:  # 时间遮罩宽度比例范围- 0.- 0.05num_time_mask: 10  # 时间遮罩的数量

http://www.mrgr.cn/news/64069.html

相关文章:

  • 计算机组成原理之CPU的功能与基本结构
  • 机器人大模型GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)
  • MongoDB 8.0.3版本安装教程
  • 代理IPv6知识分享课堂二
  • Maven介绍,IDEA集成方式
  • 如何使用VBA识别Excel中的“单元格中的图片”(2/2)
  • 2025院士增选高校候选人名单公布,医工交叉领域有这些专家需要重点关注!|24-11-02
  • 2-8软件包管理
  • 7、LVM逻辑卷详解
  • tmux查看的日志范围有限
  • Django 5企业级Web应用开发实战-日志
  • DNS服务器
  • openGauss数据库-头歌实验1-3 创建和管理模式
  • C++ 实现俄罗斯方块游戏
  • DPDK event 驱动开发
  • 【数据库】用关系代数的基本运算来表示其他运算
  • 一台手机可以登录运营多少个TikTok账号?
  • 少样本无标签室内定位论文精华-20241102
  • clion远程配置docker ros2
  • 【Java语言】继承和多态(一)
  • 小夜灯语音识别芯片,灯具声控方案,NRK3301
  • Linux初阶——线程(Part3):POSIX 信号量 CP 模型变体
  • 线程安全的单例模式(Singleton)。
  • 基于Python可视化的热门微博数据分析系统
  • WPF 实现冒泡排序可视化
  • nfs服务器