用 TensorFlow 创建自己的 Speech Recognizer

原创 2017年04月26日 11:06:37

参考资料
源码请点: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)

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

推荐阅读
历史技术博文链接汇总
也许可以找到你想要的

版权声明:本文为博主原创文章,未经博主允许不得转载。

用 TensorFlow 创建自己的 Speech Recognizer

参考资料 源码请点:https://github.com/llSourcell/tensorf... 语音识别无处不在,siri,google,讯飞输入法,讯飞语记,智能家居,车,etc。 每天都...
  • u014365862
  • u014365862
  • 2017年02月06日 09:11
  • 5759

Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图

阅读本篇的先决条件:前面有一步问题分析,这是第二步。第一步请看:http://blog.csdn.net/memoryjdch/article/details/75220498 如果你不懂Tensor...
  • memoryjdch
  • memoryjdch
  • 2017年07月21日 15:00
  • 603

Kaggle入门:Digit Recognizer

Kaggle入门:Digit Recognizer数据是经典的lecun大神的mnist手写数字数据集。采用tensorflow进行训练。...
  • baidu_20535887
  • baidu_20535887
  • 2017年03月02日 10:24
  • 1324

iOS 10:用 Speech 框架创建語音輸入 App

原文:http://www.appcoda.com.tw/siri-speech-framework/ 在 2016 WWDC 大會上,蘋果推出了可以用於語音識別的 Speech Kit 框架。實際...
  • kmyhy
  • kmyhy
  • 2016年10月14日 17:54
  • 2620

tensorflow 实现kaggle手写识别Digit Recognizer(二)卷积神经网络

1. 先将42000条训练数据分为训练集(40000条)和开发集(2000条),使用训练集训练出一个卷积神经网络模型,使用开发集测试模型性能,准确率达到98% 2. 将所有的训练数据作为训练集来训练...
  • zhuzuwei
  • zhuzuwei
  • 2018年01月06日 16:36
  • 146

Microsoft Speech Platform SDK,语音识别

本文为转载:原文 http://blog.csdn.net/itcastcpp/article/details/5313204 关于SAPI的简介 API 概述 SAPI API在一...
  • nibiru_holmes
  • nibiru_holmes
  • 2016年06月06日 21:51
  • 3933

TensorFlow——训练自己的数据(一)数据处理

参考:Tensorflow教程-猫狗大战数据集 贴一张自己画的思维导图 数据集准备 kaggle猫狗大战数据集(训练),微软的不需要翻墙 12500张cat 12500张dog 生成图片...
  • xinyu3307
  • xinyu3307
  • 2017年07月07日 12:41
  • 8031

用自己的图片数据做tensorflow深度学习

应老师的任务需要我加入了深度学习的行列,接触了一段时间,下面对自己的学习做一个总结。刚开始学习深度学习tensorflow,网上大多的教程都是用他们已有的数据来学习tensorflow,像mnist数...
  • baidu_23263735
  • baidu_23263735
  • 2017年07月03日 10:39
  • 2169

SpeechRecognizer 和 SpeechRecognitionEngine 的区别

SpeechRecognizer 会直接调用系统的语音监听器。Choices 在其上可以正常工作。  SpeechRecognitionEngine 则不会,但是更灵活。Choices 目前没好使过...
  • l0f
  • l0f
  • 2012年03月14日 21:45
  • 1881

tensorflow实现kaggle手写识别Digit Recognizer(一)

先尝试建一个单层的神经网络,最终上传kaggle的评估准确率是91.8%. 效果不佳,因为单词神经网络丢失了手写图片的二维结构。 后续将尝试卷积神经网络以提升预测准确率。 impor...
  • zhuzuwei
  • zhuzuwei
  • 2018年01月05日 17:55
  • 196
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用 TensorFlow 创建自己的 Speech Recognizer
举报原因:
原因补充:

(最多只允许输入30个字)