语言:
- 波斯语
库名称: nemo
数据集:
- Mozilla-CommonVoice-15.0-Persian
缩略图: 无
标签:
- 自动语音识别
- 语音
- 音频
- CTC
- 传感器
- FastConformer
- 变压器
- pytorch
- NeMo
许可证: cc-by-4.0
模型索引:
- 名称: stt_fa_fastconformer_hybrid_large
结果:
- 任务:
类型: 自动语音识别
名称: 自动语音识别
数据集:
名称: Mozilla Common Voice 15.0 波斯语
类型: mozilla-foundation/common_voice_15_0
配置: fa
分割: 测试 (自定义)
参数:
语言: fa
指标:
- 名称: 测试 (自定义) WER CTC
类型: wer
值: 13.16
- 名称: 测试 (自定义) CER CTC
类型: cer
值: 3.85
- 名称: 测试 (自定义) WER RNNT
类型: wer
值: 15.48
- 名称: 测试 (自定义) CER RNNT
类型: cer
值: 4.63
NVIDIA FastConformer-Hybrid 大模型 (波斯语)
|
|
| 
该模型用于将波斯语字母的语音转录为文本。它是FastConformer传感器-CTC(约115M参数)模型的“大”版本。这是一个在两种损失上训练的混合模型:传感器(默认)和CTC。有关完整的架构细节,请参阅模型架构部分和NeMo文档。
NVIDIA 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)
转录多个音频文件
使用传感器模式推理:
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/stt_fa_fastconformer_hybrid_large"
audio_dir="<包含音频文件的目录>"
使用CTC模式推理:
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/stt_fa_fastconformer_hybrid_large"
audio_dir="<包含音频文件的目录>"
decoder_type="ctc"
输入
该模型接受16000 Hz单声道音频(wav文件)作为输入。
输出
该模型为给定的音频样本提供转录的语音作为字符串。
模型架构
FastConformer [1]是Conformer模型的优化版本,具有8倍深度可分离卷积下采样。该模型在多任务设置中训练,结合了传感器和CTC解码器损失。您可以在此处找到有关FastConformer的更多信息:Fast-Conformer模型以及关于混合传感器-CTC训练的信息:混合传感器-CTC。
训练
NeMo工具包[3]用于训练模型数百个epoch。这些模型使用此示例脚本和此基础配置进行训练。
这些模型的分词器是使用训练集的文本转录本构建的,使用此脚本。
该模型使用英语FastConformer混合(传感器和CTC)大P&C模型的权重初始化,并对波斯语数据进行微调。
数据集
该模型在Mozilla CommonVoice波斯语语料库15.0上进行训练。
为了利用整个已验证数据部分,丢弃了标准训练/开发/测试分割,并替换为自定义分割。自定义分割可以通过以下方式重现:
- 将具有相同转录的语音分组,并按(转录占用率,转录)对语音进行升序排序;
- 选择前10540个语音作为测试集(以保持原始大小);
- 选择接下来的10540个语音作为开发集;
- 选择剩余的数据作为训练集。
转录本还根据以下脚本进行了归一化(空结果被丢弃):
import unicodedata
import string
SKIP = set(
list(string.ascii_letters)
+ [
"=",
"ā",
"š",
"ة",
]
)
DISCARD = [
"(خنده)",
"!",
'"',
"#",
"&",
"'",
"(",
")",
",",
"-",
".",
":",
";",
"–",
"“",
"”",
"…",
"؟",
"،",
"؛",
"ـ",
"ً",
"ٌ",
"َ",
"ُ",
"ِ",
"ّ",
"ْ",
"ٔ",
"«",
"»",
]
REPLACEMENTS = {
"أ": "ا",
"ۀ": "ە",
"ك": "ک",
"ي": "ی",
"ى": "ی",
"ﯽ": "ی",
"ﻮ": "و",
"ے": "ی",
"ﺒ": "ب",
"ﻢ": "ﻡ",
"٬": " ",
"ە": "ه",
}
def maybe_normalize(text: str) -> str | None:
if set(text) & SKIP:
return None
text = " ".join(w for w in text.split() if not w.startswith("#"))
for lhs, rhs in REPLACEMENTS.items():
text = text.replace(lhs, rhs)
for tok in DISCARD:
text = text.replace(tok, "")
text = unicodedata.normalize("NFKC", text)
text = text.replace("ء", "")
return " ".join(t for t in text.split() if t)
性能
自动语音识别模型的性能使用字符错误率(CER)和词错误率(WER)来衡量。
该模型在我们的自定义开发集和测试集上的Mozilla CommonVoice波斯语15.0中获得了以下分数:
模型 |
%WER/CER 开发集 |
%WER/CER 测试集 |
RNNT头 |
15.44 / 3.89 |
15.48 / 4.63 |
CTC头 |
13.18 / 3.38 |
13.16 / 3.85 |
限制
由于该模型是在公开可用的语音数据集上训练的,因此对于包含技术术语或模型未训练过的方言的语音,其性能可能会下降。对于有口音的语音,该模型的表现也可能较差。
NVIDIA Riva: 部署
NVIDIA Riva,是一个加速的语音AI SDK,可部署在本地、所有云、多云、混合云、边缘和嵌入式设备上。
此外,Riva提供:
- 世界级的开箱即用准确性,适用于最常见语言,模型检查点在专有数据上训练,使用了数十万GPU计算小时
- 最佳准确性,具有运行时词增强(例如,品牌和产品名称)以及声学模型、语言模型和逆文本归一化的自定义
- 流式语音识别、Kubernetes兼容的扩展和企业级支持
尽管Riva尚未支持此模型,但支持的模型列表在此。
查看Riva实时演示。
参考文献
[1] 具有线性可扩展注意力的快速Conformer用于高效语音识别
[2] Google Sentencepiece分词器
[3] NVIDIA NeMo工具包
许可证
使用该模型的许可证涵盖CC-BY-4.0。通过下载模型的公共和发布版本,您接受CC-BY-4.0许可证的条款和条件。