语音识别技术

语音识别背后的技术

——GPU集群+DNN算法


专业名词:

1、Automatic Speech Recognition (ASR): 自动语音识别

2、deep neural network(DNN): 深度神经网络

3、Deep learning(DL):深度学习

4、Restricted Boltzmann Machine (RBM):限制波尔兹曼机

5、Deep Belief Networks(DBNs):深度信念网络

6、NVIDIA  GeForce GTX 1080:8G显存,训练DNN的GPU


关键字:

语音识别、语义分析、深度神经网络、深度学习、深度信念网络、标签

*:标准空管指令的训练语音数据大约800小时,字错误率10%左右。

*:语音识别和语义解析 都是主要基于DNN实现的。

问题:

1、      使用成都空管记录仪的管制语音的训练的模型不适合用于太原现场。那在实验室使用PCM传输的管制语音训练的模型,适用直接从内话引接语音的情况吗?还有假如更换内话系统之后呢?或使用VHF共用系统通过传输设备来到语音呢?

2、      当识别率达到80%以上,即管制员可作为参考使用的水平时,做标签训练的工作由管制员完成更合适,需要提供维护界面,用于持续提高识别率水平。

3、      增加一台终端放置在管制大厅管制主任席,引接实验室语音识别的信号。

4、       开发的Pad终端,建议每个Pad只显示当前席位管制扇区的管制状态综合航迹,并引接当前扇区的对空指挥话音用于完成辅助提示等应用。


一、深度学习框架:

学习深度学习框架,要用到keras库,keras可以搭建在tensorflow和theano上。Keras 可以基于两个Backend,一个是 Theano,一个是 Tensorflow。如果我们选择Theano作为Keras的Backend, 那么Keras就用 Theano 在底层搭建你需要的神经网络;同样,如果选择 Tensorflow 的话呢,Keras 就使用 Tensorflow 在底层搭建神经网络。Keras 切换后端(Theano和TensorFlow)

keras的GPU模式安装- theano 后端:

http://blog.csdn.net/dexter_morgan/article/details/53872900

二、训练DNN 声学模型:

一个神经网络就是一个分类工具,能够将一些新的特征(如声学特征)分类到某一个 class。DNN 的输入 nodes 一般为 39 维的 MFCC 特征,输出的 nodes 为相关的 labels(eg: 900 个输出 <-> 900 个 context-dependent triphones[即 decision tree leaves])。也就是说:Acoustic features 用于训练 GMM-HMM 和 decision tree,这两部分是 Acoustic model(input layer and outlayer) 建模的关键部分。

Keras用MNIST数据集训练一个DNN。
——带标签数据训练, Keras以Numpy数组作为输入数据和标签的数据类型。训练模型一般使用fit函数。Keras用带标签数据训练集训练DNN。
标签分两种:一种是语音识别的标签,也就是我们识别出来的语音文本,要去人工修改为正确的。另一种是语义解析的标签,也就是基于语音识别的文本信息,我们要标出来哪些是航班号,哪些的意图等等。


三、语音识别:

微软研究人员通过与hinton合作,首先将RBM和DBN引入到语音识别声学模型训练中,并且在大词汇量语音识别系统中获得巨大成功,使得语音识别的错误率相对减低30%。但是,DNN还没有有效的并行快速算法,很多研究机构都是在利用大规模数据语料通过GPU平台提高DNN声学模型的训练效率。

——2006 年,Hinton 等人基于受限波尔兹曼机(Re- stricted Boltzmann Machines, RBMs)提出的深度信念网络(Deep Belief Networks, DBNs)是深度学习理论在机器学习领域打响的第一枪,并成为了其后至今深度学习算法的主要框架。

——(cnn深度神经网络)最开始的改进是使用GPU来加速训练,GPU可以看成一种SIMT的架构,和SIMD有些类似,但是执行相同指令的warp里的32个core可以有不同的代码路径。对于反向传播算法来说,基本计算就是矩阵向量乘法,对一个向量应用激活函数这样的向量化指令,而不像在传统的代码里会有很多if-else这样的逻辑判断,所以使用GPU加速非常有用。


在国际上,IBM、google等公司都快速进行了DNN语音识别的研究,并且速度飞快。理论认为人的认知模式,处事方式是存储在神经元与神经元之间的连接上的,称为“神经元连接权重”,人脑神经布局类似网状结构,神经元是网的交叉点,权重就是网的连线,这些连线有粗有细,也就是权重的大小不同。而人类的学习能力就是去不断改变权重的值,从而改变自己的认知模式和处事方式,简单的说,不同人对同一个外部事物有不同看法,就是因为同样的初始信号,在不同粗细的神经元连线放大或缩小后,变成了侧重点不同的最终信号。


神经网络简单说就是输入是训练数据,中间是隐藏节点,输出是标签。训练数据可以以一定的权重激活隐藏节点,隐藏节点激活输出标签。


