前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ICLR 2025|小米新一代Kaldi语音识别算法CR-CTC,纯CTC性能实现SOTA

ICLR 2025|小米新一代Kaldi语音识别算法CR-CTC,纯CTC性能实现SOTA

作者头像
机器之心
发布于 2025-02-08 06:23:39
发布于 2025-02-08 06:23:39
1600
举报
文章被收录于专栏:机器之心机器之心

新一代 Kaldi 团队是由 Kaldi 之父、IEEE fellow、小米集团首席语音科学家 Daniel Povey 领衔的团队,专注于开源语音基础引擎研发,从神经网络声学编码器、损失函数、优化器和解码器等各方面重构语音技术链路,旨在提高智能语音任务的准确率和效率。

目前,新一代 Kaldi 项目 (https://github.com/k2-fsa)主要由四个子项目构成:核心算法库 k2、通用语音数据处理工具包 Lhotse、解决方案集合 Icefall 以及服务端引擎 Sherpa,方便开发者轻松训练、部署自己的智能语音模型。

近日,小米集团新一代 Kaldi 团队关于语音识别算法的论文《CR-CTC: Consistency regularization on CTC for improved speech recognition》被 ICLR 2025 接收。

  • 论文链接:https://arxiv.org/pdf/2410.05101
  • 论文代码:https://github.com/k2-fsa/icefall/pull/1766(已 merge 进 icefall 框架)

摘要

主流的自动语音识别(ASR)模型包括 CTC [1]、transducer [2] 和混合系统 CTC/AED [3]。CTC 是其中最简单、最便于部署的方法,但由于它的性能通常明显落后于 Transducer 和 CTC/AED,这限制了它的实际应用。

为此,新一代 Kaldi 团队提出了 Consistency-Regularized CTC (CR-CTC),可以让纯 CTC 模型的识别性能比肩 Transducer 和 CTC/AED。CR-CTC 在多个主流的 ASR 数据集,包括 LibriSpeech、Aishell-1、GigaSpeech 等数据集上,取得新的 SOTA 结果(不依赖外部训练数据和外部语言模型)。

例如,在 LibriSpeech 数据集上训练 Zipformer-L,标准 CTC 的 WER 为 2.5/5.72,CTC/AED 的 WER 为 2.09/4.59, Pruned Transducer 的 WER 为 2.00/4.38;CR-CTC 的 WER 为 2.02/4.35;CTC/AED 和 Pruned Transducer 挂上 CR-CTC 联合训练后,WER 可分别进一步降低到 1.96/4.08 和 1.88/3.95。

方法实现

如 Figure 1 所示,CR-CTC 方法非常简单,先从同一个输入 Mel-spectrogram x 得到两个不同的 augmented views

,分别输入参数共享的 encoder 模型 f,得到对应的两个 CTC 概率分布

,除了计算两个 CTC loss

,还引入 consistency regularization loss 来约束两个分布的一致性:

。系统总体 loss 为:

其中 α 为控制正则的超参数,默认设置为 0.2。

Different augmented views

我们对同一个输入 x 的两个 copy 独立地使用 SpecAugment [4] 来获得不同的 augmented views

。SpecAugment 包含 time warping、frequency masking 和 time masking。由于 time warping 会显著改变输出的时间戳,因此我们在创建 copy 前先应用 time warping,防止两个分支的输出分布在时间戳上严重不匹配。接着,分别对两个 copy 独立应用 frequency masking 和 time masking,得到了

。相较于普通的 ASR 系统,我们特意使用了更大程度的 time masking。

Consistency regularization loss

我们在CTC 分布的每一帧上应用 consistency regularization,通过最小化每一对分布

之间的双向 KL 散度:

。此处,sg 表示 stop-gradient,防止这一项的梯度影响目标分布。Consistency regularization loss 公式为:

方法解释

论文从三个不同的角度来解释 CR-CTC 的本质行为:1)self-distillation;2)masked prediction;3)peak suppression。

Self-distillation

