构建LSTM二元分类的语音数据集

7
我正在尝试使用Theano进行二进制LSTM分类。我已经查看了示例代码,但我想要构建自己的模型。
我有一小组“Hello”和“Goodbye”录音文件。我通过提取它们的MFCC特征并将这些特征保存在文本文件中进行预处理。我有20个语音文件(每个10个),并为每个单词生成一个文本文件,因此有20个包含MFCC特征的文本文件。每个文件都是一个13x56矩阵。
我的问题是:如何使用这个文本文件来训练LSTM?
我相对较新于此。我已经阅读了一些相关文献,但没有真正理解其概念。欢迎任何使用LSTM的更简单方法。
1个回答

9

已经有很多现有的实现,例如Tensorflow实现Kaldi集成的实现及所有脚本,建议先查看这些实现。

Theano太底层了,你可以尝试使用keras,并按照教程操作。你可以直接运行教程,理解其工作原理。

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

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个问候和告别的语音吗? - Nirbhay Tandon
1
您可以在此处下载一个孤立数字的数据库:http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/speech%20recognition%20course.html,每个数字大约有200个样本。 - Nikolay Shmyrev
所以,如果我要将这种方法应用于数字(而不是二进制),我们可以称其为语音识别吗? - udani
是的,当然,你无论如何都在识别语音。 - Nikolay Shmyrev
@Nikolay:我们需要像上面展示的那样将生成的特征插入到一个3D数组中吗? - udani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接