Transformers documentation

Nemotron 3.5 ASR

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

and get access to the augmented documentation experience

to get started

Эта модель была добавлена в Hugging Face Transformers 27.06.2026.

Nemotron 3.5 ASR

Обзор

Nemotron 3.5 ASR — это мультиязычная модель распознавания речи от NVIDIA с 600 млн параметров, разработанная для высококачественной транскрипции как в условиях потоковой обработки с низкой задержкой, так и в режиме пакетной обработки с высокой пропускной способностью. Модель поддерживает автоматическую расстановку знаков препинания и заглавных букв. Для потоковой обработки доступны настраиваемые размеры блоков — 80 мс, 160 мс, 560 мс и 1120 мс, что позволяет пользователям выбирать баланс между задержкой и точностью в зависимости от требований приложения. Ключевую роль в этом играет архитектура FastConformer-RNNT с учетом кэша: в отличие от традиционной потоковой обработки с буферизацией, при которой многократно перерабатываются перекрывающиеся окна аудио, модель обрабатывает только каждый новый входящий блок, повторно используя кэшированный контекст энкодера из предыдущих блоков. Это устраняет избыточные вычисления, значительно повышает эффективность и минимизирует общую задержку без потери точности, что делает модель оптимальной для задач транскрипции в реальном времени.

Использование

Офлайн-распознавание

Пайплайн
AutoModel
from transformers import pipeline

pipe = pipeline(
    "automatic-speech-recognition",
    model="nvidia/nemotron-3.5-asr-streaming-0.6b",
)
out = pipe("https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/bcn_weather.mp3")
print(out)

Пайплайн использует подсказку по умолчанию для языка (индекс 0, en-US). Для явного указания языка или автоматического определения передайте аргумент language процессора (см. вкладку AutoModel).

Потоковая расшифровка

Это экспериментальная функция, и API может измениться.

Для транскрибации в реальном времени аудио разбивается на фрагменты в соответствии со следующим:

from threading import Thread
from transformers import AutoModelForRNNT, AutoProcessor, TextIteratorStreamer
from transformers.audio_utils import load_audio

model_id = "nvidia/nemotron-3.5-asr-streaming-0.6b"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForRNNT.from_pretrained(model_id, device_map="auto")

processor.set_num_lookahead_tokens(6)
print(f"Streaming latency: {processor.streaming_latency_ms} ms")

# The language prompt rides along on every chunk; use a locale (e.g. "de-DE") or "auto".
language = "en-US"

sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
    "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/obama.mp3",
    sampling_rate=sampling_rate,
)

first_chunk_inputs = processor(
    audio[: processor.num_samples_first_audio_chunk],
    sampling_rate=sampling_rate,
    is_streaming=True,
    is_first_audio_chunk=True,
    language=language,
    return_tensors="pt",
)
first_chunk_inputs = first_chunk_inputs.to(model.device, dtype=model.dtype)


def input_features_generator():
    yield first_chunk_inputs.input_features[:, : processor.num_mel_frames_first_audio_chunk, :]

    mel_frame_idx = processor.num_mel_frames_first_audio_chunk
    hop_length = processor.feature_extractor.hop_length
    n_fft = processor.feature_extractor.n_fft

    start_idx = mel_frame_idx * hop_length - n_fft // 2
    while (end_idx := start_idx + processor.num_samples_per_audio_chunk) < audio.shape[0]:
        inputs = processor(
            audio[start_idx:end_idx],
            sampling_rate=sampling_rate,
            is_streaming=True,
            is_first_audio_chunk=False,
            language=language,
            return_tensors="pt",
        )
        inputs = inputs.to(model.device, dtype=model.dtype)
        yield inputs.input_features

        mel_frame_idx += processor.num_mel_frames_per_audio_chunk
        start_idx = mel_frame_idx * hop_length - n_fft // 2


streamer = TextIteratorStreamer(processor.tokenizer, skip_special_tokens=True)
generate_kwargs = {
    **first_chunk_inputs,
    "input_features": input_features_generator(),
    "streamer": streamer,
}
thread = Thread(target=model.generate, kwargs=generate_kwargs)
thread.start()

# Iterate over the streamer to get text chunks as they are generated
print("Model output (streaming):", end=" ", flush=True)
for text_chunk in streamer:
    print(text_chunk, end="", flush=True)
thread.join()

Задержка потоковой передачи

Задержка определяется параметром num_lookahead_tokens — это правый контекст внимания (lookahead, в подвыбранных кадрах энкодера), который каждый чанк ожидает перед тем, как быть выданным. Более большое значение позволяет каждому чанку «видеть» больше будущего аудио: точность выше, но задержка тоже растёт. Просмотрите поддерживаемые варианты компромисса, выберите один и прочитайте полученную задержку:

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("nvidia/nemotron-3.5-asr-streaming-0.6b")

