精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。锐英源软件对经典开源项目有大量翻译,翻译内容技术层次较高,对初学者有深究意义。本文也是解决问题中查到的线索,有类似问题的朋友可以联系交流。有幸浏览到的朋友请关注头条号,可以获取最新更新。致谢kaldi开源团队
现在,我正在尝试在 Kaldi 中运行 LSTM。我从 github 获得的代码已经被 Karel NN 中的其他人实现了。我有关于 FRAME_ACCURACY 的问题。我在 Karel NN 中看到 LSTM 的 FRAME_ACCURACY 高于 DNN 基线的 FRAME_ACCURACY 的结果。但是 LSTM 的 WER 低于 DNN 的 WER。
这是 DNN 的 FRAME_ACCURACY:FRAME_ACCURACY >> 82.0806% <<(最后一次迭代)(WER% 1.60)
,这是 LSTM 的 FRAME_ACCURACY:FRAME_ACCURACY >> 92.0364% <<(最后一次迭代)(WER% 17)
也许有人可以就这个问题提出建议。
对于经典的前馈 DNN,帧精度取决于输入上下文的长度: 典型行为是“更长的上下文 - > 更高的 FRAME_ACCURACY”,看起来像RM 数据库上的数字,也许您也可以比较不同的DB,或使用一元图。你能把指向github存储库的指针发给我看看代码吗?
最近我在使用 kaldi-lstm 版本(谷歌版本),发生了同样的问题……LSTMP 的帧精度比 DNN 低得多,而 WER更糟……,谁能给我有些见识?
我猜你的意思是帧精度要好得多,但 WER更糟。这在看到较长时间上下文的模型中很正常。
这似乎很正常,您通常可以使用 LSTM 获得更好的帧精度,而您的 WER 则在旧的附近......
在此处查看 Hasim 的论文:http://arxiv.org/pdf/1402.1128v1.pdf。他们在帧精度上的改进也比 WER 大得多。另外,请确保您不要过度训练。
顺便说一句,我还没有尝试过那个特定的实现,所以它也可能是那个实现的特别之处。但总的来说,我认为您会从 LSTM 中看到更高的帧精度。
我已经阅读了那篇论文,看到了 LSTM 的 WER 结果,它比 DNN 和 RNN 更好。但是在我的实现中,LSTM的WER比DNN和RNN差。
即使对于 LSTM 模型,我也使用 nnet-forward 对模型进行解码以进行测试。也许这可能是 LSTM 的 WER 比 DNN 差的一个问题。
我怀疑您正在使用资源管理。这是一个非常小的语料库
,你不能真正相信它的结果。涉及 DNN 的事物往往与规模有关。你应该使用更多的数据。
此外,任何使用更多时间上下文的方法都会有更好的帧精度,但可能也可能没有更好的 WER。
顺便说一句,由于现在对 LSTM 很感兴趣, 如果您能贡献一个示例脚本来展示如何使用该外部工具,人们可能会很感激。
我很高兴分享代码。我怎样才能做到这一点?实际上,我从以下链接获得了关于实现 LSTM 的代码:https://github.com/dophist/kaldi-lstm我只是让它可以在我的 kaldi 版本中运行并创建 shell 脚本来运行 LSTM。
正如您所提到的,如何确保模型不会过度训练?
检查过度训练的正常方法是查看训练和验证目标函数和/或帧精度,看看有多少差异。在 nnet2 设置中,这些位于compute_prob_train.XX.log 和 compute_prob_valid.XX.log 中。验证目标函数比训练好是正常的,但也不过分好(例如,对数似然的差异不应该超过 1.5 左右)。
---------------------翻译分隔线---------------
上面讨论时间久了,我在2021年粗略看了kaldi的lstm,是有lstm脚本的,但是wsj方案下没有run_lstm.sh,但是有lstm目录,里面的脚本文件指向train_rnn.py,看来kaldi也是向pytorch看齐,上层用python,底层用C++。