benben82 发表于 2023-10-8 14:33:54

想了解一下现在语音识别主流的方案是什么?主流的落地方案又是什么呢?

想了解一下现在语音识别主流的方案是什么?主流的落地方案又是什么呢?

lybo 发表于 2023-10-8 14:34:48

https://github.com/double22a/asr_paper_code   语音识别论文&代码

bigboboo 发表于 2023-10-8 14:35:36

目前来说主流的方案应该还是有两套:基于Kaldi的系统和基于端到端模型的系统,这两个方案,我认为现阶段仍然是两个主流的方向。虽然很多论文和工作已经宣称自己的端到端模型比Kaldi的TDNN-LFMMI系统好多少好多少,但是要注意,这些对比是不是完全合理的?比如拿一个纯流式的Kaldi模型去PK完全非流式的端到端模型,那肯定是端到端模型更好!Kaldi的系统,有自己的一整套完整的框架,从模型训练到解码器,即使现在很多公司已经升级到端到端系统,Kaldi工具包仍然作为一个重要的工具,比如进行GMM模型训练、特征提取、对齐等重要的功能仍在使用。下面针对这两种主流的方案进行介绍,但是针对这个问题,我觉得我的答案应该是:主流落地方案是以CTC或Transducer为主导的端到端语音识别系统了。
Kaldi系统

Kaldi系统主打“神经网络声学模型+解码图“对方案;神经网络一般使用TDNN比较多,训练损失函数是LFMMI+CE联合训练。解码图是基于WFST的,HCLG复合而成。可以说大部分公司的解码器都是基于Kaldi的进行的工程优化,即使现在的端到端系统,想要投入正式的使用,仍要使用一个基于WFST的解码器,只不过一般是相对比较简单的构图方式了。具体的解码算法,可以参考一下文章和专栏:
孙思宁:WFST解码器(6)—LatticeFasterDecoder代码细节解析和对比孙思宁:WFST解码器(3)—LatticeSimpleDecoder代码逐行解析和可视化虽然现在很多公司的系统还是基于Kaldi的,但是长远来看,Kaldi这套系统应该很快就会被放弃。一方面,这套系统完全C++实现,虽然是一个非常好的开源项目,代码质量非常好,但对使用者来说,门槛也相对比较高,和现在基于pytorch的方案对比,简直是复杂的不行。一个初学者,想要写一个目前最为前沿的神经网络结构,用pytorch结合开源代码,可能几天就能搞定,但是如果用Kaldi,那可就复杂多了。另一方面,端到端系统不断的完善,以谷歌、微软和亚马逊等公司的语音团队,不断的打磨各种流式端到端模型,系统的性能也超过了Kaldi,建模流程又非常简单明了,所以大家肯定会转移到端到端系统。
端到端系统

端到端系统是一个比较宽泛的说法,因为目前的端到端方案其实有多种,所谓的端到端,其实都是相对于之前对序列数据建模的“frame-by-frame”的方式而言的。端到端方案都是采用“sequence-to-sequence”的建模方式,比如CTC,RNN-Transducer(RNNT)以及Attention based Enocder-Decoder(AED)。在端到端开始流行的时候,大家希望建模颗粒度越大越好,比如输入语音,直接输出汉字,那么这才是最直观的端到端系统。可是随着大家的re-re-research,发现这种系统根本无法真正使用,不融合任何外部信息的端到端系统根本无法真正投入到商业使用,做到最后,大家还是选择用比较小粒度的建模单元,比如phone来建模,最后还需要外接一个简单的TLG解码图,只不过声学模型的训练,采用了“sequence-to-sequence”的损失函数。如果从这层面来说,我们目前所谓的端到端系统,绝大部分还是一个混合系统,只不过训练过程和建模过程得到了简化。
在实际使用的过程中,基于CTC和Transducer的系统相对较多,因为它们只要采用流式的神经网络,就能够实现流式的实时识别。CTC和Transducer只是两种损失函数而已,声学模型可以采用任何神经网络,只要这种神经网络有一定的记忆能力或者建模上下文的能力。截止到目前(20220623),我相信大家采用的神经网络应该主要都是Conformer了,比如现在国内比较流行的WeNet,其实就是Conformer+CTC的架构,google力推的Cascaded encoder方式,则是采用了Conformer+Transducer(C-T)方式。那么要是对比CTC和Transducer两个损失函数,我更倾向于Transducer损失函数,这种损失函数理论上是比CTC更完美的,而且实际使用的时候,可以玩的花样也是比较多的,比如微软的Meng Zhong博士它们的ILME、我们的Tiny Transducer(https://zhuanlan.zhihu.com/p/531934889)中的一些小技巧,都非常有效。如果你想迅速部署一个模型,你可以使用WeNet,目前WeNet只是支持Conformer-CTC,Conformer的实现主要是参考了Espnet,如果你想训练一个轻量级的小模型,采用其他结构,那么就还是需要自己编码实现。据我了解,目前各个公司基本上都有一套自己的基于pytorch的端到端系统,因为每个公司自己的业务不一样,需要的模型结构肯定也不同,设备端和云端所用的模型会有很大区别,再有就是pytorch的jit导出模型,C++环境部署做的非常好,极大的简化了模型部署的难度。

yanwen 发表于 2023-10-8 14:36:31

目前开源语音识别的主流的方案有K2、PaddleSpeech、ESPnet 、WeNet。
关于主流的落地方案是什么,这个要分开说,如果想搞科研,那么ESPnet就会更适合一些,WeNet也可以;如果要产品落地的话,那么目前来说WeNet是走在最前面的。首先,WeNet针对落地化的一些问题,提出了语言模型、热词等不少解决方案,接下来我们也会继续优化热词,后续可能会出一个热词增强的2.0,大家也可以关注一下。其次,我们基本上能够很简单地把WeNet部署起来,用到一个真实的业务上面去。
分享者:彭震东
清华大学计算机硕士,系地平线语音识别算法工程师,曾在出门问问从事语音识别算法和产品研发,参与行业流行的端到端语音识别项目WeNet,参与多领域大规模中文语音识别开源数据集 WenetSpeech的开发。
页: [1]
查看完整版本: 想了解一下现在语音识别主流的方案是什么?主流的落地方案又是什么呢?