检测单词音频中的电话

信息处理 Python 语音识别 语音处理 mfcc 机器学习
2022-02-01 20:49:25

我正在研究印地语的语音识别。我的方法是基于电话将语音映射到文本。为此,首先将语音拆分为单词,然后通过检测音素将每个单词映射到文本。到目前为止,我能够将语音音频文件拆分为单独的单词音频文件(我为此使用了能级)。

不同手机的数量是 1023。对于每部手机,我每 10ms 帧提取 MFCC 系数。(所以不同的手机有不同的帧数,对于每一帧我存储 38 个系数。这用作每个手机的模板。)同样对于语音中的每个单词,我每 10 毫秒帧提取一次 MFCC 系数。

但我无法找到有效的算法将单词映射到音素序列。为此,我一直在考虑两种方法:

  1. 天真的蛮力方法,我只是尝试将 word 中每个可能的帧组匹配到每个可用模板(使用 DTW),然后选择最接近的匹配。但这是非常低效的方法。
  2. 将单词拆分为电话。然后为每部电话从 1023 个可用模板中选择最合适的模板(使用 DTW)。但是在这种方法中,我不知道如何将单词分成单独的电话。

有没有其他方法可以解决这个问题?还是可以使用第二种方法有效地完成?

1个回答

虽然声学语音特征(MFCC 等)和词汇在日常语言中是相关的,但传统上在语音识别软件中,声学和语言信息被假定为独立的。

您可以在流行的开源语音识别包中看到这一点,例如 Sphinx3/4(使用 HMM 与 DTW 的 Java/C)或 Kaldi(C++/神经网络),必须同时训练声学模型和语言模型。对于英语,有一些现成的模型可用,但在大多数特定领域的情况下,最好训练一个新模型或调整现有模型。我不确定印地语的声学/语言模型的状态,但这里有一篇你可能已经看过的论文。

我建议寻找在 Sphinx 或 Kaldi 中使用的现有印地语模型。