Transformers documentation
Nemotron 3.5 ASR
Эта модель была добавлена в Hugging Face Transformers 27.06.2026.
Nemotron 3.5 ASR
Обзор
Nemotron 3.5 ASR — это мультиязычная модель распознавания речи от NVIDIA с 600 млн параметров, разработанная для высококачественной транскрипции как в условиях потоковой обработки с низкой задержкой, так и в режиме пакетной обработки с высокой пропускной способностью. Модель поддерживает автоматическую расстановку знаков препинания и заглавных букв. Для потоковой обработки доступны настраиваемые размеры блоков — 80 мс, 160 мс, 560 мс и 1120 мс, что позволяет пользователям выбирать баланс между задержкой и точностью в зависимости от требований приложения. Ключевую роль в этом играет архитектура FastConformer-RNNT с учетом кэша: в отличие от традиционной потоковой обработки с буферизацией, при которой многократно перерабатываются перекрывающиеся окна аудио, модель обрабатывает только каждый новый входящий блок, повторно используя кэшированный контекст энкодера из предыдущих блоков. Это устраняет избыточные вычисления, значительно повышает эффективность и минимизирует общую задержку без потери точности, что делает модель оптимальной для задач транскрипции в реальном времени.
Использование
Офлайн-распознавание
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).
Языковой промпт создаётся процессором, поэтому язык передаётся вместе с входными данными в generate.
from transformers import AutoModelForRNNT, AutoProcessor
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")
audio = load_audio(
"https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/bcn_weather.mp3",
sampling_rate=processor.feature_extractor.sampling_rate,
)
# Condition on a known language ...
inputs = processor(audio, sampling_rate=processor.feature_extractor.sampling_rate, language="en-US")
inputs.to(model.device, dtype=model.dtype)
output = model.generate(**inputs, return_dict_in_generate=True)
print(processor.decode(output.sequences, skip_special_tokens=True))
# ... or let the model detect it and keep the emitted <xx-XX> language tag.
inputs = processor(audio, sampling_rate=processor.feature_extractor.sampling_rate) # equiv to ..., language="auto"
inputs.to(model.device, dtype=model.dtype)
output = model.generate(**inputs, return_dict_in_generate=True)
print(processor.decode(output.sequences, skip_special_tokens=False))Потоковая расшифровка
Это экспериментальная функция, и 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)
# 560set_num_lookahead_tokens задаёт размер блоков, которые выдаёт процессор, а соответствующий num_lookahead_tokens должен дойти до generate (в приведённом выше фрагменте он передаётся через **inputs/**first_chunk_inputs, которые несут num_lookahead_tokens). При потоковом вызове generate будет выброшено исключение, если этот параметр опущен.
Nemotron3_5AsrConfig
класс transformers.Nemotron3_5AsrConfig
< 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 = 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), что соответствует значению по умолчанию в NeMotarget_lang="auto": модель самостоятельно определяет язык и выводит тег<xx-XX>.
Это класс конфигурации для хранения настроек модели Nemotron3_5AsrForRNNT. Он используется для создания модели Nemotron 3.5 Asr в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели nvidia/nemotron-3.5-asr-streaming-0.6b.
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Nemotron3_5AsrProcessor
класс transformers.Nemotron3_5AsrProcessor
< source >( 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() и выполните постобработку временных меток на уровне токенов (если предоставлены durations) по аналогии с библиотекой NeMo.
Выберите правильный контекст внимания (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
< source >( 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
< source >( 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
< source >( 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 (см. docstringinput_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)