模型简介
模型特点
模型能力
使用案例
🚀 NVIDIA FastConformer-Hybrid Large (fa)
该模型可将波斯语语音转录为文字。它是FastConformer Transducer - CTC的“大型”版本(约1.15亿个参数),是一个基于两种损失函数(Transducer(默认)和CTC)训练的混合模型。有关完整的架构细节,请参阅模型架构部分和NeMo文档。
🚀 快速开始
安装依赖
若要训练、微调或使用该模型,你需要安装 NVIDIA NeMo。建议你在安装最新版本的Pytorch之后再安装它。
pip install nemo_toolkit['all']
使用模型
该模型可在NeMo工具包 [3] 中使用,可作为预训练检查点进行推理或在其他数据集上进行微调。
自动实例化模型
import nemo.collections.asr as nemo_asr
asr_model = nemo_asr.models.EncDecHybridRNNTCTCBPEModel.from_pretrained(model_name="nvidia/stt_fa_fastconformer_hybrid_large")
使用Python进行转录
实例化模型后,你可以这样做:
output = asr_model.transcribe(['sample.wav'])
print(output[0].text)
转录多个音频文件
使用Transducer模式进行推理:
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/stt_fa_fastconformer_hybrid_large"
audio_dir="<DIRECTORY CONTAINING AUDIO FILES>"
使用CTC模式进行推理:
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/stt_fa_fastconformer_hybrid_large"
audio_dir="<DIRECTORY CONTAINING AUDIO FILES>"
decoder_type="ctc"
输入输出
- 输入:该模型接受16000 Hz的单声道音频(wav文件)作为输入。
- 输出:该模型会为给定的音频样本提供转录后的字符串。
✨ 主要特性
- 可将波斯语语音转录为文字。
- 基于FastConformer Transducer - CTC架构,约1.15亿个参数。
- 混合模型,基于Transducer和CTC两种损失函数进行训练。
📚 详细文档
模型架构
FastConformer [1] 是Conformer模型的优化版本,具有8倍深度可分离卷积下采样。该模型在多任务设置中进行训练,结合了Transducer和CTC解码器损失。你可以在 Fast - Conformer Model 和 Hybrid Transducer - CTC 中找到有关FastConformer的详细信息。
训练过程
使用NeMo工具包 [3] 对模型进行了数百个epoch的训练。这些模型使用 示例脚本 和 基础配置 进行训练。
这些模型的分词器是使用训练集的文本转录通过 脚本 构建的。
该模型使用 英文FastConformer Hybrid (Transducer and CTC) Large P&C模型 的权重进行初始化,并针对波斯语数据进行了微调。
数据集
该模型在Mozilla CommonVoice波斯语语料库15.0上进行训练。
为了充分利用所有经过验证的数据部分,标准的训练/开发/测试分割被丢弃,取而代之的是自定义分割。自定义分割可以通过以下方式重现:
- 将具有相同转录的语音分组,并按(转录占用率,转录)对(升序)对语音进行排序;
- 选择前10540条语音作为测试集(以保持原始大小);
- 选择接下来的10540条语音作为开发集;
- 选择其余数据作为训练集。
转录内容还根据以下脚本进行了额外的归一化处理(空结果被丢弃):
import unicodedata
import string
SKIP = set(
list(string.ascii_letters)
+ [
"=", # occurs only 2x in utterance (transl.): "twenty = xx"
"ā", # occurs only 4x together with "š"
"š",
# Arabic letters
"ة", # TEH MARBUTA
]
)
DISCARD = [
# "(laughter)" in Farsi
"(خنده)",
# ASCII
"!",
'"',
"#",
"&",
"'",
"(",
")",
",",
"-",
".",
":",
";",
# Unicode punctuation?
"–",
"“",
"”",
"…",
"؟",
"،",
"؛",
"ـ",
# Unicode whitespace?
"ً",
"ٌ",
"َ",
"ُ",
"ِ",
"ّ",
"ْ",
"ٔ",
# Other
"«",
"»",
]
REPLACEMENTS = {
"أ": "ا",
"ۀ": "ە",
"ك": "ک",
"ي": "ی",
"ى": "ی",
"ﯽ": "ی",
"ﻮ": "و",
"ے": "ی",
"ﺒ": "ب",
"ﻢ": "ﻡ",
"٬": " ",
"ە": "ه",
}
def maybe_normalize(text: str) -> str | None:
# Skip selected with banned characters
if set(text) & SKIP:
return None # skip this
# Remove hashtags - they are not being read in Farsi CV
text = " ".join(w for w in text.split() if not w.startswith("#"))
# Replace selected characters with others
for lhs, rhs in REPLACEMENTS.items():
text = text.replace(lhs, rhs)
# Replace selected characters with empty strings
for tok in DISCARD:
text = text.replace(tok, "")
# Unify the symbols that have the same meaning but different Unicode representation.
text = unicodedata.normalize("NFKC", text)
# Remove hamza's that were not merged with any letter by NFKC.
text = text.replace("ء", "")
# Remove double whitespace etc.
return " ".join(t for t in text.split() if t)
性能表现
自动语音识别模型的性能通过字符错误率(CER)和单词错误率(WER)来衡量。
该模型在Mozilla CommonVoice波斯语15.0的自定义开发集和测试集上取得了以下分数:
模型 | 开发集WER/CER(%) | 测试集WER/CER(%) |
---|---|---|
RNNT head | 15.44 / 3.89 | 15.48 / 4.63 |
CTC head | 13.18 / 3.38 | 13.16 / 3.85 |
局限性
由于该模型是在公开可用的语音数据集上训练的,对于包含技术术语或模型未训练过的方言的语音,其性能可能会下降。对于带有口音的语音,模型的表现可能也会更差。
NVIDIA Riva部署
NVIDIA Riva 是一个加速语音AI SDK,可部署在本地、所有云、多云、混合云、边缘和嵌入式设备上。
此外,Riva还提供:
- 针对最常见语言的世界级开箱即用准确率,其模型检查点基于专有数据进行训练,经过了数十万小时的GPU计算。
- 借助运行时单词增强(例如品牌和产品名称)以及声学模型、语言模型和逆文本归一化的定制,实现一流的准确率。
- 流式语音识别、Kubernetes兼容的扩展以及企业级支持。
尽管Riva目前尚不支持该模型,但 支持的模型列表在此。你可以查看 Riva实时演示。
📄 许可证
使用此模型的许可受 CC - BY - 4.0 许可协议的约束。通过下载该模型的公开版本,即表示你接受 CC - BY - 4.0 许可协议的条款和条件。
🔗 参考资料
[1] Fast Conformer with Linearly Scalable Attention for Efficient Speech Recognition



