重要

您正在查看 NeMo 2.0 文档。此版本对 API 和一个新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

检查点#

在 NeMo 中加载预训练检查点主要有两种方法

  • 使用 restore_from() 方法加载本地检查点文件 (.nemo),或者

  • 使用 from_pretrained() 方法从 NGC 下载和设置检查点。

请参阅以下部分,了解每种方法的说明和示例。

请注意,这些说明适用于加载完全训练的检查点以进行评估或微调。要恢复未完成的训练实验,请使用实验管理器,并将 resume_if_exists 标志设置为 True。

加载本地检查点#

NeMo 会自动以 .nemo 格式保存您正在训练的模型的检查点。您也可以随时使用 model.save_to(<checkpoint_path>.nemo) 手动保存您的模型。

如果您有一个想要加载的本地 .nemo 检查点,只需使用 restore_from() 方法

import nemo.collections.asr as nemo_asr
model = nemo_asr.models.<MODEL_BASE_CLASS>.restore_from(restore_path="<path/to/checkpoint/file.nemo>")

其中模型基类是原始检查点的 ASR 模型类,或通用的 ASRModel 类。

说话人标签推断#

说话人标签推断的目标是使用来自注册集的已知说话人标签的说话人模型来推断说话人标签。我们为此目的在 <NeMo_root>/examples/speaker_tasks/recognition 文件夹下提供了 speaker_identification_infer.py 脚本。目前支持的后端是 cosine_similarity 和神经分类器。

音频文件应为 16KHz 单声道 wav 文件。

该脚本接受两个清单文件

  • enrollment_manifest:此清单包含带有已知说话人标签的注册数据。

  • test_manifest:此清单包含测试数据,我们使用提供的后端之一映射从注册清单捕获的说话人标签

这些清单中每一个的示例格式都在 <NeMo_root>/examples/speaker_tasks/recognition/conf/speaker_identification_infer.yaml 配置文件中提供。

要使用 cosine_similarity 后端推断说话人标签

python speaker_identification_infer.py data.enrollment_manifest=<path/to/enrollment_manifest> data.test_manifest=<path/to/test_manifest> backend.backend_model=cosine_similarity

说话人嵌入提取#

说话人嵌入提取是指为任何 wav 文件(来自已知或未知说话人)提取说话人嵌入。我们提供了两种方法来做到这一点

  • 用于从单个文件提取嵌入的单行 Python 代码

  • 用于从通过清单文件提供的一堆文件提取嵌入的 Python 脚本

对于从单个文件提取嵌入

speaker_model = EncDecSpeakerLabelModel.from_pretrained(model_name="<pretrained_model_name or path/to/nemo/file>")
embs = speaker_model.get_embedding('<audio_path>')

对于从一堆文件提取嵌入

音频文件应为 16KHz 单声道 wav 文件。

将音频文件写入 manifest.json 文件,格式如下

{"audio_filepath": "<absolute path to dataset>/audio_file.wav", "duration": "duration of file in sec", "label": "speaker_id"}

此 python 调用将从 NGC 下载最佳预训练模型,并将嵌入 pickle 文件写入当前工作目录

python examples/speaker_tasks/recognition/extract_speaker_embeddings.py --manifest=manifest.json

或者您可以运行 batch_inference() 以在清单上执行推理,并使用选定的 batch_size 来获取嵌入

speaker_model = nemo_asr.models.EncDecSpeakerLabelModel.from_pretrained(model_name="<pretrained_model_name or path/to/nemo/file>")
embs, logits, gt_labels, trained_labels = speaker_model.batch_inference(manifest, batch_size=32)

说话人验证推理#

说话人验证是一项验证两个话语是否来自同一说话人的任务。

我们提供了一个辅助函数来验证音频文件(也可以批量处理),如果提供的音频文件对来自同一说话人,则返回 True,否则返回 False。

音频文件应为 16KHz 单声道 wav 文件。

speaker_model = EncDecSpeakerLabelModel.from_pretrained(model_name="titanet_large")
decision = speaker_model.verify_speakers('path/to/one/audio_file','path/to/other/audio_file')
decisions = speaker_model.verify_speakers_batch([
                                                ('/path/to/audio_0_0', '/path/to/audio_0_1'),
                                                ('/path/to/audio_1_0', '/path/to/audio_1_1'),
                                                ('/path/to/audio_2_0', '/path/to/audio_2_1'),
                                                ('/path/to/audio_3_0', '/path/to/audio_3_1')
                                                ],  batch_size=4, device='cuda')

NGC 预训练检查点#

SpeakerNet-ASR 集合具有在各种数据集上针对各种任务训练的多个模型的检查点。TitaNetECAPA_TDNNSpeaker_Verification 在 NGC 上的模型卡包含有关每个可用检查点的更多信息。

下表列出了 NGC 提供的说话人嵌入提取器模型,并且可以通过 EncDecSpeakerLabelModel 模型类中的 from_pretrained() 方法访问这些模型。

通常,您可以使用以下格式的代码加载这些模型中的任何一个

import nemo.collections.asr as nemo_asr
model = nemo_asr.models.<MODEL_CLASS_NAME>.from_pretrained(model_name="<MODEL_NAME>")

其中模型名称是下表 “Model Name” 条目下的值。

如果您想以编程方式列出特定基类的可用模型,可以使用 list_available_models() 方法。

nemo_asr.models.<MODEL_BASE_CLASS>.list_available_models()

说话人识别模型#

模型名称

模型基类

模型卡

titanet_large

EncDecSpeakerLabelModel

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo/models/titanet_large

titanet_small

EncDecSpeakerLabelModel

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo/models/titanet_small

speakerverification_speakernet

EncDecSpeakerLabelModel

https://ngc.nvidia.com/catalog/models/nvidia:nemo:speakerverification_speakernet

ecapa_tdnn

EncDecSpeakerLabelModel

https://ngc.nvidia.com/catalog/models/nvidia:nemo:ecapa_tdnn