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

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

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

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

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

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

【问题讨论】:

    标签: python-2.7 speech-recognition theano mfcc lstm


    【解决方案1】:

    现有的实现有很多,例如Tensorflow ImplementationKaldi-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 数组中,如上所示?
    猜你喜欢
    • 2018-07-06
    • 2021-05-02
    • 2018-10-22
    • 2018-11-23
    • 2021-06-30
    • 2020-02-05
    • 1970-01-01
    • 2012-07-05
    • 2018-09-13
    相关资源
    最近更新 更多