【问题标题】:Speech Recognition with MFCC and DTW使用 MFCC 和 DTW 进行语音识别
【发布时间】:2021-02-18 16:52:58
【问题描述】:

所以,基本上我有大量基于单词的数据集。 每个数据绝对有不同的时间长度。

这是我的方法:

  1. 标记给定的数据集
  2. 对训练数据 (80%) 和测试数据 (20%) 使用分层 KFold 拆分数据
  3. 使用 MFCC 提取幅度、频率和时间
  4. 由于从 MFCC 提取的每个数据的时间序列都不同,我想使用 DTW 使所有数据的时间维度长度完全相同。
  5. 然后我将使用 DTW 数据通过神经网络对其进行训练。

我的问题是:

  1. 我的方法(尤其是第四步)是否正确?
  2. 如果我的方法是正确的,如何使用 DTW 将每个音频转换为相同的长度? 因为基本上我只能比较 MFCC 数据的两个音频,当我尝试更改为其他音频数据时,长度的结果将完全不同。

【问题讨论】:

    标签: python speech-recognition speech-to-text mfcc dtw


    【解决方案1】:

    广告 1) 标签

    我不确定您所说的“标记”数据集是什么意思。如今,ASR 所需要的只是话语和相应的文本(例如搜索 CommonVoice 以获取一些数据)。这取决于您使用的模型,但神经网络不需要任何分割或额外的标签等来完成这项任务。

    广告 2) KFold 交叉验证

    进行交叉验证永远不会受到伤害。如果您有时间和资源来测试您的模型,请继续使用交叉验证。在我的例子中,我只是让测试集足够大,以确保我得到一个有代表性的单词错误率(WER)。但这主要是因为训练模型 k 次是一项相当大的工作,因为 ASR 模型通常需要一些时间来训练。有一些数据集,例如 Librispeech(和其他),它们已经为您提供了训练/测试/开发拆分。如果您愿意,您可以将您的结果与学术结果进行比较。但是,如果他们使用了大量您无法匹配的计算能力(和数据),这可能会很困难,因此在比较结果时请记住这一点。

    广告 3) MFCC 功能

    MFCC 工作正常,但根据我的经验以及通过阅读文献等发现的结果,使用 log-Mel-spectrogram 使用神经网络的性能略高一些。测试它们的工作量并不大,因此您可能也想尝试 log-Mel。

    广告 4) 和 5) 相同长度的 DTW

    如果您使用神经网络,例如CTC 模型或 Transducer,甚至是 Transformer,您不需要这样做。音频输入不需要具有相同的长度。只需记住一件事:如果您训练模型,请确保您的批次不包含太多填充。你想使用一些像bucket_by_sequence_length()这样的分桶。

    只需将批量大小定义为“频谱图帧数”,然后使用分桶来真正利用您可用的内存。这确实可以对模型的质量产生巨大的影响。我很难学到这一点。

    注意

    你没有指定你的用例,所以我只提以下几点:你需要知道你想用你的模型做什么。如果模型应该能够使用音频流 s.t.用户可以说任意长的时间,你需要从一开始就知道并朝着这个方向努力。

    另一种方法是:“我只需要转录简短的音频片段。”例如10到60秒左右。在这种情况下,您可以简单地训练任何 Transformer,并且由于其注意力机制,您将获得非常好的结果。如果这就是你所需要的,我建议你走那条路,因为这相当更容易。但是,如果您需要能够更长时间地流式传输音频内容,请远离这种情况。

    在流式传输方面,事情变得很多更加复杂。任何纯粹基于编码器-解码器注意力的模型都需要付出很多努力才能完成这项工作。您可以使用 RNN(例如 RNN-T),但这些模型可能会变得非常庞大和缓慢,并且需要额外的努力才能使其可靠(例如语言模型、波束搜索),因为它们缺乏编码器-解码器的关注。还有其他将 Transformer 与 Transducers 结合在一起的风格,但如果您想自己编写所有这些,独自一人,您将承担相当大的任务。

    另见

    已经有很多代码可供您学习:

    【讨论】:

    • 模型将部署在 android 或 web 上。基本上,这里的用例有点像谷歌语音来查找具有给定 URL 的网站。该数据集是印度尼西亚语,目的是帮助当地农民找到文章,帮助他们提高农场的能力和质量。
    • @AndroAprila 所以,如果它只是用于小表达,那么使用 Transformer 模型可能就足够了。但是请记住,这具有二次 O(n^2) 运行时。如果音频太长,转录将需要很长时间。您必须自己测试并尝试所有这些,但我会说 10 秒以下的任何内容都应该/没问题。这是,imo,简单的道路,但如果这些是你的要求,它可以工作。
    • 但是看看我发布的 github 链接。也许你甚至不需要自己写任何东西。很有可能您可以只使用这些存储库所提供的内容并提供您的数据。
    猜你喜欢
    • 2019-05-05
    • 2016-08-20
    • 1970-01-01
    • 2012-07-16
    • 2020-12-14
    • 2013-02-16
    • 2015-07-21
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多