模型简介
模型特点
模型能力
使用案例
🚀 Canary 1B
NVIDIA NeMo Canary 是一系列多语言多任务模型,在多个基准测试中取得了领先的性能。Canary-1B 拥有 10 亿个参数,支持 4 种语言(英语、德语、法语、西班牙语)的自动语音转文本识别(ASR),以及英语与德语、法语、西班牙语之间带或不带标点和大写(PnC)的翻译。
🚨注意:查看我们最新的 Canary-1B-Flash 模型,它是 Canary-1B 更快、更准确的变体!
🚀 快速开始
本模型可在 NeMo 工具包 [4] 中使用,可作为预训练检查点进行推理或在其他数据集上进行微调。
加载模型
from nemo.collections.asr.models import EncDecMultiTaskModel
# 加载模型
canary_model = EncDecMultiTaskModel.from_pretrained('nvidia/canary-1b')
# 更新解码参数
decode_cfg = canary_model.cfg.decoding
decode_cfg.beam.beam_size = 1
canary_model.change_decoding_strategy(decode_cfg)
输入格式
Canary 的输入可以是音频文件路径列表或 jsonl 清单文件。 如果输入是路径列表,Canary 会假设音频为英语并进行转录。即 Canary 的默认行为是英语 ASR。
predicted_text = canary_model.transcribe(
paths2audio_files=['path1.wav', 'path2.wav'],
batch_size=16, # 推理时的批量大小
)[0].text
若要使用 Canary 转录其他支持的语言或进行语音到文本的翻译,请将输入指定为 jsonl 清单文件,其中文件的每一行都是一个包含以下字段的字典:
# input_manifest.json 中的一行示例
{
"audio_filepath": "/path/to/audio.wav", # 音频文件的路径
"duration": 1000, # 音频的时长,如果使用 NeMo 主分支,可以设置为 `None`
"taskname": "asr", # 使用 "s2t_translation" 进行语音到文本的翻译(r1.23 版本),如果使用 NeMo 主分支则使用 "ast"
"source_lang": "en", # 音频输入的语言,对于 ASR,设置 `source_lang`==`target_lang`,可选值=['en','de','es','fr']
"target_lang": "en", # 文本输出的语言,可选值=['en','de','es','fr']
"pnc": "yes", # 是否输出标点和大写,可选值=['yes', 'no']
"answer": "na",
}
然后使用:
predicted_text = canary_model.transcribe(
"<path to input manifest file>",
batch_size=16, # 推理时的批量大小
)[0].text
自动语音转文本识别(ASR)
用于转录英语音频的清单示例可以是:
# input_manifest.json 中的一行示例
{
"audio_filepath": "/path/to/audio.wav", # 音频文件的路径
"duration": 1000, # 音频的时长,如果使用 NeMo 主分支,可以设置为 `None`
"taskname": "asr",
"source_lang": "en", # 音频输入的语言,对于 ASR,设置 `source_lang`==`target_lang`,可选值=['en','de','es','fr']
"target_lang": "en", # 文本输出的语言,可选值=['en','de','es','fr']
"pnc": "yes", # 是否输出标点和大写,可选值=['yes', 'no']
"answer": "na",
}
自动语音到文本翻译(AST)
用于将英语音频转录为德语文本的清单示例可以是:
# input_manifest.json 中的一行示例
{
"audio_filepath": "/path/to/audio.wav", # 音频文件的路径
"duration": 1000, # 音频的时长,如果使用 NeMo 主分支,可以设置为 `None`
"taskname": "s2t_translation", # r1.23 版本仅识别 "s2t_translation",如果使用 NeMo 主分支则支持 "ast"
"source_lang": "en", # 音频输入的语言,可选值=['en','de','es','fr']
"target_lang": "de", # 文本输出的语言,可选值=['en','de','es','fr']
"pnc": "yes", # 是否输出标点和大写,可选值=['yes', 'no']
"answer": "na"
}
或者,也可以使用 transcribe_speech.py
脚本完成相同的操作。
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/canary-1b"
audio_dir="<path to audio_directory>" # 转录音频目录中的所有 wav 文件
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/canary-1b"
dataset_manifest="<path to manifest file>"
输入
该模型接受采样率为 16000 Hz 的单声道音频,以及任务/语言/PnC 标签作为输入。
输出
模型根据输入音频输出转录/翻译后的文本,以指定的目标语言输出,可选择是否包含标点和大写。
✨ 主要特性
- NVIDIA NeMo Canary 是多语言多任务模型系列,在多个基准测试中达到了最先进的性能。
- Canary-1B 拥有 10 亿个参数,支持 4 种语言(英语、德语、法语、西班牙语)的自动语音到文本识别(ASR),以及英语与德语、法语、西班牙语之间带或不带标点和大写(PnC)的翻译。
- Canary 是一种编码器 - 解码器模型,具有 FastConformer [1] 编码器和 Transformer 解码器 [2]。使用从编码器提取的音频特征,将任务令牌(如
<source language>
、<target language>
、<task>
和<toggle PnC>
)输入到 Transformer 解码器中以触发文本生成过程。 - Canary 使用来自每种语言的单个 SentencePiece [3] 分词器的连接分词器 [5],这使得它很容易扩展到更多语言。
📦 安装指南
要使用 Canary 进行训练、微调或转录,需要安装 NVIDIA NeMo。建议在安装 Cython 和最新版本的 PyTorch 之后安装它。
pip install git+https://github.com/NVIDIA/NeMo.git@r1.23.0#egg=nemo_toolkit[asr]
📚 详细文档
模型架构
Canary 是一个编码器 - 解码器模型,具有 FastConformer [1] 编码器和 Transformer 解码器 [2]。通过编码器提取音频特征后,将诸如 <source language>
、<target language>
、<task>
和 <toggle PnC>
之类的任务标记输入到 Transformer 解码器中,以触发文本生成过程。Canary 使用来自每种语言的单个 SentencePiece [3] 分词器的连接分词器 [5],这使得它很容易扩展到更多语言。Canay - 1B 模型总共具有 24 个编码器层和 24 个解码器层。
训练
Canary - 1B 使用 NVIDIA NeMo 工具包 [4] 进行训练,在 128 个 NVIDIA A100 80GB GPU 上进行 150k 步训练,采用动态分桶,每个 GPU 的批量时长为 360 秒。可以使用这个 示例脚本 和 [基础配置](https://github.com/NVIDIA/NeMo/blob/main/examples/asr/conf/speech_multitask/fast - conformer_aed.yaml) 来训练该模型。这些模型的分词器是使用训练集的文本转录通过这个 脚本 构建的。
数据集
Canary - 1B 模型在总共 85k 小时的语音数据上进行训练。它包括 31k 小时的公共数据、Suno 收集的 20k 小时数据和 34k 小时的内部数据。公共数据的组成如下:
英语(25.5k 小时)
- Librispeech 960 小时
- Fisher 语料库
- Switchboard - 1 数据集
- WSJ - 0 和 WSJ - 1
- 国家语音语料库(第 1 部分,第 6 部分)
- VCTK
- VoxPopuli(英语)
- Europarl - ASR(英语)
- 多语言 Librispeech(MLS 英语) - 2000 小时子集
- Mozilla Common Voice(v7.0)
- People's Speech - 12000 小时子集
- Mozilla Common Voice(v11.0) - 1474 小时子集
德语(2.5k 小时)
- Mozilla Common Voice(v12.0) - 800 小时子集
- 多语言 Librispeech(MLS 德语) - 1500 小时子集
- VoxPopuli(德语) - 200 小时子集
西班牙语(1.4k 小时)
- Mozilla Common Voice(v12.0) - 395 小时子集
- 多语言 Librispeech(MLS 西班牙语) - 780 小时子集
- VoxPopuli(西班牙语) - 108 小时子集
- Fisher - 141 小时子集
法语(1.8k 小时)
- Mozilla Common Voice(v12.0) - 708 小时子集
- 多语言 Librispeech(MLS 法语) - 926 小时子集
- VoxPopuli(法语) - 165 小时子集
性能
自动语音识别(ASR)性能(无标点和大写)
ASR 性能通过词错误率(WER)来衡量,并使用 [whisper - normalizer](https://pypi.org/project/whisper - normalizer/) 处理真实标签和预测文本。
-
MCV - 16.1 测试集上的 WER: | 版本 | 模型 | 英语 | 德语 | 西班牙语 | 法语 | | ---- | ---- | ---- | ---- | ---- | ---- | | 1.23.0 | canary - 1b | 7.97 | 4.61 | 3.99 | 6.53 |
-
MLS 测试集上的 WER: | 版本 | 模型 | 英语 | 德语 | 西班牙语 | 法语 | | ---- | ---- | ---- | ---- | ---- | ---- | | 1.23.0 | canary - 1b | 3.06 | 4.19 | 3.15 | 4.12 |
更多评估细节可在 [HuggingFace ASR 排行榜](https://huggingface.co/spaces/hf - audio/open_asr_leaderboard) 上找到。
自动语音翻译(AST)性能
使用 BLEU 分数 评估 AST 性能,并在数据集中使用带有标点和大写的原生注释。
-
FLEURS 测试集上的 BLEU 分数: | 版本 | 模型 | 英语 -> 德语 | 英语 -> 西班牙语 | 英语 -> 法语 | 德语 -> 英语 | 西班牙语 -> 英语 | 法语 -> 英语 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 1.23.0 | canary - 1b | 32.15 | 22.66 | 40.76 | 33.98 | 21.80 | 30.95 |
-
COVOST - v2 测试集上的 BLEU 分数: | 版本 | 模型 | 德语 -> 英语 | 西班牙语 -> 英语 | 法语 -> 英语 | | ---- | ---- | ---- | ---- | ---- | | 1.23.0 | canary - 1b | 37.67 | 40.7 | 40.42 |
-
[mExpresso](https://huggingface.co/facebook/seamless - expressive#mexpresso - multilingual - expresso) 测试集上的 BLEU 分数: | 版本 | 模型 | 英语 -> 德语 | 英语 -> 西班牙语 | 英语 -> 法语 | | ---- | ---- | ---- | ---- | ---- | | 1.23.0 | canary - 1b | 23.84 | 35.74 | 28.29 |
模型公平性评估
正如论文 “Towards Measuring Fairness in AI: the Casual Conversations Dataset” 中所概述的,对 Canary - 1B 模型进行了公平性评估。该模型在 CausalConversations - v1 数据集上进行了评估,结果报告如下:
性别偏差
性别 | 男性 | 女性 | 不适用 | 其他 |
---|---|---|---|---|
话语数量 | 19325 | 24532 | 926 | 33 |
% WER | 14.64 | 12.92 | 17.88 | 126.92 |
年龄偏差
年龄组 | (18 - 30) | (31 - 45) | (46 - 85) | (1 - 100) |
---|---|---|---|---|
话语数量 | 15956 | 14585 | 13349 | 43890 |
% WER | 14.64 | 13.07 | 13.47 | 13.76 |
(公平性评估的错误率是通过对参考文本和预测文本进行归一化来确定的,类似于在 https://github.com/huggingface/open_asr_leaderboard 中评估所使用的方法。)
NVIDIA Riva:部署
NVIDIA Riva 是一个加速的语音 AI SDK,可部署在本地、所有云、多云、混合云、边缘和嵌入式设备上。此外,Riva 还提供:
- 针对最常见语言的世界级开箱即用准确性,模型检查点在专有数据上进行训练,拥有数十万小时的 GPU 计算时间。
- 具有运行时单词增强(例如品牌和产品名称)以及声学模型、语言模型和逆文本归一化的定制功能,实现一流的准确性。
- 流式语音识别、Kubernetes 兼容扩展和企业级支持。
Canary 可通过 Riva 作为 NIM 端点使用。可以在这里亲自尝试该模型:[https://build.nvidia.com/nvidia/canary - 1b - asr](https://build.nvidia.com/nvidia/canary - 1b - asr)。
🔧 技术细节
模型参数
Canary - 1B 模型总共具有 24 个编码器层和 24 个解码器层。
训练设置
Canary - 1B 使用 NVIDIA NeMo 工具包 [4] 进行训练,训练步骤为 150k,采用动态分桶,每个 GPU 的批量时长为 360 秒,使用 128 个 NVIDIA A100 80GB GPU。
分词器构建
这些模型的分词器是使用训练集的文本转录通过 脚本 构建的,使用了来自每种语言的单个 SentencePiece [3] 分词器的连接分词器 [5]。
📄 许可证
使用此模型的许可受 [CC - BY - NC - 4.0](https://creativecommons.org/licenses/by - nc/4.0/deed.en#:~:text=NonCommercial%20%E2%80%94%20You%20may%20not%20use,doing%20anything%20the%20license%20permits.) 约束。通过下载该模型的公共和发布版本,即表示接受 CC - BY - NC - 4.0 许可证的条款和条件。
参考资料
[1] Fast Conformer with Linearly Scalable Attention for Efficient Speech Recognition
[3] Google Sentencepiece Tokenizer
[5] [Unified Model for Code - Switching Speech Recognition and Language Identification Based on Concatenated Tokenizer](https://aclanthology.org/2023.calcs - 1.7.pdf)