当我们在训练中使用 dropout [5] 和 stochastic depth [6] 等模型正则技术,可以看作我们正在隐式地训练随机采样的不同 sub-model,这些 sub-model 最终被集成为一个 ensemble 用于推理。与 R-Drop [7] 和 cosub [8] 类似,CR-CTC 在进行对不同 sub-model 之间的 self-distillation,监督信号为对方提供的帧级别的 token 分布。另外,CR-CTC 使用了不同的 augmented views(以及更大程度的 time-masking),让这些 sub-model 接触输入数据的不同角度的信息,加强他们预测的多样性,这样有利于更丰富、更完备的知识蒸馏。

Masked prediction

在 CR-CTC 中,那些覆盖在 time masking 区域的帧,被要求着基于其他没有被 masked 的区域,去预测对方提供的 token 分布。这个过程类似于 masked-based 自监督模型 [9,10,11],鼓励模型去学习非 mask 部分的上下文表征信息,并发掘模型隐式的语言建模能力。我们在 CR-CTC 中使用不同的 augmented views,减少两边同时被覆盖在 time masking 区域的帧的出现,提高这些被 masked 位置所接收的 token 分布的质量。另外,使用更大程度的 time masking 可以加强 masked prediction 行为,进而增强模型对上下文表征信息的学习。

Peak suppression

众所周知,CTC 通常会学习到非常尖的概率分布。如 Figure 2 (left) 所示,non-blank token 只占 1 帧,其他的都是 blank,它们的概率都非常高。这种现象表明模型有可能已经过拟合了,泛化能力不强。CR-CTC 的 consistency regularization 引导着模型学习两边分布的平均,这使得模型学习到的 CTC 分布会更加平滑。这个 peak suppression 行为减少了在训练数据上的过度置信,从而增强模型的泛化能力。如 Figure 2 (right) 所示,CR-CTC 学习到的分布更加平滑,概率更低,伴随着更多 non-blank 的 repeat 出现。

实验结果

论文主要使用 Zipformer [12] 作为 speech encoder 进行实验验证。由于 CR-CTC 训练时需要进行两次 forward,我们对 CR-CTC 模型的 batch size 和 epoch 数都设置为标准 CTC 模型的一半,来确保两者训练代价可比较。具体使用的 GPU 数量和 epoch 数在论文附录中。

与 SOTA 模型相比较

Table 1、2、3 分别展示了不同模型在 LibriSpeech、Aishell-1、GigaSpeech 三个数据集上的表现(不依赖外部训练数据和外部语言模型)。总的来说,CR-CTC 的性能显著超越标准 CTC,和 CTC/AED 与 Transducer 模型效果相当。另外,挂上 CR-CTC 联合训练,可以进一步提升 CTC/AED 和 Transducer 的性能。在这三个数据集上,我们取得了新的 SOTA 结果。

消融实验

Table 4、5、6 分别展示了 CR-CTC 关于不同解释角度 self-distillation、masked prediction、peak suppression 的消融实验结果,具体说明可参考论文。

与挂一个 auxiliary head 联合训练相比较

想要提升 CTC 系统的性能,一个最直接的方法便是挂一个 AED head 或者一个 Transducer head 联合训练。如 Table 7 所示,CR-CTC 的性能明显超过这两个方法,参数还更少。

在 Conformer 模型上验证

如 Table 17 所示,使用 Conformer [13] 作为 speech encoder 时,CR-CTC 同样可以显著提升 CTC 的性能,并且略微超过 CTC/AED 和 Transducer。

参考

[1] Graves, A., Fernández, S., Gomez, F., & Schmidhuber, J. (2006, June). Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks. In Proceedings of the 23rd international conference on Machine learning (pp. 369-376).

[2] Graves, A. (2012). Sequence transduction with recurrent neural networks. arXiv preprint arXiv:1211.3711.

[3] Watanabe, S., Hori, T., Kim, S., Hershey, J. R., & Hayashi, T. (2017). Hybrid CTC/attention architecture for end-to-end speech recognition. IEEE Journal of Selected Topics in Signal Processing, 11 (8), 1240-1253.

