将 K-means 应用于 ASR 的 MFCC 系数

Posted

技术标签:

【中文标题】将 K-means 应用于 ASR 的 MFCC 系数【英文标题】:Applying K-means to MFCC Coefficients for ASR 【发布时间】:2017-08-01 23:32:55 【问题描述】:

我已将我的音频信号划分为 20ms 帧,其中 10ms 重叠。结果我有500帧。我已经计算了每一帧的 MFCC 系数。我想使用 K-MEAN 算法对每一帧进行矢量量化。

我每帧有 16 个 MFCC 系数(矢量长度:16)。现在 K-MEAN 需要 2 个向量来形成聚类图(一个沿 X,一个沿 Y),但是我只有一个向量(每帧 16 个 MFCC 系数)。

那么我该如何进行呢?我是否采用相邻帧并将 K-mean 应用于相邻帧?

【问题讨论】:

【参考方案1】:

现在 K-MEAN 需要 2 个向量来形成簇图(一个沿 X,一个沿 Y)

这不是真的,kmeans 算法可以聚类任意数量的向量。

那么我该如何进行呢?我是否采用相邻帧并将 K-mean 应用于相邻帧?

您有 500 个向量,对所有向量应用 kmeans。

例如,在 MATLAB 中,输入向量 X 必须是 kmean 函数的 2xM 维矩阵;

没有这个要求

我选择哪些向量来形成 K-MEAN 中的集群?如何将 kmeans 应用于每个向量?

再一次,你把所有的向量都当作documentation。

     [idx,C] = kmeans(X,num_clusters);

X 是一个 500x13 的矩阵。

看了一堆教程后,通常 i/p 是二维 Kmeans 空间的两个数据集 (X1,X2)。

如果您关注上述文档,x1 和 x2 是集群的示例。还有一个集群x3。

我的疑问是在 MFCC 的情况下,我的 X1、X2 应该是什么?

例如会有音素对应的簇。如果你有 20 个音素,你会聚集在 20 个质心上,每个质心都对应于音素。如果你有足够的数据,你也可以在 256 个质心上进行聚类,然后聚类将对应于语音中抽象的共同特征值。

【讨论】:

如果我的怀疑听起来有点荒谬,我很抱歉。我的主要疑问是如何将 K-MEAN 应用于我拥有的 13X500 MFCC 系数。例如,在 MATLAB 中,输入向量 X 必须是 kmean 函数的 2xM 矩阵;我选择哪些向量来形成 K-MEAN 中的集群?如何将 kmeans 应用于每个向量?如果您能花时间解释这样一个基本的疑问,我将不胜感激。非常感谢! 看了一堆教程后,通常 i/p 是二维 Kmeans 空间的两个数据集 (X1,X2)。我的疑问是在 MFCC 的情况下,我的 X1、X2 应该是什么? 我在回答中回复了 非常感谢!这对我帮助很大!【参考方案2】:

我在这里看到两种可能性: 1)您想量化您的 mfcc 特征(例如,将特征分成强、中和小幅度组)。在这种情况下,您希望每帧运行并插入特征向量,因为每个特征都是 k-means 算法的一个点。如果您绝对必须(并且您没有)有一个 mx2 输入向量,只需将 1 添加到每个特征( MFCCs = [MFCCS, one(size(MFCCs,1),1)]; )

2) 您想找到彼此相似的帧组。在这种情况下,kmeans 算法的每个“点”都是单个帧的所有 MFCC 特征。这就是尼古拉所说的。

干杯, 丹

【讨论】:

以上是关于将 K-means 应用于 ASR 的 MFCC 系数的主要内容,如果未能解决你的问题,请参考以下文章

将 Scala 的 K-means 应用于 rdd 的每个元素。

语音识别中的ASR技术通识 2019-12-06

k-means 质心标签在同一程序的运行中发生变化?

说话人识别概述

重复运行该程序的不同 k-means 结果

《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第1章 TWen-ASR-ONE简介