广告 1) 标签
我不确定您所说的“标记”数据集是什么意思。如今,ASR 所需的只是话语和相应的文本(例如搜索 CommonVoice 以获取一些数据)。这取决于您使用的模型,但神经网络不需要任何分割或额外的标签等来完成这项任务。
广告 2) KFold 交叉验证
进行交叉验证永远不会受到伤害。如果您有时间和资源来测试您的模型,请继续使用交叉验证。在我的例子中,我只是让测试集足够大,以确保我得到一个有代表性的单词错误率(WER)。但这主要是因为训练模型 k 次是一项相当大的工作,因为 ASR 模型通常需要一些时间来训练。有一些数据集,例如 Librispeech(和其他),它们已经为您提供了训练/测试/开发拆分。如果您愿意,您可以将您的结果与学术结果进行比较。但是,如果他们使用了大量您无法匹配的计算能力(和数据),这可能会很困难,因此在比较结果时请记住这一点。
广告 3) MFCC 功能
MFCC 工作正常,但根据我的经验以及通过阅读文献等发现的结果,使用对数梅尔谱图在使用神经网络时性能略高一些。测试它们并不是很多工作,因此您可能也想尝试 log-Mel。
广告 4) 和 5) DTW 相同长度
如果您使用神经网络,例如 CTC 模型或 Transducer,甚至是 Transformer,您不需要这样做。音频输入不需要具有相同的长度。只需记住一件事:如果您训练模型,请确保您的批次不包含太多填充。你想使用一些像bucket_by_sequence_length()
.
只需将批量大小定义为“频谱图帧数”,然后使用分桶来真正利用可用的内存。这确实可以对模型的质量产生巨大的影响。我很难学到这一点。
笔记
你没有指定你的用例,所以我只提以下几点:你需要知道你想用你的模型做什么。如果模型应该能够使用用户可以任意长时间交谈的音频流,那么您需要从一开始就知道并朝着这个方向努力。
另一种方法是:“我只需要转录简短的音频片段。 ”例如 10 到 60 秒左右。在这种情况下,您可以简单地训练任何 Transformer,并且由于其注意力机制,您将获得非常好的结果。如果这就是你所需要的,我建议你走那条路,因为这要容易得多。但是,如果您需要能够更长时间地流式传输音频内容,请远离这种情况。
当涉及到流媒体时,事情变得更加复杂。任何纯粹基于编码器-解码器注意力的模型都需要付出很多努力才能完成这项工作。您可以使用 RNN(例如 RNN-T),但这些模型可能会变得非常庞大和缓慢,并且需要额外的努力才能使其可靠(例如语言模型、波束搜索),因为它们缺乏编码器-解码器的关注。还有其他将 Transformer 与 Transducers 结合在一起的风格,但如果您想自己编写所有这些,独自一人,您将承担相当大的任务。
也可以看看
已经有很多代码可供您学习:
hth