# MOSS-Transcribe-Diarize

## Обзор

**MOSS-Transcribe-Diarize 0.9B** — это модель для сквозного понимания аудио, предназначенная для транскрипции длинных записей с несколькими говорящими, диаризации говорящих и определения временных меток. Она объединяет энкодер в стиле Whisper, этап слияния кадров 4×, мультимодальный проектор и языковую модель Qwen3.

Чекпоинт модели доступен по адресу: [itazap/MOSS-Transcribe-Diarize-HF](https://huggingface.co/itazap/MOSS-Transcribe-Diarize-HF)

Ключевые возможности включают:

* **Совместная транскрипция и диаризация** за один проход, с сегментами в формате `[start][S01]text[end]`.
* **Длинная аудио** через разбиение на фрагменты Whisper-window в процессоре; модель собирает фрагменты обратно для каждого примера.
* **Транскрипция по запросу** с помощью `apply_transcription_request` или шаблона чата.
* **Поддержка многоязычности** для более чем 50 языков.

Эта модель была предоставлена [Ita Zaporozhets](https://huggingface.co/itazap) из команды Hugging Face. Подробности см. в [карточке модели](https://huggingface.co/itazap/MOSS-Transcribe-Diarize-HF) и в [репозитории OpenMOSS](https://github.com/OpenMOSS/MOSS-Transcribe-Diarize).

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

> [!NOTE]
> Большинство примеров ниже используют `apply_transcription_request` — удобную функцию, которая формирует шаблон чата за вас. Эквивалентный вызов `apply_chat_template` описан в разделе [Расширенное использование с шаблоном чата](#advanced-usage-with-the-chat-template).

### Базовая транскрипция и диаризация

Каждый репликатор декодируется как сегмент `[start][S0N]text[end]`. `processor.decode` может вернуть исходную декодированную строку, разобранные сегменты в виде списка словарей (`return_format="parsed"`) или только склеенную транскрипцию (`return_format="transcription_only"`).

```python
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á», сравнивая результаты с использованием ключевого слова и без него.

```python
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` эквивалентен шаблону чата с пользовательским ходом, содержащим только аудио:

```python
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`, чтобы пропустить этот параметр для конкретного образца.

```python
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` используются для вычисления функции потерь.

```python
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.

```python
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`.

```python
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]]

#### transformers.MossTranscribeDiarizeConfig[[transformers.MossTranscribeDiarizeConfig]]

```python
transformers.MossTranscribeDiarizeConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, audio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, text_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, audio_token_id: int = 151671, projector_hidden_act: str = 'silu', projector_bias: bool = True, audio_merge_size: int = 4, audio_chunk_size: int = 480000, tie_word_embeddings: bool = True)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/configuration_moss_transcribe_diarize.py#L73)

**Параметры:**

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`, *optional*, по умолчанию 4) : Количество последовательных кадров кодировщика Whisper, конкатенируемых перед мультимодальным проектором.

audio_chunk_size (`int`, *optional*, по умолчанию 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](https://huggingface.co/hf-audio/MOSS-Transcribe-Diarize-HF)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig).

Пример:

```python
>>> 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.config
```

## MossTranscribeDiarizeAudioConfig[[transformers.MossTranscribeDiarizeAudioConfig]]

#### transformers.MossTranscribeDiarizeAudioConfig[[transformers.MossTranscribeDiarizeAudioConfig]]

```python
transformers.MossTranscribeDiarizeAudioConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, num_mel_bins: int = 80, num_hidden_layers: int = 24, num_attention_heads: int = 16, intermediate_size: int = 4096, activation_function: str = 'gelu', hidden_size: int = 1024, dropout: float | int = 0.0, attention_dropout: float | int = 0.0, activation_dropout: float | int = 0.0, initializer_range: float = 0.02, max_source_positions: int = 1500)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/configuration_moss_transcribe_diarize.py#L30)

**Параметры:**

num_mel_bins (`int`, *optional*, по умолчанию `80`) : Количество мел-признаков, используемых на входной кадр. Должно соответствовать значению, используемому в классе `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`, *optional*, по умолчанию 1500) : Максимальная длина последовательности признаков log-mel filter-bank, с которой может использоваться данная модель.

