練 IISc-MILE 泰米爾語(yǔ) ASR:E-Branchformer + BPE 混合 CTC/Attention 端到端識(shí)別實(shí)踐指南)
人工智能語(yǔ)音音頻深度學(xué)習(xí)NLP【免費(fèi)下載鏈接】espnetEnd-to-End Speech Processing Toolkit項(xiàng)目地址https://gitcode.com/gh_mirrors/es/espnet點(diǎn)擊查看免費(fèi)下載導(dǎo)讀本文圍繞 ESPnet 開(kāi)源倉(cāng)庫(kù)中的egs2/ta_openslr127/asr1recipe完整講解如何基于 IISc-MILE Tamil ASR CorpusOpenSLR 127約 150 小時(shí)朗讀泰米爾語(yǔ)音訓(xùn)練端到端語(yǔ)音識(shí)別系統(tǒng)。全文以該 recipe 的 README.md 為骨架結(jié)合 run.sh、train_asr.yaml、decode_asr.yaml 等配置與源碼實(shí)現(xiàn)覆蓋數(shù)據(jù)劃分、BPE 子詞建模、模型架構(gòu)選型、訓(xùn)練與解碼配置、評(píng)測(cè)指標(biāo)解讀、以及結(jié)果復(fù)現(xiàn)與預(yù)訓(xùn)練模型使用等完整鏈路。讀完本文你將掌握如何在 ESPnet2 中復(fù)現(xiàn)該泰米爾語(yǔ) ASR 基線并具備將其遷移到其他低資源語(yǔ)言的實(shí)操能力。一、任務(wù)背景OpenSLR 127 語(yǔ)料與 recipe 概覽1.1 語(yǔ)料構(gòu)成IISc-MILE Tamil ASR CorpusOpenSLR 127是印度 IISc 機(jī)器學(xué)習(xí)與交互實(shí)驗(yàn)室MILE發(fā)布的朗讀式泰米爾語(yǔ)語(yǔ)音數(shù)據(jù)庫(kù)約 150 小時(shí)語(yǔ)音音頻統(tǒng)一為16 kHz / 16-bit / mono PCM格式。語(yǔ)料來(lái)源包含三個(gè)子庫(kù)MILE、ISTL、MICI。從 local/data.sh 可以看到語(yǔ)料包的下載地址與結(jié)構(gòu)約定data_urlhttps://www.openslr.org/resources/127/mile_tamil_asr_corpus.tar.gz corpus${TAMIL}/mile_tamil_asr_corpus解壓后語(yǔ)料目錄下包含train/與test/兩個(gè)官方劃分每個(gè)劃分內(nèi)各有audio_files/與trans_files/兩個(gè)子目錄——音頻文件與轉(zhuǎn)錄文本一一對(duì)應(yīng)。1.2 recipe 目錄結(jié)構(gòu)egs2/ta_openslr127/asr1遵循 ESPnet2 標(biāo)準(zhǔn) recipe 布局路徑作用run.sh頂層入口調(diào)用標(biāo)準(zhǔn)asr.sh訓(xùn)練/解碼腳本asr.sh標(biāo)準(zhǔn) ASR pipeline數(shù)據(jù)準(zhǔn)備、特征、BPE、訓(xùn)練、解碼local/data.sh語(yǔ)料下載與data/{train_ta,dev_ta,test_ta}構(gòu)建local/data_prep.py生成 Kaldi 風(fēng)格數(shù)據(jù)目錄的核心腳本conf/train_asr.yamlASR 模型E-Branchformer Transformer訓(xùn)練配置conf/decode_asr.yaml解碼beam search LM 淺融合配置conf/train_lm.yaml附加神經(jīng) LM 訓(xùn)練配置conf/fbank.conf前端 log-mel 特征參數(shù)二、數(shù)據(jù)劃分speaker-disjoint 的 train / dev / test2.1 三集合規(guī)模README.md 給出的數(shù)據(jù)劃分如下setutterances說(shuō)明train_ta69,957官方訓(xùn)練集去除 dev 說(shuō)話人后經(jīng)過(guò)長(zhǎng)度過(guò)濾dev_ta7,329從訓(xùn)練集中按說(shuō)話人無(wú)重疊地留出 10%test_ta12,087官方測(cè)試集2.2 劃分實(shí)現(xiàn)細(xì)節(jié)劃分邏輯實(shí)現(xiàn)在 local/data_prep.py 中關(guān)鍵點(diǎn)有三說(shuō)話人 ID 提取語(yǔ)料文件名格式為SRC_speaker_lineindexget_speaker_id()取前兩段作為說(shuō)話人 IDparts basename.split(_) return _.join(parts[:2])說(shuō)話人級(jí)無(wú)重疊切分以dev_ratio0.1在 data.sh 中定義的比例從訓(xùn)練集說(shuō)話人列表中隨機(jī)抽取約 10% 的說(shuō)話人作為 dev 集保證 dev 與 train 之間沒(méi)有說(shuō)話人重疊避免說(shuō)話人泄露導(dǎo)致評(píng)測(cè)虛高spks sorted({spk for spk, _, _ in train_all.values()}) Random(args.seed).shuffle(spks) n_dev max(1, int(len(spks) * args.dev_ratio)) dev_spks set(spks[:n_dev])數(shù)據(jù)目錄寫(xiě)出write_data_dir()為標(biāo)準(zhǔn) Kaldi 風(fēng)格目錄生成text、wav.scp、utt2spk三個(gè)文件隨后 data.sh 再調(diào)用utils/utt2spk_to_spk2utt.pl生成spk2utt并用utils/fix_data_dir.sh校驗(yàn)修復(fù)。注意README 中train_ta標(biāo)注的 after length filtering 由后續(xù)run.sh中的--max_wav_duration 30等參數(shù)在標(biāo)準(zhǔn) pipeline 內(nèi)完成過(guò)濾。三、入口腳本 run.sh一行命令跑通全流程run.sh 是所有操作的入口它把關(guān)鍵超參以命令行參數(shù)形式傳給標(biāo)準(zhǔn)asr.shtrain_settrain_ta valid_setdev_ta test_setsdev_ta test_ta asr_configconf/train_asr.yaml inference_configconf/decode_asr.yaml lm_configconf/train_lm.yaml ./asr.sh \ --lang ta \ --ngpu 1 \ --nj 16 \ --gpu_inference true \ --inference_nj 1 \ --token_type bpe \ --nbpe 1000 \ --bpemode unigram \ --max_wav_duration 30 \ --speed_perturb_factors 0.9 1.0 1.1 \ --feats_type raw \ --use_lm true \ --lm_config ${lm_config} \ --asr_config ${asr_config} \ --inference_config ${inference_config} \ --train_set ${train_set} \ --valid_set ${valid_set} \ --test_sets ${test_sets} \ --bpe_train_text data/${train_set}/text \ --lm_train_text data/${train_set}/text $3.1 參數(shù)逐項(xiàng)解讀參數(shù)取值含義--lang tata語(yǔ)言標(biāo)簽用于目錄命名--ngpu 11單卡訓(xùn)練--nj 1616并行任務(wù)數(shù)特征提取等--gpu_inference truetrue解碼時(shí)使用 GPU--inference_nj 11解碼并行度--token_type bpebpe采用 BPE 子詞建模--nbpe 10001000BPE 詞表規(guī)模為 1000低資源場(chǎng)景的合理選擇--bpemode unigramunigram使用 SentencePiece 的 unigram 算法訓(xùn)練 BPE--max_wav_duration 3030訓(xùn)練樣本最長(zhǎng) 30 秒超出將被過(guò)濾--speed_perturb_factors0.9 1.0 1.1三倍速擾動(dòng)數(shù)據(jù)增強(qiáng)--feats_type rawraw使用原始波形 前端在線提取特征log-mel--use_lm truetrue訓(xùn)練并淺融合神經(jīng) LM3.2 先決條件填寫(xiě) db.sh運(yùn)行run.sh前需在 db.sh 中確認(rèn)TAMIL變量。recipe 默認(rèn)TAMILdownloads允許腳本自動(dòng)下載語(yǔ)料。若未設(shè)置該變量data.sh 會(huì)報(bào)錯(cuò)退出if [ -z ${TAMIL} ]; then log Fill the value of TAMIL in db.sh exit 1 fi四、模型架構(gòu)E-Branchformer 編碼器 Transformer 解碼器 混合 CTC/Attention4.1 總體設(shè)計(jì)根據(jù) README.md本 recipe 采用E-Branchformer 編碼器 Transformer 解碼器混合 CTC/attentionctc_weight0.3raw log-mel 前端BPE-1000unigram無(wú)外部 LM。訓(xùn)練配置是從egs2/librispeech_100/asr1適配而來(lái)。對(duì)比兩個(gè) recipe 的 train_asr.yaml 與 librispeech_100 的 train_asr.yaml模型結(jié)構(gòu)與訓(xùn)練超參完全一致僅語(yǔ)料規(guī)模與數(shù)據(jù)路徑不同——這是低資源語(yǔ)料遷移成熟 recipe 的標(biāo)準(zhǔn)做法。4.2 編碼器配置E-Branchformerencoder: e_branchformer encoder_conf: output_size: 256 attention_heads: 4 attention_layer_type: rel_selfattn pos_enc_layer_type: rel_pos rel_pos_type: latest cgmlp_linear_units: 1024 cgmlp_conv_kernel: 31 use_linear_after_conv: false gate_activation: identity num_blocks: 12 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.1 input_layer: conv2d layer_drop_rate: 0.0 linear_units: 1024 positionwise_layer_type: linear use_ffn: true macaron_ffn: true merge_conv_kernel: 31從源碼結(jié)構(gòu)看E-Branchformer 的實(shí)現(xiàn)位于 espnet2/asr/encoder/e_branchformer_encoder.py其核心是EBranchformerEncoderLayer第 58 行與EBranchformerEncoder第 191 行。E-Branchformer 在傳統(tǒng) Branchformer 的基礎(chǔ)上將主干分支進(jìn)一步分為全局上下文分支基于相對(duì)位置自注意力rel_selfattnrel_posrel_pos_type: latest與局部卷積分支CGMLPcgmlp_conv_kernel: 31并通過(guò)合并卷積merge_conv_kernel: 31融合兩分支輸出。該架構(gòu)兼顧全局建模與局部細(xì)節(jié)捕獲是當(dāng)前 ESPnet 中的主流高效編碼器。關(guān)鍵參數(shù)含義參數(shù)取值作用output_size256編碼器輸出維度attention_heads4注意力頭數(shù)cgmlp_linear_units1024CGMLP 前饋中間層維度cgmlp_conv_kernel/merge_conv_kernel31卷積核寬度num_blocks12編碼器層數(shù)use_ffn/macaron_ffntrue是否使用 FFN / macaron FFN 分支input_layerconv2d前端 conv2d 下采樣4.3 解碼器配置Transformerdecoder: transformer decoder_conf: attention_heads: 4 linear_units: 2048 num_blocks: 6 dropout_rate: 0.1 positional_dropout_rate: 0.1 self_attention_dropout_rate: 0.1 src_attention_dropout_rate: 0.1 layer_drop_rate: 0.06 層標(biāo)準(zhǔn) Transformer 解碼器linear_units: 2048為 FFN 中間層維度各 dropout 均取 0.1。4.4 混合 CTC/Attention 目標(biāo)model_conf: ctc_weight: 0.3 lsm_weight: 0.1 length_normalized_loss: falsectc_weight: 0.3CTC 與 attention 交叉熵的混合權(quán)重訓(xùn)練時(shí)以 0.3 加權(quán) CTC 損失、0.7 加權(quán) attention 損失解碼時(shí)該權(quán)重同樣用于 CTC 前綴 beam 搜索融合。lsm_weight: 0.1標(biāo)簽平滑系數(shù) 0.1。length_normalized_loss: false不啟用長(zhǎng)度歸一化損失。4.5 前端與數(shù)據(jù)增強(qiáng)前端使用 raw 波形在線提取 log-mel 特征--feats_type rawSTFT 參數(shù)frontend_conf: n_fft: 512 win_length: 400 hop_length: 160結(jié)合 fbank.conf--sample-frequency16000、--num-mel-bins80得到 16 kHz / 80 維 log-mel。時(shí)長(zhǎng)配置與語(yǔ)料 16 kHz 采樣率一致。訓(xùn)練采用 SpecAugment 增強(qiáng)specaug: specaug含時(shí)間扭曲time_warp_window: 5bicubic模式、頻率掩蔽num_freq_mask: 2寬度 0–27與時(shí)間掩蔽num_time_mask: 5寬度比例為 0–0.05。此外run.sh中的--speed_perturb_factors 0.9 1.0 1.1提供三倍速擾動(dòng)進(jìn)一步擴(kuò)充訓(xùn)練數(shù)據(jù)。4.6 訓(xùn)練超參seed: 2022 num_workers: 4 batch_type: numel batch_bins: 16000000 accum_grad: 4 max_epoch: 70 best_model_criterion: - - valid - acc - max keep_nbest_models: 10 use_amp: true optim: adam optim_conf: lr: 0.002 weight_decay: 0.000001 scheduler: warmuplr scheduler_conf: warmup_steps: 15000要點(diǎn)batch_type: numel按元素?cái)?shù)動(dòng)態(tài)批量化batch_bins: 16000000控制每批累計(jì)元素?cái)?shù)accum_grad: 4梯度累積max_epoch: 70模型選擇依據(jù)驗(yàn)證集準(zhǔn)確率valid acc max保留 10 個(gè)最佳 checkpoint啟用 AMP 混合精度訓(xùn)練加速。五、語(yǔ)言模型seq_rnn 神經(jīng) LM 與淺融合盡管 README 標(biāo)注無(wú)外部 LMrecipe 仍訓(xùn)練了一個(gè)內(nèi)部神經(jīng) LM 用于解碼淺融合--use_lm true其配置在 train_lm.yamllm: seq_rnn lm_conf: nlayers: 2 unit: 650 optim: sgd batch_type: folded batch_size: 64 max_epoch: 20 patience: 3 best_model_criterion: - - valid - loss - min keep_nbest_models: 12 層、650 隱藏單元的 RNN LMSGD 優(yōu)化20 個(gè) epoch按驗(yàn)證集 loss 選最優(yōu)。LM 文本來(lái)自data/train_ta/text--lm_train_text與 BPE 訓(xùn)練文本一致--bpe_train_text詞表同為 BPE-1000。六、解碼配置beam search 與 LM 淺融合decode_asr.yaml 定義了推理參數(shù)beam_size: 20 ctc_weight: 0.3 lm_weight: 0.3 maxlenratio: 0.0 minlenratio: 0.0 penalty: 0.0參數(shù)取值含義beam_size20beam 寬度ctc_weight0.3解碼時(shí) CTC 前綴得分權(quán)重與訓(xùn)練model_conf.ctc_weight一致lm_weight0.3LM 得分權(quán)重淺融合maxlenratio/minlenratio0.0 / 0.0輸出長(zhǎng)度約束比率0 表示由模型自動(dòng)決定penalty0.0長(zhǎng)度懲罰解碼時(shí)使用decode_asr_lm_lm_train_lm_ta_bpe1000_valid.loss.ave_asr_model_valid.acc.ave這一組合目錄名含義為L(zhǎng)M 取驗(yàn)證 loss 平均值 checkpointASR 模型取驗(yàn)證 acc 平均值 checkpoint兩者聯(lián)合用于 beam 搜索。七、實(shí)驗(yàn)結(jié)果WER / CER / TER 全解析7.1 評(píng)測(cè)指標(biāo)約定WER詞錯(cuò)誤率基于空格分詞后的英文轉(zhuǎn)寫(xiě)詞級(jí)評(píng)測(cè)Snt 為句子數(shù)、Wrd 為詞數(shù)Corr/Sub/Del/Ins/Err 分別為正確、替換、刪除、插入與總錯(cuò)誤率S.Err 為句子錯(cuò)誤率。CER字符錯(cuò)誤率字符級(jí)錯(cuò)誤率對(duì)泰米爾語(yǔ)這類(lèi)詞形豐富、黏著特征明顯的語(yǔ)言更具參考價(jià)值。TER詞錯(cuò)誤率Tamil 文本按詞切分泰米爾語(yǔ)文本自身按詞切分的錯(cuò)誤率。7.2 官方測(cè)試集test_ta結(jié)果WER12087 句 / 88767 詞Corr 85.9Sub 12.2Del 1.9Ins 2.8Err 16.9S.Err 56.4。CER12087 句 / 800532 字符Corr 98.1Sub 0.9Del 1.1Ins 0.7Err 2.7S.Err 56.4。TER12087 句 / 236078 詞Corr 91.9Sub 5.3Del 2.8Ins 1.0Err 9.1S.Err 56.4。7.3 開(kāi)發(fā)集dev_ta結(jié)果WER7333 句 / 63984 詞Corr 84.3Sub 13.7Del 2.0Ins 3.1Err 18.8S.Err 63.6。CER7333 句 / 575072 字符Corr 97.7Sub 1.1Del 1.2Ins 0.8Err 3.0S.Err 63.6。TER7333 句 / 177116 詞Corr 91.2Sub 5.8Del 3.0Ins 1.1Err 9.9S.Err 63.6。7.4 結(jié)果解讀測(cè)試集 CER 僅 2.7%說(shuō)明字符級(jí)識(shí)別已相當(dāng)準(zhǔn)確WER 16.9% 高于 CER符合泰米爾語(yǔ)詞匯形態(tài)豐富、詞級(jí)對(duì)齊困難的語(yǔ)言學(xué)特點(diǎn)。dev_ta 與 test_ta 的 WER18.8% vs 16.9%接近且 dev 略高屬正常波動(dòng)未出現(xiàn)明顯過(guò)擬合跡象。測(cè)試集S.Err 56.4明顯高于詞錯(cuò)誤率說(shuō)明錯(cuò)誤在句子間分布不均長(zhǎng)句或含生僻詞句仍是主要挑戰(zhàn)。7.5 環(huán)境信息復(fù)現(xiàn)基準(zhǔn)README 記錄了復(fù)現(xiàn)該結(jié)果的完整環(huán)境項(xiàng)目版本Python3.10.20espnet2202604PyTorch2.9.1cu128Git commite02e6f79766aa12a13327af8b5375439666135002026-06-07預(yù)訓(xùn)練模型托管在 Hugging Faceespnet/ta_openslr127見(jiàn) README.md 的 Environments 小節(jié)。八、復(fù)現(xiàn)步驟與預(yù)訓(xùn)練模型使用8.1 完整復(fù)現(xiàn)流程準(zhǔn)備環(huán)境安裝 ESPnet參考 installation.md確認(rèn) Python ≥ 3.10、PyTorch 與 CUDA 環(huán)境。配置語(yǔ)料路徑編輯 db.sh設(shè)置TAMILdownloads或指向本地已下載的語(yǔ)料目錄。執(zhí)行數(shù)據(jù)準(zhǔn)備可選單跑./local/data.sh該腳本會(huì)下載mile_tamil_asr_corpus.tar.gz并解壓然后調(diào)用 local/data_prep.py 生成data/{train_ta,dev_ta,test_ta}。一鍵訓(xùn)練 解碼cd egs2/ta_openslr127/asr1 ./run.sh全流程特征、BPE、LM、ASR 訓(xùn)練、beam 解碼、評(píng)分自動(dòng)完成。查看結(jié)果結(jié)果輸出到exp/目錄評(píng)測(cè)表由scripts/utils/show_asr_result.sh位于 scripts/utils自動(dòng)生成并匯總進(jìn) README。8.2 使用預(yù)訓(xùn)練模型不重新訓(xùn)練時(shí)可直接加載 Hugging Face 上的espnet/ta_openslr127預(yù)訓(xùn)練模型對(duì)應(yīng) README 中Pretrained Model字段使用 ESPnet2 的espnet2/bin/asr_inference.py進(jìn)行推理或借助官方pip install espnet_model_zoo的模型倉(cāng)庫(kù)接口加載。注意該模型與 README 的 Git commit、espnet2 202604 版本對(duì)應(yīng)使用時(shí)應(yīng)保持 ESPnet 版本兼容。8.3 遷移到其他低資源語(yǔ)言本 recipe 的適配路徑以 librispeech_100 模板為基礎(chǔ)、降 BPE 詞表至 1000、保留 E-Branchformer 中小尺寸編碼器對(duì)低資源語(yǔ)言普遍適用。遷移時(shí)重點(diǎn)調(diào)整--lang、--nbpe可按訓(xùn)練文本規(guī)??s放、fbank.conf 的采樣率與 mel 數(shù)、以及train_asr.yaml中的max_epoch與warmup_steps數(shù)據(jù)量變化時(shí)建議同步調(diào)整。九、配套基礎(chǔ)設(shè)施特征、隊(duì)列與并行特征生成fbank.conf80 維 log-mel與 pitch.conf16 kHz 采樣率配合--feats_type raw使用raw 模式下訓(xùn)練時(shí)在線提取特征無(wú)需預(yù)先 dump。并行調(diào)度recipe 默認(rèn)使用本地并行cmd.sh如需 PBS/Slurm 集群參考 queue.confqsub 參數(shù)模板與 slurm.conf。數(shù)據(jù)校驗(yàn)data.sh 調(diào)用utils/fix_data_dir.sh與utils/utt2spk_to_spk2utt.pl位于 utils/data保證數(shù)據(jù)目錄一致性。十、小結(jié)egs2/ta_openslr127/asr1是一個(gè)完整、可復(fù)現(xiàn)的低資源泰米爾語(yǔ)端到端 ASR 基線150 小時(shí)語(yǔ)料、BPE-1000 unigram 子詞、E-Branchformer12 層 Transformer6 層混合 CTC/Attentionctc_weight0.3、SpecAugment 三倍速擾動(dòng)增強(qiáng)、內(nèi)部 seq_rnn LM 淺融合最終在官方測(cè)試集上取得WER 16.9% / CER 2.7% / TER 9.1%的成績(jī)。本文所有配置均可從 conf 目錄逐項(xiàng)對(duì)照模型源碼見(jiàn) e_branchformer_encoder.py實(shí)測(cè)結(jié)果記錄于 README.md可直接作為泰米爾語(yǔ) ASR 研究或低資源遷移實(shí)驗(yàn)的出發(fā)點(diǎn)。贊分享人工智能語(yǔ)音音頻深度學(xué)習(xí)NLP【免費(fèi)下載鏈接】espnetEnd-to-End Speech Processing Toolkit項(xiàng)目地址https://gitcode.com/gh_mirrors/es/espnet點(diǎn)擊查看免費(fèi)下載相關(guān)推薦SpeechBrain 端到端語(yǔ)音識(shí)別ASR模板實(shí)戰(zhàn)基于 mini-librispeech 從零訓(xùn)練 CTC seq2seq 識(shí)別器SpeechBrain 端到端語(yǔ)音識(shí)別ASR模板實(shí)戰(zhàn)基于 mini librispeech 從零訓(xùn)練 CTC seq2seq 識(shí)別器 本文是 Spee人工智能深度學(xué)習(xí)語(yǔ)音音頻NLP預(yù)訓(xùn)練告別劇情穿幫AI_NovelGenerator快速完成一整套AI小說(shuō)生成告別劇情穿幫AI_NovelGenerator快速完成一整套AI小說(shuō)生成 寫(xiě)長(zhǎng)篇的煩惱 寫(xiě)短篇還好長(zhǎng)篇寫(xiě)到后面總得翻回前文確認(rèn)設(shè)定伏筆也容易忘。AI_N人工智能大模型AI 應(yīng)用AI 寫(xiě)作RAG桌面應(yīng)用DeepSpeedExamples語(yǔ)音識(shí)別CTC與Attention模型訓(xùn)練DeepSpeedExamples語(yǔ)音識(shí)別CTC與Attention模型訓(xùn)練 引言語(yǔ)音識(shí)別的技術(shù)瓶頸與解決方案 你是否還在為語(yǔ)音識(shí)別模型訓(xùn)練時(shí)的計(jì)算資源不足示例工程創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考