这说明什么?这说明语音识别的解码器的耗费全部转化为DNN的计算了。而语音识别解码器,一个机器,一个现有的PC器可以handle更多的解码,因为它的解码速度很快,lost很低,这使语音识别未来的发展具有很大的工业的价值。因为现在的语音识别cost很高,你支持一核,一线的服务这个是很花机器的,如果50%用语音搜索这个事搞不定的。但是如果这样去做,我们把语音识别的解码速度大幅的提升,如果计算量全是DNN的话,那是跟容易办的。DNN我相信一定会有大量的专业硬件去做DNN的计算,据我了解很多公司都在做这样的研究,这个东西是一定可以解决的。所以这样的话,语音识别未来是可能的,就是大面积的语音识别的采用是可能的。
然后我们可以把我们的解码的算法告诉给大家,让其他的东西你们找不到,其实很简单,在解码有空白段的时间,这个search的beam值是动态的自适应调节的,如果你确定当天是空白,这个beam可以大幅度的去削减,这样解码的速度就会很快。
然后讲我们的基线系统,因为只有你知道我们做了什么基线系统,你们才知道我们这个工作是不是有价值。那么谷歌当时在inter speech的会议上,被微软当时一个学者问他的结果,最后谷歌的结果有点不一致,因为它的基线很低,它的基线就是一个两层的LSTM。
而我们的基线,状态是两万的状态序列,参数是这样的参数结构,DNN的节点都是2000个。LSTM的系数是1024,反馈是512。
这个模型非常的大,这是我们的商业系统,我们就在这样一个商业系统。然后训练数据量我们用了将近一万小时,并非觉得大数据就很重要,只是这个技术的核心难点就在于训练速度,如果我们不能证明我们的算法可以用于十万小时,那这个技术做的是没有意义的。
所以相比谷歌,他们是用2000小时去做,而且模型小了很多,我们的模型很大。然后我们用的优化准则实际上是这个系统,是单机同步训练。训练方法是传统的谷歌分子句。那谷歌分子句的训练方法实际上是被证明非常有效的,那么原模型大概就是几十个G左右,然后我们做这个试验的时候,要求12和实现的解码速度达到0.5,就totally的解码速度,因为代表一个工业的基础要求,因为我们做一个事情总要知道它的解码速度是多少、LOST是多少,这个是我们解码速度问题。我们把我们的基础系统完全地交给大家),大家知道我们这个工作,跟什么做比较,这是我们的试验,我们几乎做了我们能做的所有的实验。
首先状态实验,状态实验首先基本模型是这个模型,我们不知道拓扑是不是有价值,于是我们就引入拓扑。我们也不知道是切分有价值还是交替,是切分的作用还是交替训练的作用。
然后双向的时候,也做了类似的工作,那么对音节或者整个汉字建模我们也做了很多的模型,那我们这个模型的情况呢,首先整个音节建模CNN我们做,然后音节用的是5层的LSTM建模,1560节点,这个模型很大,双向的。整个就是用,这样做的目的我们就是想看一看,在音节模型上,这个算法的形成到底怎么弄。
其实,对于CTC而言,从理论上它不存在任何建模的困难,这是bulitable 的技术,在我的研究中我发现,就是任意的虚点,无论你的建模单元有没有意义,无论它有没有区分性,只要你给我足够的数据、足够大的模型,我一定可以训练出很好的结果。所以在音节实验中,我的模型取的偏大,那如果更大,又会不一样,那实际上我也有一些尝试,这个实验结果就不讲了。
而对声韵母建模,我们标准采用的是我们产品中可以采用的策略。首先,这样文本的声韵母12000个,然后CNN+DNN是9层2048节点,这是标准的CNN模型的配制。然后是CNN加5层LSTM 1024节点,还有2048节点,还有1024的结果。
那么,这个结果是有区分度结果,因为这个结果和这个结果可以比,因为它的模型参数是一样的,我在比较,如果我再这个模型参数条件下,2048节点的5层的话,上线是很困难的。
我在我上线的目前极限的情况下,我去比音节建模跟声韵母的建模的文本的差异,我力求发现,CTC的本质是什么。那么,因为时间有限,我直接给大家展示分析所有的结论。
第一个结论就是,基于整句训练的LSTM建模,如果我LSTM建模,可以让汉语采用状态半音节和音节,效果都不会差。所以,这一点我觉得这个实验实际上是跟大家以前的理论不一样的,我们必须做状态,不做状态不能做实验,其实不是。我任何一个建模单元,我如果采用LSTM去训练,那么我都可以达到一个不错的结果,取决于模型多大、训练数据多少。这样语音识别传统使用了几十年状态建模实际上不用采用了。
然后呢,固定边界学习的LSTM和CTC的结合,那这就是CTC的价值和作用。第一个,在状态建模系统中,CTC训练没有成功,因为状态很短,CTC很难在一个很短的序列中找到blank,给你一个好的表现,通常的结果会有两三个absolute job,就是你的点很差。
然后如果音节单元自身具有混淆性,比如说音节或者是现在的end to end 的学习,当然没有任何意义,你给我一个序列,我找到标签你去做,那都是可以的。那么这样去做,CTC的价值是,牺牲了建模单元内部的混淆性,比如音节ā和à差别很小,但是我依然可以把这两个模型区分开。让机器学习去做,CTC是能够做到的,那从而提升了LSTM的建模能力。
那么CTC是个训练准则,训练的模型是LSTM模型,那么这两个结论实际上已经说明,用机器学习的知识,不要任何语音识别的先料,我硬做,是可以做出一个系统。
这个系统怎么样,我们结构也是一样的,跟现在的系统情况非常接近。那如果是这样的结论,那几乎我们做语音识别的人就跟教师一样,人家跟我们拿的结果是一样的,那我们的价值在什么地方?
我觉得是传统语音识别的所有工具,我们把CTC训练引入到语音识别的框架中,采用语音识别的很多技术去优化。我们发现,比如说用双向的LSTM建模,不需要用CTC效果一样好。那这个结论是很重要的结果,大家要想做CTC的算法,先做出这个结论,如果你的双向的LSTM避逃不了你现在的线上系统,那你的LSTM有问题。
那做完这个结果之后,那我们来做一个实验,就是对我们有指导意义了,我们对于单向的LSTM采用1024建模,必须采用CTC,我们得多了性能超越现代系统的一个进步。
那就是说CTC对语音识别的价值在我们的实验中,在双向系统中没有明显的价值,说明CTC对人类的认知能力的提升,至少我的实验中没有证明或者说是略有提升,也是非常小的。
但是CTC的单向LSTM中,价值无可替代,有非常重要提升,那这个提升的价值主要是CTC引入了空白,它有空白,空白呢在这个训练中可以形成target delay,因为我不知道右边的信息,比如说a这个音,后面是什么我不知道,我就让你延迟几桢再决策。
所以它自动形成了它这个target delay以后,相当于把右边的信息补全,所以CTC的性能在语音识别中,对单向的才会大幅度提升。