Это класс конфигурации для хранения настроек модели MossTranscribeDiarizeModel. Он используется для создания модели Moss Transcribe Diarize в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели [hf-audio/MOSS-Transcribe-Diarize-HF](https://huggingface.co/hf-audio/MOSS-Transcribe-Diarize-HF)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig).

Пример:

```python
>>> 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.config
```

## MossTranscribeDiarizeAudioModel[[transformers.MossTranscribeDiarizeAudioModel]]

#### transformers.MossTranscribeDiarizeAudioModel[[transformers.MossTranscribeDiarizeAudioModel]]

```python
transformers.MossTranscribeDiarizeAudioModel(config: MossTranscribeDiarizeAudioConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L256)

**Параметры:**

config ([MossTranscribeDiarizeAudioConfig](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeAudioConfig)) : класс конфигурации модели, содержащий все параметры модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained).

Аудиомодель MOSS-Transcribe-Diarize, являющаяся энкодером Whisper.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.MossTranscribeDiarizeAudioModel.forward]]

```python
forward(input_features, attention_mask = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L295)

**Параметры:**

input_features (`torch.Tensor` формы `(batch_size, feature_size, sequence_length)`) : Лог-меловые признаки, извлечённые из исходной речевой волны, по одной строке на каждое 30-секундное окно Whisper. См. [__call__()](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor.__call__).

attention_mask (`torch.Tensor`, *необязательный*) : MossTranscribeDiarize не поддерживает маскирование `input_features`, этот аргумент сохранён для совместимости, но не используется.

**Возвращает:** [BaseModelOutputWithPooling](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPooling) или `tuple(torch.Tensor)`

Объект [BaseModelOutputWithPooling](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPooling) или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([MossTranscribeDiarizeConfig](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeConfig)) и входных данных.

Метод forward модели [MossTranscribeDiarizeAudioModel](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.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)`, *необязательный*, возвращается при передаче `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]]

#### transformers.MossTranscribeDiarizeFeatureExtractor[[transformers.MossTranscribeDiarizeFeatureExtractor]]

```python
transformers.MossTranscribeDiarizeFeatureExtractor(feature_size = 80, sampling_rate = 16000, hop_length = 160, chunk_length = 30, n_fft = 400, padding_value = 0.0, dither = 0.0, return_attention_mask = False, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/feature_extraction_moss_transcribe_diarize.py#L35)

Создаёт экстрактор признаков MOSS-Transcribe-Diarize.

Это [WhisperFeatureExtractor](/docs/transformers/main/ru/model_doc/whisper#transformers.WhisperFeatureExtractor), который дополнительно разбивает аудио длительностью более `chunk_length` секунд на последовательные чанки Whisper-окна перед извлечением log-mel признаков и сообщает исходную длину сырого аудио каждого примера через `padding_mask` (в отличие от `input_features_mask`, который помечает валидные кадры в каждом чанке).

#### __call__[[transformers.MossTranscribeDiarizeFeatureExtractor.__call__]]

```python
__call__(raw_speech: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]], truncation: bool = True, pad_to_multiple_of: int | None = None, return_tensors: str | transformers.utils.generic.TensorType | None = None, sampling_rate: int | None = None, device: str | None = 'cpu', **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/feature_extraction_moss_transcribe_diarize.py#L170)

**Параметры:**

raw_speech (`np.ndarray`, `list[float]`, `list[np.ndarray]`, `list[list[float]]`) : Последовательность или батч последовательностей для обработки. Только одноканальный аудио.

truncation (`bool`, *необязательный*, по умолчанию `True`) : Включает усечение, чтобы обрезать каждый фрагмент длиной `n_samples` до `n_samples`.

pad_to_multiple_of (`int`, *optional*) : Если задано, дополняет необработанное аудио каждого фрагмента до кратного этому значению.

device (`str`, *необязательный*, по умолчанию `"cpu"`) : Устройство, используемое для вычисления лог-мел-спектрограммы.

**Возвращает:** [BatchFeature](/docs/transformers/main/ru/main_classes/feature_extractor#transformers.BatchFeature)

с `input_features` (лог-мел-фичи, одна строка на чанк), `input_features_mask` (маска валидных кадров для каждого чанка) и `padding_mask` (маска валидных сырых сэмплов, одна строка на входной сэмпл).

Разбивает каждый аудиоприбор на последовательные фрагменты длиной `n_samples`, извлекает лог-мел-признаки для каждого фрагмента и сообщает исходную длину сырого аудио каждого образца через `padding_mask`.

## MossTranscribeDiarizeProcessor[[transformers.MossTranscribeDiarizeProcessor]]

#### transformers.MossTranscribeDiarizeProcessor[[transformers.MossTranscribeDiarizeProcessor]]

```python
transformers.MossTranscribeDiarizeProcessor(feature_extractor = None, tokenizer = None, chat_template: str | None = None, 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, time_marker_every_seconds: int = 2)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/processing_moss_transcribe_diarize.py#L43)

**Параметры:**

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`, *optional*, по умолчанию 12.5) : Ожидаемое количество токенов-заполнителей аудио на секунду входного аудио.

