模型概述
模型特點
模型能力
使用案例
🚀 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)



