Transformers documentation
MOSS-Transcribe-Diarize
Эта модель была добавлена в Hugging Face Transformers 14.10.2026.
MOSS-Transcribe-Diarize
Обзор
MOSS-Transcribe-Diarize 0.9B — это модель для сквозного понимания аудио, предназначенная для транскрипции длинных записей с несколькими говорящими, диаризации говорящих и определения временных меток. Она объединяет энкодер в стиле Whisper, этап слияния кадров 4×, мультимодальный проектор и языковую модель Qwen3.
Чекпоинт модели доступен по адресу: itazap/MOSS-Transcribe-Diarize-HF
Ключевые возможности включают:
- Совместная транскрипция и диаризация за один проход, с сегментами в формате
[start][S01]text[end]. - Длинная аудио с помощью разбиения на фрагменты Whisper-window на стороне процессора; модель собирает фрагменты обратно для каждого примера.
- Транскрипция по запросу с помощью
apply_transcription_requestили шаблона чата. - Поддержка многоязычности для более чем 50 языков.
Эта модель была предоставлена Ita Zaporozhets из команды Hugging Face. Подробности см. в карточке модели и в репозитории OpenMOSS.
Использование
Большинство примеров ниже используют
apply_transcription_request— удобную функцию, которая формирует шаблон чата за вас. Эквивалентный вызовapply_chat_templateописан в разделе Расширенное использование с шаблоном чата.
Базовая транскрипция и диаризация
Каждый репликатор декодируется как сегмент [start][S0N]text[end]. processor.decode может вернуть исходную декодированную строку, разобранные сегменты в виде списка словарей (return_format="parsed") или только склеенную транскрипцию (return_format="transcription_only").
from transformers import AutoProcessor, AutoModelForCausalLM
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
audio_url = "https://huggingface.co/datasets/itazap/audio_samples/resolve/main/podcast_sample.wav"
inputs = processor.apply_transcription_request(audio_url)
inputs = inputs.to(model.device, dtype=model.dtype)
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=512)
generated_ids = outputs[:, inputs.input_ids.shape[1] :]
decoded = processor.decode(generated_ids, skip_special_tokens=True)
print("RAW OUTPUT:", decoded)
parsed = processor.decode(generated_ids, return_format="parsed")[0]
print("\nPARSED (list of dicts):")
for segment in parsed:
print(segment)
transcription = processor.decode(generated_ids, return_format="transcription_only")
print("\nTRANSCRIPTION ONLY:", transcription[0])
"""
RAW OUTPUT: ["[0.48][S01] Hey everyone, welcome back to the show.[2.43][2.46][S01] Today, we're talking about the best way to learn a new skill.[5.22][5.43][S01] I'm here with Jordan to dig into it.[7.14][8.40][S02] Thanks for having me.[9.42][9.63][S02] My take is that consistency beats intensity every single time.[12.87][13.14][S01] That makes sense.[13.92][13.92][S01] Even 20 minutes a day adds up over a few months.[16.17][16.32][S02] Exactly, and writing down small wins keeps you motivated along the way.[19.62]"]
PARSED (list of dicts):
{'Start': 0.48, 'End': 2.43, 'Speaker': 1, 'Content': 'Hey everyone, welcome back to the show.'}
{'Start': 2.46, 'End': 5.22, 'Speaker': 1, 'Content': "Today, we're talking about the best way to learn a new skill."}
{'Start': 5.43, 'End': 7.14, 'Speaker': 1, 'Content': "I'm here with Jordan to dig into it."}
{'Start': 8.4, 'End': 9.42, 'Speaker': 2, 'Content': 'Thanks for having me.'}
{'Start': 9.63, 'End': 12.87, 'Speaker': 2, 'Content': 'My take is that consistency beats intensity every single time.'}
{'Start': 13.14, 'End': 13.92, 'Speaker': 1, 'Content': 'That makes sense.'}
{'Start': 13.92, 'End': 16.17, 'Speaker': 1, 'Content': 'Even 20 minutes a day adds up over a few months.'}
{'Start': 16.32, 'End': 19.62, 'Speaker': 2, 'Content': 'Exactly, and writing down small wins keeps you motivated along the way.'}
TRANSCRIPTION ONLY: Hey everyone, welcome back to the show. Today, we're talking about the best way to learn a new skill. I'm here with Jordan to dig into it. Thanks for having me. My take is that consistency beats intensity every single time. That makes sense. Even 20 minutes a day adds up over a few months. Exactly, and writing down small wins keeps you motivated along the way.
"""Пользовательский промпт и горячие слова
apply_transcription_request принимает keywords для смещения транскрипции в сторону конкретных терминов (например, собственных имён или терминологии определённой предметной области), которые отображаются в шаблоне чата как 热词列表: («список горячих слов»). Вместе с ними можно передать пользовательский prompt для предоставления дополнительного контекста.
Ниже мы транскрибируем аудиозапись, в которой упоминается «Yorùbá», сравнивая результаты с использованием ключевого слова и без него.
from transformers import AutoProcessor, AutoModelForCausalLM
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
audio_url = "https://huggingface.co/datasets/itazap/audio_samples/resolve/main/languages_sample.wav"
# Without keywords
inputs = processor.apply_transcription_request(audio_url)
inputs = inputs.to(model.device, dtype=model.dtype)
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=128)
transcription = processor.decode(outputs[:, inputs.input_ids.shape[1] :], return_format="transcription_only")
print(f"WITHOUT keywords: {transcription[0]}")
# With keywords
inputs = processor.apply_transcription_request(audio_url, keywords=["Mandarin", "Yorùbá"])
inputs = inputs.to(model.device, dtype=model.dtype)
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=128)
transcription = processor.decode(outputs[:, inputs.input_ids.shape[1] :], return_format="transcription_only")
print(f"WITH keywords : {transcription[0]}")
"""
WITHOUT keywords: Let's talk about the most spoken languages in the world. Mandarin Chinese has the most native speakers, followed by Spanish, English, and Hindi. In West Africa, one of the most widely spoken languages is Yoruba, with over 50 million speakers.
WITH keywords : Let's talk about the most spoken languages in the world. Mandarin Chinese has the most native speakers, followed by Spanish, English, and Hindi. In West Africa, one of the most widely spoken languages is Yorùbá, with over 50 million speakers.
"""Расширенное использование с шаблоном чата
apply_transcription_request эквивалентен шаблону чата с пользовательским ходом, содержащим только аудио:
from transformers import AutoProcessor, AutoModelForCausalLM
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
audio_url = "https://huggingface.co/datasets/itazap/audio_samples/resolve/main/intro_sample.wav"
conversation = [
{
"role": "user",
"content": [
{"type": "audio", "url": audio_url},
],
},
]
inputs = processor.apply_chat_template(
conversation,
tokenize=True,
add_generation_prompt=True,
return_dict=True,
).to(model.device, dtype=model.dtype)
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=128)
decoded = processor.decode(
outputs[:, inputs.input_ids.shape[1] :],
skip_special_tokens=True,
)
print(decoded)Пакетный вывод
Передайте список аудио, а при необходимости — соответствующие списки промптов и/или ключевых слов, чтобы выполнить транскрипцию пачки за один вызов.
Чтобы пропустить значение для конкретного примера, установите соответствующий элемент в None.
from transformers import AutoProcessor, AutoModelForCausalLM
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
processor = AutoProcessor.from_pretrained(model_id)
# `from_pretrained` is used here for convenience, the model can also be built from a config directly.
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
audio = [
"https://huggingface.co/datasets/itazap/audio_samples/resolve/main/intro_sample.wav",
"https://huggingface.co/datasets/itazap/audio_samples/resolve/main/languages_sample.wav",
]
keywords = [None, ["Mandarin", "Yorùbá"]]
inputs = processor.apply_transcription_request(audio, keywords=keywords)
inputs = inputs.to(model.device, dtype=model.dtype)
outputs = model.generate(**inputs, do_sample=False, max_new_tokens=128)
transcription = processor.decode(outputs[:, inputs.input_ids.shape[1] :], return_format="transcription_only")
print(transcription)Обучение
Передайте целевые транскрипции, в формате вывода модели с временными метками и метками говорящих, в apply_transcription_request с помощью transcription. Возвращаемые labels используются для вычисления функции потерь.
from transformers import AutoModelForCausalLM, AutoProcessor
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
model.train()
audio_url = "https://huggingface.co/datasets/itazap/audio_samples/resolve/main/intro_sample.wav"
transcription = (
"[0.00][S01] Welcome to this demonstration of automatic speech recognition and speaker diarization using an "
"end-to-end transformer model.[7.47]"
)
inputs = processor.apply_transcription_request(audio_url, transcription=transcription)
inputs.to(model.device, dtype=model.dtype)
loss = model(**inputs).loss
print("Loss:", loss.item())
loss.backward()Torch compile
Модель можно скомпилировать для ускорения инференса/обучения. device_map="auto" оборачивает прямой проход хуками accelerate, что приводит к многократной повторной компиляции, поэтому загружайте модель напрямую на одно устройство.
На B200 мы зафиксировали ускорение примерно в 2,1 раза при размере батча 4.
import time
import torch
from transformers import AutoProcessor, AutoModelForCausalLM
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
num_warmup = 5
num_runs = 20
# Load processor + model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id).to("cuda")
# Prepare static inputs
audio_url = "https://huggingface.co/datasets/itazap/audio_samples/resolve/main/intro_sample.wav"
inputs = processor.apply_transcription_request([audio_url] * 4).to(model.device, torch.bfloat16)
# Benchmark without compile
print("Warming up without compile...")
with torch.no_grad():
for _ in range(num_warmup):
_ = model(**inputs)
torch.accelerator.synchronize()
print("\nBenchmarking without torch.compile...")
torch.accelerator.synchronize()
start = time.time()
with torch.no_grad():
for _ in range(num_runs):
_ = model(**inputs)
torch.accelerator.synchronize()
no_compile_time = (time.time() - start) / num_runs
print(f"Average time without compile: {no_compile_time:.4f}s")
# Benchmark with compile
print("\nCompiling model...")
model = torch.compile(model)
print("Warming up with compile (includes graph capture)...")
with torch.no_grad():
for _ in range(num_warmup):
_ = model(**inputs)
torch.accelerator.synchronize()
print("\nBenchmarking with torch.compile...")
torch.accelerator.synchronize()
start = time.time()
with torch.no_grad():
for _ in range(num_runs):
_ = model(**inputs)
torch.accelerator.synchronize()
compile_time = (time.time() - start) / num_runs
print(f"Average time with compile: {compile_time:.4f}s")
speedup = no_compile_time / compile_time
print(f"\nSpeedup: {speedup:.2f}x")Для авторегрессионной транскрипции torch.compile ускоряет посимвольные прямые проходы внутри generate, предоставляя объект CompileConfig вместо прямой компиляции model.forward.
import torch
from transformers import AutoProcessor, AutoModelForCausalLM, CompileConfig
model_id = "itazap/MOSS-Transcribe-Diarize-HF"
num_warmup = 3
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id).to("cuda")
audio_url = "https://huggingface.co/datasets/itazap/audio_samples/resolve/main/intro_sample.wav"
inputs = processor.apply_transcription_request([audio_url] * 4).to(model.device, torch.bfloat16)
compile_config = CompileConfig()
# Warmup
for _ in range(num_warmup):
_ = model.generate(**inputs, max_new_tokens=128, cache_implementation="static", compile_config=compile_config)
# Apply model
generated_ids = model.generate(
**inputs, max_new_tokens=128, cache_implementation="static", compile_config=compile_config
)
transcription = processor.decode(generated_ids[:, inputs.input_ids.shape[1] :], return_format="transcription_only")
print(transcription)MossTranscribeDiarizeConfig
класс transformers.MossTranscribeDiarizeConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneaudio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_token_id: int = 151671projector_hidden_act: str = 'silu'projector_bias: bool = Trueaudio_merge_size: int = 4audio_chunk_size: int = 480000tie_word_embeddings: bool = True )
Параметры
- audio_config (
Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Объект конфигурации или словарь конфигурации аудио-бэкбона. - text_config (
Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Объект конфигурации или словарь конфигурации текстового бэкбона. - audio_token_id (
int, необязательный, по умолчанию151671) — Индекс аудио-токена, используемый как плейсхолдер для входного аудио. - projector_hidden_act (
str, необязательный, по умолчаниюsilu) — Функция активации, используемая мультимодальным проектором. - projector_bias (
bool, необязательный, по умолчаниюTrue) — Использовать ли смещение (bias) в мультимодальном проекторе. - audio_merge_size (
int, необязательный, по умолчанию 4) — Количество последовательных кадров кодировщика Whisper, объединяемых перед мультимодальным проектором. - audio_chunk_size (
int, необязательный, по умолчанию 480000) — размер окна кодировщика Whisper в виде необработанных аудиоданных, используется вместе сpadding_maskдля восстановленияaudio_chunk_mapping. - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели.
Это класс конфигурации для хранения конфигурации модели MossTranscribeDiarizeModel. Он используется для создания модели Moss Transcribe Diarize в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации hf-audio/MOSS-Transcribe-Diarize-HF
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import MossTranscribeDiarizeForConditionalGeneration, MossTranscribeDiarizeConfig
>>> # Initializing a MossTranscribeDiarize configuration
>>> configuration = MossTranscribeDiarizeConfig()
>>> # Initializing a model from the configuration
>>> model = MossTranscribeDiarizeForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMossTranscribeDiarizeAudioConfig
класс transformers.MossTranscribeDiarizeAudioConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonenum_mel_bins: int = 80num_hidden_layers: int = 24num_attention_heads: int = 16intermediate_size: int = 4096activation_function: str = 'gelu'hidden_size: int = 1024dropout: float | int = 0.0attention_dropout: float | int = 0.0activation_dropout: float | int = 0.0initializer_range: float = 0.02max_source_positions: int = 1500 )
Параметры
- num_mel_bins (
int, необязательный, по умолчанию80) — Количество mel-признаков, используемых на входной кадр. Должно соответствовать значению, применяемому в классеAutoFeatureExtractor. - num_hidden_layers (
int, необязательный, по умолчанию24) — Количество скрытых слоев в декодере Transformer. - num_attention_heads (
int, необязательный, по умолчанию16) — Количество головок внимания в каждом слое внимания декодера Transformer. - intermediate_size (
int, необязательный, по умолчанию4096) — Размерность представлений MLP. - activation_function (
str, необязательный, по умолчаниюgelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - hidden_size (
int, необязательный, по умолчанию1024) — Размерность скрытых представлений. - dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент для всех слоёв dropout. - attention_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - activation_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для активаций внутри полносвязного слоя. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - max_source_positions (
int, необязательный, по умолчанию 1500) — Максимальная длина последовательности лог-мел-фильтр-банковых признаков, с которой может использоваться данная модель.
Это класс конфигурации для хранения конфигурации модели MossTranscribeDiarizeModel. Он используется для создания модели Moss Transcribe Diarize в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации hf-audio/MOSS-Transcribe-Diarize-HF
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import MossTranscribeDiarizeAudioConfig, MossTranscribeDiarizeAudioModel
>>> # Initializing a MossTranscribeDiarizeAudioConfig
>>> configuration = MossTranscribeDiarizeAudioConfig()
>>> # Initializing a MossTranscribeDiarizeAudioModel (with random weights)
>>> model = MossTranscribeDiarizeAudioModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMossTranscribeDiarizeAudioModel
класс transformers.MossTranscribeDiarizeAudioModel
< source >( config: MossTranscribeDiarizeAudioConfig )
Параметры
- config (MossTranscribeDiarizeAudioConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Аудиомодель MOSS-Transcribe-Diarize, являющаяся энкодером Whisper.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_featuresattention_mask = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
Параметры
- input_features (
torch.Tensorформы(batch_size, feature_size, sequence_length)) — Лог-меловые признаки, извлечённые из исходной речевой волны, по одной строке на каждое 30-секундное окно Whisper. См. call(). - attention_mask (
torch.Tensor, необязательный) — MossTranscribeDiarize не поддерживает маскированиеinput_features, этот аргумент сохранён для совместимости, но не используется.
Возвращает
BaseModelOutputWithPooling или tuple(torch.Tensor)
Объект BaseModelOutputWithPooling или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MossTranscribeDiarizeConfig) и входных данных.
Метод forward модели MossTranscribeDiarizeAudioModel переопределяет специальный метод __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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
MossTranscribeDiarizeFeatureExtractor
класс transformers.MossTranscribeDiarizeFeatureExtractor
< source >( feature_size = 80sampling_rate = 16000hop_length = 160chunk_length = 30n_fft = 400padding_value = 0.0dither = 0.0return_attention_mask = False**kwargs )
Создаёт экстрактор признаков MOSS-Transcribe-Diarize.
Это WhisperFeatureExtractor, который дополнительно разбивает аудио длительностью более chunk_length секунд на последовательные чанки Whisper-окна перед извлечением log-mel-фич и сообщает исходную длину сырого аудио для каждого сэмпла через padding_mask (в отличие от input_features_mask, который помечает валидные фреймы в каждом чанке).
__call__
< source >( raw_speech: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]truncation: bool = Truepad_to_multiple_of: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonesampling_rate: int | None = Nonedevice: str | None = 'cpu'**kwargs ) → BatchFeature
Параметры
- raw_speech (
np.ndarray,list[float],list[np.ndarray],list[list[float]]) — Последовательность или батч последовательностей для обработки. Только моно-аудио. - truncation (
bool, необязательный, по умолчаниюTrue) — Включает усечение, чтобы обрезать каждый фрагмент длинойn_samplesдоn_samples. - pad_to_multiple_of (
int, необязательный) — Если задано, дополняет сырой аудиоданные каждого фрагмента до кратного этому значению. - device (
str, необязательный, по умолчанию"cpu") — Устройство, используемое для вычисления лог-мел-спектрограммы.
Возвращает
с input_features (лог-мел-фичи, одна строка на чанк), input_features_mask
(маска валидных кадров для каждого чанка) и padding_mask (маска валидных сырых сэмплов, одна строка на входной сэмпл).
Разбивает каждый аудиоприбор на последовательные фрагменты длиной n_samples, извлекает log-mel-признаки для каждого фрагмента и сообщает исходную длину необработанного аудио каждого образца через padding_mask.
MossTranscribeDiarizeProcessor
класс transformers.MossTranscribeDiarizeProcessor
< source >( feature_extractor = Nonetokenizer = Nonechat_template: str | None = Noneaudio_token: str = '<|audio_pad|>'audio_bos_token: str = '<|audio_start|>'audio_eos_token: str = '<|audio_end|>'audio_tokens_per_second: float = 12.5audio_merge_size: int = 4time_marker_every_seconds: int = 2 )
Параметры
- feature_extractor (
MossTranscribeDiarizeFeatureExtractor) — Извлечение признаков является обязательным входом. - tokenizer (
Qwen2Tokenizer) — Токенизатор является обязательным входным параметром. - chat_template (
str, необязательный) — Шаблон Jinja для преобразования списков сообщений в чате в строку, готовую к токенизации. - audio_token (
str, необязательный, по умолчанию"<|audio_pad|>") — Специальный токен, используемый для представления аудиовходов в шаблоне чата. - audio_bos_token (
str, необязательный, по умолчанию"<|audio_start|>") — Специальный токен, отмечающий начало аудиосекции в шаблоне чата. - audio_eos_token (
str, необязательный, по умолчанию"<|audio_end|>") — Специальный токен, отмечающий конец аудиосекции в шаблоне чата. - audio_tokens_per_second (
float, необязательный, по умолчанию 12.5) — Ожидаемое количество токенов-заполнителей аудио на секунду входного аудио. - audio_merge_size (
int, необязательный, по умолчанию 4) — коэффициент слияния кадров Whisper, используемый при подсчёте аудио-токенов. - time_marker_every_seconds (
int, необязательный, по умолчанию 2) — Вставляет числовые токены-маркеры времени в аудиоспан каждые N секунд. Установите значение0, чтобы отключить маркеры времени и вместо этого выдать обычный плейсхолдер аудиоспана.
Создаёт MossTranscribeDiarizeProcessor, который объединяет feature extractor и tokenizer в единый processor.
MossTranscribeDiarizeProcessor предоставляет все возможности MossTranscribeDiarizeFeatureExtractor и Qwen2Tokenizer. Подробнее см. в ~MossTranscribeDiarizeFeatureExtractor и ~Qwen2Tokenizer.
__call__
< source >( text: str | list[str]audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = Noneoutput_labels: bool | None = False**kwargs: *<class 'transformers.models.moss_transcribe_diarize.processing_moss_transcribe_diarize.MossTranscribeDiarizeProcessorKwargs'> ) → BatchFeature
Параметры
- text (
Union[str, list[str]]) — Последовательность или батч последовательностей для кодирования. Каждая последовательность может быть строкой или списком строк (предварительно токенизированная строка). Если вы передаёте предварительно токенизированный вход, установитеis_split_into_words=True, чтобы избежать неоднозначности с батчами. - audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]], необязательный) — Аудио или пакет аудио, подлежащий подготовке. Каждое аудио может быть массивом NumPy или тензором PyTorch. В случае массива NumPy/тензора PyTorch каждое аудио должно иметь форму (C, T), где C — количество каналов, а T — длина выборки аудио. - output_labels (
bool, необязательный, по умолчанию=False) — Возвращать ли метки для обучения. - return_tensors (
strили TensorType, необязательный) — Если задано, возвращает тензоры конкретного фреймворка. Допустимые значения:'pt': возвращает объектыtorch.TensorPyTorch.'np': возвращает объекты NumPynp.ndarray.
- **kwargs (ProcessingKwargs, optional) — Дополнительные параметры обработки для каждой модальности (текст, изображения, видео, аудио). Специфичные для модели параметры перечислены выше; полный список поддерживаемых аргументов см. в классе TypedDict.
Возвращает
Словарь с токенизированным текстом (input_ids, attention_mask) и
аудио-признаками (input_values, padding_mask).
apply_chat_template
< source >( conversation: list[dict[str, str]] | list[list[dict[str, str]]]chat_template: str | None = Nonetools: list[dict] | None = Nonedocuments: list[dict[str, str]] | None = Noneadd_generation_prompt: bool = Falsecontinue_final_message: bool | str = Falsereturn_assistant_tokens_mask: bool = Falsetokenize: bool = Falsereturn_tensors: str | transformers.utils.generic.TensorType | None = 'auto'return_dict: bool = Falseload_audio_from_video: bool = Falseprocessor_kwargs: dict | None = None**kwargs )
Аналогично методу apply_chat_template в токенизаторах, данный метод применяет шаблон Jinja к входным диалогам, чтобы преобразовать их в единую строку, готовую к токенизации.
Ожидается, что входные данные будут иметь следующий формат, где содержимое каждого сообщения представляет собой список, состоящий из текста и, при необходимости, изображений или видео. Также можно указать изображение, видео, URL или локальный путь, которые будут использованы для формирования pixel_values, если return_dict=True. Если эти данные не указаны, будет возвращён только отформатированный текст, а при необходимости — и токенизированный текст.
conversation = [ { “role”: “user”, “content”: [ {“type”: “image”, “url”: “https://www.ilankelman.org/stopsigns/australia.jpg”}, {“type”: “text”, “text”: “Please describe this image in detail.”}, ], }, ]
apply_transcription_request
< source >( audio: typing.Union[str, list[str], numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]prompt: str | list[str] | None = Nonekeywords: str | list[str] | list[list[str]] | None = Nonetranscription: str | list[str] | None = Nonetokenize: bool = True**kwargs: *<class 'transformers.models.moss_transcribe_diarize.processing_moss_transcribe_diarize.MossTranscribeDiarizeProcessorKwargs'> )
Параметры
- audio (
str,list[str],np.ndarray,torch.Tensor,list[np.ndarray],list[torch.Tensor]) — Аудио для транскрибации. Строки интерпретируются как локальные пути или URL и автоматически загружаются загрузчиком шаблона чата; массивы NumPy и тензоры PyTorch передаются напрямую. - prompt (
strилиlist[str], необязательный) — Пользовательский промпт(ы) для включения в пользовательский ход. Список должен иметь ту же длину, что и батч. ЕслиNone, шаблон чата предоставляет промпт по умолчанию с меткой времени для диаризации. - keywords (
str,list[str]илиlist[list[str]], необязательный) — Горячие слова или термины предметной области (например, имена собственные), которые смещают транскрипцию в сторону правильного написания. Строка или плоский список строк используется для всей партии; вложенный список задаёт отдельные ключевые слова для каждого аудиофрагмента. - transcription (
strилиlist[str], необязательный) — Целевая транскрипция (или несколько) для обучения, по одной на каждый аудиофайл, в формате вывода модели (например,"[0.00][S01] Hello world.[1.20]"). Если указано, каждая транскрипция записывается как реплика ассистента, и возвращаютсяlabels(см.output_labelsв call()). - tokenize (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли токенизировать промпты и обрабатывать аудио. ЕслиFalse, аудио не загружается, а промпты возвращаются в виде строк с неразвёрнутыми плейсхолдерами аудио. Передача их вместе с аудио в процессор,processor(text=prompts, audio=audio), даёт те же результаты, что иtokenize=True. - **kwargs —
Дополнительные именованные аргументы, передаваемые в apply_chat_template().
Аргументы процессора (например,
text_kwargs,audio_kwargs, …) следует передавать какprocessor_kwargs={...}.
Подготовьте входные данные для транскрипции / диаризации без ручного написания шаблона чата, как для
инференса, так и для обучения, если задан transcription.
MossTranscribeDiarizeModel
класс transformers.MossTranscribeDiarizeModel
< source >( config: MossTranscribeDiarizeConfig )
Параметры
- config (MossTranscribeDiarizeConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель MOSS-Transcribe-Diarize: энкодер Whisper, слияние по времени 4x, мультимодальный проектор и языковая модель Qwen3.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinput_features: typing.Optional[torch.Tensor] = Noneinput_features_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MossTranscribeDiarizeModelOutputWithPast or tuple(torch.Tensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- input_features (
torch.Tensorформы(batch_size, sequence_length, feature_dim), необязательный) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью MossTranscribeDiarizeFeatureExtractor. Подробности см. в MossTranscribeDiarizeFeatureExtractor.call() (MossTranscribeDiarizeProcessor использует MossTranscribeDiarizeFeatureExtractor для обработки аудио). - input_features_mask (
torch.Tensorформы(num_chunks, feature_sequence_length), необязательный) — Маска, отмечающая действительные (не заполняющие) индексы признаков; одна строка на каждую строку лог-мел-признаков, разбитую на чанки, вinput_features. Используется для вычисления действительной длины вывода энкодера для каждого чанка. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), необязательный) — Маска для исключения внимания к индексам токенов-заполнителей. Передаётся в языковую модель без изменений. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Предварительно вычисленные эмбеддинги, используемые вместо передачиinput_ids. Если также заданinput_features,input_idsвсё равно требуется, чтобы определить позиции аудио-заполнителей вinputs_embedsи заполнить их аудио-эмбеддингами. - padding_mask (
torch.Tensorформы(batch_size, max_audio_length), необязательный) — Маска, отмечающая действительную длину сырых аудиоданных для каждого аудиообразца. Используется вместе сconfig.audio_chunk_sizeдля восстановленияaudio_chunk_mapping.
Возвращает
MossTranscribeDiarizeModelOutputWithPast или tuple(torch.Tensor)
MossTranscribeDiarizeModelOutputWithPast или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MossTranscribeDiarizeConfig) и входных данных.
Метод forward модели MossTranscribeDiarizeModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.Если используется
past_key_values, выводится только последнее скрытое состояние последовательностей формы(batch_size, 1, hidden_size).past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если
config.is_encoder_decoder=True, в блоках кросс-внимания), которые можно использовать (см. входной параметрpast_key_values) для ускорения последовательного декодирования.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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
audio_hidden_states (
torch.Tensor, необязательный) — Спроецированные скрытые состояния аудио.
get_audio_features
< source >( input_features: Tensorinput_features_mask: Tensorpadding_mask: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
Параметры
- input_features (
torch.Tensorформы(batch_size, sequence_length, feature_dim)) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью MossTranscribeDiarizeFeatureExtractor. Подробности см. в MossTranscribeDiarizeFeatureExtractor.call() (MossTranscribeDiarizeProcessor использует MossTranscribeDiarizeFeatureExtractor для обработки аудио). - input_features_mask (
torch.Tensorформы(num_chunks, feature_sequence_length)) — Маска, отмечающая действительные (не заполняющие) индексы признаков; одна строка на каждую строку лог-мел-признаков, разбитую на чанки, вinput_features. Используется для вычисления действительной длины выходных данных энкодера для каждого чанка. - padding_mask (
torch.Tensorформы(batch_size, max_audio_length)) — Маска, отмечающая действительную длину каждого аудиофрагмента, по одной строке на фрагмент. Используется вместе сconfig.audio_chunk_sizeдля восстановленияaudio_chunk_mapping.
Возвращает
BaseModelOutputWithPooling или tuple(torch.Tensor)
Объект BaseModelOutputWithPooling или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MossTranscribeDiarizeConfig) и входных данных.
Извлечение аудио-эмбеддингов MOSS из log-mel-фич с последующей сборкой аудио из нескольких чанков для каждого образца.
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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
MossTranscribeDiarizeForConditionalGeneration
класс transformers.MossTranscribeDiarizeForConditionalGeneration
< source >( config: MossTranscribeDiarizeConfig )
Параметры
- config (MossTranscribeDiarizeConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель MOSS-Transcribe-Diarize для условной генерации с транскрипцией и диаризацией говорящих.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinput_features: typing.Optional[torch.Tensor] = Noneinput_features_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0padding_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MossTranscribeDiarizeCausalLMOutputWithPast or tuple(torch.Tensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- input_features (
torch.Tensorформы(batch_size, sequence_length, feature_dim), необязательный) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью MossTranscribeDiarizeFeatureExtractor. Подробности см. в MossTranscribeDiarizeFeatureExtractor.call() (MossTranscribeDiarizeProcessor использует MossTranscribeDiarizeFeatureExtractor для обработки аудио). - input_features_mask (
torch.Tensorформы(num_chunks, feature_sequence_length), необязательный) — Маска, отмечающая действительные (не заполняющие) индексы признаков; одна строка на каждую строку лог-мел-признаков, разбитую на чанки, вinput_features. Используется для вычисления действительной длины вывода энкодера для каждого чанка. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), необязательный) — Маска для исключения внимания к индексам токенов-заполнителей. Передаётся в языковую модель без изменений. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Предварительно вычисленные эмбеддинги, используемые вместо передачиinput_ids. Если также заданinput_features,input_idsвсё равно требуется, чтобы определить позиции аудио-заполнителей вinputs_embedsи заполнить их аудио-эмбеддингами. - labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. - logits_to_keep (
Union[int, torch.Tensor], необязательный, по умолчанию0) — Если передано значение типаint, вычисляет logits для последнихlogits_to_keepтокенов. Если указано0, logits вычисляются для всехinput_ids(особый случай). Для генерации нужны logits только последнего токена, и вычисление их только для этого токена позволяет сэкономить память, что становится весьма значимым для длинных последовательностей или большого размера словаря. Если передано значение типаtorch.Tensor, оно должно быть одномерным и соответствовать индексам, которые нужно сохранить в измерении длины последовательности. Это полезно при использовании упакованного формата тензоров (один размер для batch и длины последовательности). - padding_mask (
torch.Tensorформы(batch_size, max_audio_length), необязательный) — Маска, отмечающая действительную длину сырых аудиоданных для каждого аудиообразца. Используется вместе сconfig.audio_chunk_sizeдля восстановленияaudio_chunk_mapping.
Возвращает
MossTranscribeDiarizeCausalLMOutputWithPast или tuple(torch.Tensor)
MossTranscribeDiarizeCausalLMOutputWithPast или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MossTranscribeDiarizeConfig) и входных данных.
Метод MossTranscribeDiarizeForConditionalGeneration forward переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери языковой модели (для предсказания следующего токена).logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели.past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache.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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
audio_hidden_states (
torch.Tensor, необязательный) — Скрытые состояния аудио-кодера после проекции.
Пример:
>>> from transformers import MossTranscribeDiarizeForConditionalGeneration, AutoProcessor
>>> model_id = "hf-audio/MOSS-Transcribe-Diarize-HF"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = MossTranscribeDiarizeForConditionalGeneration.from_pretrained(model_id, device_map="auto")
>>> inputs = processor.apply_transcription_request("https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/bcn_weather.mp3")
>>> inputs = inputs.to(model.device, dtype=model.dtype)
>>> outputs = model.generate(**inputs, do_sample=False, max_new_tokens=500)
>>> processor.batch_decode(outputs[:, inputs.input_ids.shape[1] :], skip_special_tokens=True)