[4] Park, D. S., Chan, W., Zhang, Y., Chiu, C. C., Zoph, B., Cubuk, E. D., & Le, Q. V. (2019). Specaugment: A simple data augmentation method for automatic speech recognition. arXiv preprint arXiv:1904.08779.

[5] Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014). Dropout: a simple way to prevent neural networks from overfitting. The journal of machine learning research, 15 (1), 1929-1958.

[6] Huang, G., Sun, Y., Liu, Z., Sedra, D., & Weinberger, K. Q. (2016). Deep networks with stochastic depth. In Computer Vision–ECCV 2016: 14th European Conference, Amsterdam, The Netherlands, October 11–14, 2016, Proceedings, Part IV 14 (pp. 646-661). Springer International Publishing.

[7] Wu, L., Li, J., Wang, Y., Meng, Q., Qin, T., Chen, W., ... & Liu, T. Y. (2021). R-drop: Regularized dropout for neural networks. Advances in Neural Information Processing Systems, 34, 10890-10905.

[8] Touvron, H., Cord, M., Oquab, M., Bojanowski, P., Verbeek, J., & Jégou, H. (2023). Co-training 2L submodels for visual recognition. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 11701-11710).

[9] Devlin, J. (2018). Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.

[10] Baevski, A., Zhou, Y., Mohamed, A., & Auli, M. (2020). wav2vec 2.0: A framework for self-supervised learning of speech representations. Advances in neural information processing systems, 33, 12449-12460.

[11] Hsu, W. N., Bolte, B., Tsai, Y. H. H., Lakhotia, K., Salakhutdinov, R., & Mohamed, A. (2021). Hubert: Self-supervised speech representation learning by masked prediction of hidden units. IEEE/ACM transactions on audio, speech, and language processing, 29, 3451-3460.

[12] Yao, Z., Guo, L., Yang, X., Kang, W., Kuang, F., Yang, Y., ... & Povey, D. (2023, October). Zipformer: A faster and better encoder for automatic speech recognition. In The Twelfth International Conference on Learning Representations.