# Each supported `num_lookahead_tokens` mapped to its streaming latency in milliseconds:
print(processor.supported_streaming_latencies_ms)
# {3: 320, 0: 80, 6: 560, 13: 1120}

# Select a right attention context (this also re-derives the streaming chunk sizes used above):
processor.set_num_lookahead_tokens(6)

# Latency of the current selection:
print(processor.streaming_latency_ms)
# 560

set_num_lookahead_tokens задаёт размер блоков, которые выдаёт процессор, а соответствующий num_lookahead_tokens должен дойти до generate (в приведённом выше фрагменте он передаётся через **inputs/**first_chunk_inputs, которые несут num_lookahead_tokens). При потоковом вызове generate будет выброшено исключение, если этот параметр опущен.

Nemotron3_5AsrConfig

класс transformers.Nemotron3_5AsrConfig

< >

( 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 = 0id2label: 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 = Noneis_encoder_decoder: bool = Truevocab_size: int = 13088decoder_hidden_size: int = 640num_decoder_layers: int = 2hidden_act: str = 'relu'max_symbols_per_step: int = 10encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonepad_token_id: int = 0blank_token_id: int = 13087num_prompts: int = 128prompt_intermediate_size: int = 2048default_prompt_id: int = 101 )

Параметры

  • is_encoder_decoder (bool, необязательный, по умолчанию True) — Указывает, используется ли модель в качестве энкодера/декодера.
  • vocab_size (int, необязательный, по умолчанию 13088) — Размер словаря выхода объединённой сети (включая токен blank).
  • decoder_hidden_size (int, необязательный, по умолчанию 640) — Размер скрытого слоя LSTM-сети предсказания (pred_hidden в NeMo).
  • num_decoder_layers (int, необязательный, по умолчанию 2) — Количество слоев LSTM в сети предсказания.
  • hidden_act (str, необязательный, по умолчанию "relu") — Функция активации в объединённой сети.
  • max_symbols_per_step (int, необязательный, по умолчанию 10) — Максимальное количество непустых символов, генерируемых на каждом временном шаге энкодера при жадном декодировании.
  • encoder_config (Union[dict, NemotronAsrStreamingEncoderConfig], необязательный) — Объект конфигурации или словарь для энкодера. Непосредственно переиспользует NemotronAsrStreamingEncoderConfig, поскольку энкодер идентичен энкодеру NemotronAsrStreaming.
  • pad_token_id (int, необязательный, по умолчанию 0) — Идентификатор токена, используемого для дополнения (padding) в словаре.
  • blank_token_id (int, необязательный, по умолчанию 13087) — Идентификатор пустого токена для декодирования RNN-T.
  • num_prompts (int, необязательный, по умолчанию 128) — Количество слотов языковых промптов. Целевой язык кодируется в виде one-hot вектора такого размера, который рассылается вдоль временной оси энкодера и конкатенируется с выходом энкодера перед MLP слияния prompt_kernel.
  • prompt_intermediate_size (int, необязательный, по умолчанию 2048) — Размер скрытого слоя в MLP-слое слияния prompt_kernel (Linear(hidden + num_prompts -> intermediate) -> ReLU -> Linear(intermediate -> hidden)).
  • default_prompt_id (int, необязательный, по умолчанию 101) — Индекс промпта, используемый для обусловливания модели, если prompt_ids не задан. По умолчанию используется слот автоопределения языка auto (индекс 101 в словаре промптов NeMo), что соответствует значению по умолчанию в NeMo target_lang="auto": модель самостоятельно определяет язык и выводит тег <xx-XX>.

Это класс конфигурации для хранения настроек модели Nemotron3_5AsrForRNNT. Он используется для создания модели Nemotron 3.5 Asr в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели nvidia/nemotron-3.5-asr-streaming-0.6b.

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> from transformers import Nemotron3_5AsrForRNNT, Nemotron3_5AsrConfig

>>> configuration = Nemotron3_5AsrConfig()
>>> model = Nemotron3_5AsrForRNNT(configuration)
>>> configuration = model.config

Nemotron3_5AsrProcessor

класс transformers.Nemotron3_5AsrProcessor

< >

( feature_extractortokenizerblank_token = '<blank>'decoder_type = Nonesupported_num_lookahead_tokens = Nonedefault_num_lookahead_tokens = Noneprompt_dictionary = Nonenum_prompts = 128 )

Параметры

  • feature_extractor (NemotronAsrStreamingFeatureExtractor) — Извлечение признаков является обязательным входом.
  • tokenizer (ParakeetTokenizer) — Токенизатор является обязательным входным параметром.
  • blank_token (str, необязательный, по умолчанию "<blank>") — Токен пустого символа для декодирования RNN-T.
  • decoder_type (str, необязательный) — Режим декодирования/генерации временных меток (например, "ctc", "rnnt", "tdt"). Если None, тип декодера определяется автоматически для обратной совместимости.
  • supported_num_lookahead_tokens (list[int], необязательный) — Поддерживаемые контексты правого внимания (lookahead, в кадрах подвыборки энкодера), аналогично NemotronAsrStreamingEncoderConfig.supported_num_lookahead_tokens. Используется для проверки streaming_latency_ms и для определения возвращаемого значения num_lookahead_tokens.
  • default_num_lookahead_tokens (int, необязательный) — Правый контекст, используемый, если streaming_latency_ms не задан. По умолчанию — первый элемент supported_num_lookahead_tokens.
  • prompt_dictionary (dict[str, int], необязательный) — Сопоставление строки целевого языка (например, "en-US", "de-DE", просто код "de" или "auto") с индексом промпта. По умолчанию используется словарь промптов из контрольной точки NeMo.
  • num_prompts (int, необязательный, по умолчанию 128) — Количество слотов языковых промптов (размер one-hot вектора промпта), аналогично Nemotron3_5AsrConfig.num_prompts.

Создаёт Nemotron3_5AsrProcessor, который объединяет экстрактор признаков и токенизатор в единый процессор.

Nemotron3_5AsrProcessor предоставляет все возможности NemotronAsrStreamingFeatureExtractor и ParakeetTokenizer. Подробнее см. в ~NemotronAsrStreamingFeatureExtractor и ~ParakeetTokenizer.

decode

< >

( *argsdurations = None**kwargs )

Передайте аргументы в decode() и выполните постобработку временных меток на уровне токенов (если предоставлены durations) по аналогии с библиотекой NeMo.

set_num_lookahead_tokens

< >

( num_lookahead_tokens: int )

Выберите правильный контекст внимания (lookahead, в подвыбранных кадрах энкодера), используемый для потоковой обработки.

Устанавливает default_num_lookahead_tokens, благодаря чему каждое производное свойство потоковой обработки (num_mel_frames_first_audio_chunk, num_mel_frames_per_audio_chunk, num_samples_first_audio_chunk, num_samples_per_audio_chunk) пересчитывается на основе нового значения. num_lookahead_tokens должно быть одним из значений supported_num_lookahead_tokens.

Передавайте то же значение num_lookahead_tokens в model.generate, чтобы правый контекст внимания, используемый в прямом проходе, соответствовал размерам блоков, сгенерированным здесь; в противном случае потоковый generate вызовет ошибку.

Nemotron3_5AsrRNNTOutput

класс transformers.Nemotron3_5AsrRNNTOutput

< >

( last_hidden_state: typing.Optional[torch.Tensor] = Nonepooler_output: typing.Optional[torch.Tensor] = Nonehidden_states: tuple[torch.Tensor, ...] | None = Noneattentions: tuple[torch.Tensor, ...] | None = Noneloss: typing.Optional[torch.Tensor] = Nonelogits: typing.Optional[torch.Tensor] = Nonedecoder_cache: transformers.models.nemotron3_5_asr.generation_nemotron3_5_asr.Nemotron3_5AsrRNNTDecoderCache | None = Noneencoder_past_key_values: transformers.cache_utils.Cache | None = Nonepadding_cache: NemotronAsrStreamingEncoderCausalConvPaddingCache | None = None )

Параметры

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.
  • pooler_output (torch.Tensor формы (batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки через слои, используемые для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки через линейный слой и функцию активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.
  • hidden_states (tuple(torch.Tensor), необязательный, возвращается, если передано 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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

  • loss (torch.Tensor, необязательный, возвращается, если задан labels) — потеря транскрибтера RNN-T.
  • logits (torch.Tensor формы (batch_size, encoder_length, decoder_length, vocab_size + 1)) — Оценки совместной сети по словарю плюс символ blank для каждой пары кадров энкодера/декодера.
  • decoder_cache (Nemotron3_5AsrRNNTDecoderCache, optional) — Обновленный кэш LSTM декодера. Используется повторно при предсказании пустых токенов, чтобы пропустить шаг LSTM.
  • encoder_past_key_values (Cache, необязательный) — Обновлённый скользящий кэш K/V для внимания энкодера, возвращаемый при кодировании аудио с use_cache=True (стриминг с учётом кэша). Передайте его в следующий вызов forward для следующего фрагмента.
  • padding_cache (NemotronAsrStreamingEncoderCausalConvPaddingCache, optional) — Обновлённый единый стриминговый кэш свёрток (субсэмплирование Conv2d + глубинные свёртки Conv1d в conformer), возвращается при кодировании аудио с use_cache=True. Передайте его в следующий вызов forward для очередного фрагмента.

Nemotron3_5AsrForRNNT

класс transformers.Nemotron3_5AsrForRNNT

< >

( config: Nemotron3_5AsrConfig )

Параметры

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

Nemotron3_5Asr Encoder с головой RNN-T (Recurrent Neural Network Transducer) и условным настраиванием по промпту языка.

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

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

forward

< >

( input_features: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_cache: transformers.models.nemotron3_5_asr.generation_nemotron3_5_asr.Nemotron3_5AsrRNNTDecoderCache | None = Noneuse_decoder_cache: bool | None = Noneencoder_outputs: transformers.modeling_outputs.BaseModelOutputWithPooling | None = Nonelabels: typing.Optional[torch.Tensor] = Nonenum_lookahead_tokens: int | None = Noneprompt_ids: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Nemotron3_5AsrRNNTOutput or tuple(torch.Tensor)

Параметры

  • input_features (torch.Tensor формы (batch_size, sequence_length, feature_dim), необязательный) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью feature_extractor_class. Подробности см. в feature_extractor_class.__call__ (processor_class использует feature_extractor_class для обработки аудио).
  • attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • decoder_input_ids (torch.LongTensor формы (batch_size, 1), необязательный) — Идентификаторы входных токенов декодера для одношагового вывода.
  • decoder_cache (Nemotron3_5AsrRNNTDecoderCache, optional) — Кэш декодера LSTM. Переиспользуется при предсказании пустых токенов, чтобы пропустить шаг LSTM.
  • use_decoder_cache (bool, необязательный) — Определяет, следует ли выделять и использовать кэш декодера, если он не был передан.
  • encoder_outputs (tuple(torch.Tensor), необязательный) — Предварительно вычисленные выходные данные энкодера (last_hidden_state, pooler_output, …).
  • labels (torch.Tensor формы (batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне [0, ..., config.vocab_size] или быть равны -100 (см. docstring input_ids). Токены с индексами, установленными в -100, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне [0, ..., config.vocab_size].
  • num_lookahead_tokens (int, необязательный) — Контекст правого внимания (lookahead, в подвыбранных кадрах энкодера), передаваемый в энкодер. По умолчанию: config.encoder_config.default_num_lookahead_tokens.
  • prompt_ids (torch.LongTensor формы (batch_size,), необязательный) — Индексы языкового промпта для условного кодирования по идентификатору языка. Формируются процессором из language. Преобразуются в одногорный (one-hot) вектор, который используется в prompt_projector.

Возвращает

Nemotron3_5AsrRNNTOutput или tuple(torch.Tensor)

Объект Nemotron3_5AsrRNNTOutput или кортеж torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (None) и входных данных.

Метод Nemotron3_5AsrForRNNT forward переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.

  • pooler_output (torch.Tensor формы (batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки слоями, используемыми для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки линейным слоем и функцией активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.

  • 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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

  • loss (torch.Tensor, необязательный, возвращается, если задан labels) — функция потерь транскрибатора RNN-T.

  • logits (torch.Tensor формы (batch_size, encoder_length, decoder_length, vocab_size + 1)) — Оценки совместной сети по словарю плюс символ blank для каждой пары кадров энкодера/декодера.

  • decoder_cache (Nemotron3_5AsrRNNTDecoderCache, optional) — Обновленный кэш LSTM декодера. Используется повторно при предсказаниях пустых токенов для пропуска шага LSTM.

  • encoder_past_key_values (Cache, необязательный) — обновлённый скользящий кэш K/V для внимания энкодера, возвращаемый при кодировании аудио с use_cache=True (стриминг с учётом кэша). Передайте его в следующий вызов forward для следующего фрагмента.

  • padding_cache (NemotronAsrStreamingEncoderCausalConvPaddingCache, optional) — обновлённый единый кэш стриминговых свёрток (субсэмплирование Conv2d + глубинные свёртки Conv1d в conformer), возвращается при кодировании аудио с use_cache=True. Передайте его в forward следующего фрагмента.

Пример:

>>> from transformers import AutoProcessor, Nemotron3_5AsrForRNNT
>>> from datasets import load_dataset, Audio

>>> model_id = "nvidia/nemotron-3.5-asr-streaming-0.6b"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = Nemotron3_5AsrForRNNT.from_pretrained(model_id)

>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> ds = ds.cast_column("audio", Audio(sampling_rate=processor.feature_extractor.sampling_rate))

>>> inputs = processor(ds[0]["audio"]["array"], language="en-US")
>>> outputs = model(**inputs)

generate

< >

( inputs = Nonegeneration_config = None**kwargs )

Update on GitHub