为 LSTM 二进制分类构建语音数据集

Posted

技术标签:

【中文标题】为 LSTM 二进制分类构建语音数据集【英文标题】:Building Speech Dataset for LSTM binary classification 【发布时间】:2016-04-12 05:41:20 【问题描述】:

我正在尝试使用 theano 进行二进制 LSTM 分类。 我已经浏览了示例代码,但是我想自己构建。

我正在使用一小组“Hello”和“Goodbye”录音。我通过为它们提取 MFCC 特征并将这些特征保存在文本文件中来对它们进行预处理。我有 20 个语音文件(每个 10 个),我正在为每个单词生成一个文本文件,因此 20 个文本文件包含 MFCC 功能。每个文件都是一个 13x56 的矩阵。

我现在的问题是:如何使用这个文本文件来训练 LSTM?

我对此比较陌生。我也浏览了一些关于它的文献,但对这个概念没有很好的理解。

也欢迎使用 LSTM 的任何更简单的方法。

【问题讨论】:

【参考方案1】:

现有的实现有很多,例如Tensorflow Implementation,Kaldi-focused implementation with all the scripts,最好先检查一下。

Theano 太低级,您可以尝试使用keras,如tutorial 中所述。您可以“按原样”运行教程以了解情况。

然后,您需要准备一个数据集。您需要将数据转换为数据帧序列,并且您需要为序列中的每个数据帧分配一个输出标签。

Keras 支持两种类型的 RNN——返回序列的层和返回简单值的层。您可以对两者进行试验,在代码中您只需使用 return_sequences=Truereturn_sequences=False

要使用序列进行训练,您可以为所有帧分配虚拟标签,除了最后一帧,您可以在其中分配要识别的单词的标签。您需要将输入和输出标签放置到数组中。所以它会是:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]]

Y = [[0,0,...,1], [0,0,....,2]]

在 X 中,每个元素都是 13 个浮点数的向量。在 Y 中,每个元素都只是一个数字——中间帧为 0,最后一帧为单词 ID。

要仅使用标签进行训练,您需要将输入和输出标签放置到数组中,而输出数组更简单。所以数据将是:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]]

Y = [[0,0,1], [0,1,0]]

请注意,输出经过矢量化 (np_utils.to_categorical) 以将其转换为矢量,而不仅仅是数字。

然后您创建网络架构。您可以有 13 个浮点数作为输入,一个向量作为输出。在中间,您可能有一个完全连接的层,然后是一个 lstm 层。不要使用太大的层,从小的开始。

然后您将此数据集输入model.fit,它会训练您的模型。您可以在训练后估计保持集上的模型质量。

因为您只有 20 个示例,所以您会遇到收敛问题。你需要更多的例子,最好是数千个来训练 LSTM,你只能使用非常小的模型。

【讨论】:

您好,谢谢您的指导。你知道任何记录了 100 个问候和再见的数据集吗? 您可以在这里下载孤立数字的数据库:ece.ucsb.edu/Faculty/Rabiner/ece259/…,每个数字大约有 200 个样本 那么如果我要将这种方法应用于数字(不是二进制),我们可以称之为语音识别吗? 是的,当然,您仍然可以识别语音 @Nikolay : 我们是否必须将生成的特征插入到 3D 数组中,如上所示?

以上是关于为 LSTM 二进制分类构建语音数据集的主要内容,如果未能解决你的问题,请参考以下文章

我们可以将 LSTM-RNN 应用于数值数据的二进制分类吗

使用 LSTM 构建二元分类模型

RNN/LSTM 深度学习模型?

图像分类基于PyTorch搭建LSTM实现MNIST手写数字体识别(单向LSTM,附完整代码和数据集)

如何为多对一二元分类 LSTM 准备数据?

图像分类基于PyTorch搭建LSTM实现MNIST手写数字体识别(双向LSTM,附完整代码和数据集)