如何训练:

既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective function),用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大。那神经网络的训练就变成了尽可能的缩小loss的过程。

所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由学习速率(learning rate)来控制的。


四、开源TensorFlow

Google发布的第二代深度学习系统Tensor Flow(TensorFlow核心以C++写成,前端支持Python和C++,并且容易扩展对其他语言的支持):Google发布的第二代深度学习系统。

TensorFlow最早是在2015年10月的湾区机器学习会(BayLearn 2015)上亮相的。当时,Google 资深系统专家Jeff Dean做了题为Large-Scale Deep Learning for Intelligent Computer Systems的演讲,介绍了Google未曾在论文上发表过的第二代深度学习系统TensorFlow。TensorFlow支持CNN、RNN/LSTM等机器学习算法,拥有C++/Python编程接口。

Google开源TensorFlow的意义:

这一次的Google开源深度学习系统TensorFlow在很多地方可以应用,如语音识别,自然语言理解,计算机视觉,广告等等。但是,基于以上论点,我们也不能过分夸大TensorFlow这种通用深度学习框架在一个工业界机器学习系统里的作用。在一个完整的工业界语音识别系统里, 除了深度学习算法外,还有很多工作是专业领域相关的算法,以及海量数据收集和工程系统架构的搭建。


不过总的来说,这次谷歌的开源很有意义,尤其是对于中国的很多创业公司来说,他们大都没有能力理解并开发一个与国际同步的深度学习系统,所以TensorFlow会大大降低深度学习在各个行业中的应用难度。

——Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端。

——TensorFlow 表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性。TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU卡组成的分布式系统。从目前的文档看,TensorFlow支持CNN、RNN和LSTM算法,这都是目前在Image,Speech和NLP最流行的深度神经网络模型。

——从目前Tensor Flow的release来看,他们只支持单机多卡,不支持多机的分布式环境。开源的TensorFlow是单机实现,其最有价值的分布式数据流实现,并没有开源。

——深度学习系统或软件不是一装上就能用的,它在发布前期需要通过使用者数据进行很多测试、调整,顾名思义就是一个学习的过程。调整这些参数需要不断试错,初次接触的人要花费很长时间。


问题NOTE:
1、    语音识别主机系统重启有时会出现NVIDIA掉驱动的问题,需要重新安装驱动,Gcc4.7版本时安装驱动提示DKMS Building内核模块失败,改为Gcc5.0版本OK。
    遇到编译内核等问题可能会依赖于某个gcc版本,需要改变到合适的版本。在/usr/bin/目录下,gcc开头的文件,其中有一个是gcc,是个链接文件,链接到当前的gcc文件(例如ubuntu16.04链接的是gcc-5),改变他的链接源文件就可以了,假如我们现在的gcc是gcc-5.4,我们要降级到gcc-4.7

apt install gcc-4.7 (在/usr/bin目录下看到gcc-4.7这个文件,然后在/usr/bin目录下删除gcc这个文件
rm /usr/bin/gcc
ln -s gcc gcc-4.7
gcc -v

1)ctrl + alt + F1 切换到控制台,停止图形界面:   sudo service lightdm stop 
2)降级到gcc-4.7后,先卸载原来的驱动:sudo apt-get --purge remove nvidia-*
3)
然后安装安装nvidia依赖包: sudo apt-get install nvidia-384
  编译依赖:sudo apt-get install build-essential pkg-config xserver-xorg-dev linux-headers-`uname -r`
  若命令不成功:单独执行 uname -r 而后将输出添加到上一行命令行尾

4)受限制驱动列表:sudo apt-get install nvidia-current nvidia-settings
5)安装驱动:sudo chmod a+x Nvidia*.run
   sudo ./NVIDIA-Linux-x86_64-384.59.run –no-x-check –no-nouveau-check –no-opengl-files
最后会询问是否更新配置文件,选择否! 否则可能会进不去图形化界面!
6)完成后 sudo service lightdm start 测试:输入 nvidia-smi    若输出显卡信息则安装成功!
7)安装nvidia驱动后,如果桌面不显示工具栏,需要重装ubuntu桌面。

2、Ubuntu系统起来后,Internet网默认未连接,需要在桌面右上角点击一下“有线连接2”,提示“已连接”即OK。

3、在一个网卡设 两个IP(192.168.1.51/168.192.11.90),cdc.bat和adapter.exe一启动就退出,会初始化网络失败,使用两个网卡OK。

4、通过 Internet使用SSH连接到内网主机(Ubuntu):
cat /usr/local/bin/runssh.sh      # runssh.sh可能需要安装teamviewer后才有。查看端口号和ID
ssh username@WAN-IP  -p 端口号

2018/4/11

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7970627/viewspace-2151488/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7970627/viewspace-2151488/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值