《WeNet語音識別實戰(zhàn)》答疑回顧(三)

問 1:dpp init是會自動生成的嗎?需要自己預先touch 嗎?
答:自動生成的。
問 2:請問一下,遠程服務(wù)器docker啟動了,本地如何前端訪問?

答:可以參考https://zhuanlan.zhihu.com/p/462949231
問 3:8k 16bit的wav,計算 cmvn 的時候每個frame是多長?10ms?
答:幀長25ms,幀移10ms
問 4:是不是目前基于aishell預訓練的模型在給定的py腳本下里面是沒辦法流式的?
嘗試改了 encoder的初始化參數(shù) “use_dynamic_chunk”, 推理時能夠走到forward_chunk_by_chunk的分支,但是預測的結(jié)果好像不太正常。
答:如果模型訓練的時候沒有用dynamic chunk,在推理時強行更改配置文件也無法做流式。
問 5:WeNet做長語音識別的策略是什么?源碼好像不能超過20s,如果超過怎么做?
答:超過的話,一個是 embedding 沒法表示,一個是一直不能做 rescore。原理就是識別到足夠長的blank就認為語音結(jié)束,rescore后清空一些狀態(tài),重新開始識別。runtime 的代碼中,超過 20s 就會強制截斷。
問 6:WeNet中用onnx推理提取fbank特征這塊,在triton中用的是kaldifeature的庫,而在recongnize_onnx.py中,用的是torchaudio,是前者比后者有優(yōu)勢嗎?還是因為 torchaudio 對dataloader的適配性比kaldifeature好?
答:特征是相同的,兩者沒有差別。
問 7:那如果有長語音識別需求就需要自己手動裁剪,然后再合并?
答:開啟實時長語音識別選項即可。
問 8:訓了將近40輪損失咋還這么高,是什么情況?

答:可能是學習率問題,在conf下的配置文件中可以調(diào)整lr參數(shù)。
問 9:推理的時候遇到這個問題?

答:確認一下模型的路徑是不是正確。
問 10:圖示錯誤的原因是什么?

加載模型有問題,確認下模型路徑以及模型文件是否正確。
問 11:老師,我0號pt的cv loss 64.88,1號pt的cv loss 63.87多?這對么?我記得上次訓練 0 號的cv loss 63多,1號就到了10點多。當然了,兩次數(shù)據(jù)不同,用的腳本也不同,這次用的是multi cn
答:數(shù)據(jù)和腳本都不同,這個沒有太多對比,可以往后再訓練看下loss的變化。
問 12:用multi cn 訓練了3個pt,cv loss,64 - 63 - 65,,訓練還在繼續(xù)。
這是不是看起來,要收斂不了???
答:可以再繼續(xù)訓練看下loss的變化。
問 13:我切分成8000的chunk, tobytes 發(fā)送, 但是收不到返回是什么原因呀?

答:沒開實時長語音識別。
問 14:在conda環(huán)境下,把python代碼打包成so文件之后,發(fā)現(xiàn)原來文件里 import numpy 報錯,說找不到這個模塊,但是我python import確實正常的
答:如果用的是setup的方式,require要加上numpy的信息。
問 15:WeNet支持多卡訓練嗎?
答:多卡多機都支持。
問 16:請問下為什么流式asr中 不說話的時候好像也會一直會有字輸出?
答:訓練的模型沒有適應噪音,魯棒性不夠,可以嘗試在外面套一個vad。
問 17:為什么無論是用自己編譯的WeNet windows版本,還是直接從github上下載release版本,運行示例的時候都沒有日志輸出,都是直接輸出結(jié)果呢?
這個是通過wsl2安裝了一個ubuntu系統(tǒng),通過set設(shè)置也不行,另外直接使用powerShell 運行還是一樣的結(jié)果。

答:windows 應該用 set 而不是 export,
雖然是 ubuntu 系統(tǒng),但是調(diào)用的還是 windows 的 exe 程序。還有一種方法就是直接在 windows 的環(huán)境變量頁面通過非命令行的方式添加??蓞⒖?span id="s0sssss00s" class="invisible">https://jingyan.baidu.com/article/3c343ff72632df4c3679636c.html,添加后記得重啟命令行工具。
問 18:從github上下載了代碼,僅僅修改數(shù)據(jù)存放位置字段,執(zhí)行時報錯,怎么回事呀?


答:需要手工把這個壓縮文件解壓,stage -1 是download and untar。要跟stage -1的output一致。
問 19:用WeNetspeech的checkpoint做增量訓練,數(shù)據(jù)有40個小時左右。訓練出來的模型效果不如直接發(fā)出來的好,請問還需要更多的數(shù)據(jù)嗎?還是說大概率是訓練方式出錯呢?loss本身是有下降的。
答:應該是數(shù)據(jù)過擬合了,可以查看下test loss的變化。
問 20:Chunk size 16 和 full 的 attention rescoring 解碼結(jié)果 wer相差過大(8%+),該怎么理解這個現(xiàn)象呢,是否可以考慮增加訓練時chunk size 在1-25上的隨機概率,來緩解這個問題?
答:推理時給16的話它還是不能獲取足夠多的上下文信息。
問 21:WeNet在訓練語言模型時需要分詞嗎?ctc的輸出結(jié)果是字 感覺用不到分詞。
答:不需要。
問 22:想請教下unified這篇論文中的two pass指的是什么,是融合了流式和非流式的意思嗎?還是先Nbest然后rescore這種叫two pass?
答:unified是指融合了流式和非流式的意思,其核心是dynamic chunk,two pass是指先做Nbest然后rescore。
問 23:WeNet可以做流式識別,那Kaldi也能做流式識別嗎?
答:當然可以的。
問 24:WeNet中aishell1這個例子用cpu跑和用gpu跑結(jié)果有差別嗎?
答:cpu的速度比較慢,但是解碼結(jié)果應該差距不大。
問 25: run.sh里面,gpu id,跟rank id 有對應關(guān)系么?是什么樣的關(guān)系?
答:可以參考https://mp.weixin.qq.com/s/6FYJ