用 TensorFlow 创建自己的 Speech Recogn

作者: 不会停的蜗牛 | 来源:发表于2016-12-11 13:33 被阅读4641次

    参考资料
    源码请点:https://github.com/llSourcell/tensorf...


    语音识别无处不在,siri,google,讯飞输入法,讯飞语记,智能家居,车,etc。
    每天都在用的,很好奇它是怎么实现的,今天来看看这么便利的东东到底是什么样子呢。

    进化史

    最开始的 speech recognizer 只能识别 0-9 这几个数字,说别的单词是识别不了滴。

    后来有一个叫做 DARPA 的梦想家 team 孜孜不倦地研究。

    他们用 15000 个节点代表可能的发音,然后用暴力搜索 brute force search 算法来找到节点对应的文字。

    后来 IBM 用 Hidden Markov Model 来预测每个点最大概率可能表示的文字。

    再后来人们尝试用 NN 神经网络来做这个任务,但是很长时间没太大进展,直到 深度学习之父 Geoffrey Hinton 研究出个 Deep Learning 模型,语音识别的效果显著提高。


    Yours ~~

    像 Siri,Google 一样,现在我们来看看怎样用 TensorFlow 创建自己的 Speech Recognizer ,来识别数字吧。

    Steps:

    • 导入库
    • 定义参数
    • 导入数据
    • 建立模型
    • 训练模型并预测

    1. 导入库

    需要用到 tflearn,这是建立在 TensorFlow 上的高级的库,可以很方便地建立网络。
    还会用到辅助的类 speech_data,用来下载数据并且做一些预处理。

    from __future__ import division, print_function, absolute_import
    import tflearn
    import speech_data
    import tensorflow as tf
    

    2. 定义参数

    learning rate 是在更新权重的时候用,太高可以很快,但是loss大,太低较准但是很慢。


    learning_rate = 0.0001
    training_iters = 300000 # steps
    batch_size = 64
    
    width = 20 # mfcc features
    height = 80 # (max) length of utterance
    classes = 10 # digits
    

    3. 导入数据

    用 speech_data.mfcc_batch_generator 获取语音数据并处理成批次,然后创建 training 和 testing 数据。

    batch = word_batch = speech_data.mfcc_batch_generator(batch_size)
    X, Y = next(batch)
    trainX, trainY = X, Y
    testX, testY = X, Y #overfit for now
    

    4. 建立模型

    接下来,用什么模型呢?
    speech recognition 是个 many to many 的问题。

    eg,speech recognition

    eg,image classification


    eg,image caption


    eg,sentiment analysis


    所以我们用 Recurrent NN 。

    通常的 RNN ,它的输出结果是受整个网络的影响的。


    而 LSTM 比 RNN 好的地方是,它能记住并且控制影响的点。所以这里我们用 LSTM。


    每一层到底需要多少个神经元是没有规定的,太少了的话预测效果不好,太多了会 overfitting,这里我们取普遍的 128.

    为了减轻过拟合的影响,我们用 dropout,它可以随机地关闭一些神经元,这样网络就被迫选择其他路径,进而生成想对 generalized 模型。

    接下来建立一个 fully connected 的层,它可以使前一层的所有节点都连接过来,输出 10 类,因为数字是 0-9,激活函数用 softmax,它可以把数字变换成概率。

    最后用个 regression 层来输出唯一的类别,用 adam 优化器来使 cross entropy 损失达到最小。

    # Network building
    net = tflearn.input_data([None, width, height])
    net = tflearn.lstm(net, 128, dropout=0.8)
    net = tflearn.fully_connected(net, classes, activation='softmax')
    net = tflearn.regression(net, optimizer='adam', learning_rate=learning_rate, loss='categorical_crossentropy')
    

    5. 训练模型并预测

    然后用 tflearn.DNN 函数来初始化一下模型,接下来就可以训练并预测,最后再保存训练好的模型。

    # Training
    ### add this "fix" for tensorflow version errors
    col = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
    for x in col:
      tf.add_to_collection(tf.GraphKeys.VARIABLES, x )
    
    model = tflearn.DNN(net, tensorboard_verbose=0)
    
    while 1: #training_iters
      model.fit(trainX, trainY, n_epoch=10, validation_set=(testX, testY), show_metric=True,
              batch_size=batch_size)
      _y=model.predict(X)
    model.save("tflearn.lstm.model")
    print (_y)
    print (y)
    

    模型训练需要一段时间,一边碎觉一边等着模型出炉吧。🐌 🐌 🐌 🍃

    蜗牛的笔记

    历史技术博文链接汇总

    我是 不会停的蜗牛 Alice
    85后全职主妇
    喜欢人工智能,行动派
    创造力,思考力,学习力提升修炼进行中
    欢迎您的喜欢,关注和评论!

    相关文章

      网友评论

      • 想飞的大兔子:speech_data 是模块还是自己写的类, 这样的例子跑不过的 能请教一下嘛?
      • 0316c91a474d:你好啊,例子不能直接执行,已经把版本和依赖都改好安装好
      • feiyu87:如果trainX, trainY非常大,需要分批训练怎么办?
      • LucasJin:85后全职主妇????excuse me?大神可否认识一下,研究哪一方面现在?
        不会停的蜗牛:@Nicholas_Jela 不是大神哦,感兴趣所以自学一下,对自然语言处理感兴趣
      • ka2007:喜欢这种实例!希望能看到更多这种文章
      • ec53309d4eba:前端如何靠兴趣入门这个领域呢,可以给推荐一些学习方法吗?
        不会停的蜗牛:@SprayLee
        是NLP么,有兴趣就好办啦,而且你编程肯定没问题。
        学习方法的话,就是以结果为导向。
        1.成果:找个自己感兴趣的小东西,譬如说本文的 speech recognizer,敲代码实现,一般用python。
        2.框架:通过代码分析神经网络和tensorflow等的应用模式。
        3.理论:也许相对比较陌生的是 神经网络 的训练流程,模型原理,梯度下降等求最优解的方法。当你通过前两步有了宏观的感觉后,可以深入研究理论,仍然是从浅到深:
        a)先了解 Machine Learning 的基本流程,很简单就几步
        b)再学习常用神经网络模型,有很多,nlp常用的是RNN,我有写过几篇,也可以自己搜到很多,学习怎么用tensorflow去构建这些网络,另外推荐看斯坦福的nlp课程 cs224d
        c)神经网络的求极值的方法,典型的 back propagation,这个理论学一下,很多博客有详解
        入门的话差不多酱紫,你会发现很多小东西,如果用神经网络的话,框架都是相似的。

      本文标题:用 TensorFlow 创建自己的 Speech Recogn

      本文链接:https://www.haomeiwen.com/subject/xgudmttx.html