Transformers documentation

Nemotron 3 Diarization

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была добавлена в 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)float32bfloat16
потоковая, по шагам1.2x4.4x
офлайн, запись длительностью 488 с1.3x2.8x

Nemotron3DiarizationConfig

класс transformers.Nemotron3DiarizationConfig

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( config: Nemotron3DiarizationAudioConfig )

Параметры

  • config (Nemotron3DiarizationAudioConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель Nemotron3 Diarization без дополнительных компонентов, выводящая необработанные скрытые состояния (raw hidden-states) без какого-либо специализированного слоя (head) сверху.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( 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

< >

( config: Nemotron3DiarizationConfig )

Параметры

  • config (Nemotron3DiarizationConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель Nemotron3Diarization без классификатора говорящих: кодирует один фрагмент (с его кэшированными кадрами) и восстанавливает кадры энкодера до частоты кадров спектрограммы. Она не хранит состояние для потоковой обработки, см. Nemotron3DiarizationForAudioFrameClassification для фрагментированного прямого прохода.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( 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

< >

( 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__

< >

( 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.Tensor PyTorch.
    • 'np': возвращает объекты NumPy np.ndarray.
  • **kwargs (ProcessingKwargs, optional) — Дополнительные параметры обработки для каждой модальности (текст, изображения, видео, аудио). Специфичные для модели параметры перечислены выше; полный список поддерживаемых аргументов см. в классе TypedDict.

Возвращает

BatchFeature

выходы feature extractor, input_features и attention_mask. В режиме потоковой обработки отбрасываются хвостовые кадры, у которых окно анализа выходит за пределы чанка, не являющегося последним, поэтому input_features содержит ровно кадры данного чанка и может быть передана в модель как есть, а каждый чанк, кроме последнего, также содержит num_lookahead_frames — количество хвостовых кадров look-ahead энкодера, что переводит модель в режим потоковой обработки.

Nemotron3DiarizationSpeakerCache

класс transformers.Nemotron3DiarizationSpeakerCache

< >

( 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 с последними кадрами энкодера, на которые обращается каждый чанк.

обновление

< >

( 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

< >

( 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

< >

( 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

< >

( 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_context look-back кадров из предыдущих фрагментов и до config.chunk_right_context look-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
Update on GitHub