Transformers documentation
Nemotron 3 Diarization
Эта модель была добавлена в Hugging Face Transformers 23.09.2026.
Nemotron 3 Diarization
Обзор
Nemotron 3 Diarization — это модель с открытыми весами для потоковой идентификации говорящих, предназначенная для определения «кто и когда говорил» в реальном аудио. Она поддерживает как потоковый, так и офлайн-инференс, обрабатывает до восьми говорящих и выстраивает результаты по порядку первого появления каждого говорящего во входном аудио.
Модель использует Arrival-Order Speaker Cache (AOSC) 1 и очередь FIFO, представленные для Streaming Sortformer 1, 2. Одна контрольная точка поддерживает настраиваемые профили задержки — от входного буфера 80 мс до офлайн-буфера 30,4 с — а также настраиваемое разрешение выходных кадров с шагом 10 мс. При инференсе по чанкам максимальная длительность аудио не ограничена.
Использование
Офлайн
import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio
model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
"https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/diarization_example.mp3",
sampling_rate=sampling_rate,
)
inputs = processor(audio, sampling_rate=sampling_rate).to(model.device, dtype=model.dtype)
with torch.inference_mode():
logits = model(**inputs).logits # (1, num_frames, 8), one frame every 10 ms
segments = processor.extract_speaker_dict(logits, inputs.attention_mask)[0]
for segment in segments:
print(f"speaker_{segment['Speaker']}: {segment['Start']:.2f}s - {segment['End']:.2f}s")Потоковая передача
Аудио поступает по частям, и каждый forward-проход обрабатывает одну часть: процессор нарезает её в соответствии со своим streaming_mode и добавляет num_lookahead_frames — количество кадров look-ahead, на которые модель обращает внимание, но которые не оцениваются, поскольку они открывают следующую часть. В результате forward-прохода возвращается speaker_cache для передачи в следующий вызов. Последняя часть сессии извлекается с параметром is_last_audio_chunk=True: в ней нет look-ahead, поэтому оцениваются все оставшиеся кадры.
streaming_mode | Задержка¹ |
|---|---|
"low_latency" (по умолчанию) | 1.04 s |
"very_low_latency" | 0.64 s |
"ultra_low_latency" | 0.32 s |
¹ Аудио, ожидаемое перед запуском модели на фрагменте: фрагмент вместе с его опережением, за вычетом времени вычислений.
import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio
model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
processor.set_streaming_mode("low_latency") # the default, can also be "very_low_latency" and "ultra_low_latency"
print(f"Streaming latency: {processor.streaming_latency_ms} ms")
sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
"https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/diarization_example.mp3",
sampling_rate=sampling_rate,
)
def inputs_generator():
"""Yields the processor outputs of each chunk."""
yield processor(
audio[: processor.num_samples_first_audio_chunk],
sampling_rate=sampling_rate,
is_streaming=True,
is_first_audio_chunk=True,
)
mel_frame_idx = processor.num_mel_frames_per_step
start_idx = processor.audio_chunk_start(mel_frame_idx)
while (end_idx := start_idx + processor.num_samples_per_audio_chunk) <= audio.shape[0]:
yield processor(
audio[start_idx:end_idx],
sampling_rate=sampling_rate,
is_streaming=True,
is_first_audio_chunk=False,
)
mel_frame_idx += processor.num_mel_frames_per_step
start_idx = processor.audio_chunk_start(mel_frame_idx)
# the audio ended: the frames left in the buffer are the last ones of the session
yield processor(
audio[start_idx:],
sampling_rate=sampling_rate,
is_streaming=True,
is_first_audio_chunk=False,
is_last_audio_chunk=True,
)
speaker_cache, logits = None, []
with torch.inference_mode():
for inputs in inputs_generator():
inputs = inputs.to(model.device, dtype=model.dtype)
# `inputs` carries `num_lookahead_frames` for every chunk but the last, `speaker_cache` links the chunks
outputs = model(**inputs, speaker_cache=speaker_cache)
logits.append(outputs.logits) # the chunk's frames, without its look-ahead
speaker_cache = outputs.speaker_cache
logits = torch.cat(logits, dim=1) # (1, num_frames, 8), one frame every 10 ms
segments = processor.extract_speaker_dict(logits)[0] # [{"Start": 0.0, "End": 15.43, "Speaker": 0}, ...]Делаем так, чтобы работало на полную
Входом энкодера для шага потоковой обработки является [speaker cache | FIFO | chunk], длина которого меняется по мере заполнения и освобождения кэша и FIFO: torch.compile пересобирает код примерно сто раз за сессию. Если на каждом шаге дополнять вход до максимального окна данного режима, форма тензора становится фиксированной. Позиции обнуляются в начале каждого чанка, поэтому правое дополнение не влияет на валидные кадры:
import torch.nn.functional as F
chunk_length, chunk_right_context = processor.streaming_modes[processor.streaming_mode]
max_window = (
model.config.streaming_config.speaker_cache_length
+ model.config.streaming_config.fifo_length
+ chunk_length
+ chunk_right_context
)
encoder = model.model
compiled_forward = torch.compile(encoder.forward, mode="reduce-overhead", fullgraph=True, dynamic=False)
def padded_forward(inputs_embeds, attention_mask=None, position_ids=None, **kwargs):
batch_size, num_frames, _ = inputs_embeds.shape
if attention_mask is None:
attention_mask = inputs_embeds.new_ones(batch_size, num_frames, dtype=torch.bool)
padding = max_window - num_frames
hidden_states = compiled_forward(
inputs_embeds=F.pad(inputs_embeds, (0, 0, 0, padding)),
attention_mask=F.pad(attention_mask.bool(), (0, padding), value=False),
position_ids=torch.arange(max_window, device=inputs_embeds.device)[None, :],
**kwargs,
)
return hidden_states[:, :num_frames].clone() # CUDA graphs reuse the output buffer
encoder.forward = padded_forward
# warm up before the session: compiles, then records the CUDA graph, so the first real chunk runs at full speed
with torch.inference_mode():
for _ in range(3):
hidden_size = model.config.audio_config.hidden_size
padded_forward(torch.zeros(1, max_window, hidden_size, device=model.device, dtype=model.dtype))Цикл потоковой обработки, приведённый выше, компилируется один раз. Офлайн-прямой проход разбивает данные на чанки аналогичным образом, поэтому тот же самый обёртывающий класс применяется с параметрами config.fifo_length, config.chunk_left_context, config.chunk_length и config.chunk_right_context в max_window.
| Ускорение по сравнению с eager (A100, размер батча 1) | float32 | bfloat16 |
|---|---|---|
| потоковая, по шагам | 1.2x | 4.4x |
| офлайн, запись длительностью 488 с | 1.3x | 2.8x |
Nemotron3DiarizationConfig
класс transformers.Nemotron3DiarizationConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneaudio_config: transformers.models.nemotron3_diarization.configuration_nemotron3_diarization.Nemotron3DiarizationAudioConfig | dict | None = Nonehead_config: transformers.models.nemotron3_diarization.configuration_nemotron3_diarization.Nemotron3DiarizationHeadConfig | dict | None = Nonestreaming_config: transformers.models.nemotron3_diarization.configuration_nemotron3_diarization.Nemotron3DiarizationStreamingConfig | dict | None = Nonechunk_length: int = 340chunk_right_context: int = 40chunk_left_context: int = 0fifo_length: int = 40speaker_cache_update_period: int = 300initializer_range: float = 0.02 )
Параметры
- audio_config (
Nemotron3DiarizationAudioConfigилиdict, необязательный) — Конфигурация аудио-энкодера трансформера. По умолчаниюNemotron3DiarizationAudioConfig(). - head_config (
Nemotron3DiarizationHeadConfigилиdict, необязательный) — Конфигурация спикер-головы. По умолчаниюNemotron3DiarizationHeadConfig(). - streaming_config (
Nemotron3DiarizationStreamingConfigилиdict, необязательный) — Политика кэша спикеров и размеры FIFO для режима потоковой обработки. По умолчаниюNemotron3DiarizationStreamingConfig(). - chunk_length (
int, необязательный, по умолчанию 340) — В офлайн-режиме: количество кадров энкодера в каждом чанке при диаризации всей записи за один проход. В стриминговом режиме чанк является входом для каждого прохода. - chunk_right_context (
int, необязательный, по умолчанию 40) — В офлайн-режиме: количество кадров энкодера, которые каждый чанк забирает из последующих. В потоковом режиме размер look-ahead составляетnum_lookahead_framesдля каждого forward. - chunk_left_context (
int, необязательный, по умолчанию 0) — В офлайн-режиме: количество кадров энкодера, которые каждый чанк повторно извлекает из предыдущих чанков и помещает между кэшированными кадрами и текущим чанком. Как и look-ahead, эти кадры участвуют в attention, но не оцениваются и не добавляются в FIFO-очередь. В потоковом режиме look-back равенnum_lookback_framesдля каждого forward-прохода. - fifo_length (
int, необязательный, по умолчанию 40) — Офлайн-режим: ёмкость FIFO-очереди последних кадров энкодера. В потоковом режиме используетсяstreaming_config.fifo_length. - speaker_cache_update_period (
int, необязательный, по умолчанию 300) — Офлайн-режим: количество кадров энкодера, перемещаемых из FIFO-очереди в кэш спикера при переполнении очереди. В режиме потоковой обработки используетсяstreaming_config.speaker_cache_update_period. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
Это класс конфигурации для хранения конфигурации модели Nemotron3DiarizationModel. Он используется для создания модели Nemotron3 Diarization в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации nvidia/Nemotron-3-Diarization
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Nemotron3DiarizationAudioConfig
класс transformers.Nemotron3DiarizationAudioConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 512intermediate_size: int = 2048num_hidden_layers: int = 31num_attention_heads: int = 8num_key_value_heads: int | None = Nonehidden_act: str = 'gelu'max_position_embeddings: int = 5000initializer_range: float = 0.02rope_parameters: dict | None = Noneattention_dropout: float | int = 0.0num_mel_bins: int = 128subsampling_factor: int = 8 )
Параметры
- hidden_size (
int, необязательный, по умолчанию512) — Размерность скрытых представлений. - intermediate_size (
int, необязательный, по умолчанию2048) — Размерность представлений MLP. - num_hidden_layers (
int, необязательный, по умолчанию31) — Количество скрытых слоев в декодере Transformer. - num_attention_heads (
int, необязательный, по умолчанию8) — Количество головок внимания в каждом слое внимания декодера Transformer. - num_key_value_heads (
int, необязательный) — Количество ключевых и value-голов, используемых для реализации Grouped Query Attention. Еслиnum_key_value_heads=num_attention_heads, модель использует Multi Head Attention (MHA); еслиnum_key_value_heads=1— Multi Query Attention (MQA); в остальных случаях применяется GQA. При конвертации мультиголовного чекпоинта в GQA-чекпоинт каждая групповая ключевая и value-голова должна построиться путём усреднения (meanpooling) всех исходных голов в этой группе. Дополнительные сведения см. в этой статье. Если параметр не задан, по умолчанию используетсяnum_attention_heads. - hidden_act (
str, необязательный, по умолчаниюgelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - max_position_embeddings (
int, необязательный, по умолчанию5000) — Максимальная длина последовательности, с которой может использоваться эта модель. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - rope_parameters (
dict, необязательный) — Словарь, содержащий параметры конфигурации для эмбеддингов RoPE. В словаре должно быть указано значение дляrope_thetaи, при необходимости, параметры, используемые для масштабирования, если вы хотите использовать RoPE с более длиннымиmax_position_embeddings. - attention_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - num_mel_bins (
int, необязательный, по умолчанию128) — Количество mel-признаков, используемых на входной кадр. Должно соответствовать значению, используемому в классеAutoFeatureExtractor. - subsampling_factor (
int, необязательный, по умолчанию 8) — Количество последовательных кадров спектрограммы, объединяемых в один кадр энкодера. Классификатор увеличивает разрешение своих выходных данных в том же倍数, поэтому активность говорящего предсказывается с частотой кадров спектрограммы.
Это класс конфигурации для хранения конфигурации модели Nemotron3DiarizationModel. Он используется для создания модели Nemotron3 Diarization в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации nvidia/Nemotron-3-Diarization
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Nemotron3DiarizationHeadConfig
класс transformers.Nemotron3DiarizationHeadConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 192num_speakers: int = 8audio_hidden_size: int = 512subsampling_factor: int = 8 )
Параметры
- hidden_size (
int, необязательный, по умолчанию 192) — Размер скрытого слоя в голове спикера: выход энкодера проецируется в него, а апсемплер и классификатор сохраняют его. - num_speakers (
int, необязательный, по умолчанию 8) — Максимальное количество говорящих, то есть количество выходов активности на каждый кадр. Говорящие упорядочиваются по времени их первого появления в аудио. - audio_hidden_size (
int, необязательный, по умолчанию 512) — Размер скрытого слоя на выходе кодировщика, из которого проекция выполняется в head. Должен совпадать сNemotron3DiarizationAudioConfig.hidden_size. - subsampling_factor (
int, необязательный, по умолчанию 8) — Коэффициент апсемплинга для возврата к частоте кадров спектрограммы. Должен совпадать сNemotron3DiarizationAudioConfig.subsampling_factor.
Это класс конфигурации для хранения конфигурации модели Nemotron3DiarizationModel. Он используется для создания модели Nemotron3 Diarization в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации nvidia/Nemotron-3-Diarization
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Nemotron3DiarizationStreamingConfig
класс transformers.Nemotron3DiarizationStreamingConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonefifo_length: int = 264speaker_cache_update_period: int = 222speaker_cache_length: int = 264speaker_cache_silence_frames_per_speaker: int = 1prediction_score_threshold: float = 0.25latest_frames_score_boost: float = 0.05strong_boost_rate: float = 0.75weak_boost_rate: float = 1.5min_positive_scores_rate: float = 0.5num_speakers: int = 8subsampling_factor: int = 8 )
Параметры
- fifo_length (
int, необязательный, по умолчанию 264) — Вместимость FIFO-очерда последних кадров энкодера в потоковом режиме (в офлайн-режиме используетсяNemotron3DiarizationConfig.fifo_length). - speaker_cache_update_period (
int, необязательный, по умолчанию 222) — Количество кадров энкодера, перемещаемых из FIFO-очереди в кэш спикера при переполнении очереди, в режиме потоковой обработки (в офлайн-режиме используетсяNemotron3DiarizationConfig.speaker_cache_update_period). - speaker_cache_length (
int, необязательный, по умолчанию 264) — Вместимость кэша Arrival-Order Speaker Cache. Должно быть не менее(1 + speaker_cache_silence_frames_per_speaker) * num_speakers. - speaker_cache_silence_frames_per_speaker (
int, необязательный, по умолчанию 1) — Количество слотов кэша спикера, зарезервированных для обученного эмбеддинга тишины для каждого спикера при сжатии кэша. - prediction_score_threshold (
float, необязательный, по умолчанию 0.25) — Нижняя граница вероятностей спикеров перед взятием логарифма в оценках кадров кэша спикеров. - latest_frames_score_boost (
float, необязательный, по умолчанию 0.05) — Бонус к оценке, присваиваемый кадрам, недавно добавленным в кэш спикера при его сжатии. - strong_boost_rate (
float, необязательный, по умолчанию 0.75) — Доля бюджета кэша на каждого спикера, лучшие кадры которой получают сильный буст оценки, чтобы каждый спикер сохранял в кэше не менее этого количества кадров. - weak_boost_rate (
float, необязательный, по умолчанию 1.5) — Доля бюджета кэша на каждого спикера, лучшие кадры которой получают небольшое повышение оценки, что предотвращает доминирование одного спикера в кэше. - min_positive_scores_rate (
float, необязательный, по умолчанию 0.5) — Доля бюджета кэша на одного спикера: если у спикера имеется не менее этого количества кадров с положительной оценкой, его неположительные (перекрытые) кадры исключаются из кэша. - num_speakers (
int, необязательный, по умолчанию 8) — Количество говорящих, отслеживаемых кэшем говорящих. Должно совпадать сNemotron3DiarizationHeadConfig.num_speakers. - subsampling_factor (
int, необязательный, по умолчанию 8) — Количество кадров вероятности говорящего на один кадр энкодера. Должно совпадать сNemotron3DiarizationAudioConfig.subsampling_factor.
Это класс конфигурации для хранения конфигурации модели Nemotron3DiarizationModel. Он используется для создания модели Nemotron3 Diarization в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации nvidia/Nemotron-3-Diarization
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Nemotron3DiarizationAudioModel
класс transformers.Nemotron3DiarizationAudioModel
< source >( config: Nemotron3DiarizationAudioConfig )
Параметры
- config (Nemotron3DiarizationAudioConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель Nemotron3 Diarization без дополнительных компонентов, выводящая необработанные скрытые состояния (raw hidden-states) без какого-либо специализированного слоя (head) сверху.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_features: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutput or tuple(torch.Tensor)
Параметры
- input_features (
torch.Tensorформы(batch_size, sequence_length, feature_dim), необязательный) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью NemotronAsrStreamingFeatureExtractor. Подробности см. вNemotronAsrStreamingFeatureExtractor.__call__()(Nemotron3DiarizationProcessor использует NemotronAsrStreamingFeatureExtractor для обработки аудио). - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - position_ids (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона[0, config.n_positions - 1].
Возвращает
BaseModelOutput или tuple(torch.Tensor)
Объект BaseModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (Nemotron3DiarizationConfig) и входных данных.
Метод forward модели Nemotron3DiarizationAudioModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.hidden_states (
tuple(torch.Tensor), optional, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Nemotron3DiarizationModel
класс transformers.Nemotron3DiarizationModel
< source >( config: Nemotron3DiarizationConfig )
Параметры
- config (Nemotron3DiarizationConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель Nemotron3Diarization без классификатора говорящих: кодирует один фрагмент (с его кэшированными кадрами) и восстанавливает кадры энкодера до частоты кадров спектрограммы. Она не хранит состояние для потоковой обработки, см. Nemotron3DiarizationForAudioFrameClassification для фрагментированного прямого прохода.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_features: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutput or tuple(torch.Tensor)
Параметры
- input_features (
torch.Tensorформы(batch_size, sequence_length, feature_dim), необязательный) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью NemotronAsrStreamingFeatureExtractor. Подробности см. вNemotronAsrStreamingFeatureExtractor.__call__()(Nemotron3DiarizationProcessor использует NemotronAsrStreamingFeatureExtractor для обработки аудио). - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - position_ids (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона[0, config.n_positions - 1].
Возвращает
BaseModelOutput или tuple(torch.Tensor)
Объект BaseModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (Nemotron3DiarizationConfig) и входных данных.
Метод forward модели Nemotron3DiarizationModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.hidden_states (
tuple(torch.Tensor), optional, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Nemotron3DiarizationProcessor
класс transformers.Nemotron3DiarizationProcessor
< source >( feature_extractorsubsampling_factor = 8streaming_modes = Nonestreaming_mode = 'low_latency' )
Параметры
- feature_extractor (
NemotronAsrStreamingFeatureExtractor) — Извлечение признаков является обязательным входом. - subsampling_factor (
int, необязательный, по умолчанию 8) — Количество mel-кадров на кадр энкодера, аналогичноNemotron3DiarizationAudioConfig.subsampling_factor. - streaming_modes (
dict[str, tuple[int, int]], необязательный) — Режимы потоковой обработки, которые поддерживает контрольная точка, в формате «имя —(chunk_length, chunk_right_context)» в кадрах энкодера. Процессор является единственным источником истины для этого набора:set_streaming_mode()проверяет значение по нему. По умолчанию используются режимы из карточки модели:"low_latency"(9, 4),"very_low_latency"(6, 2) и"ultra_low_latency"(3, 1). - streaming_mode (
str, необязательный, по умолчанию"low_latency") — режим потоковой передачи сессий, одно из значенийstreaming_modes; изменить его можно с помощьюset_streaming_mode(). При офлайн-использовании он игнорируется.
Создаёт Nemotron3DiarizationProcessor, который оборачивает экстрактор признаков в единый процессор.
Nemotron3DiarizationProcessor предоставляет все возможности NemotronAsrStreamingFeatureExtractor. Подробнее см. в ~NemotronAsrStreamingFeatureExtractor.
__call__
< source >( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]sampling_rate: int | None = Noneis_streaming: bool = Falseis_first_audio_chunk: bool = Trueis_last_audio_chunk: bool = False**kwargs: *<class 'transformers.models.nemotron3_diarization.processing_nemotron3_diarization.Nemotron3DiarizationProcessorKwargs'> ) → BatchFeature
Параметры
- audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]]) — Аудио или пакет аудио, подлежащий подготовке. Каждое аудио может быть массивом NumPy или тензором PyTorch. В случае массива NumPy/тензора PyTorch каждое аудио должно иметь форму (C, T), где C — количество каналов, а T — длина выборки аудио. - sampling_rate (
int, необязательный) — Частота дискретизации входного аудио в Гц. Если значение указано, оно проверяется на соответствие ожидаемой частоте дискретизации средства извлечения признаков (16000 Гц). - is_streaming (
bool, необязательный, по умолчаниюFalse) — Указывает, является ли аудио одним фрагментом потоковой сессии, гдеis_first_audio_chunkиis_last_audio_chunkотличают первый и последний фрагменты от остальных. Размеры фрагментов соответствуют параметрамstreaming_mode, изменяемым с помощьюset_streaming_mode(). Каждый фрагмент, кроме последнего, должен содержать ровноnum_samples_first_audio_chunkаудиовыборок для первого фрагмента иnum_samples_per_audio_chunkдля последующих. - is_first_audio_chunk (
bool, необязательный, по умолчаниюTrue) — Указывает, является ли этот фрагмент первым в потоковой сессии. Извлекатель признаков центрирует окна анализа (center=True) для первого фрагмента и при офлайн-обработке, а для последующих фрагментов не центрирует (center=False), чтобы спектрограмма каждого фрагмента воспроизводила, кадр за кадром, результат единого прохода по всей реплике. Должно бытьTrue, еслиis_streaming=False. - is_last_audio_chunk (
bool, необязательный, по умолчаниюFalse) — Указывает, завершает ли этот фрагмент сеанс потоковой передачи. Фрагмент сеанса завершается кадрами энкодера с опережениемchunk_right_context, которые модель оценивает только на следующем шаге, и с которых начинается следующий фрагмент. У последнего фрагмента нет следующего шага, поэтому все его кадры оцениваются, независимо от их количества, а его конец дополняется нулями так же, как при обработке полной реплики дополняется конец аудио, чтобы получить последние кадры реплики. Должно бытьFalse, еслиis_streaming=False. - return_tensors (
strили TensorType, необязательный) — Если задано, возвращает тензоры конкретного фреймворка. Допустимые значения:'pt': возвращает объектыtorch.TensorPyTorch.'np': возвращает объекты NumPynp.ndarray.
- **kwargs (ProcessingKwargs, optional) — Дополнительные параметры обработки для каждой модальности (текст, изображения, видео, аудио). Специфичные для модели параметры перечислены выше; полный список поддерживаемых аргументов см. в классе TypedDict.
Возвращает
выходы feature extractor, input_features и attention_mask. В режиме потоковой обработки отбрасываются хвостовые кадры, у которых окно анализа выходит за пределы чанка, не являющегося последним, поэтому input_features содержит ровно кадры данного чанка и может быть передана в модель как есть, а каждый чанк, кроме последнего, также содержит num_lookahead_frames — количество хвостовых кадров look-ahead энкодера, что переводит модель в режим потоковой обработки.
Nemotron3DiarizationSpeakerCache
класс transformers.Nemotron3DiarizationSpeakerCache
< source >( config: Nemotron3DiarizationStreamingConfigfifo_length: int | None = Nonespeaker_cache_update_period: int | None = None )
Параметры
- config (
Nemotron3DiarizationStreamingConfig) — Политика кэша говорящих и размеры FIFO для режима потоковой обработки. - fifo_length (
int, необязательный) — Вместимость FIFO-очерда последних кадров энкодера. По умолчаниюconfig.fifo_length. - speaker_cache_update_period (
int, необязательный) — Количество кадров энкодера, перемещаемых из FIFO-очереди в кэш спикера при переполнении очереди. По умолчаниюconfig.speaker_cache_update_period.
Состояние потоковой обработки в Nemotron3DiarizationForAudioFrameClassification: кэш спикеров в порядке поступления и очередь FIFO с последними кадрами энкодера, на которые обращается каждый чанк.
обновление
< source >( chunk_input_embeds: Tensorchunk_logits: Tensorsilence_embeds: Tensornum_chunk_frames: intmask: typing.Optional[torch.Tensor] = Nonenum_lookback_frames: int = 0 )
Параметры
- chunk_input_embeds (
torch.Tensorформы(batch_size, num_input_frames, hidden_size)) — Вход для кодировщика на данном шаге: кэшированные кадры, возвращённыеget_embeds, кадры look-back, текущий чанк и его look-ahead. - chunk_logits (
torch.Tensorформы(batch_size, num_input_frames * subsampling_factor, num_speakers)) — Логиты спикеров для данного шага, используемые для оценки кадров при сжатии кэша спикеров. - silence_embeds (
torch.Tensorформы(hidden_size,)) — Обучаемое встраивание тишины, заполняющее зарезервированные слоты тишины в сжатом кэше. - num_chunk_frames (
int) — Количество кадров чанка, следующих за кэшированными и look-back кадрами вchunk_input_embeds. Только они попадают в FIFO-очередь: look-ahead кадры после них будут повторно переданы на следующем шаге. - mask (
torch.Tensorформы(batch_size, num_input_frames), необязательный) — Допустимые кадрыchunk_input_embeds, для которых кадры заполнения получают нулевые вероятности спикера. - num_lookback_frames (
int, необязательный, по умолчанию 0) — Количество кадров, на которые выполняется возврат (look-back) между кэшированными кадрами и блоком вchunk_input_embeds: кадры предыдущего блока, повторно передаваемые вместе с ним.
Отправляет обработанный фрагмент в FIFO-очередь, перемещая его самые старые кадры в кэш спикера при переполнении.
Nemotron3DiarizationOutput
класс transformers.Nemotron3DiarizationOutput
< source >( logits: typing.Optional[torch.Tensor] = Nonehidden_states: tuple[torch.Tensor, ...] | None = Noneattentions: tuple[torch.Tensor, ...] | None = Nonespeaker_cache: transformers.models.nemotron3_diarization.modeling_nemotron3_diarization.Nemotron3DiarizationSpeakerCache | None = None )
Параметры
- logits (
torch.Tensorформы(batch_size, num_frames, config.head_config.num_speakers)) — Логиты активности спикеров для каждого кадра на частоте кадров спектрограммы.logits.sigmoid()возвращает вероятность того, что каждый спикер активен в каждом кадре; спикеры упорядочены по времени их первого появления в аудио. - hidden_states (
tuple[torch.Tensor, ...], необязательный, возвращается приoutput_hidden_states=True) — Скрытые состояния энкодера для каждого чанка, в порядке чанков: энкодер выполняется один раз на чанк, поэтому кортеж содержитconfig.audio_config.num_hidden_layers + 1тензора на чанк. Длина их последовательности равна длине чанка, включая кадры кэша и lookahead. - attentions (
tuple[torch.Tensor, ...], необязательный, возвращается приoutput_attentions=True) — Веса внимания кодировщика для каждого чанка, в порядке чанков,config.audio_config.num_hidden_layersтензоров на каждый чанк. - speaker_cache (
Nemotron3DiarizationSpeakerCache, необязательный, возвращается в режиме потоковой обработки) — Обновлённое состояние потоковой обработки, которое нужно передать в forward для следующего аудиофрагмента тех же потоков.
Результат работы Nemotron3DiarizationForAudioFrameClassification.
Nemotron3DiarizationForAudioFrameClassification
класс transformers.Nemotron3DiarizationForAudioFrameClassification
< source >( config: Nemotron3DiarizationConfig )
Параметры
- config (Nemotron3DiarizationConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Стриминговая модель speaker diarization Sortformer: для каждого кадра спектрограммы предсказывает активность до config.head_config.num_speakers говорящих, упорядоченных по времени первого появления. Аудио обрабатывается по частям (чанкам); каждый чанк обращается к нескольким кадрам look-ahead, а также к Arrival-Order Speaker Cache и FIFO-очереди, хранимым в Nemotron3DiarizationSpeakerCache. Целая запись разбивается на чанки самим методом forward (офлайн-режим); в стриминговом режиме на каждый вызов forward подаётся один чанк.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_features: Tensorattention_mask: typing.Optional[torch.Tensor] = Nonespeaker_cache: transformers.models.nemotron3_diarization.modeling_nemotron3_diarization.Nemotron3DiarizationSpeakerCache | None = Nonenum_lookahead_frames: int | None = Nonenum_lookback_frames: int | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Nemotron3DiarizationOutput or tuple(torch.Tensor)
Параметры
- input_features (
torch.Tensorформы(batch_size, sequence_length, feature_dim)) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью NemotronAsrStreamingFeatureExtractor. Подробности см. вNemotronAsrStreamingFeatureExtractor.__call__()(Nemotron3DiarizationProcessor использует NemotronAsrStreamingFeatureExtractor для обработки аудио). - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- speaker_cache (
Nemotron3DiarizationSpeakerCache, необязательный) — Состояние потоковой обработки, возвращаемое методом forward для предыдущего фрагмента тех же аудиопотоков. - num_lookahead_frames (
int, необязательный) — Потоковый режим: количество хвостовых кадров энкодера во входных данных, используемых только для look-ahead. На них обращается внимание, но их logits не возвращаются и они не добавляются в FIFO-очередь, так как открывают следующий фрагмент. Nemotron3DiarizationProcessor устанавливает его для каждого фрагмента, кроме последнего в сессии.Эти аргументы и
num_lookback_framesопределяют режим. Режим потоковой обработки, один фрагмент на каждый проход:num_lookahead_framesилиnum_lookback_framesзаданы (первый фрагмент создаётspeaker_cache, последующие фрагменты получают его), или задан толькоspeaker_cache(последний фрагмент сессии, без look-ahead). Входные данные за вычетом их look-back и look-ahead кадров образуют один фрагмент, какова бы ни была его длина, который целиком помещается в FIFO-очередь, размер которой задаётсяconfig.streaming_config. Офлайн-режим, ни один из них не задан: входные данные представляют собой всю запись, которая в ходе прохода делится на фрагменты поconfig.chunk_lengthкадров энкодера, каждый из которых использует доconfig.chunk_left_contextlook-back кадров из предыдущих фрагментов и доconfig.chunk_right_contextlook-ahead кадров из последующих, с FIFO-очередью, размер которой задаётсяconfig.fifo_length; кэш не возвращается. - num_lookback_frames (
int, необязательный) — Режим потоковой обработки: количество ведущих кадров энкодера во входных данных, которые используются только для look-back, то есть конец предыдущего чанка, повторно подаваемый перед текущим, поверх кадров изspeaker_cache. На них обращается внимание, но их логиты не возвращаются и они снова не попадают в очередь FIFO. По умолчанию равно 0.
Возвращает
Nemotron3DiarizationOutput или tuple(torch.Tensor)
Объект Nemotron3DiarizationOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (Nemotron3DiarizationConfig) и входных данных.
Метод forward класса Nemotron3DiarizationForAudioFrameClassification переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
- logits (
torch.Tensorформы(batch_size, num_frames, config.head_config.num_speakers)) — Логиты активности спикеров для каждого кадра на частоте кадров спектрограммы.logits.sigmoid()возвращает вероятность того, что каждый спикер активен в каждом кадре; спикеры упорядочены по времени их первого появления в аудио. - hidden_states (
tuple[torch.Tensor, ...], необязательный, возвращается приoutput_hidden_states=True) — скрытые состояния энкодера для каждого чанка, в порядке чанков: энкодер выполняется один раз на чанк, поэтому кортеж содержитconfig.audio_config.num_hidden_layers + 1тензора на чанк. Их длина последовательности равна длине чанка, включая кадры кэша и lookahead. - attentions (
tuple[torch.Tensor, ...], необязательный, возвращается приoutput_attentions=True) — веса внимания энкодера для каждого чанка, в порядке чанков,config.audio_config.num_hidden_layersтензоров на чанк. - speaker_cache (
Nemotron3DiarizationSpeakerCache, optional, возвращается в режиме потоковой обработки) — обновлённое состояние потока, которое нужно передать в forward для следующего аудиофрагмента тех же потоков.
Пример:
>>> from transformers import AutoModelForAudioFrameClassification, AutoProcessor
>>> from transformers.audio_utils import load_audio
>>> model_id = "nvidia/Nemotron-3-Diarization"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
>>> sampling_rate = processor.feature_extractor.sampling_rate
>>> audio = load_audio(
... "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/en-Alice_woman.wav",
... sampling_rate=sampling_rate,
... )
>>> inputs = processor(audio, sampling_rate=sampling_rate).to(model.device, dtype=model.dtype)
>>> probabilities = model(**inputs).logits.sigmoid() # (1, num_frames, 8), one frame every 10 ms