如何使用适配器自定义 Riva ASR 声学模型 (Conformer-CTC)
目录

如何使用适配器自定义 Riva ASR 声学模型 (Conformer-CTC)#
本教程将引导您了解如何使用 NVIDIA NeMo 和适配器模块自定义 Riva ASR 声学模型 (Conformer-CTC)。
NVIDIA Riva 概述#
NVIDIA Riva 是一个 GPU 加速的 SDK,用于构建针对您的用例定制并提供实时性能的语音 AI 应用程序。
Riva 提供丰富的语音和自然语言理解 (NLU) 服务,例如
自动语音识别 (ASR)
文本到语音合成 (TTS)
自然语言处理 (NLP) 服务集合,例如命名实体识别 (NER)、标点符号和意图分类。
在本教程中,我们将使用 NeMo 和适配器模块自定义 Riva ASR 声学模型 (Conformer)。
要了解 Riva ASR API 的基础知识,请参阅 使用 Python 入门 Riva ASR。
有关 Riva 的更多信息,请参阅 Riva 开发者文档。
神经模块 (NeMo)#
NVIDIA 神经模块 (NeMo) 工具包是一个开源框架,用于通过简单的 Python 界面构建、训练和微调 GPU 加速的语音 AI 和 NLU 模型。开发人员、研究人员和构建智能对话式 AI 应用程序和服务的软件合作伙伴可以自带数据来微调预训练模型,而无需经历从头开始训练模型的麻烦。
什么是适配器?#
适配器是可训练的神经网络模块,它们连接到预训练模型,这样我们就可以冻结原始模型的权重,而只训练适配器参数。这大大减少了自定义模型所需的数据量,同时限制了模型的词汇表不能更改。
简而言之,
适配器模块在它们适配的每一层的输出上形成一个残差桥,这样模型的原始性能就不会丢失。
模型的原始参数完全冻结,因此我们可以通过禁用所有适配器来恢复原始模型。
我们只训练新的适配器参数(占参数总数的一小部分)。这允许使用极少量的数据和计算进行快速实验。
适配器是一个简单的概念,如下图所示。最简单的形式,它们是残差前馈层,将输入维度 (\(D\)) 压缩到小的瓶颈维度 (\(H\)),使得 \(R^D \text{->} R^H\),计算激活函数(例如 ReLU),最后使用另一个前馈层映射 \(R^H \text{->} R^D\)。然后将此输出通过残差连接添加到输入中。
适配器训练的优势和局限性#
适配器可以与有限的训练数据和计算预算一起使用,但是,它们限制了必须使用模型的原始词汇表。因此,不能使用新的字符集词汇表/分词器。
有关更多详细信息,请参阅 NeMo 教程中适配器的优势和适配器的局限性部分。
准备模型和数据集以进行适配#
在模型、数据加载器或优化方法的准备方面,微调和适配器训练之间几乎没有差异。
一个显着的区别是,无需更改预训练网络的词汇表,因此,无需构建新的分词器或更新字符词汇表。如果您的自定义数据集包含需要进行此类更改的标记(例如模型中不存在的标记),那么您需要预处理文本以删除此类标记,或者执行微调(这可能需要更多数据)。
另一个小的区别是频谱增强 (SpecAugment) 的使用。在微调期间,与模型使用数千小时的语音进行预训练时相比,数据量非常少,因此可能已使用 SpecAugment 来防止过拟合。对于适配器,我们建议首先禁用频谱增强,并尝试查看结果是否足够好,然后根据需要慢慢添加回去,以查看是否可以获得任何改进。
有关更多详细信息,请参阅 NeMo 教程的设置模型的训练和评估部分,尤其是设置频谱增强部分。
创建和训练适配器#
NeMo 教程的适配器:创建和准备部分详细介绍了如何为 LinearAdapter 创建配置对象,将其添加到预训练模型,然后冻结模型的原始参数以仅训练新参数。
所有这些只需几行代码,即可初始化您的模型,使其准备好在新语音数据上训练适配器。
评估模型#
由于适配器包含新参数并且本质上是动态的,因此可以在评估之前启用/禁用它们。NeMo 教程中的评估适配模型部分展示了如何加载模型、在模型中启用或禁用适配器、保存模型,然后使用一些数据对其进行评估。
适配器的训练方式是,如果禁用所有适配器,模型将恢复为预训练模型,这使您可以选择是在通用语音(使用原始预训练模型)上表现良好,还是在您的适配领域(启用适配器)上表现更好。
将模型导出到 Riva#
nemo2riva
命令行工具提供了将您的 .nemo
模型导出为可以使用 NVIDIA Riva 部署的格式的功能,NVIDIA Riva 是一个高性能应用程序框架,用于使用 GPU 的多模式对话式 AI 服务。nemo2riva
的 Python .whl
文件包含在 Riva Skills Quick Start 资源文件夹中。您还可以使用 pip
安装 nemo2riva
,如 Conformer-CTC 微调教程中所示。
使用 nemo2riva
,您可以按照 Riva 文档中的说明导出您训练的 NeMo 模型以在 Riva 中使用。
下一步是什么?#
您可以使用 NeMo 为您自己的应用程序构建自定义模型,或者您可以将自定义模型部署到 NVIDIA Riva。