Speech AI 是智能系统使用语音接口与用户进行通信的能力,语音接口在日常生活中已变得无处不在。人们经常通过语音与智能家居设备、车载助手和手机互动。近年来,语音界面质量得到了突飞猛进的改善,使其比十年前更加愉快、实用和自然。
具有语音 AI 接口的智能系统组件包括:
- 自动语音识别( ASR ): 将音频信号转换为文本。
- 履行引擎: 分析文本,识别用户的意图并实现它。
- 文字转语音 (TTS): 将响应的文本元素转换为高质量、自然的语音
ASR 是任何语音 AI 系统的第一个组件,起着至关重要的作用。 ASR 阶段早期出现的任何错误都会在随后的意图分析和实现阶段中出现问题。
目前有超过 6500 种口语在使用,其中大多数没有商业 ASR 产品。 ASR 服务提供商最多覆盖几十家。 NVIDIA Riva 目前涵盖五种语言(英语、西班牙语、德语、普通话和俄语),更多版本将在未来发布。
虽然这一套还很小,但 Riva 为您提供了现成的工作流、工具和指导,以快速、系统、轻松地为新语言提供 ASR 服务。在这篇文章中,我们介绍了 NVIDIA 工程团队为提供新的世界级 Riva ASR 服务而采用的工作流程、工具和最佳实践。开始旅程!
Riva ASR 管道的解剖
深入了解 Riva ASR 管道的内部工作,包括以下主要组件:
- Feature extractor :原始时间音频信号首先通过特征提取块,该特征提取块将数据分割为固定长度的块(例如,每个块 80 毫秒),然后将块从时域转换为频域(频谱图)。
- Acoustic model :然后将频谱图数据输入声学模型,该模型在每个时间步长输出字符(或更一般地,文本标记)的概率。
- 解码器和语言模型 :解码器将概率矩阵转换为字符序列(或文本标记),形成单词和句子。语言模型可以给出一个句子分数,该分数指示句子出现在其训练语料库中的可能性。高级解码器可以在组合声学模型分数和语言模型分数并搜索具有最高组合分数的假设的同时检查多个假设(句子)。
- 标点和大写( P & C ):解码器生成的文本没有标点符号和大写,这是标点符号与大写模型的工作。
- 反向文本规范化( ITN ) :最后,应用 ITN 规则将口头格式的文本转换为所需的书面格式,例如,“十点钟”到“ 10 : 00 ”,或“十美元”到“ 10 美元”。
Riva 新语言的 ASR 工作流
与解决其他人工智能和机器学习问题一样,从头开始创建新的 ASR 服务是一项涉及数据、计算和专业知识的资本密集型任务。 Riva 显著降低了这些障碍。
通过 Riva ,为新语言提供新的 ASR 服务至少需要收集数据并训练新的声学模型。容易提供特征提取器和解码器。
语言模型是可选的,但通常被发现可以将管道的准确性提高到百分之几,这通常是值得努力的。 P & C 和 ITN 进一步提高了文本的可读性,便于人类消费或进一步处理任务。
Riva 新语言工作流分为以下主要阶段:
- 数据收集
- 数据准备
- 培训和验证
- Riva 部署
在接下来的部分中,我们将讨论每个阶段的细节。
第 1 阶段:数据收集
当 Riva 适应一种全新的语言时,大量高质量的转录音频数据对于训练高质量的声学模型至关重要。在适用的情况下,您可以轻松利用几个重要的公共数据集来源:
- Mozilla Common Voice (MCV)
- Multilingual LibriSpeech (MLS)
- Voxpopuli
为了训练 Riva 世界级模型 ,我们还获得了专有数据集。 Riva 生产模型的数据量范围约为 1700 – 16700 小时。
第 2 阶段:数据准备
数据准备阶段执行将各种原始音频数据集转换为统一格式所需的步骤,该格式可由 NVIDIA NeMo 工具包有效地消化,用于培训。
- 数据预处理
- 数据清理/过滤
- 数据分箱
- 训练和试验分裂
- 数据压缩
数据预处理
数据预处理需要将音频或文本数据输入转换为机器学习算法的可读格式。
音频数据
从各种来源获取的音频数据本质上是异构的(文件格式、采样率、比特深度、音频通道数等)。作为预处理步骤,您为每个源构建单独的数据摄取管道,并将音频数据转换为通用格式:
- WAV 文件格式
- 16 位的位深度
- 采样率为 16 kHz
- 单个音频通道
数据集摄取脚本用于将各种数据集转换为标准清单格式。
文本数据
文本清理会删除不属于语言字母表的字符。例如,我们观察并删除了从 MCV、MLS 和 Voxpopuli 收集的德语公共数据集中的一些汉字。
文本规范化将文本从书面形式转换为口头形式。它用作预处理 ASR 训练转录本的预处理步骤。
接下来,构建一个文本标记器。声学模型有两种几乎相同的流行编码选择:字符编码和子字编码。主要区别在于,子字编码模型接受子字标记化文本语料库,并在其解码步骤中发出子字标记。研究和实践表明,子字编码有助于提高声学模型的准确性。
数据清理和过滤
执行此步骤是为了过滤掉数据集中的一些异常样本。作为最简单的过程,过滤掉太长、太短或空的样本。
此外,您还可以过滤掉被认为“有噪声”的样本这将包括相对于先前训练的 ASR 模型具有高字错误率( WER )或字符错误率( CER )的样本。
手动检查这些嘈杂的样本也会发现一些样本存在问题,例如转录与音频不匹配。
数据分箱
对于训练 ASR 模型,可以将不同长度的音频分组到一个批次中,并使用填充使其长度相同。额外的填充是计算浪费的重要来源。
将训练样本拆分为不同长度的桶,并对每个批次从同一桶进行采样,可提高计算效率。这可能导致训练加速超过 2 倍。
训练和试验分裂
这一步骤是任何深度学习和机器学习开发管道的主要内容,以确保模型在不过度拟合训练数据的情况下学习概括。对于测试集,使用与训练数据集不同来源的额外整理数据,如 YouTube 和 TED 演讲。
数据压缩
假设实验在集群上运行,数据集存储在分布式文件系统上。在这种情况下,您可能希望避免不断读取多个小文件,而是将音频文件转换为 tar 。
第 3 阶段:培训和验证
ASR 管道包括以下模型:
- Acoustic model: 将原始音频输入映射到每个时间步的文本标记概率。这个概率矩阵被馈送到解码器,该解码器将概率转换为文本标记序列。
- (Optional) Language model: 用于声学模型输出的解码阶段。
- (Optional) P&C model: 格式化原始抄本,用标点符号和大写字母进行补充。
- (Optional) ITN model: 从口语格式生成所需的书面格式。
声学模型
声学模型是 ASR 服务中最重要的部分。它们是资源最密集的模型,需要大量数据在强大的 GPU 服务器或集群上进行训练。它们对总体 ASR 质量的影响也最大。
Riva 支持的一些声学模型包括 QuartzNet 、 CitriNet 、 Jasper 和 Conformer 。
跨语言迁移学习在为低资源语言训练新模型时尤其有用。但是,即使有大量的数据可用,跨语言迁移学习也有助于进一步提高性能。它基于音素表示可以在不同语言之间共享的思想。
在进行转移学习时,与从头开始的培训相比,您必须使用更低的学习率。当训练 Conformer 和 CitriNet 等模型时,我们还发现使用[2562048]范围内的大批量有助于稳定训练损失。
除英语外,生产中的所有 Riva ASR 模型都通过跨语言迁移学习进行了训练,该模型是用最多的音频时数训练的英语基础模型。
语言模型
语言模型可以给出表示句子出现在其训练语料库中的可能性的分数。例如,一个在英语语料库上训练的模型判断“识别语音”比“毁掉一个漂亮的桃子”更有可能。它还判断“ Ich bin ein Sch ü ler ”很不可能,因为这是一个法语句子。
可以使用语言模型结合波束搜索解码来进一步改进由声学模型预测的转录。在我们的实验中,我们通常通过使用简单的 n-gram model 观察到额外 1-2% 的 WER 减少。
当与 LM 结合时,解码器将能够将其“听到”的内容(例如“让我们点燃一根无谓的棍子”)纠正为更具常识性的内容(即“让我们点一根香棒”),因为 LM 对后一句的评分将高于前一句。
训练数据: 我们通过组合 ASR 集合中的所有转录文本、标准化、清理,然后使用与上述 ASR 转录预处理相同的标记化器进行标记化来创建训练集。 Riva 支持的语言模型是 n-gram 模型,可以使用 Kenlm toolkit 进行训练。
标点和大写模型
标点和大写模型由预先训练的 Bidirectional Encoder Representations from Transformers (BERT) 和两个令牌分类头组成。一个分类主管负责标点符号任务,另一个负责大写任务。
反向文本规范化模型
我们利用 NeMo 文本反向归一化 module 来完成任务。 NeMo ITN 基于 weighted finite-state transducer (WFST) grammars 。该工具使用 Pynini 构建 WFST ,创建的语法可以导出并集成到 Sparrowhawk ( the Kestrel TTS text normalization system 的开源版本)中进行生产。
第 4 阶段: Riva 部署
一旦所有模型都经过培训,就应该将它们部署到 Riva 进行服务。
带上自己的模型
鉴于您迄今为止培训的最终.nemo
模型,以下是在 Riva 上部署所需的步骤和工具:
- Riva 快速启动脚本提供
nemo2riva
转换工具,以及用于下载servicemaker
、riva-speech-server
和.riva
Docker 图像的脚本(riva_init.sh
、riva_start.sh
和riva-speech-client
)。 - 在
servicemaker
容器中使用nemo2riva
命令构建.riva
资产。 - 使用
servicemaker
容器中的riva-build
工具构建 RMIR 资产。 - 使用
riva-deploy
以.rmir
格式部署模型。 - 使用
riva-start.sh.
启动服务器
服务器成功启动后,您可以查询服务以测量准确性、延迟和吞吐量。
Riva NGC 上的预训练模型
或者,您可以使用 NGC 上发布的 Riva 预训练模型。这些模型可以按原样部署,也可以作为微调和进一步开发的起点。
案例研究:德语
对于德语,有几个重要的公共数据集来源,您可以轻松访问:
- Mozilla Common Voice ( MCV )语料库 7.0 , DE 子集: 571 小时
- Multilingual LibriSpeech ( MLS ), DE 子集: 1918 小时
- Voxpopuli , DE 子集: 214 小时
此外,我们还获得了总计 3500 小时培训数据的专有数据!
我们从 NeMo DE Conformer-CTC large model (在 MCV7.0 上训练 567 小时,在 MLS 上训练 1524 小时,在 VoxPopuli 上训练 214 小时)开始训练最终模型,该模型本身使用 English Conformer model 作为初始化(图 5 )。
所有 Riva 德国资产都在 NGC 上发布(包括.nemo
、.riva
、.tlt
和.rmir
资产)。您可以使用这些模型作为开发的起点。
声学模型
- Citrinet ASR 德语:
- 符合 ASR 德语
ITN 模型
NGC 提供了一个 OpenFST finite state archive (.far) ,用于开源 Sparrowhawk 标准化引擎和 Riva 。
语言模型
NGC 提供了使用 KenLM 进行 Kneser-Ney 平滑训练的 4-gram 语言模型 。此目录还包含手电筒解码器使用的解码器字典。
P & C 模型
NGC 提供了 Riva P&C 德语模型 。
案例研究:印地语
对于印地语,您可以轻松访问 Hindi-Labelled ULCA-asr-dataset-corpus 公共数据集:
- 纽森航空( 791 小时)
- 斯瓦扬普拉巴( 80 小时)
- 多个来源( 1627 小时)
我们从 NeMo En Conformer-CTC medium model 开始训练印地语 Conformer CTC 介质模型作为初始化。印地语模型的编码器用英语模型的编码器权重初始化,解码器从头初始化(图 6 )。
开始并带上自己的语言
NVIDIA Riva 语音人工智能生态系统(包括 NVIDIA TAO 和 NVIDIA NeMo )为新语言提供了全面的工作流程和工具,使其成为一种系统化的方法,可以将您自己的语言纳入其中。
无论您是为特定于领域的应用程序微调现有的语言模型,还是为使用少量或大量数据的全新方言实现语言模型, Riva 都提供了这些功能。
有关 NVIDIA Riva ASR 工程团队如何开发新语言的更多信息,请参阅 Riva new language tutorial series 并将其应用到您自己的项目中。