使用 MFCC 的简单单词检测器

Posted

技术标签:

【中文标题】使用 MFCC 的简单单词检测器【英文标题】:Simple word detector using MFCC 【发布时间】:2015-04-18 04:18:45 【问题描述】:

我正在使用梅尔频率倒谱系数实现语音识别软件。特别是系统必须识别单个指定的单词。由于音频文件,我在一个有 12 行(MFCC)和与语音帧数一样多的列的矩阵中获得了 MFCC。我取行的平均值,所以我得到一个只有 12 行的向量(第 i 行是所有帧的所有第 ith-MFCC 的平均值)。我的问题是如何训练分类器来检测单词?我有一个只有正样本的训练集,我从几个音频文件(同一个词的多个注册)中获得的 MFCC。

【问题讨论】:

【参考方案1】:

我对行进行平均,所以我得到了一个只有 12 行的向量(第 i 行是所有帧的所有第 i 个 MFCC 的平均值)。

这是一个非常糟糕的主意,因为您丢失了有关单词的所有信息,您需要分析整个 mfcc 序列,而不是其中的一部分

我的问题是如何训练分类器来检测单词?

简单的形式是 GMM 分类器,您可以在这里查看:

http://www.mathworks.com/company/newsletters/articles/developing-an-isolated-word-recognition-system-in-matlab.html

在更复杂的形式中,您需要学习更复杂的模型,例如 HMM。您可以从像这样的教科书中了解更多关于 HMM 的信息

http://www.amazon.com/Fundamentals-Speech-Recognition-Lawrence-Rabiner/dp/0130151572

【讨论】:

您好,非常感谢您的回答。我从语音帧中得到了 MFCC,并通过 matlab 函数 gmdistribution 构建了高斯混合模型。之后,我使用新音频测试模型。我再次从新音频中获得 MFCC,并使用后验函数获得每个 MFCC 的概率。现在系统如何决定这个概率? 你得到你正在寻找的所有单词的概率,概率最高的单词就是答案。上面的链接说“测试语音被归类为 GMM 产生最大对数似然值的数字。” 好的。现在我有一个词,我想知道它是否与我用来首先构建高斯混合模型的那个匹配。因此,我在输入该音频的 MFCC 时启动后验函数,并得到对数似然值。我需要将该值与阈值进行比较,以确定该单词是否与原始单词匹配? 我怎样才能得到这个阈值?我正在考虑使用具有两个质心的聚类算法,但负样本很少。 抱歉,我还有一个问题。后验函数的结果是似然的负对数,如果似然在[0,1]范围内,则负对数为正,但函数是矛盾的,说明最佳值是负对数似然接近0时。 这样对吗?另一个问题,我是否对每个单词都有一个 gmm 来检测?因此,当我从麦克风捕获音频时,我会将 MFCC 与我的所有 GMM 进行比较,结果是 GMM 给了我更大的可能性?

以上是关于使用 MFCC 的简单单词检测器的主要内容,如果未能解决你的问题,请参考以下文章

通过音频检测单词[关闭]

如何使用 TextRecognizer 检测单词?它只能检测 TextBlocks

在php中使用preg_match检测多个单词

520-检测大写字母

如何检测键盘顶部的单词建议栏是不是显示?

520. 检测大写字母