audio_merge_size (`int`, *optional*, по умолчанию 4) : Коэффициент слияния кадров Whisper, используемый при подсчёте аудио-токенов.

time_marker_every_seconds (`int`, *optional*, по умолчанию 2) : Вставляет числовые токены-маркеры времени в аудиоспан каждые N секунд. Установите значение `0`, чтобы отключить маркеры времени и вместо этого выдать обычный плейсхолдер аудиоспана.

Создаёт MossTranscribeDiarizeProcessor, который объединяет feature extractor и tokenizer в единый processor.

[MossTranscribeDiarizeProcessor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeProcessor) предоставляет все возможности [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor) и [Qwen2Tokenizer](/docs/transformers/main/ru/model_doc/qwen2#transformers.Qwen2Tokenizer). Подробнее см. в [~MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor) и [~Qwen2Tokenizer](/docs/transformers/main/ru/model_doc/qwen2#transformers.Qwen2Tokenizer).

#### __call__[[transformers.MossTranscribeDiarizeProcessor.__call__]]

```python
__call__(text: str | list[str], audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = None, output_labels: bool | None = False, **kwargs: *<class 'transformers.models.moss_transcribe_diarize.processing_moss_transcribe_diarize.MossTranscribeDiarizeProcessorKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/processing_moss_transcribe_diarize.py#L104)

**Параметры:**

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](/docs/transformers/main/ru/internal/file_utils#transformers.TensorType), *optional*) : Если задано, возвращает тензоры конкретного фреймворка. Допустимые значения:  - `'pt'`: возвращает объекты `torch.Tensor` PyTorch. - `'np'`: возвращает объекты `np.ndarray` NumPy.

- ****kwargs** ([ProcessingKwargs](/docs/transformers/main/ru/main_classes/processors#transformers.ProcessingKwargs), *optional*) : Дополнительные параметры обработки для каждой модальности (текст, изображения, видео, аудио). Специфичные для модели параметры перечислены выше; полный список поддерживаемых аргументов см. в классе TypedDict.

**Возвращает:** [BatchFeature](/docs/transformers/main/ru/main_classes/feature_extractor#transformers.BatchFeature)

Словарь с токенизированным текстом (`input_ids`, `attention_mask`) и аудио-признаками (`input_values`, `padding_mask`).

#### apply_chat_template[[transformers.MossTranscribeDiarizeProcessor.apply_chat_template]]

```python
apply_chat_template(conversation: list[dict[str, str]] | list[list[dict[str, str]]], chat_template: str | None = None, tools: list[dict] | None = None, documents: list[dict[str, str]] | None = None, add_generation_prompt: bool = False, continue_final_message: bool | str = False, return_assistant_tokens_mask: bool = False, tokenize: bool = False, return_tensors: str | transformers.utils.generic.TensorType | None = 'auto', return_dict: bool = False, load_audio_from_video: bool = False, processor_kwargs: dict | None = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/processing_utils.py#L2250)

**Параметры:**

conversation (`Union[list[Dict, [str, str]], list[list[dict[str, str]]]]`) : Диалог для форматирования.

chat_template (`Optional[str]`, *необязательный*) : Шаблон Jinja, используемый для форматирования диалога. Если не указан, используется шаблон чата токенизатора.

Аналогично методу `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[[transformers.MossTranscribeDiarizeProcessor.apply_transcription_request]]

```python
apply_transcription_request(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 = None, keywords: str | list[str] | list[list[str]] | None = None, transcription: str | list[str] | None = None, tokenize: bool = True, **kwargs: *<class 'transformers.models.moss_transcribe_diarize.processing_moss_transcribe_diarize.MossTranscribeDiarizeProcessorKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/processing_moss_transcribe_diarize.py#L213)

**Параметры:**

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__()](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeProcessor.__call__)).

tokenize (`bool`, *необязательный*, по умолчанию `True`) : Указывает, следует ли токенизировать промпты и обрабатывать аудио. Если `False`, аудио не загружается, а промпты возвращаются в виде строк с неразвёрнутыми плейсхолдерами для аудио. Передача их вместе с аудио в процессор, `processor(text=prompts, audio=audio)`, даёт те же результаты, что и `tokenize=True`.

- ****kwargs** : Дополнительные именованные аргументы, передаваемые в [apply_chat_template()](/docs/transformers/main/ru/main_classes/processors#transformers.ProcessorMixin.apply_chat_template). Аргументы процессора (например, `text_kwargs`, `audio_kwargs`, ...) следует передавать как `processor_kwargs={...}`.

Подготовьте входные данные для транскрипции / диаризации без ручного написания шаблона чата, как для инференса, так и для обучения, если задан `transcription`.

## MossTranscribeDiarizeModel[[transformers.MossTranscribeDiarizeModel]]

#### transformers.MossTranscribeDiarizeModel[[transformers.MossTranscribeDiarizeModel]]

```python
transformers.MossTranscribeDiarizeModel(config: MossTranscribeDiarizeConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L382)

**Параметры:**

config ([MossTranscribeDiarizeConfig](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeConfig)) : класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель MOSS-Transcribe-Diarize: энкодер Whisper, слияние по времени 4x, мультимодальный проектор и языковая модель Qwen3.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.MossTranscribeDiarizeModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, input_features: typing.Optional[torch.Tensor] = None, input_features_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, padding_mask: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L459)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

input_features (`torch.Tensor` формы `(batch_size, sequence_length, feature_dim)`, *необязательно*) : Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor). Подробности см. в [MossTranscribeDiarizeFeatureExtractor.__call__()](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor.__call__) ([MossTranscribeDiarizeProcessor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeProcessor) использует [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.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](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeConfig)) и входных данных.

Метод forward модели [MossTranscribeDiarizeModel](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.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](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache). Подробнее см. в нашем [руководстве по кэшированию kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если `config.is_encoder_decoder=True`, в блоках кросс-внимания), которые можно использовать (см. входной параметр `past_key_values`) для ускорения последовательного декодирования.
- **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`, *необязательный*) -- Спроецированные скрытые состояния аудио.

#### get_audio_features[[transformers.MossTranscribeDiarizeModel.get_audio_features]]

```python
get_audio_features(input_features: Tensor, input_features_mask: Tensor, padding_mask: Tensor, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L394)

**Параметры:**

input_features (`torch.Tensor` формы `(batch_size, sequence_length, feature_dim)`) : Тензоры, соответствующие входным аудио-функциям. Аудио-функции можно получить с помощью [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor). Подробности см. в [MossTranscribeDiarizeFeatureExtractor.__call__()](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor.__call__) ([MossTranscribeDiarizeProcessor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeProcessor) использует [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor) для обработки аудио).

input_features_mask (`torch.Tensor` формы `(num_chunks, feature_sequence_length)`) : Маска, отмечающая действительные (не заполненные) индексы признаков, по одной строке на каждую разбитую на чанки строку log-mel признаков в `input_features`. Используется для вычисления действительной длины вывода энкодера для каждого чанка.

padding_mask (`torch.Tensor` формы `(batch_size, max_audio_length)`) : Маска, отмечающая действительную длину сырых аудиоданных для каждого аудиопримера, по одной строке на пример. Используется вместе с `config.audio_chunk_size` для восстановления `audio_chunk_mapping`.

**Возвращает:** [BaseModelOutputWithPooling](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPooling) или `tuple(torch.Tensor)`

Объект [BaseModelOutputWithPooling](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPooling) или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([MossTranscribeDiarizeConfig](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.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)`, *необязательный*, возвращается при передаче `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]]

#### transformers.MossTranscribeDiarizeForConditionalGeneration[[transformers.MossTranscribeDiarizeForConditionalGeneration]]

```python
transformers.MossTranscribeDiarizeForConditionalGeneration(config: MossTranscribeDiarizeConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L522)

**Параметры:**

config ([MossTranscribeDiarizeConfig](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeConfig)) : класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель MOSS-Transcribe-Diarize для условной генерации с транскрипцией и диаризацией говорящих.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.MossTranscribeDiarizeForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, input_features: typing.Optional[torch.Tensor] = None, input_features_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, padding_mask: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L535)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

input_features (`torch.Tensor` формы `(batch_size, sequence_length, feature_dim)`, *необязательно*) : Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor). Подробности см. в [MossTranscribeDiarizeFeatureExtractor.__call__()](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeFeatureExtractor.__call__) ([MossTranscribeDiarizeProcessor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeProcessor) использует [MossTranscribeDiarizeFeatureExtractor](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.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](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Если `past_key_values` не переданы, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.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](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.MossTranscribeDiarizeConfig)) и входных данных.

Метод [MossTranscribeDiarizeForConditionalGeneration](/docs/transformers/main/ru/model_doc/moss_transcribe_diarize#transformers.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](/docs/transformers/main/ru/internal/generation_utils#transformers.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`, *необязательный*) -- Скрытые состояния аудио-кодера после проекции.

Пример:

```python
>>> 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)
```

#### get_audio_features[[transformers.MossTranscribeDiarizeForConditionalGeneration.get_audio_features]]

```python
get_audio_features(input_features, input_features_mask, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/moss_transcribe_diarize/modeling_moss_transcribe_diarize.py#L532)

