1新智元原创1
作者:王嘉俊
新智元福利
回复下载贾磊22页PPT
Google去年发布了一项研究报告,说在美国年龄介于13到18岁的青年当中,约有55%的人每天使用语音搜索。
语音搜索正在介入到生活的方方面面:获取天气、文字输入、听音乐、车载交互等等。而随着智能硬件的普及,语音交互请求会越来越多。
年之后,深度学习技术引入到语音识别之后,大家也一直再问一个问题,深度学习技术还能像刚提出时候那样,持续大幅度提升现在的语音识别技术吗?语音技术能够从小规模的使用转向全面产业化成熟吗?
如果全面产业化成熟,意味着会有越来越多的语音处理需求,但百度语音技术部的负责人贾磊说,如果线上50%的搜索都由语音完成,而机器耗费还和过去一样,那么没有公司能承担起这样的机器耗费。
语音搜索的未来会怎样?技术能持续发展吗?技术的发展能否优化成本结构,同时又保障用户体验?
贾磊说未来这些都是可以解决的。近日,百度提出的新语音识别技术方案是把机器学习领域的LSTM建模和CTC训练引入到传统语音识别技术框架中,并考虑汉语特殊语言特点对汉语识别技术进行革新,从而提出一种全新的汉语语音识别建模方法
这是语音识别在工业上的创新应用,核心在于:百度发现对于单向固定边界LSTM建模之后,继续引入CTC训练,可以通过引入CTC训练的空白自适应的实现TargetDelay,从而实现对单向LSTM模型对其右边的Context的精准建模。同时百度对汉语语言的音节,声韵母,音素和状态等多种汉语特有的语音学单元进行深入分析,提出汉语声韵母整体建模的汉语识别解决新方案(传统技术方案都需要建模单元被分成三个状态)。当把以上机器学习方法和汉语声韵母整体建模方案一起引入到语音识别的传统技术框架中后,再结合决策树聚类、跨词解码技术和区分度训练等一系列传统技术,就能实现了汉语语音识别工业产品技术的实质性提升。这样做出来的语音识别系统,有以下几点优势:
语音服务后台成本大大降低(解码器投入变少),有望解决语音搜索应用大规模工业化应用的资源消耗的传统技术难题。而且相比于工业界现有的基于状态建模的语音识别产品技术,相对错误率降低在15%以上,语音识别的精度大幅提升,除此之外,该模型的对口音和远场情况下的识别都有一定的提升。
贾磊在接受采访时说,这是当前世界最前沿的工业级语音识别技术,世界上除了谷歌公司以外,没有人报道成功过类似的技术思路和研究方向,而且谷歌Interspeech会议9月披露的该方法的模型规模比我们小10-20倍,语音原始数据也是我们的1/4到1/5,是一个实验室内的探索结果。谷歌实验效果在英文上提升在8%左右。我们在汉语上结合自己的语言特点,探索出声韵母整体建模的技术思路,最终得到的模型精度的提升幅度达到谷歌的2倍。由于该技术最大的难题就在于模型规模和训练数据量增大后的高速训练。因此我们的成果更接近工业产品化的要求,更能代表技术对工业产品的提升。。
新智元对贾磊进行了专访。
新智元专访实录
新智元:这个技术在世界上是什么水平?
贾磊:谷歌是今年9月刚刚发的实验室的论文的结果。我们也早在四五个月前就在开展类似的工作。我们和谷歌的工作差别之一是我们是在汉语产品系统上做了这个技术,我们的数据量是谷歌的4-5倍,我们的模型体积是谷歌的10-20倍,我们得到的工业产品的性能提升幅度是谷歌的2倍。这里我想说一下,只有单向多层LSTM模型才能有效应用于产品,因此我谈的都是基于单向多层LSTM模型的提升。除此之外,在这个技术核心有一个问题就是建模单元的选择问题,谷歌做的是英语,他的建模单元选择对我们有很好的启发和借鉴作用。我们做的是汉语,必须基于我们自己的语言特点进行研发。我们选择了一个最适合我们汉语的声韵母,做声韵母整体建模,做了大量的实验,确定了声韵母整体建模的技术方案。最终得到的模型无论精度还是速度,都比现有的识别产品技术有所超越。我觉得这个技术的水平应该是达到一个世界上较高水平的状态。因为我们的模型规模,训练数据和最后得到的提升幅度都远大于谷歌,我们有理由认为我们的技术水平更接近工业产品对技术革新的要求。
新智元:这种新的模型在产品和应用上,会做出怎样的改变?
贾磊:这种模型的好处就是解码速度非常快,刚才我也讲了,它的解码速度可以通过beam裁剪,从2倍实时变到0.05倍实时,这个过程,语音识别率几乎不降低。这个性质对语音识别技术的大规模产业化应用是弥足珍贵的。我们都知道,语音识别技术大规模产业化的问题之一,就是后端机器耗费量很大。虽然深度学习模型的计算未来一定会被专业硬件替代,而解码器的计算量只能由CPU承担(解码器部分大都是逻辑计算)。而采用了这个技术可以显著降低解码器部分的计算量,机器耗费量问题有可能在未来得到解决。其次,这个技术比现在的传统语音识别相对错误率降低15%以上,语音识别的精度可以大幅提升。最后,模型对口音和远场的识别也都有一定的改善。
新智元:那对语音合成和语音理解有帮助吗?
贾磊:我们认为这个技术,CTC的训练,我们摸索成功的CTC对语音合成技术也是有帮助,特别对语音合成的韵律研究也是很有意义的。对于语义理解问题,因为我这个组主要做语音合成和语音识别,可能需要语义理解的专家一起加入进来,看看这种全新的机器学习技术能否提升语义理解的技术水平。。
新智元:你说的降低15%以上是什么概念。
贾磊:是指相对错误率。比如说你现在语音识别率是90%,提升一个点就是相对错误率降低10%。我们在我们的实验中看到的降低幅度超过15%,由于这个算法还在优化迭代中,因此我们对外纰漏了一个比较保守的数字。
新智元:那它现在已经到了一个怎样的级别?就是提升15%之后。
贾磊:目前采用了这个新技术的语音识别率在安静环境普通话条件下,接近97%,这种识别其实假设用户非常配合的状态下得到的最优识别结果。比如假设用户熟悉语音输入系统,用户的普通话相对标准,而且用户说话的手机需要距离嘴比较近。,你可以对外发布这个数据。
新智元:还有什么你过去做不到的东西,有了这个技术之后,你能够做到了?
贾磊:过去没有这个技术只能把一个建模单元分成三份,做三状态建模,语音识别系统框架都被禁锢在一个状态建模的系统中。那么现在可以采用整个建模单元整体建模,建模单元选作音节、半音节、音素都可以,甚至于更复杂的一些组合建模单元,也都可以,那么这样会让语音识别能从传统的理论框架中挣脱出来,会有全新的研究方向,比如说以前语音识别建模单元不需要研究,现在我们需要研究语音识别用什么建模最好,这会在未来是一个重要的研究方向。英文现在他们用的是音素,我们汉语现在用的最好的是声韵母,之后我们还可以声韵母跟音节混合,声韵母跟音素结合,这个方向在未来等于打开了一扇门,帮助人们更好的去做语音识别技术。
新智元:然后这种技术顺应是一种怎样的产业趋势?
贾磊:这种技术特别适合于语音识别大规模工业化,因为这个技术应用点很多,它不但是解码速度快,而且对口音、对远场都有一定的作用,有口音的人识别率会改善很多,距离较远的时候识别率也会改善很多。除此之外,这种技术对汉语的声韵母进行尖峰抽象,就是这个建模单元中最具备特征描述能力的一帧语音被抽取出来代表这个声母或者韵母。而且尖峰抽象是在当前语音句子的整句全局优化的基础上获得的。这客观上使得这样的建模技术可以轻松混合多种数据源(口音,噪音,远场等)进行训练,不同数据源之间的差异会被抹平,最终得到的系统也会对多种复杂场合的识别有很好的改善作用。
所以我感觉是整个对语音识别全方面的一种提升,而且在它解码速度上的优势,会让语音识别在大规模产业化的时候因此而降低成本。
新智元:但它需要的这种设备以及计算性能,能够在产业普及么?
贾磊:是这样的,我们这个语音识别有一个训练的过程,有一个测试过程,那训练过程它的计算量再大,大部分都可以通过专业设备投入一次性采购进行解决的。关键是测试部分,就是上线服务的时候那个机器数目是必须要压缩的,而且机器都必须尽量是工业界主流机器,不能定制机器。用我们新技术训练出来的模型的主要优点就是线上实际产品使用的计算量少很多。
新智元:那它的这种训练时间呢?
贾磊:我们的核心贡献就在于我们研发出的一系列的算法适合大数据、大模型的情况下,LSTM和CTC的结合的高速有效训练。但是注意只是做大数据、大模型,只是做CTC训练,都还不能够显著提高识别性能和工业产品效果。必须把跟深度学习和语音识别的传统领域的技术相结合,这是我那个微博中也反复强调的,这样才能够显著提高线上产品的语音识别率。之前单纯的大数据、大模型已经有人能做了,但是这样得到的模型计算量很大,工业产品很难采用。由于没有和传统语音识别技术相结合,导致CTC训练的多层单向LSTM模型快10年也没有在工业界中成功使用。我们解决了这个难题,这里我们要强调学科融合。我们可以讲讲我们北京的产品团队的艰苦公关过程。我们很努力的干了一阵子,研发出来单向多层LSTM的稳定快速训练和之后的CTC训练,本以为就要成功了。可是当把这个机器学习技术应用到语音识别领域的时候,发现了一系列的语音识别传统问题没解决。于是又开始研究语音识别的建模单元等传统问题。最终还是把机器学习技术和语音识别传统技术相结合,然后1+1大于2,产生化学反应,最终促进了语音识别核心技术整体提升。这里,我想强调一下,获得上述提升,还有一个重要的因素,就是用语音识别学科中的区分度训练技术去提升CTC模型的建模效果。我稍微介绍一下语音识别的区分度训练,能够真正的根据语音识别最后过程,结合声学模型和语言模型,真正endtoend优化模型。这个区分度训练实际上,最终提升了CTC模型的效果。也就是说,语音识别的传统技术也可以提升机器学习领域内的算法的效果。学科之间的交叉融合,相互借鉴很重要。
新智元:那它每一次像工业化训练的话,然后它训练时间是多长?
贾磊:一般的话训练一个模型,一般完整的需要几周,甚至一个月都有可能,如果传统的训练,如果不是用创新的算法和创新的技术去做,那做CTC训练技术是不太可能的在几个月内做到的。因为我解释了LSTM需要逐渐的递推,而且一句话一句话做太慢了,所以我们引进了很多技术创新,让这个东西可以达到几周就可以训练出一个工业产品中产品模型。
新智元:百度说要把百度语音开放给社会,具体打算怎么做?
贾磊:我们现在持续在做,我们这些技术都会在未来陆续开放给公共社会,让社会的更多的普通的研发工作都可以使用这个技术。
新智元:如果说有时候像我说话有一种口语化或者即兴的这种表达去表达这些东西的时候,然后这个系统的处理和传统会有什么不同?
贾磊:口语化的识别第一是需要训练语料,然后在我的实验中发现,因为CTC的模型每个建模单元就是每个声韵母可以描述一个尖峰。在我们测试中,小规模测试中CTC训练后的模型对口音的识别有一定的改善,但是口音的有利信息归根结底要需要大量的口音的数据才能解决。
新智元:然后你们说在万小时训练条件下产生了过拟合,催发出对更多数据量的语料库的需求。然后您觉得现在市场里有足够这种能产生这么多语料库的产品么。
贾磊:像我们搜索产品的话完全是可以得到更大规模的语料库的,因为我们的服务和训练是可以接轨的,这个闭环反馈是可以的。至于你说一些研究所或者公司他们要想很大的语料库的话,可能就比较难了。其实几千小时也可以拿到效果的,这个技术不是在大语料情况下才有效果的技术,小语料一样会提高性能,这是语音识别核心技术的提升,有很多理论创新的成分,高校都可以做这部分技术的研究的。
新智元:您觉得像这种技术目前还会遇到什么主要的问题?
贾磊:这种技术目前遇到的主要难度:我的思考是前对口音、噪音、远场的识别。这种模型虽然相比传统的技术有所改善,但是仍然有很多不足,还需要有其他的技术跟进。这个模型比传统的模型好,但是没有本质上解决口音、噪音和远场的问题。多种数据源的混合训练仍然是必要的解决口音、噪音和远场问题的必要手段。
新智元:那您觉得在未来的5年内智能语音在哪些领域会比较大规模。
贾磊:我觉得在语音搜索领域,O2O领域,在传媒信息领域,在汽车领域,语音一定有很大的作用。
新智元:那在技术上呢?
贾磊:技术上,我的判断就是对极致速度计算的研究会有强烈需求。未来会出现更大规模的语料库,要训练更大规模的语音识别系统。因为在我们的实验中发现了在现有接近1万小时的训练情况下,我们仍然遇到了过拟合的现象。这就意味着我加入数据还可以提升性能,所以我觉得数据对技术的改进仍然是可以期待的。然后其实我在微博中有对未来的展望。
还有一点,这个技术会让语音识别解码的计算量能够降下来。这样的话,语音识别、语音服务的成本会降低,进而推动产业发展。
新智元:它这种降低会降多少?
贾磊:我们现在没有预估,这个过程一定需要配套专业的深度学习模型的专业硬件计算技术。,等深度学习硬件大量涌现了,我估计能把解码器成本降低5-10倍吧。
新智元:解码器在这个语音服务的成本大概是多少?
贾磊:因为现在的语音识别的解码器成本大概是三七开,三分是语音识别解码器,七分是深度学习模型的计算。,未来深度学习硬件可以专门出来解决深度学习的模型计算问题。现在深度学习硬件已经在广泛的研发中了,很多地方已经开始出现了专业的深度学习计算硬件的成功使用案例。如果采用深度学习硬件,深度学习模型的计算量是可以大幅度压缩的。因为DNN、LSTM模型都是有固定计算结构,它可以用深度学习硬件大幅度加速。,而解码器更多的是逻辑计算,只能在CPU中进行。
新智元:解码器部分很难通过硬件加速吗?
贾磊:对,很难加速,而我们这次把解码器部分的CPU的处理加速5-10倍的话,那么这个成本未来可以预见将大幅降低。同时我觉得对深度学习在线学习的专业硬件也会有新的需求,这两个相伴相生,我觉得可以把语音服务降低不少成本,还能让语音服务的大规模使用成为可能。
新智元:那这个技术能运用在英语方面吗?
贾磊:我觉得我们研发的成果,有些部分也是可以用在英文上的。,我们的观点是CTC训练不是灵丹妙药,它核心解决了一个单向LSTM模型右边context的混淆性信息的建模问题,单向固定边界LSTM建模之后,继续引入CTC训练,可以通过CTC训练的空白自适应的实现TargetDelay,从而实现对单向LSTM模型对其右边的Context的精准建模。而我们采用双向LSTM建模的时候,右边的混淆性的信息都是可以被反向的LSTM模型扑捉到的。这种情况下,,在双向模型固定边界的基础上继续采用CTC训练的提升就不大了。所以我觉得这个实验实际上是我们对CTC在语音识别中的价值的一个理论探索和分析,对英文识别技术的提升一样有帮助。这些理论也都是基于我们实验结果的一些推测,未来也许有他人更新的实验会否定这些,但是我们愿意分享出来,让全世界的语音识别研究都受益。
贾磊在NCMMSC上,对这个新技术做了全面的介绍。
注意:贾磊演讲全文由演讲录音整理,可能有误!
贾磊演讲全文我简单介绍一下长短时记忆模型。这个模型的优势就在于,在传统的网络中引入三个门:输入门,输出门和遗忘门,分别代表对信息长期、远期和近期的记忆和控制。
相对于我们传统的CNN和DNN模型,它的好处是能够记录轨迹的变化。这个模型已经提出来很久了,本身并不是近期的创新,但要把它应用在工业里,是有很多困难和现实问题的。
为了把模型应用在产品上,我们提出了一套CNN+7DNN+2LSTM的结构。我当时提出这个结构,是专门在西北工业大学汇报过的,Google当时没有论文。Google当初提出2层LSTM,在我们的验证中,如果是对于状态建模,那么需要比较Deep的模型,因为这是比较短的瞬时状态,它的轨迹并不清晰。
那么如果采取这种深层结构,两三轮的迭代,数据就可以获得收敛,有很好的这个效果。而如果只用2层的LSTM,随着数据量的增加,这个提升会很慢。而且最终的收益,这个模型的效果好。Google最后的论文也证明了这一点,这样的模型结构,对于状态建模是比较好的。然后我们在LSTM的模型上,主要解决了海量数据的训练和效率问题。因为LSTM不是今天的重点,今天主要讲CTC,和语音识别对传统框架的改变。因此我就跳过这一部分。
LSTM的训练是有困难的,因为很容易发散。这是一个重要的技术,Google提出的LSTMP,它在传统的LSTM模型之上,引入了一个反馈层。这个反馈层对工业界弥足珍贵,因为这个反馈层会使运算的计算量大幅下降,它可以把反馈的,比如说你这个神经元节点是,他反馈的可以采用,这样整个计算量会大幅压缩。
因此我向大家推荐这个技术,基本上应该是工业界和学术界的最新技术,除了产品效果之外,这个的精度更高,我对这个的猜想是因为LSTM的输出层很大,它有两万多个节点,在状态建模的时候。因此为了和外部的匹配,通常的就是C代表的LSTM的记忆单元,这个单元的维度会比较高,一般采用的是,也可以采用。
当采用的时候,其实整个网络已经非常复杂了。这个属于反馈层,可以把参数大幅的压低,从而导致你可以鲁棒稳定的去训练这个网络。那么有人反映,带有反馈层之后训练会不稳定。我的感觉是这种反馈即使有不稳定,大家要去钻研,因为它是必不可少的。工业产品中如果不带这个反馈,计算量是难以承受的。
这是Google对LSTM的贡献,我向大家推荐这个技术。
然后讲BPTT算法,BPTT算法是最基本的训练神经网络的算法,就是误差反向传播。对于R模型或者LSTM模型它是有轨迹的,因此它是根据轨迹的误差反向传播。它有两种方法。
第一种方法是逐帧递推的,一帧推下一帧,再下一帧误差规避以后再向前传。
第二种是所有的误差同步向前传,传固定的步数。
这两种算法其实在BPTT的理论都是存在的。后面这种实际上就是把误差截断,不让误差从头传到尾。第一种就是直接从头传到尾。两种基本的算法,大家可以了解一下基本的理论。
这是我们多层的LSTM的结构,下面是我们的CNN层,上面是我们的DNN全连接层,这是我们的LSTM两层。
这个节点是采用了,这个维数的大小,线上的工业产品是可以用的。所以大家的研究可以照着这个去做,如果你的体积过大或者过小,对于工业而言可能就是研究跟现实之间就会有不匹配。
这解释了网络能够提升系统的根本原因:
第一,多层结构对神经网络而言总是有价值的,因为多层意味着输入的扰动在输出总数会衰减。这个我觉得微软的于老师是有一篇论文去讲这个。
第二个状态建模,状态的轨迹并不是很清晰,很短、很sharp的一个建模单元。这个时候如果完全采用LSTM去建模的话,造成的结果就是LSTM是轨迹比较强,但是它跟瞬态的模拟能力不够,因此结合瞬态跟轨迹这样的一个模型结构,在我们现实产品中发现是稳定的,而且总是有好的效果。
那我们和双层的LSTM做对比,谷歌当年刚开始提出双层的LSTM胜过CNN,有这样一篇论文,大家可以去找,我们做了实验,实际上我们达到的是negative的结果。在小时中,跟谷歌的实验一样,对等。双层LSTM的效果胜过了传统的CNN技术。
但如果把数据量增加到一万小时的时候,这种十层的CNN会胜过双层的LSTM,节点是,大家可以做实验看看。因为LSTM的特点是节点多,记忆能力就强,但是节点如果少的话,能力就有限。
是工业能上线的技术指标,我们把LSTM变成这种结构的时候,我们很好的胜出了DNN和CNN。
这是我们当年从事这个研究的一段历史,那么谷歌最后的论文也证明了这一点,所以我相信这个应该是目前大家都没有异议的东西。
那么训练方法,其实这个东西早就存在了,十年以前也有,现在也没有什么太大的改变。实际上训练的方法是对这个理论,正确的在产品中使用的根本的影响。谷歌有一个很著名的训练,我觉得是这个训练把LSTM带入语音工业界了,因为LSTM很慢,逐帧的训练基本上是在现实中是不可能的。那么谷歌做了一个方法,首先把句子随便的排在一起,每一次取一个SubseqSize(子句),这个子句会有一个Batchsize,64个句子放在一起,子句是20。
这样的一个方法,就是把LSTM的训练,我们知道传统的LSTM是轨迹训练,而我们的CNN是逐帧训练,把LSTM向逐帧训练靠拢。这样核心收益就是,CPU在计算的时候是可以高速计算和高速并行的。
由于这个技术的引入,把LSTM的训练速度大大提升,从而工业界可以使用LSTM做语音识别。
那我们的训练结构基本上就是一种多GPU的方案,我们把这个句子划分成多个机器,每一个机器都采用一种分子句训练,得到的结果,然后用单机同步,或者异步SGD。后面我会讲我们多机训练的算法,总之把这个数据去搞定。这个训练算法,我认为单机也是可以做的,大家的高效就是用谷歌的分子句训练,不需要很多的GPU,一个GPU就能训练LSTM,而且效果很好。
那这是我们最新研究的整句训练的方法,整句训练的难度会非常大,因为单帧递推的话,一般都是两三个句子,误差都会从头推到尾,从尾推到头。
这个训练量会非常的大。而这个是我们认为后续提升的关键,谷歌的分子句训练在我们的实验中无法做CTC的Training。
那整个的训练要全部切到整句训练上,这个跟传统的训练方法就会有一个很大的差异,这个差异是造成CTC训练在语音识别中使用的核心瓶颈。
然后我们的并行训练平台,当年的CNN,DNN和LSTM,我指的是分子句的LSTM都可以单机去训练,大家在高校里都可以去做。但是做这种训练的时候,单机已经很难完成任务了,我基本上都使用多机,一般是这样的一个机器的结构。那么这是一个数状结构,是把模型去平均,数状是让模型传递的时候归并更加容易。
这是一种新型拓扑结构,用于异步SGD,用多机去做,我们大概是四到八个机器,一个机器有四个GPU卡,因为单机的速度实在慢到无法忍受。这个工作就是说,我们的下面的工作,训练量是谷歌的数据量的四到五倍,我用模型体积是谷歌的五到二十倍。那这是我们工作的一个重要的核心价值,因为当LSTM做CTC训练的时候,整句的训练会差巨大的一个技术瓶颈。谷歌的模型很小,双向的模型只有个节点,单向的模型只有个节点。
我们双向的模型用到了的节点,我们单向的模型用到了个节点,这样的规模是适合工业界去大量产品使用的。这里我插一句,不是说数据小了就不能做研究,也不是说节点少了这个实验就做不了,而是工业节点使用的时候一定要考虑未来的训练语料库是十万小时,如果你做了一个算法,你只能做一万小时,或者是五千小时的训练,那这个算法长期去看是没有工业生存价值的,这是我们工业界思考的一个根本和立场。
所以,这个工作难度的核心就在于训练速度的提升,这个速度的提升是超乎我们常人想象的。因为当年CNN和DNN技术,我觉得于老师和邓老师把这个DNN做起来一个核心的原因是GPU带来的计算量的提升,因为GPU本质上改变了CPU,提升大量的并行度,所以LSTM算法得以流行。
而如果CTC如果想训练的话,一定要有整句训练,而整句训练的训练速度是会造成所有人的技术难题的。而这种难题在工业界中实际上尤为突出,因为我们的训练量太大。而且在学术界,实际上我们探讨一些理论结果,不一定是要大数据,后面我会有一些理论的创新,今天得到的结果不仅仅是说我们工业界就是拿程序跑数据,大数据下宣布一个吓人的理论,它是有理论意义的。
然后我开始进入CTC的讲解和介绍,首先我介绍一下静态分类。静态分类就是橘子,菠萝,还有桃子,其实你做这种分类很简单,是一个分类器。CNN和DNN就是简单的静态分类器,当我们去训练LSTM的时候,大家可以回忆一下。采用谷歌的分子句训练,实际上大家也是模拟单个的状态,在每一个子句中间我们可能有误差和递推。但是实际上它是一个静态建模,建模的目的就是模拟输出状态。
而序列分类就不一样,他是直接把一个序列映射到另一个序列,从头到尾的去做训练。而这种序列训练的建模理论和基础和我们传统的语音识别差异很大,它本质上并不是静态分类器,它是动态分类器。
语音识别要想实现动态分类,语音识别本质上是训练DNN模型、CNN模型,甚至你训练LSTM,多多少少都有静态分类的影子。而CTC训练是真正的序列训练,优化整个序列的损失,而不是优化单点的损失。
那在展开训练之前,我想再对比一下CTC训练跟传统语音训练HMM训练的不同。
那HMM训练是有这样一个拓扑结构,这个输出分布换成GMM或者是换成DNN,这样的分布,大家建模的时候实际上拓扑是固定了,大家只是训练这部分,这部分东西。我们先得到一个模型初值,切分出边界,在固定边界的学习下,把GMM和DNN模型调到最优,这是我们传统的一个学习分量方法。
虽然我们实现了动态训练分类,但是我们的训练和本质上是静态分类器,我们没有做动态分类器的动态直接训练。但是CTC训练不同,CTC是直接的动态序列学习,它是要优化整个序列的可能性,什么叫整个序列的可能性?
比如说话ABC是一个序列,那么Blank空白AABBlankCC,这叫ABC,对应的全叫ABC。任何一种序列可能的展开,都是这个序列的实例。它并没有固定的边界,那引入了一个重要的空白模型。空白模型是无意义的,就是没有任何的物理意义,这个模型就是硬引入来的。对应的这个模型拓扑结构,从上面这个模型转成下面这个模型,大家注意这个模型的拓扑,首先Blank空白是可以跨越的,大家可以是越过空白的。但是也可以经过空白,
黑点表示实际的ABC观测,是不可跨越的。可以多帧注流,但是不可以跨越。空白也可以多帧注流,这是CTC理论模型,实际上非常可贵,CTC模型的拓扑结构是这样的。空白是无限延展的,这些有意义的标签分布只有一帧,这是非常重要的CTC的性质。你模型越好你越近于这个性能,而且CTC模型是否训练成功,就依赖于这个拓扑是不是和语音一致。
而当这个语音识别的标签变为一帧的时候,它的价值在解码时会有巨大的收益。解码器是语音识别中最复杂的技术模块,而且它是复杂的逻辑运作,意味着没法加速,而只能顺着if-else的路径去拓展,整个就是动态规划。
而如果能把解码速度大大压缩,剩下就是DNN的计算量了。DNN是好办的,它是规整的,有固定的计算规律,而且有很多专业硬件,可以加速和提升。
我觉得这就是语音识别的未来,线上如果50%的搜索都由语音完成,如果机器耗费还和今天一样,没有人能承担起这样的机器耗费。所以这个技术对于语音识别的未来弥足珍贵。
那这个模型好不好,能不能在精度上超越我们现实的语音世界?我再解释一下CTC的实际训练情况,刚开始的路径首先是空白,按照刚才的拓扑结构,空白可以经过,也可以跳跃。空白也可以多帧注流,可以跳向有意义的实际建模单元,建模单元也可以跳过空白到下一个。
整个的空间展开是固定序列约束的解码。什么叫固定序列,我知道我的目标序列是ABCDE,我把ABCDE整个空间在这个模型的拓扑结构上全部去展开。
这是我觉得只要大家是传统做语音识别的,全部是这样的思路。所以当机器学习的人最初提出CTC的时候,很少有语音识别的人去追求,甚至到现在很多人,包括我在9月份的interspeech开会,谷歌的学者讲CTC的时候,底下很多人尤其是传统语音识别的人是不信的。因为这东西在传统的语音识别框架中完全存在,我们也完全能做这个事情,这个东西能有提升吗?其实大家都是不相信的。
包括谷歌的实验结果,谷歌实验结果有一些前后矛盾的地方,它得到的提升不足10%。而状态判断系统的很低,就是一个双重的S型状态。谷歌并没有给出原因,为什么CTC能提升。
那然后讲一讲CTC的函数优化,CTC是优化整个无空间序列,这跟我们的图空间是一样的。但是有一点不一样的,CTC并不是全局Normalise,CTC是在逐帧Normalise打分。
CTC不可能和GMM融合,而必须用轨迹建模,这就要用RNN、LSTM进行轨迹建模。CTC训练必须采用整句训练,综合考虑全局的上下文信息,力求全局对比。然后我们讲空白,CTC模型有两个伟大之处。
第一个伟大之处是全局Global,这个东西我们报告有。
第二个是空白,CTC有特殊的空白模型,我们语音识别有SP,我们有长境义和短境义,我们短境义也有,那它那个空白跟我们的空白有什么差别。
那我可以讲一下,引入blank的类别,它的作用主要是较好的解决两个建模单元之间的混淆性。比如说这是两个建模单元的边界,边界的地方我们是切分切出一个边界,这个边界似是而非,说属于前面也行,说属于后面也行,讲不清楚。这种情况下,CTC模型的空白可以吸收这个边界,对于我们的疑问是,我们的SP模型是不是也能干这个事情。
对应的第二个,将传统的轨迹学习转为差异化学习。CTC的模型结果,一定是当前的建模单元只有一个脉冲信号。我并不是在描述轨迹变化过程,我是在描述差异性。哪一帧信号最能代替这个因素,这是CTC训练的理念实质。
还有CTC训练天然解决了语音和非语音的区别,他们的区分性不是那么重要了,因为CTC已经搞定了。当你在区分训练的时候,更重要的是区分语音之间的混淆性。
这一点实际上是通过一帧信号来代替一个观测量,你说R这个因素可能维持时间很长,但是代表的特征只有一帧信号。然后讲一下CTC实际的前后项算法的特性,这个热力图代表的是误差分布函数,这是从前到后的误差分布,这是从后到前的误差分布,这是两个合到一起的误差分布。
这个热力图反映了什么,CTC这个误差从前向后的时候误差非常集中,说明从前向后说对这个声音的确定性很高。但是从后向前的时候,声音迅速分散,代表声音的不确定性很高。
这说明在语音识别中,从左向右对语音识别的结果贡献更大,从右向左有价值,但并非很重要。这意味着,我们可能做单向的LSTM模型,不需要右边的文本,也许可以精确建模。
而只有单向的LSTM模型才是工业产品可以接受的,因为它没有延迟,可以在线去解码。那么这个理论的分析结果,是在做之前实际上我们就想探寻的。如果后向Dominate了这个Process,那CTC的训练必须依赖右边的信息,否则的话整个语音识别是没有办法,整个的CTC训练是没有办法很好的收敛的。
但是很有幸,左边Dominate,右边有价值。CTC的解码过程,实际上CTC的空白占了绝对的优势,我给大家只是找到了一个简单的例子。比如说我们建模“简单可依赖”,那我们就简单每一个字去建模,blank可以无限延展,最后的解码路径就是这样的一个路径。每一个字只有一帧,无论你是什么样的建模单元只有一帧。那这样的解码结果,在解码的时候会有很多优势,我们会有一个解码的算法加速。
然后CTC训练了尖峰生成,大家用机器学习直接做CTC训练,就是从一个裸的模型就硬做,可以做到。我见过很好的结果。而且做的过程,我们用一个概念叫拉尖峰,这个尖峰是一点点拉出来的,刚开始这个锯子什么也没有,“简单可依赖”的几个字,可能拉出来一个简单可可出来了,然后逐渐的拉紧,就把简单可依赖尖峰生成。那么对应的右边是误差的降低,刚开始的误差很大,逐渐误差会降低,这就是CTC训练的优化过程。
那么CTC有两个问题,第一,CTC能够提高人类对于语音的辨识能力吗,这个实际上是一种能力,这种算法是不是超越了现在所有的。第二个CTC能提供能提供工业产品的识别率吗?这个是有差异的。
比如说第一种方法我可以采用双向的建模,我可以采用多面的解码,反正我就无休止的做,我拿到最好的结果,我跟人去PK。第二个结果是指工业产品有设定的要求,有机在线解码的很多的需求,不能让用户无偿的等待,以及计算机计算资源的消耗,必须满足产品要求,那实际上这是两个问题。
那么我主要想对比一下HMM,DNN和CTC的差异。第一是模型结构差异,CTC引入了blank,我们实际上是有SP的,但是我姑且把它命名为差异。第二个CTC训练无须固定边界,对CTC而言是不需要的,裸的模型随便给我一个序列我可以做,自动的endtoend优化模型参数,这是他对应的两个,这是传统我们的CE训练,我们必须知道这个label,根据label算出误差去优化网络,那上面这个模型训练实际上就是CTC的模型。
那我们做CTC整个training的过程,我不是去拉尖峰,我是按照压尖峰的模式,我的尖峰都是往下压的。我的训练过程实际上是这样一个过程,首先出来两个空白,空白长大一点,空白又长大一点,空白再长大一点,最后留下来了一个尖峰,这是我的训练过程。我所有的训练都是采用这种训练模式,推荐给大家,大家可以选择,希望大家可以提出比我更好的训练方法。
CTC训练的区分度是非常关键的,区分度我用美国微软研究院的,当年是我的老板Jeff的话说这是艺术。区分度训练不是技术,很少有人能做的很好。这个东西全部是要通过各种细节去调节,全部运用参数去做。但它是语音识别领域对人工智能的重要贡献,这一点我永远引以为傲。在所有的机器学习理论中没有区分度训练,我认为区分度训练才是真正的endtoend的学习。他直接得到解码结果,根据解码错误反馈来修正误差。
CTC的区分度跟传统的区分度没有差别,这里有两个重要的,一个是深度学习网络内部的梯度,一个是解码的区分度信息,这两个实际上是在一起的。然后我们可以在做CTC模型的时候,我可以对CTC模型维特比得到固定边界,这一点我们就是我们是这样做,大家也可以不这样做。
这个实际上就已经进入了传统语音识别的领域了,我有一个模型,我做一次切分,哪一个最大,哪一个定一些边界。得到固定边界之后,我们就可以进行区分度,这个过程跟传统的区分度一模一样,但是空白对CTC很关键,需要去做。
然后异步SGD的优化,我这个训练是采用异步SGD去做,我是属于一边解码一边update模型,我两个是一同去做的。区分度训练CTC模型的收益和我的固定边界的模型是相当的,所以这一点是非常可贵的,这是我们区分度的结果,我们都有所有的实验。
然后我要讲的是CTC的解码,那CTC技术的解码,实际上跟传统的解码是有一定差异的,第一在图状态空间构建的时候,
每一个原来的你的一个建模单元,我们都是采用单状态。原来的一个因素必须是三状态,这是传统的状态建模,CTC是单状态的。
同时要增加一个可跳转的空白。解码的那个图空间构件基本元素就是这样的拓扑,CTC的解码很快,从两倍实施,把DNN打出来的结果固定,只是去算解码的时间。两倍的时速很慢,我把时间放的非常快,缩短到0.15倍实施,识别率没有任何降低。而缩短到0.05倍实施,识别率只降到0.2。
这说明什么?这说明语音识别的解码器的耗费全部转化为DNN的计算了。而语音识别解码器,一个机器,一个现有的PC器可以handle更多的解码,因为它的解码速度很快,lost很低,这使语音识别未来的发展具有很大的工业的价值。因为现在的语音识别cost很高,你支持一核,一线的服务这个是很花机器的,如果50%用语音搜索这个事搞不定的。但是如果这样去做,我们把语音识别的解码速度大幅的提升,如果计算量全是DNN的话,那是跟容易办的。DNN我相信一定会有大量的专业硬件去做DNN的计算,据我了解很多公司都在做这样的研究,这个东西是一定可以解决的。所以这样的话,语音识别未来是可能的,就是大面积的语音识别的采用是可能的。
然后我们可以把我们的解码的算法告诉给大家,让其他的东西你们找不到,其实很简单,在解码有空白段的时间,这个search的beam值是动态的自适应调节的,如果你确定当天是空白,这个beam可以大幅度的去削减,这样解码的速度就会很快。
然后讲我们的基线系统,因为只有你知道我们做了什么基线系统,你们才知道我们这个工作是不是有价值。那么谷歌当时在interspeech的会议上,被微软当时一个学者问他的结果,最后谷歌的结果有点不一致,因为它的基线很低,它的基线就是一个两层的LSTM。
而我们的基线,状态是两万的状态序列,参数是这样的参数结构,DNN的节点都是个。LSTM的系数是,反馈是。
这个模型非常的大,这是我们的商业系统,我们就在这样一个商业系统。然后训练数据量我们用了将近一万小时,并非觉得大数据就很重要,只是这个技术的核心难点就在于训练速度,如果我们不能证明我们的算法可以用于十万小时,那这个技术做的是没有意义的。
所以相比谷歌,他们是用小时去做,而且模型小了很多,我们的模型很大。然后我们用的优化准则实际上是这个系统,是单机同步训练。训练方法是传统的谷歌分子句。那谷歌分子句的训练方法实际上是被证明非常有效的,那么原模型大概就是几十个G左右,然后我们做这个试验的时候,要求12和实现的解码速度达到0.5,就totally的解码速度,因为代表一个工业的基础要求,因为我们做一个事情总要知道它的解码速度是多少、LOST是多少,这个是我们解码速度问题。我们把我们的基础系统完全地交给大家),大家知道我们这个工作,跟什么做比较,这是我们的试验,我们几乎做了我们能做的所有的实验。
首先状态实验,状态实验首先基本模型是这个模型,我们不知道拓扑是不是有价值,于是我们就引入拓扑。我们也不知道是切分有价值还是交替,是切分的作用还是交替训练的作用。
然后双向的时候,也做了类似的工作,那么对音节或者整个汉字建模我们也做了很多的模型,那我们这个模型的情况呢,首先整个音节建模CNN我们做,然后音节用的是5层的LSTM建模,节点,这个模型很大,双向的。整个就是用,这样做的目的我们就是想看一看,在音节模型上,这个算法的形成到底怎么弄。
其实,对于CTC而言,从理论上它不存在任何建模的困难,这是bulitable的技术,在我的研究中我发现,就是任意的虚点,无论你的建模单元有没有意义,无论它有没有区分性,只要你给我足够的数据、足够大的模型,我一定可以训练出很好的结果。所以在音节实验中,我的模型取的偏大,那如果更大,又会不一样,那实际上我也有一些尝试,这个实验结果就不讲了。
而对声韵母建模,我们标准采用的是我们产品中可以采用的策略。首先,这样文本的声韵母1个,然后CNN+DNN是9层节点,这是标准的CNN模型的配制。然后是CNN加5层LSTM节点,还有节点,还有的结果。
那么,这个结果是有区分度结果,因为这个结果和这个结果可以比,因为它的模型参数是一样的,我在比较,如果我再这个模型参数条件下,节点的5层的话,上线是很困难的。
我在我上线的目前极限的情况下,我去比音节建模跟声韵母的建模的文本的差异,我力求发现,CTC的本质是什么。那么,因为时间有限,我直接给大家展示分析所有的结论。
第一个结论就是,基于整句训练的LSTM建模,如果我LSTM建模,可以让汉语采用状态半音节和音节,效果都不会差。所以,这一点我觉得这个实验实际上是跟大家以前的理论不一样的,我们必须做状态,不做状态不能做实验,其实不是。我任何一个建模单元,我如果采用LSTM去训练,那么我都可以达到一个不错的结果,取决于模型多大、训练数据多少。这样语音识别传统使用了几十年状态建模实际上不用采用了。
然后呢,固定边界学习的LSTM和CTC的结合,那这就是CTC的价值和作用。第一个,在状态建模系统中,CTC训练没有成功,因为状态很短,CTC很难在一个很短的序列中找到blank,给你一个好的表现,通常的结果会有两三个absolutejob,就是你的点很差。
然后如果音节单元自身具有混淆性,比如说音节或者是现在的endtoend的学习,当然没有任何意义,你给我一个序列,我找到标签你去做,那都是可以的。那么这样去做,CTC的价值是,牺牲了建模单元内部的混淆性,比如音节ā和à差别很小,但是我依然可以把这两个模型区分开。让机器学习去做,CTC是能够做到的,那从而提升了LSTM的建模能力。
那么CTC是个训练准则,训练的模型是LSTM模型,那么这两个结论实际上已经说明,用机器学习的知识,不要任何语音识别的先料,我硬做,是可以做出一个系统。
这个系统怎么样,我们结构也是一样的,跟现在的系统情况非常接近。那如果是这样的结论,那几乎我们做语音识别的人就跟教师一样,人家跟我们拿的结果是一样的,那我们的价值在什么地方?
我觉得是传统语音识别的所有工具,我们把CTC训练引入到语音识别的框架中,采用语音识别的很多技术去优化。我们发现,比如说用双向的LSTM建模,不需要用CTC效果一样好。那这个结论是很重要的结果,大家要想做CTC的算法,先做出这个结论,如果你的双向的LSTM避逃不了你现在的线上系统,那你的LSTM有问题。
那做完这个结果之后,那我们来做一个实验,就是对我们有指导意义了,我们对于单向的LSTM采用建模,必须采用CTC,我们得多了性能超越现代系统的一个进步。
那就是说CTC对语音识别的价值在我们的实验中,在双向系统中没有明显的价值,说明CTC对人类的认知能力的提升,至少我的实验中没有证明或者说是略有提升,也是非常小的。
但是CTC的单向LSTM中,价值无可替代,有非常重要提升,那这个提升的价值主要是CTC引入了空白,它有空白,空白呢在这个训练中可以形成targetdelay,因为我不知道右边的信息,比如说a这个音,后面是什么我不知道,我就让你延迟几桢再决策。
所以它自动形成了它这个targetdelay以后,相当于把右边的信息补全,所以CTC的性能在语音识别中,对单向的才会大幅度提升。
而对于双向的模型,我无限的数据、无限的模型、好的训练算法,我一样可以学习到一个东西。所以,CTC不是灵丹妙药,这是我的理论的结果。
我相信,会有大家更多的人去分析、去追求,甚至于否定我的理论,我很欢迎,但是至少今天,我愿意努力地给大家share一下,我们的理论发现,那从而帮助大家更好地去做CTC的学习和训练。
然后,大数据的大模型的结论呢就是说,数据将近万小时的时候,我们采用的是和,因为是可以上线的,所以没必要采用更小的,那更小的性能我们可以再去做追求。
第一点,大数据下极致训练速度的追求是必须的。如果没有极致化的训练速度,你们很难得到好项目。这个相比于传统的技术,如果你要想提升,你需要采用上下文相关的声韵母建模,你还要采用固定边界的训练,再用CTC,再用区分度,最终可以降低产品误识率15%以上,我们得到的收益远远大于谷歌。谷歌当时的收益不足10%,它的论文中,我们的收益很大。而且是跟一个产品性能去比。那么本工作和未来语音识别的贡献呢,就是未来的语音识别服务将不再昂贵,那么我觉得,这是刚才已经解释的技术。
第二呢,语音识别的建模单元从禁锢了几十年的状态建模中会被解放出来,那么如果不用状态建模,你可以采用更复杂的、任意的模型。CTC建模理论上可以让你学到一个很好的结果,那么你可以尝试,什么样的建模单元能够减小语音识别率。
那么,第三点,我觉得也有启示性价值,近万小时的训练条件下产生了过拟合,过拟合是我在CNN和DNN训练中没有看到的。但是对CTC,对目前的学习,我发现了过凝和,那这是很好的效益,说明继续加数据对算法还是会用提升的。
第四点,语音识别的深度学习技术呢,我觉得就向极致计算去发展,那整个工作最核心的价值是计算能力,当年的DNN能够成功是挖掘了GPU,我们现在要挖掘的是把GPU的能力挖掘到极致,会有多个GPU去并行运算,更大规模的并行运算实际上是能推生这个的发展。
朱频频小i机器人创始人、总裁兼首席技术官寄语:在静沙龙的时候就很惊诧于群主广泛的信息来源和对人工智能的转载请注明:http://www.0431gb208.com/sjszyzl/31.html