《WeNet语音识别实战》答疑回顾(二)

问 1:这个热词文件,有行数限制么?比如:3万行,可以么?
答:没有限制,但是多了效果不一定好。
问 2:热词输出带上 context 的标志了,是不是通过参数可以控制?还是要改下代码,去掉?
答:可以看一下 decoder/http://context_graph.cc
后续新版的热词不会更改识别结果,而是返回识别结果的同时,额外返回识别到的热词列表,可以关注一下。
问 3:我们测试websocket server 在高并发连接情况下出现连接慢的情况,这个是同时100个ws连接下出现的。这个有什么好的解决办法吗?
答:可以尝试一下grpc。
问 4:目前如果用WeNet,如果要使用一台服务器支持100个并发,这样需要什么要配置才能满足要求?
答:16c应该就能满足,在虚拟机上32c可以实现,实时内存3G左右,如果rtf 按 0.2 算的话,一核能搞定 5 并发,可以具体测一下 rtf。
问 5:conf中shuffle和sort为什么不冲突,而且注解说sort size必须小于shuffle size
答:目的不一样,sort目的是使一个batch中的wav数据长度一致。shuffle是打乱整个数据集中数据的顺序。
问 6:sort是让一个batch内的音频按顺序排列吗?
答:通过排序使batch中音频数据长度差距不大。
问 7:最后一个模型量化,在x86上也是有必要的吗?速度会提升多少?
答:x86略微改善,android提升两倍。具体RTF实验结果在WeNet第一版本论文中有。
问 8:这里用conv2d做降采样的原理是什么?为什么用两个conv2d,第一次conv2d通道是从1->odim,第二次conv2d从odim->odim?第一次通道数为什么要改变?


答:2d卷积用stride=2,就可以把原来的W*H的输入变为W/2*H/2的输入。就降采样了。
多个通道有多个卷积核,可以处理更多细节。
也可以不变,你就一直用1个channel也行。为啥图像一开始是3个channel,后面channel就变成32或者更大,一个道理。
问 9:实战课程AIshell-1模型训练,到stage4 neural network training训练的时候报了这个runtime 的错,是什么原因?

答:pytorch版本小于1.10.0
问 10:单并发,用的WeNetspeech离线大模型以及libtorch1.10,rescore和search都在500ms+,,为什么这么慢呢?一般TLG有多大呀?语言模型大小会很影响速度的吧?
答:Search很快,rescoring一般100~200ms,WeNetSpeech模型很大,这个时间和机器性能也有关系,语言模型大小不太影响速度。
问 11:aishell example运行stage 4,遇到这个报错,请问是什么问题?

答:使用 pytorch 1.10
问 12:如果想要在WeNet放出来的checkpoint模型u2pp_conformer_exp上增量训练,是要用WeNetspeech/run.sh, 还是可以用aishell/run.sh呢?还是说将下载的ckpt/train.yaml放到WeNetspeech/conf里面,然后跑WeNet speech/run.sh ?
答:都可以,但需要修改配置文件和模型匹配,可能也需要调整学习率等参数,建议尽量使用WeNetspeech对应的脚本。
问 13:模型测试时,使用的average model,这是什么方法?有没有参考资料。
答案:可以参考https://theoreticalecology.wordpress.com/2018/05/14/model-averaging-in-ecology-a-review-of-bayesian-information-theoretic-and-tactical-approaches-for-predictive-inference/
问 14:我想训中英文混合的模型,是不是multi cn,是最好的模版?
答:multi_cn是将开源的数据集做整合,基于此调试的相关参数达到模型最优。
问 15:WeNetspeech数据集的采集处理脚本代码,有没有开源呢?能否用这个代码自己去采集数据?
答:不开源。
问 16:用了aishell的数据集报这种问题的原因是什么?

答:脚本中的stage0的download_and_untar 里会自动解压,手动下载的数据需要自己解压。
问 17:stage1这个报错是为什么?
sudo了一下,conda,pytorch环境都已经按要求配置好了。


答:错误提示没有这个目录下创建文件的权限,用“sudo chmod -R 777 目录”命令更改文件夹权限。
问 18:想着用自己电脑训模型,理论上可以吗?
答:理论上,pytorch是支持cpu训练的,
把代码的device从gpu改成cpu 除了慢应该是能跑。
问 19:请问cmake -B build的时候报这个错,大家有遇到的吗?

答:请用 msvc,而不是 mingw
问 20:配置了msvc和cmake,但是这里git默认用MinGW64,如何修改?
答:看环境变量的顺序,msvc 的 cl 也要添加到环境变量。
问 21:配置了git config --global http.https://github.com.proxy http://127.0.0.1:10809还是下载不了,是什么原因呢?
答:可以参考https://github.com/shadowsocks/shadowsocks-windows/issues/1489
问 22:在使用websocket_server_main的时候发现内存会随请求数不断增长,但是当识别任务结束连接断开的时候内存并未被释放,这大概是哪部分代码的引起的呢?
答:不是WeNet的问题,是libtorch和onnx内部的内存管理机制,可以在必要的地方强制free libtorch官方github里有相应issues。
问 23:执行./Debug/decoder_main.exe --help出现这样的错误,说找不到c10.dll,大佬们怎么解决呀?
我把本地的c10.dll放进去又会出现其他dll找不到,而且c10.dll就在build目录下。

答:需要处于 build 目录下。
问 24:单机多卡训练,WeNet的train.py总是在init_process_group就不往前了,是有什么特殊运行方式呢?

答:需要删除 ddp_init
问 25: 想问一下 加语言模型后转译结果都是生僻字,是什么原因呢?


答:检查一下 words.txt,应该用语言模型对应的词典。