[13] Gulati, A., Qin, J., Chiu, C. C., Parmar, N., Zhang, Y., Yu, J., ... & Pang, R. (2020). Conformer: Convolution-augmented transformer for speech recognition. arXiv preprint arXiv:2005.08100.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
python多版本共存最好的解决方案-虚拟环境
在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。 如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办? 这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。 具体的pytho
IT架构圈
2018/06/01
2K0
Python虚拟环境virtualenv手册
python 的虚拟环境可以为一个 python 项目提供独立的解释环境、依赖包等资源,既能够很好的隔离不同项目使用不同 python 版本带来的冲突,而且还能方便项目的发布。
仲君Johnny
2024/01/24
2940
[转载]windows下安装Python虚拟环境virtualenv,virtualenvwrapper-win
1 前言 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题。 通过 virtualenv 这个工具,就可以构建一系列 虚拟的Python环境 ,然后在每个环境中安装需要的软件包(配合 pip 使用),这一系列的环境是相互隔离的。作为一个独立的环境就不容易出现版本问题,还方便部署。 2 安装 pip install virtualenv 3 virtualenv的基本使用 3.1 创建虚拟环境 virtualenv venv window
程序员同行者
2018/07/02
1.8K0
Python自学成才之路 玩转虚拟环境
Python自带的那个环境是系统环境,同一个项目的不同版本可能会依赖不同版本的依赖包,如果都放在系统环境下会使系统环境变得很庞大,同时操作起来也不太方便,如果给每个项目都单独配置一个环境,各个项目之间互不干扰,开发起来就方便些,每个项目单独的环境叫做虚拟环境。
我是李超人
2020/09/02
5600
virtualenv,非常强大的Python虚拟环境工具,强烈推荐~
在进行Python开发项目时,经常会用到各种依赖库,为了保持每个代码项目的独立性,以及避免与其他项目库相互干扰,导致版本冲突,这时候单独创建一个虚拟环境就很有必要。
派大星的数据屋
2025/04/13
1400
virtualenv,非常强大的Python虚拟环境工具,强烈推荐~
工具篇 | Python虚拟环境的搭建与管理【virtualenv/virtualenv-wrapper】
当我们在使用Python的时候,经常会使用pip来安装第三方包,那么我们会遇到这样两个问题:
LogicPanda
2019/07/30
9600
【Python学习笔记】-虚拟环境virtualenv
在开发python应用程序的时候,系统安装的python3只有一个版本:3.4。所有的第三方的包都回被pip安装到python3的site-packages目录下。
DevOps在路上
2023/05/16
4430
浅谈virtualenv(虚拟环境)
简介  virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。 例如: 如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办? 这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。 安装 pip3 install virtualenv 基本使用 为一
人生不如戏
2018/07/04
7240
python笔记41-虚拟环境virtualenv
如果你是一个python初学者,我是不建议你搞python虚拟环境的,我看到很多python的初学者同学,使用最新版的pycharm,新建一个工程时候默认就是venu虚拟环境。 然后在使用cmd里面pip安装第三方包的时候,在工程里面死活导入不成功,搞的开始怀疑人生。(你给他讲这是虚拟环境venu,他会一脸懵逼!)
上海-悠悠
2019/09/02
1.2K0
mac python virtualenv 安装虚拟环境
主要是为了解决在同一个系统中存在多个项目的情况, 采用虚拟的方式,为每个项目创建各自的环境,使各个项目不会相互干扰
onety码生
2018/11/21
8730
Win10下Python虚拟环境virtualenv安装和使用
在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而virtualenv就是解决这种情况的,virtualenv通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰,如下所示。
菲宇
2022/12/21
2.9K0
Win10下Python虚拟环境virtualenv安装和使用
使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python
系统中的多个python混用会导致$PYTHONPATH混乱,或者各个工程对于package的版本要求不同等等情况。有一个简单的解决方案就是用virtualenv来隔离多个python,其本质只是实现隔离不同python中$PYTHONPATH的路径,当然也可以衍生到隔离多个$PATH。
全栈程序员站长
2022/07/09
4070
python 环境安装
Python官网:http://www.python.org/ Python文档地址:http://www.python.org/doc/ Python模块仓库 https://pypi.python.org/pypi
py3study
2020/01/15
7130
python 环境安装
python安装虚拟环境步骤_python虚拟环境迁移
http://blog.csdn.net/pipisorry/article/details/47008981
全栈程序员站长
2022/09/27
8K0
python安装虚拟环境步骤_python虚拟环境迁移
使用virtualenv搭建Python虚拟环境
virtualenv用来部署独立Python的一个工具,用来解决版本依赖,及不兼容的项目。
苦叶子
2018/07/25
1K0
使用virtualenv搭建Python虚拟环境
干货 | 5分钟教你科学使用Python虚拟环境
虚拟环境可以看作是原生Python的副本,但是标准库都是一样的,每次都复制是不合算的
网络安全自修室
2022/12/06
7320
干货 | 5分钟教你科学使用Python虚拟环境
windows下面使用多版本Python安装指定版本的虚拟环境
今天博主在搭建一个项目的时候,希望使用最新版的Python3.7版本,但是Python3.6的版本也要留下,那么问题来了,如何解决这个问题呢?如何在windows下面使用多版本Python安装指定版本的虚拟环境呢?这篇文章我就来解决这个问题。
啃饼思录
2018/10/15
1.9K0
python的虚拟环境
-p PYTHON_EXE, --python=PYTHON_EXE 指定生成的虚拟环境使用的Python解释器:
py3study
2020/01/02
6290
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
要搞清楚什么是虚拟环境,首先要清楚Python的环境指的是什么。当我们在执行python test.py时,思考如下问题:
全栈程序员站长
2022/09/27
44.9K0
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
安装python虚拟环境
1 virtualenv pip install virtualenv 普通安装 virtualenv python3env python3env是自己定的名字 指定安装的python版本 virtu
98k
2018/04/11
9180
安装python虚拟环境
推荐阅读
相关推荐
python多版本共存最好的解决方案-虚拟环境
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档