語(yǔ)音識(shí)別實(shí)戰(zhàn):Microsoft Speech Corpus 40 小時(shí) ASR Recipe 全解析)
人工智能語(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)下載本指南以 egs2/microsoft_speech/asr1/README.md 為核心系統(tǒng)講解 ESPnet2 官方提供的 Microsoft Speech Corpus微軟印度語(yǔ)低資源語(yǔ)音挑戰(zhàn)賽數(shù)據(jù)集泰盧固語(yǔ)Telugu語(yǔ)音識(shí)別 recipe。文章將覆蓋數(shù)據(jù)集背景與引用信息、完整的數(shù)據(jù)準(zhǔn)備流程、三類主流訓(xùn)練配置Conformer HuBERT 前端、Conformer wav2vec2 前端、純 Fbank 基線的源碼級(jí)剖析以及報(bào)告中的 WER/CER/TER 完整評(píng)測(cè)結(jié)果。讀完本文你將掌握如何從零復(fù)現(xiàn)該 recipe、如何理解與調(diào)整每一份 YAML 配置以及如何對(duì)比自監(jiān)督前端與多語(yǔ)言 BPE 在低資源 ASR 上的實(shí)際收益。一、任務(wù)背景Interspeech 2018 低資源 ASR 挑戰(zhàn)賽與 Microsoft Speech Corpus該 recipe 面向的數(shù)據(jù)集是 Microsoft 發(fā)布的印度語(yǔ)語(yǔ)音語(yǔ)料Microsoft Speech Corpus其出處為 Interspeech 2018 低資源自動(dòng)語(yǔ)音識(shí)別挑戰(zhàn)賽Low Resource Automatic Speech Recognition Challenge for Indian Languages。README 中給出了官方引用信息在論文或報(bào)告中引用該數(shù)據(jù)集時(shí)應(yīng)采用以下 BibTeXinproceedings{srivastava2018interspeech, title{Interspeech 2018 Low Resource Automatic Speech Recognition Challenge for Indian Languages.}, author{Srivastava, Brij Mohan Lal and Sitaram, Sunayana and Mehta, Rupesh Kumar and Mohan, Krishna Doss and Matani, Pallavi and Satpal, Sandeepkumar and Bali, Kalika and Srikanth, Radhakrishnan and Nayak, Niranjan}, booktitle{SLTU}, pages{11--14}, year{2018} }README 明確說(shuō)明本 recipe 提供針對(duì)該數(shù)據(jù)集中泰盧固語(yǔ)Telugu代碼te的訓(xùn)練配置語(yǔ)料規(guī)模為40 小時(shí)。這是一個(gè)典型的低資源語(yǔ)音識(shí)別場(chǎng)景訓(xùn)練數(shù)據(jù)量小、語(yǔ)言為非英語(yǔ)、需要借助自監(jiān)督預(yù)訓(xùn)練模型或數(shù)據(jù)增強(qiáng)等手段來(lái)彌補(bǔ)數(shù)據(jù)不足。需要說(shuō)明的是run.sh 第 8 行的注釋表明langte #te, ta即 recipe 本身同時(shí)預(yù)留了泰盧固語(yǔ)te和泰米爾語(yǔ)ta兩種語(yǔ)言的切換能力只需修改lang變量即可切換。二、Recipe 目錄結(jié)構(gòu)與運(yùn)行入口在開(kāi)始復(fù)現(xiàn)之前先整體了解 recipe 的目錄組織以倉(cāng)庫(kù)根目錄為基準(zhǔn)文件/目錄作用egs2/microsoft_speech/asr1/run.sh頂層入口腳本匯總?cè)坑?xùn)練/評(píng)測(cè)參數(shù)并調(diào)用asr.shegs2/microsoft_speech/asr1/asr.shESPnet2 通用 ASR 主流程腳本與 TEMPLATE 一致按 stage 執(zhí)行數(shù)據(jù)準(zhǔn)備→特征→BPE→訓(xùn)練→解碼egs2/microsoft_speech/asr1/db.sh定義語(yǔ)料庫(kù)路徑變量MICROSOFT_SPEECH_CORPUSegs2/microsoft_speech/asr1/local/data.sh數(shù)據(jù)準(zhǔn)備入口下載檢查 調(diào)用 Python 腳本egs2/microsoft_speech/asr1/local/process.py將原始語(yǔ)料轉(zhuǎn)換為 Kaldi 風(fēng)格data/目錄的核心腳本egs2/microsoft_speech/asr1/conf/train_asr.yaml默認(rèn) ASR 配置Conformer HuBERT s3prl 前端egs2/microsoft_speech/asr1/conf/train_lm.yaml語(yǔ)言模型Transformer LM配置egs2/microsoft_speech/asr1/conf/decode_asr.yaml解碼配置egs2/microsoft_speech/asr1/conf/tuning/調(diào)優(yōu)配置集fbank 基線、HuBERT、wav2vec2、LM、解碼等egs2/microsoft_speech/asr1/cmd.sh并行調(diào)度后端本地/隊(duì)列配置egs2/microsoft_speech/asr1/path.sh環(huán)境與 PATH 配置run.sh一鍵訓(xùn)練入口run.sh 完整內(nèi)容如下它是理解整個(gè) recipe 參數(shù)體系的關(guān)鍵#!/usr/bin/env bash set -e set -u set -o pipefail langte #te, ta train_settrain_$(echo ${lang} | tr - _) train_devdev_$(echo ${lang} | tr - _) test_set${train_dev} test_$(echo ${lang} | tr - _) asr_configconf/train_asr.yaml lm_configconf/train_lm.yaml inference_configconf/decode_asr.yaml nbpe200 ./asr.sh \ --ngpu 4 \ --lang ${lang} \ --local_data_opts --lang ${lang} \ --use_lm true \ --lm_config ${lm_config} \ --token_type bpe \ --nbpe $nbpe \ --feats_type raw \ --speed_perturb_factors 0.9 1.0 1.1 \ --asr_config ${asr_config} \ --inference_config ${inference_config} \ --train_set ${train_set} \ --valid_set ${train_dev} \ --test_sets ${test_set} \ --bpe_train_text data/${train_set}/text \ --lm_train_text data/${train_set}/text $各關(guān)鍵參數(shù)說(shuō)明--ngpu 4使用 4 塊 GPU 并行訓(xùn)練README 中 LM 配置注釋也提到 Trained with Nvidia TESLA V100, with 16GM RAM, x4。--lang te目標(biāo)語(yǔ)言同時(shí)傳遞給--local_data_opts供數(shù)據(jù)準(zhǔn)備腳本使用。--token_type bpe--nbpe 200采用 BPE 子詞建模詞表大小 200——這是針對(duì) 40 小時(shí)小語(yǔ)料的典型取值詞表訓(xùn)練文本來(lái)自data/train_te/text。--feats_type raw不預(yù)提取 Fbank直接以原始波形送入網(wǎng)絡(luò)這也是 s3prl 前端配置的前提。--speed_perturb_factors 0.9 1.0 1.1三檔變速擾動(dòng)做數(shù)據(jù)增強(qiáng)可將有效訓(xùn)練數(shù)據(jù)量近似擴(kuò)大 3 倍是低資源場(chǎng)景最常用的增強(qiáng)手段之一。--use_lm true訓(xùn)練 Transformer 語(yǔ)言模型并在解碼階段配合 ngram 進(jìn)行重打分見(jiàn)評(píng)測(cè)標(biāo)簽中的ngram_3gram。--train_set/--valid_set/--test_sets訓(xùn)練集train_te、驗(yàn)證集dev_te、測(cè)試集dev_te test_te。語(yǔ)料路徑配置db.shdb.sh 中定義了變量MICROSOFT_SPEECH_CORPUS默認(rèn)值為空需要用戶自行填寫(xiě)語(yǔ)料實(shí)際存放路徑。注意該數(shù)據(jù)集不提供自動(dòng)下載與標(biāo)注了downloads的語(yǔ)料不同數(shù)據(jù)準(zhǔn)備腳本會(huì)校驗(yàn)指定的目錄結(jié)構(gòu)是否完整。在 CMU TIR 集群環(huán)境下db.sh 還提供了預(yù)配置路徑MS_INDIC_IS18/projects/tir6/general/cnariset/corpora/microsoft_speech_corpus_indian_languages可供參考。三、數(shù)據(jù)準(zhǔn)備流程從原始語(yǔ)料到 Kaldi 風(fēng)格數(shù)據(jù)目錄數(shù)據(jù)準(zhǔn)備由 local/data.sh 驅(qū)動(dòng)核心邏輯如下if [ -z ${MICROSOFT_SPEECH_CORPUS} ]; then log Fill the value of MICROSOFT_SPEECH_CORPUS of db.sh exit 1 fi ... if [ ${stage} -le 0 ] [ ${stop_stage} -ge 0 ]; then log stage1: Download data to ${MICROSOFT_SPEECH_CORPUS} log Download data from the link: https://msropendata.com/datasets/7230b4b1-912d-400e-be58-f84e0512985e log checking if the right directory structure exists if [ -d ${MICROSOFT_SPEECH_CORPUS}/${lang}-in-Train/Audios ] then echo Data directory exists. else echo Error: Directory ${MICROSOFT_SPEECH_CORPUS}/${lang}-in-Train/Audios does not exists. fi fi mkdir -p data mkdir -p data/dev_${lang} mkdir -p data/test_${lang} mkdir -p data/train_${lang} if [ ${stage} -le 1 ] [ ${stop_stage} -ge 1 ]; then log stage2: Preparing data for microsoft_speech_corpus python local/process.py ${MICROSOFT_SPEECH_CORPUS} ${lang} fi腳本要求語(yǔ)料目錄必須包含{lang}-in-Train/Audios子目錄否則報(bào)錯(cuò)退出。數(shù)據(jù)集的原始組織方式為訓(xùn)練側(cè)te-in-Train/含Audios/音頻目錄與transcription.txt轉(zhuǎn)寫(xiě)文件、測(cè)試側(cè)te-in-Test/結(jié)構(gòu)與訓(xùn)練側(cè)一致。process.py數(shù)據(jù)切分與 Kaldi 風(fēng)格轉(zhuǎn)換local/process.py 是數(shù)據(jù)準(zhǔn)備的核心實(shí)現(xiàn)其關(guān)鍵邏輯包括輸入命令行參數(shù)sys.argv[1]語(yǔ)料根路徑、sys.argv[2]語(yǔ)言代碼據(jù)此構(gòu)造訓(xùn)練/測(cè)試音頻目錄與轉(zhuǎn)寫(xiě)文件路徑train_folder f{microsoft_speech_corpus_path}/{lang}-in-Train test_folder f{microsoft_speech_corpus_path}/{lang}-in-Test train_audio_folder os.path.join(train_folder, Audios) test_audio_folder os.path.join(test_folder, Audios)訓(xùn)練/驗(yàn)證隨機(jī)切分從 40 小時(shí)訓(xùn)練集中隨機(jī)抽取音頻累計(jì)時(shí)長(zhǎng)達(dá)到 7200 秒2 小時(shí)為止作為開(kāi)發(fā)集dev剩余約 37 小時(shí)作為訓(xùn)練集——與腳本注釋 randomly split the training set of 40 hours to 37 train and 3 dev 一致def get_dev_split(): train_audio_files os.listdir(train_audio_folder) dev_split set() dur 7200 while dur 0: f random.choice(train_audio_files) while f in dev_split: f random.choice(train_audio_files) wav_file os.path.join(train_audio_folder, f) dev_split.add(f) dur - get_duration(wav_file) return dev_split音頻時(shí)長(zhǎng)通過(guò) Python 標(biāo)準(zhǔn)庫(kù)wave模塊讀取幀數(shù)除以采樣率得到。ID 與轉(zhuǎn)寫(xiě)處理解析transcription.txt每行文件名\t轉(zhuǎn)寫(xiě)文本為每條話語(yǔ)生成全局遞增的id_XXXXXXX7 位補(bǔ)零形式的話語(yǔ) ID并將文件名 .wav映射到實(shí)際音頻路徑。輸出 Kaldi 風(fēng)格目錄為data/train_te、data/dev_te、data/test_te三個(gè)目錄分別生成text話語(yǔ) ID 轉(zhuǎn)寫(xiě)文本spk2utt/utt2spk每條話語(yǔ)作為獨(dú)立說(shuō)話人id idutt2gender統(tǒng)一標(biāo)記為m語(yǔ)料未提供性別標(biāo)注wav.scp話語(yǔ) ID 音頻絕對(duì)路徑。生成的數(shù)據(jù)目錄將直接供asr.sh的后續(xù) stage特征收集、BPE 訓(xùn)練、模型訓(xùn)練、解碼使用。四、三種 ASR 訓(xùn)練配置詳解源碼級(jí)剖析README 的 RESULTS 部分共報(bào)告了三個(gè)訓(xùn)練實(shí)驗(yàn)。下面逐一剖析其配置文件的底層設(shè)計(jì)這些文件全部位于 egs2/microsoft_speech/asr1/conf/ 下。4.1 默認(rèn)配置Conformer HuBERT 自監(jiān)督前端默認(rèn)conf/train_asr.yaml與 conf/tuning/train_asr_conformer5_hubert.yaml 完全一致采用s3prl 框架加載 HuBERT-Large 預(yù)訓(xùn)練模型作為前端這是低資源場(chǎng)景下最關(guān)鍵的架構(gòu)選擇freeze_param: [ frontend.upstream ] frontend: s3prl frontend_conf: frontend_conf: upstream: hubert_large_ll60k # 更換 upstream 時(shí)需同步修改 preencoder 的 input_size download_dir: ./hub multilayer_feature: true preencoder: linear preencoder_conf: input_size: 1024 # HuBERT-Large 的隱藏層維度 output_size: 80要點(diǎn)解讀freeze_param: [frontend.upstream]凍結(jié) HuBERT 預(yù)訓(xùn)練權(quán)重訓(xùn)練時(shí)只更新下游 Conformer/Decoder 及 preencoder 參數(shù)既能大幅降低顯存與訓(xùn)練成本也避免小語(yǔ)料上微調(diào)破壞預(yù)訓(xùn)練表征。multilayer_feature: trues3prl 前端輸出多層 Transformer 特征的加權(quán)融合而非只用頂層HuBERT-LargeLL60K 預(yù)訓(xùn)練每幀輸出 1024 維向量。preencoder線性投影將 1024 維自監(jiān)督特征壓縮到 80 維作為下游 Conformer 的輸入充當(dāng)特征適配層。下游主干與聯(lián)合訓(xùn)練配置encoder: conformer encoder_conf: output_size: 256 attention_heads: 4 linear_units: 2048 num_blocks: 12 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.0 input_layer: conv2d2 normalize_before: true macaron_style: true rel_pos_type: latest pos_enc_layer_type: rel_pos selfattention_layer_type: rel_selfattn activation_type: swish use_cnn_module: true cnn_module_kernel: 15 decoder: 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.0 src_attention_dropout_rate: 0.0 ctc_conf: ignore_nan_grad: true model_conf: ctc_weight: 0.3 lsm_weight: 0.1 length_normalized_loss: false extract_feats_in_collect_stats: falseConformer 編碼器12 層、隱藏維 256、前饋 2048、4 頭注意力使用相對(duì)位置編碼rel_pos、Macaron 風(fēng)格 FFN、Swish 激活與 CNN 模塊kernel 15input_layer: conv2d2對(duì)輸入做兩層卷積下采樣。Transformer 解碼器6 層標(biāo)準(zhǔn)自回歸解碼器?;旌?CTC/Attention 訓(xùn)練ctc_weight: 0.3在 CTC 與注意力交叉熵之間取 0.3/0.7 權(quán)重lsm_weight: 0.1為標(biāo)簽平滑系數(shù)ignore_nan_grad: true用于穩(wěn)定 CTC 訓(xùn)練。extract_feats_in_collect_stats: false在 collect statsstage 10階段不真正前向運(yùn)行 s3prl 前端提取特征而是生成 dummy 統(tǒng)計(jì)文件避免統(tǒng)計(jì)階段耗時(shí)配置文件注釋已明確說(shuō)明。優(yōu)化與增強(qiáng)配置optim: adam optim_conf: lr: 0.005 scheduler: warmuplr scheduler_conf: warmup_steps: 30000 batch_type: numel batch_bins: 2000000 accum_grad: 4 max_epoch: 40 patience: 5 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, 30] num_freq_mask: 2 apply_time_mask: true time_mask_width_range: [0, 40] num_time_mask: 2Adam 優(yōu)化器 warmuplr預(yù)熱 3 萬(wàn)步學(xué)習(xí)率調(diào)度batch_bins: 2000000按元素總數(shù)動(dòng)態(tài)組批accum_grad: 4梯度累積等效擴(kuò)大 batch。SpecAugment 啟用時(shí)間扭曲與頻域/時(shí)域隨機(jī)掩碼是低資源 ASR 的標(biāo)配正則手段。4.2 對(duì)比配置一Conformer wav2vec2 自監(jiān)督前端conf/tuning/train_asr_conformer_wav2vec2.yaml 將前端替換為wav2vec2-largeLL60K 預(yù)訓(xùn)練其余結(jié)構(gòu)類似但存在幾處值得注意的差異frontend: s3prl frontend_conf: frontend_conf: upstream: wav2vec2_large_ll60k download_dir: ./hub multilayer_feature: True preencoder: linear preencoder_conf: input_size: 1024 output_size: 80 encoder: conformer encoder_conf: output_size: 256 attention_heads: 4 linear_units: 1024 # 比 HuBERT 配置更窄 ... cnn_module_kernel: 31 # 更大的 CNN kernel optim: adam optim_conf: lr: 0.002 weight_decay: 1.0e-06 scheduler: warmuplr scheduler_conf: warmup_steps: 5000 max_epoch: 50 patience: 5 accum_grad: 2 keep_nbest_models: 10與 HuBERT 配置的關(guān)鍵區(qū)別wav2vec2-large 前端同樣輸出 1024 維多層融合特征通過(guò)線性 preencoder 降到 80 維freeze_param同樣凍結(jié)frontend.upstream。編碼器瘦身linear_units: 1024HuBERT 配置為 2048CNN kernel 擴(kuò)大到 31優(yōu)化差異學(xué)習(xí)率 0.002 且?guī)eight_decay: 1e-6warmup 步數(shù)僅 5000accum_grad: 2最大 50 epoch保留 10 個(gè)最佳模型。4.3 對(duì)比配置二純 Fbank 基線 Conformer5conf/tuning/train_asr_conformer5.yaml 是不使用自監(jiān)督前端的傳統(tǒng) Fbank 基線對(duì)應(yīng)結(jié)果表中的asr_train_asr_conformer5_raw_multilingual_bpe400_sp與 README 中 conformer5 命名來(lái)源frontend: default frontend_conf: n_fft: 512 win_length: 400 hop_length: 160 encoder: conformer encoder_conf: input_layer: conv2d num_blocks: 12 linear_units: 2048 dropout_rate: 0.1 output_size: 256 attention_heads: 4 attention_dropout_rate: 0.0 pos_enc_layer_type: rel_pos selfattention_layer_type: rel_selfattn activation_type: swish macaron_style: true use_cnn_module: true cnn_module_kernel: 15 decoder: transformer decoder_conf: input_layer: embed num_blocks: 6 linear_units: 2048 dropout_rate: 0.1 model_conf: ctc_weight: 0.3 lsm_weight: 0.1 length_normalized_loss: false optim: adam accum_grad: 1 grad_clip: 3 max_epoch: 50 optim_conf: lr: 4.0 scheduler: noamlr scheduler_conf: model_size: 256 warmup_steps: 25000 batch_type: numel batch_bins: 2500000 keep_nbest_models: 10 use_amp: true與自監(jiān)督配置形成鮮明對(duì)比前端為 ESPnet2 內(nèi)置default短時(shí)傅里葉 Fbank512 點(diǎn) FFT、400 窗長(zhǎng)、160 幀移無(wú)需下載任何預(yù)訓(xùn)練模型優(yōu)化器采用lr: 4.0noamlrNoam 式調(diào)度model_size: 256與編碼器維度一致、warmup 25000 步use_amp: true啟用混合精度訓(xùn)練batch_bins 增大到 2500000accum_grad: 1。4.4 多語(yǔ)言 BPE400 配置結(jié)果表中的第三個(gè)實(shí)驗(yàn)asr_train_asr_conformer5_raw_multilingual_bpe400_sp使用BPE 詞表 400multilingual_bpe400且其解碼標(biāo)簽中出現(xiàn)lm_train_lm_transformer_mu_bpe400mu即 multilingual 的縮寫(xiě)。從命名與解碼標(biāo)簽可以推斷該配置在純 Fbank 基線上將子詞詞表從 200 擴(kuò)大到 400并配合在更大規(guī)模多語(yǔ)言文本上訓(xùn)練的 Transformer LM 與 3gram 進(jìn)行解碼重打分。這與前兩個(gè)配置te_bpe200 單語(yǔ)teLM形成詞表與語(yǔ)言模型層面的對(duì)照實(shí)驗(yàn)。五、語(yǔ)言模型與解碼配置5.1 Transformer 語(yǔ)言模型train_lm.yamlconf/train_lm.yaml 使用 16 層 Transformer LMlm: transformer lm_conf: pos_enc: null embed_unit: 128 att_unit: 512 head: 8 unit: 2048 layer: 16 dropout_rate: 0.1 grad_clip: 5.0 batch_type: numel batch_bins: 350000 accum_grad: 2 max_epoch: 25 optim: adam optim_conf: lr: 0.001 scheduler: warmuplr scheduler_conf: warmup_steps: 25000 best_model_criterion: - - valid - loss - min keep_nbest_models: 10嵌入維 128、注意力維 512、8 頭、前饋 2048pos_enc: null說(shuō)明 LM 內(nèi)部不額外使用位置編碼層由注意力結(jié)構(gòu)自行處理順序信息以驗(yàn)證集 loss 最小為模型選擇準(zhǔn)則保留 10 個(gè)最佳 checkpoint 用于后續(xù)平均LM 訓(xùn)練文本同樣來(lái)自data/train_te/text見(jiàn) run.sh 的--lm_train_text。5.2 解碼配置decode_asr.yaml / decode_transformer.yamlconf/decode_asr.yaml與 conf/tuning/decode_transformer.yaml 內(nèi)容一致batch_size: 1 beam_size: 10 penalty: 0.0 maxlenratio: 0.0 minlenratio: 0.0 ctc_weight: 0.5 lm_weight: 0.3beam_size 10的集束搜索maxlenratio/minlenratio均為 0.0不限制輸出長(zhǎng)度比例ctc_weight: 0.5解碼時(shí)在注意力得分與 CTC 得分之間按 0.5/0.5 加權(quán)聯(lián)合打分lm_weight: 0.3Transformer LM 分?jǐn)?shù)權(quán)重 0.3。從結(jié)果表的解碼標(biāo)簽可還原出完整的解碼管線decode_transformer_lm_lm_train_lm_transformer_te_bpe200_valid.loss.ave ngram_ngram_3gram asr_model_valid.acc.ave即使用transformer 架構(gòu) LM 的平均化 checkpointvalid.loss.ave作為解碼語(yǔ)言模型疊加3gram ngram 重打分最終 ASR 模型采用驗(yàn)證集 acc 最優(yōu) checkpoint 的平均valid.acc.ave。這揭示了低資源場(chǎng)景下Transformer LM ngram 淺融合重打分的完整推理策略。六、實(shí)驗(yàn)環(huán)境與完整評(píng)測(cè)結(jié)果6.1 實(shí)驗(yàn)環(huán)境README 記錄了生成該結(jié)果時(shí)的運(yùn)行環(huán)境這些信息用于結(jié)果的可復(fù)現(xiàn)性核對(duì)項(xiàng)目值日期Tue Mar 22 20:03:41 EDT 2022Python3.9.7 (GCC 7.5.0)ESPnetespnet 0.10.7a1PyTorchpytorch 1.10.1Git hashb274c4ea66c59600599a4a340296bb15412b3a9ccommit 日期 2022-03-026.2 實(shí)驗(yàn)一Conformer HuBERTte_bpe200速度擾動(dòng)實(shí)驗(yàn)名asr_train_asr_conformer5_hubert_raw_te_bpe200_spWER詞錯(cuò)誤率datasetSntWrdCorrSubDelInsErrS.Errdecodetransformer_lm 3gram valid.acc.ave/dev_te33821835275.821.52.73.227.361.7decodetransformer_lm 3gram valid.acc.ave/test_te30402841379.518.52.12.723.278.1CER字符錯(cuò)誤率datasetSntWrdCorrSubDelInsErrS.Errdecode /dev_te338213615694.82.72.52.17.361.7decode /test_te304022941996.11.91.91.75.678.1TER詞義元錯(cuò)誤率datasetSntWrdCorrSubDelInsErrS.Errdecode /dev_te33827716389.86.53.72.012.361.7decode /test_te304013303392.64.82.61.79.178.16.3 實(shí)驗(yàn)二Conformer wav2vec2te_bpe200速度擾動(dòng)實(shí)驗(yàn)名asr_train_asr_conformer_wav2vec2_raw_te_bpe200_spWERdatasetSntWrdCorrSubDelInsErrS.Errdecodetransformer_lm 3gram valid.acc.ave/dev_te33821835275.621.62.82.827.360.4decodetransformer_lm 3gram valid.acc.ave/test_te30402841378.519.22.22.524.078.6CERdatasetSntWrdCorrSubDelInsErrS.Errdecode /dev_te338213615694.92.62.52.07.160.4decode /test_te304022941995.92.02.11.65.778.6TERdatasetSntWrdCorrSubDelInsErrS.Errdecode /dev_te33827716390.06.43.62.011.960.4decode /test_te304013303392.25.02.81.79.478.66.4 實(shí)驗(yàn)三Conformer5 Fbank多語(yǔ)言 BPE400速度擾動(dòng)實(shí)驗(yàn)名asr_train_asr_conformer5_raw_multilingual_bpe400_spWERdatasetSntWrdCorrSubDelInsErrS.Errdecodetransformer_lm(mu_bpe400) 3gram valid.acc.ave/dev_te33821835277.320.12.52.925.556.6decodetransformer_lm(mu_bpe400) 3gram valid.acc.ave/test_te30402841379.418.42.22.523.278.0CERdatasetSntWrdCorrSubDelInsErrS.Errdecode /dev_te338213615695.32.42.21.96.656.6decode /test_te304022941996.02.02.01.65.678.0TERdatasetSntWrdCorrSubDelInsErrS.Errdecode /dev_te33827606490.76.13.21.911.256.6decode /test_te304013201992.54.92.61.79.178.06.5 結(jié)果解讀從三組數(shù)據(jù)可以得出以下幾點(diǎn)基于報(bào)告事實(shí)的觀察測(cè)試集表現(xiàn)三種配置在 test_te 上的 WER 分別為23.2%HuBERT、24.0%wav2vec2、23.2%多語(yǔ)言 BPE400字符錯(cuò)誤率 CER 均低至5.6%–5.7%區(qū)間??紤]到這是僅 40 小時(shí)訓(xùn)練數(shù)據(jù)的低資源場(chǎng)景整體識(shí)別水平相當(dāng)可觀。自監(jiān)督前端 vs 傳統(tǒng) FbankHuBERT 與 wav2vec2 前端在同樣te_bpe200條件下與 Fbank 基線多語(yǔ)言 BPE400 條件測(cè)試 WER 持平或更優(yōu)且在開(kāi)發(fā)集上 CER7.3%/7.1% vs 6.6%相近說(shuō)明自監(jiān)督表征在低資源下能有效彌補(bǔ)數(shù)據(jù)不足。多語(yǔ)言 BPE 的增益Fbank 基線上將 BPE 詞表從 200 擴(kuò)到 400 并配合多語(yǔ)言 LM在 dev_te 上取得三組實(shí)驗(yàn)最低 WER25.5%與最低句錯(cuò)誤率 S.Err56.6%測(cè)試集與 HuBERT 配置持平。字符級(jí)錯(cuò)誤極低三組實(shí)驗(yàn)的 CER5.6%–7.3%均顯著低于 WER23.2%–27.3%說(shuō)明泰盧固語(yǔ)作為音節(jié)文字語(yǔ)言模型在字符層面已經(jīng)相當(dāng)準(zhǔn)確主要錯(cuò)誤集中在詞切分/詞義層面TER 介于 9.1%–12.3%。七、完整復(fù)現(xiàn)步驟在滿足 ESPnet2 安裝要求的環(huán)境中參考 doc/installation.md 與 doc/espnet2_tutorial.md按以下步驟復(fù)現(xiàn)# 1. 進(jìn)入 recipe 目錄 cd egs2/microsoft_speech/asr1 # 2. 填寫(xiě)語(yǔ)料路徑編輯 db.sh設(shè)置 MICROSOFT_SPEECH_CORPUS 指向語(yǔ)料根目錄 # 語(yǔ)料需包含 te-in-Train/Audios、te-in-Test/Audios 及對(duì)應(yīng)的 transcription.txt # 3. 檢查調(diào)度后端配置cmd.sh本地多卡或 Slurm/PBS 集群 # 4. 一鍵運(yùn)行完整流程數(shù)據(jù)準(zhǔn)備 → BPE → LM 訓(xùn)練 → ASR 訓(xùn)練 → 解碼 → 評(píng)分 ./run.sh # 5. 如需切換語(yǔ)言為泰米爾語(yǔ) ./run.sh --lang ta # 6. 如需切換訓(xùn)練配置為 wav2vec2 前端或 Fbank 基線 ./run.sh --asr_config conf/tuning/train_asr_conformer_wav2vec2.yaml ./run.sh --asr_config conf/tuning/train_asr_conformer5.yaml說(shuō)明與注意事項(xiàng)默認(rèn)配置需要從 Hugging Face hub 下載 HuBERT-LargeLL60K權(quán)重至./hub由frontend_conf.download_dir指定wav2vec2 配置同理若網(wǎng)絡(luò)受限可提前手動(dòng)放置預(yù)訓(xùn)練權(quán)重。MICROSOFT_SPEECH_CORPUS變量為空時(shí) local/data.sh 會(huì)直接退出并提示填寫(xiě)因此必須先修改 db.sh 再運(yùn)行。默認(rèn)使用 4 塊 GPU--ngpu 4單卡環(huán)境可改為--ngpu 1并適當(dāng)調(diào)小batch_bins。速度擾動(dòng)0.9/1.0/1.1會(huì)創(chuàng)建三倍數(shù)量的訓(xùn)練數(shù)據(jù)若磁盤緊張可關(guān)閉--speed_perturb_factors 但會(huì)損失部分效果。結(jié)果復(fù)現(xiàn)以 egs2/microsoft_speech/asr1/README.md 記錄的 espnet 0.10.7a1 PyTorch 1.10.1 環(huán)境為基準(zhǔn)不同版本/硬件下指標(biāo)可能存在合理浮動(dòng)。八、總結(jié)egs2/microsoft_speech/asr1是 ESPnet2 中極具代表性的低資源 ASR recipe它以 Interspeech 2018 挑戰(zhàn)賽的微軟印度語(yǔ)語(yǔ)料泰盧固語(yǔ) 40 小時(shí)為對(duì)象示范了自監(jiān)督前端HuBERT/wav2vec2 Conformer/Transformer 混合 CTC-Attention BPE 子詞 速度擾動(dòng) SpecAugment Transformer LM/ngram 重打分這一整套現(xiàn)代低資源語(yǔ)音識(shí)別技術(shù)棧。README 報(bào)告的三組實(shí)驗(yàn)表明在測(cè)試集上HuBERT 前端與多語(yǔ)言 BPE400 配置均達(dá)到約 23% 的 WER 與約 5.6% 的 CER為同樣面臨小語(yǔ)種、少數(shù)據(jù)場(chǎng)景的研究與工程實(shí)踐提供了可靠的基線參考。如需進(jìn)一步深入研究可對(duì)照 ESPnet2 主流程腳本 egs2/TEMPLATE/asr1/asr.sh 理解 stage 流水線或參考同一語(yǔ)料族的其他印度語(yǔ) recipe如egs2/ms_indic_18、egs2/babel進(jìn)行跨語(yǔ)種對(duì)比實(shí)驗(yà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)推薦ESPnet OGI Kids Speech ASR 實(shí)戰(zhàn)Branchformer-Transformer 兒童語(yǔ)音識(shí)別 Recipe 全解析ESPnet OGI Kids Speech ASR 實(shí)戰(zhàn)Branchformer Transformer 兒童語(yǔ)音識(shí)別 Recipe 全解析 本文基于 ES人工智能語(yǔ)音音頻深度學(xué)習(xí)NLPESPnet2 盧旺達(dá)語(yǔ)KinyarwandaTTS Recipe 實(shí)戰(zhàn)基于 LJSpeech 遷移學(xué)習(xí)的 Tacotron 2 低資源語(yǔ)音合成ESPnet2 盧旺達(dá)語(yǔ)KinyarwandaTTS Recipe 實(shí)戰(zhàn)基于 LJSpeech 遷移學(xué)習(xí)的 Tacotron 2 低資源語(yǔ)音合成 本指南以人工智能語(yǔ)音音頻深度學(xué)習(xí)NLPESPnet2 瑞士法語(yǔ)多音詞語(yǔ)料 ASR 實(shí)戰(zhàn)Conformer 端到端語(yǔ)音識(shí)別 Recipe 與結(jié)果復(fù)盤ESPnet2 瑞士法語(yǔ)多音詞語(yǔ)料 ASR 實(shí)戰(zhàn)Conformer 端到端語(yǔ)音識(shí)別 Recipe 與結(jié)果復(fù)盤 本篇基于 ESPnet 倉(cāng)庫(kù)中 egs2/pol人工智能語(yǔ)音音頻深度學(xué)習(xí)NLP上一篇英雄聯(lián)盟Akari助手讓你像職業(yè)選手一樣打游戲的智能神器下一篇ImageStrike一站式解決18種圖像隱寫(xiě)挑戰(zhàn)的終極CTF安全工具創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考