# Gradium Phonon TTS

## Обзор

Gradium Phonon TTS — это семейство моделей преобразования текста в речь для работы на устройстве от [Gradium](https://gradium.ai), обученных по рецепту [Pocket TTS](./pocket_tts): каузальный трансформер считывает голосовой промпт и текст, затем на каждом шаге через одношаговую flow-голову генерирует один непрерывный 32-мерный аудиолатент с частотой 12.5 Гц, а голова окончания речи определяет момент завершения высказывания. Латенты декодируются в аудио с частотой 24 кГц с помощью [Pocket TTS audio tokenizer](./pocket_tts_audio_tokenizer), который хранится в процессоре, а именно в [PocketTTSProcessor](/docs/transformers/main/ru/model_doc/pocket_tts#transformers.PocketTTSProcessor) из Pocket TTS.

Он отличается от Pocket TTS способом настройки голоса: голосовой промпт состоит из 512-мерных латентов отдельного спикер-кодека, а обученный вектор спикера добавляется к каждой позиции аудио-латента. Спикер-кодек не опубликован, поэтому голоса предоставляются в виде предвычисленных латентов (файл `default-voice.safetensors` в каждом чекпоинте, а также каталог [gradium/phonon-voices](https://huggingface.co/gradium/phonon-voices)), а аудио-токенизатор является только декодером: клонирование голоса с записи невозможно.

| Чекпоинт | Параметры | Языки | Лицензия |
|---|---|---|---|
| [gradium/phonon-31m-en](https://huggingface.co/gradium/phonon-31m-en) | 31M | English | Apache 2.0 |
| [gradium/phonon-40m-en](https://huggingface.co/gradium/phonon-40m-en) | 40M | English | CC BY-NC 4.0 |
| [gradium/phonon-40m-fr](https://huggingface.co/gradium/phonon-40m-fr) | 40M | Французский | CC BY-NC 4.0 |
| [gradium/phonon-40m-de](https://huggingface.co/gradium/phonon-40m-de) | 40M | Немецкий | CC BY-NC 4.0 |
| [gradium/phonon-40m-es](https://huggingface.co/gradium/phonon-40m-es) | 40M | Испанский | CC BY-NC 4.0 |
| [gradium/phonon-40m-pt](https://huggingface.co/gradium/phonon-40m-pt) | 40M | Португальский | CC BY-NC 4.0 |
| [gradium/phonon-40m-multilingual](https://huggingface.co/gradium/phonon-40m-multilingual) | 40M | Английский, французский, немецкий, испанский, португальский | CC BY-NC 4.0 |

Все они загружаются одинаково: для переключения контрольных точек достаточно изменить идентификатор репозитория.

Эта модель была предоставлена [Eustache Le Bihan](https://huggingface.co/eustlb). Исходный код — [gradium-ai/xn-ptts](https://github.com/gradium-ai/xn-ptts).

## Советы по использованию

- Подготовьте входные данные с помощью [apply_chat_template()](/docs/transformers/main/ru/main_classes/processors#transformers.ProcessorMixin.apply_chat_template): одно сообщение `user` на каждый текст, пустой элемент `{"type": "audio"}` для размещения голоса, латенты голоса в `processor_kwargs={"audio_prompt_latents": [...]}` и `add_generation_prompt=True`.
- Токенизатор не расписывает числа, суммы, символы или адреса, см. [Нормализация текста](#text-normalization).
- `generate` возвращает `audio_latents` и `audio_latents_mask`; декодируйте их с помощью [PocketTTSProcessor.decode()](/docs/transformers/main/ru/model_doc/pocket_tts#transformers.PocketTTSProcessor.decode).
- Примеры генерации, как это делает рантайм Gradium: `temperature` 0.3 (дисперсия начального шума потока), и генерация останавливается вскоре после того, как логит конца речи пересекает `eos_threshold`. `do_sample=False` запускает поток с нулевым шумом.
- Модель загружается в bf16, типе данных, в котором хранятся её веса; на CPU передайте `dtype=torch.float32`, чтобы соответствовать рантайму Gradium.
- Разбейте длинный текст с помощью [PocketTTSProcessor.split_text()](/docs/transformers/main/ru/model_doc/pocket_tts#transformers.PocketTTSProcessor.split_text), размещая один диалог в каждом фрагменте.

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

### Голос

Голос — это тензор латентов `(num_frames, 512)`. Каждый чекпоинт поставляется с одним голосом (`default-voice.safetensors`), а в [gradium/phonon-voices](https://huggingface.co/gradium/phonon-voices) доступно ещё около ста голосов на всех языках, каждый из которых имеет свой идентификатор голоса (`voices.jsonl` содержит их имена, языки и описания). Любой голос совместим с любым чекпоинтом.

```python
import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration

model_id = "gradium/phonon-31m-en"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = GradiumPhononTTSForConditionalGeneration.from_pretrained(model_id, device_map="auto")

def load_voice(voice_id):
    """A voice of gradium/phonon-voices, as latents of shape (num_frames, 512)."""
    path = hf_hub_download("gradium/phonon-voices", f"voices/{voice_id}.safetensors")
    return load_file(path)["speaker_wavs"][0].T.float()

# Easton (en-us); the checkpoint's own voice: hf_hub_download(model_id, "default-voice.safetensors")
voice = load_voice("LMDIYE0Oa377Qh6Z")
# an empty `audio` item marks the voice
conversation = [
    {"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": "Hello from Phonon."}]}
]
inputs = processor.apply_chat_template(
    conversation,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "phonon.wav")
```

### Пакеты и длинный текст

Пакетная обработка нескольких текстов, каждый со своим голосом, с разбиением длинного текста на фрагменты:

```python
text = (
    "Phonon is a small text-to-speech model that runs on your device. "
    "Long texts are split into sentences, and each chunk is one conversation of the batch."
)
chunks = processor.split_text(text)
texts = chunks + ["And this one is said by another voice."]
voices = [load_voice("LMDIYE0Oa377Qh6Z")] * len(chunks) + [load_voice("NbpkqMVS3CJeq2j8")]
conversations = [
    [{"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": text}]}] for text in texts
]
inputs = processor.apply_chat_template(
    conversations,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": voices},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio([torch.cat(audio[: len(chunks)]), audio[-1]], ["long.wav", "other.wav"])
```

### Нормализация текста

Токенизатор нормализует то, что не зависит от языка, как это делает рантайм Gradium:

| Текст | Токенизатор |
|---|---|
| `“Hello” — it’s here…` | `"Hello" it's here.` |
| `hello (world); see you 🚀` | `Hello, world, see you.` |

Она не произносит вслух числа, количества, символы или адреса, которые зависят от языка:

| Текст | Токенизатор | Среда выполнения Gradium |
|---|---|---|
| `It costs $1,234.56.` | `It costs $1,234.56.` | `It costs 1 thousand 234 dollars and 56 cents.` |
| `Write to jean@gradium.ai` | `Write to jean@gradium.ai.` | `Write to jean at gradium dot A-I.` |
| `It is 21°C` | `It is 21°C.` | `It is 21 degrees Celsius.` |

Для таких случаев используйте нормализацию текста рантайма Gradium, [ptts](https://github.com/gradium-ai/xn-ptts), или прописывайте их вручную.

## GradiumPhononTTSConfig[[transformers.GradiumPhononTTSConfig]]

#### transformers.GradiumPhononTTSConfig[[transformers.GradiumPhononTTSConfig]]

```python
transformers.GradiumPhononTTSConfig(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, flow_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, vocab_size: int = 4001, hidden_size: int = 768, num_hidden_layers: int = 6, num_attention_heads: int = 12, num_key_value_heads: int | None = None, head_dim: int | None = None, intermediate_size: int = 3072, hidden_act: str = 'gelu', layer_norm_eps: float = 1e-05, attention_bias: bool = False, attention_dropout: float = 0.0, max_position_embeddings: int = 8192, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, latent_dim: int = 32, pad_token_id: int = 3, bos_token_id: int | None = None, eos_token_id: int | None = None, audio_prompt_token_id: int = 5, audio_latent_token_id: int = 6, audio_bos_token_id: int = 4, frame_rate: float = 12.5, initializer_range: float = 0.02, use_cache: bool = True, eos_loss_weight: float = 0.1, flow_loss_num_samples: int = 4, lsd_distill_probability: float = 0.25, lsd_diagonal_weight: float = 0.75, lsd_time_logit_mean: float = 0.4, lsd_time_logit_std: float = 1.0, latent_stats_ema_steps: int = 1000, latent_stats_ema_decay: float = 0.999, audio_prompt_dim: int = 512, num_speakers: int = 1, num_speakers_vocab_size: int = 32, num_speakers_embedding_dim: int = 16, duration_delta: float = 0.0, duration_delta_embedding_dim: int = 128, duration_delta_scale: float = 1000.0, duration_delta_max_period: float = 10000.0)
```

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

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

flow_head_config (`Union[GradiumPhononTTSFlowHeadConfig, dict]`, *необязательный*) : Конфигурация flow head, которая сэмплирует каждый латент из скрытого состояния backbone.

vocab_size (`int`, *необязательный*, по умолчанию `4001`) : Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в `input_ids`.

hidden_size (`int`, *optional*, по умолчанию `768`) : Размерность скрытых представлений.

num_hidden_layers (`int`, *необязательный*, по умолчанию `6`) : Количество скрытых слоев в декодере Transformer.

num_attention_heads (`int`, *необязательный*, по умолчанию `12`) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

num_key_value_heads (`int`, *optional*) : Это количество ключевых и value-голов, которое следует использовать для реализации Grouped Query Attention. Если `num_key_value_heads=num_attention_heads`, модель будет использовать Multi Head Attention (MHA), если `num_key_value_heads=1` — Multi Query Attention (MQA), в противном случае используется GQA. При конвертации multi-head checkpoint в GQA checkpoint каждая группа ключевых и value-голов должна быть построена путем усреднения (meanpooling) всех исходных голов в этой группе. Подробнее см. в [этой статье](https://huggingface.co/papers/2305.13245). Если значение не указано, по умолчанию используется `num_attention_heads`.

head_dim (`int`, *optional*) : Размер измерения внимания. Если None, по умолчанию будет использовано hidden_size // num_attention_heads

intermediate_size (`int`, *optional*, по умолчанию `3072`) : Размерность представлений MLP.

hidden_act (`str`, *необязательный*, по умолчанию `gelu`) : Нелинейная функция активации (функция или строка) в декодере. Например, `"gelu"`, `"relu"`, `"silu"` и т. д.

layer_norm_eps (`float`, *optional*, по умолчанию 1e-05) : Epsilon для слоёв нормализации в backbone.

attention_bias (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли смещение (bias) в слоях проекции запроса, ключа, значения и вывода при само-внимании.

attention_dropout (`float`, *необязательный*, по умолчанию `0.0`) : Доля dropout для вероятностей внимания.

max_position_embeddings (`int`, *необязательный*, по умолчанию `8192`) : Максимальная длина последовательности, с которой может использоваться данная модель.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *optional*) : Словарь, содержащий параметры конфигурации для вложений RoPE. Словарь должен содержать значение для `rope_theta` и, при необходимости, параметры, используемые для масштабирования, если вы хотите использовать RoPE с более длинными `max_position_embeddings`.

latent_dim (`int`, *optional*, по умолчанию 32) : Размерность аудиолатентов, которые принимает базовая модель на вход (`audio_latents`); равно значению `latent_dim` flow-головы и аудиотокенизатора.

pad_token_id (`int`, *необязательный*, по умолчанию `3`) : Идентификатор токена, используемый для выравнивания в словаре.

bos_token_id (`int`, *optional*) : Идентификатор токена, используемый для обозначения начала потока в словаре.

eos_token_id (`int`, *необязательный*) : Идентификатор токена, используемый для обозначения конца потока в словаре.

audio_prompt_token_id (`int`, *optional*, по умолчанию 5) : Идентификатор плейсхолдер-токена для кадров голосового промпта в `input_ids` (`<|audio_prompt|>`).

audio_latent_token_id (`int`, *optional*, по умолчанию 6) : Идентификатор плейсхолдер-токена для позиций аудиолатентов в `input_ids` (`<|audio_latent|>`).

audio_bos_token_id (`int`, *optional*, по умолчанию 4) : Идентификатор токена первой позиции аудио, закрывающей промпт: содержит обученный латентный BOS, из которого генерируется первый кадр (`<|audio_bos|>`).

frame_rate (`float`, *optional*, по умолчанию 12.5) : Количество аудиолатентов на секунду аудио: `generate` выводит из него значение бюджета по умолчанию для кадров.

initializer_range (`float`, *необязательный*, по умолчанию `0.02`) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

use_cache (`bool`, *необязательный*, по умолчанию `True`) : Следует ли модели возвращать последние значения внимания key/values (не используется во всех моделях). Актуально только при `config.is_decoder=True` или если модель является генеративной моделью только с декодером.

eos_loss_weight (`float`, *необязательный*, по умолчанию 0.1) : Вес потери конца речи в общей функции потерь при обучении.

flow_loss_num_samples (`int`, *optional*, по умолчанию 4) : Количество выборов шума на целевой кадр в потере потока.

lsd_distill_probability (`float`, *optional*, по умолчанию 0.25) : Вероятность вычисления члена самодистилляции в функции потерь LSD на каждом шаге обучения (с пересчетом весов для сохранения ожидаемого значения потери); значение 1 означает вычисление на каждом шаге.

lsd_diagonal_weight (`float`, *optional*, по умолчанию 0.75) : Вес диагонального (мгновенного потока) члена функции потерь LSD; член самодистилляции взвешивает остальную часть.

lsd_time_logit_mean (`float`, *optional*, по умолчанию 0.4) : Среднее значение логит-нормального распределения времен потока, извлекаемых потерей LSD.

lsd_time_logit_std (`float`, *optional*, по умолчанию 1.0) : Стандартное отклонение логит-нормального распределения времен потока, извлекаемых потерей LSD.

latent_stats_ema_steps (`int`, *optional*, по умолчанию 1000) : Количество первых шагов обучения, в течение которых `latent_mean` и `latent_std` следуют за экспоненциальным скользящим средним целевых латентов; 0 оставляет их замороженными.

latent_stats_ema_decay (`float`, *необязательный*, по умолчанию 0.999) : Коэффициент затухания для скользящего среднего.

audio_prompt_dim (`int`, *optional*, по умолчанию 512) : Размерность латентов голосового промпта (`audio_prompt_latents`), то есть неоквантованных латентов спикер-кодека Gradium (энкодер Mimi, а не аудио-токенизатора), которые бэкбон проецирует в `hidden_size`.

num_speakers (`int`, *optional*, по умолчанию 1) : Значение условия `num_speakers`: строка его таблицы поиска, добавляемая к каждой позиции аудио-латента.

num_speakers_vocab_size (`int`, *необязательный*, по умолчанию 32) : Количество строк таблицы поиска `num_speakers`.

num_speakers_embedding_dim (`int`, *optional*, по умолчанию 16) : Ширина таблицы поиска `num_speakers`, проецируемой в `hidden_size`.

duration_delta (`float`, *необязательный*, по умолчанию 0.0) : Значение условия `duration_delta`, встроенное синусоидально и добавленное к каждой позиции аудио-латента.

duration_delta_embedding_dim (`int`, *optional*, по умолчанию 128) : Размер синусоидального эмбеддинга `duration_delta`, проецируемого в `hidden_size`.

duration_delta_scale (`float`, *необязательный*, по умолчанию 1000.0) : Коэффициент, применяемый к `duration_delta` перед его синусоидным встраиванием.

duration_delta_max_period (`float`, *optional*, по умолчанию 10000.0) : Максимальный период синусоидального встраивания `duration_delta`.

Это класс конфигурации для хранения настроек модели GradiumPhononTTSModel. Он используется для создания модели Gradium Phonon Tts в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели [gradium/phonon-31m-en](https://huggingface.co/gradium/phonon-31m-en)

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

## GradiumPhononTTSFlowHeadConfig[[transformers.GradiumPhononTTSFlowHeadConfig]]

#### transformers.GradiumPhononTTSFlowHeadConfig[[transformers.GradiumPhononTTSFlowHeadConfig]]

```python
transformers.GradiumPhononTTSFlowHeadConfig(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, hidden_size: int = 512, num_hidden_layers: int = 6, latent_dim: int = 32, condition_dim: int = 768, frequency_embedding_size: int = 256, hidden_act: str = 'silu', layer_norm_eps: float = 1e-06, rms_norm_eps: float = 1e-05, max_period: float = 10000.0, flow_type: typing.Literal['lsd', 'drifting'] = 'lsd', loss_weighting_hidden_size: int = 32, loss_weighting_num_layers: int = 3)
```

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

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

hidden_size (`int`, *необязательный*, по умолчанию `512`) : Размерность скрытых представлений.

num_hidden_layers (`int`, *необязательный*, по умолчанию `6`) : Количество скрытых слоев в декодере Transformer.

latent_dim (`int`, *optional*, по умолчанию 32) : Размерность непрерывных аудиолатентов, которые предсказывает head (размерность латентов аудиотокенизатора).

condition_dim (`int`, *optional*, по умолчанию 768) : Размерность скрытого состояния бэкбона, на которое опирается head (параметр `hidden_size` бэкбона).

frequency_embedding_size (`int`, *optional*, по умолчанию 256) : Размер синусоидального эмбеддинга временных шагов потока.

hidden_act (`str`, *необязательный*, по умолчанию `silu`) : Нелинейная функция активации (функция или строка) в декодере. Например, `"gelu"`, `"relu"`, `"silu"` и т. д.

layer_norm_eps (`float`, *optional*, по умолчанию 1e-06) : Эпсилон для нормализации слоев внутри остаточных блоков и последнего слоя.

rms_norm_eps (`float`, *optional*, по умолчанию 1e-05) : Эпсилон нормализации, завершающей временные эмбеддинги.

max_period (`float`, *optional*, по умолчанию 10000.0) : Максимальный период синусоидального временного эмбеддинга, который чекпоинт сохраняет как `freqs`.

flow_type (`str`, *optional*, по умолчанию `"lsd"`) : Цель, с которой обучалась головка, определяющая способ её обусловливания и выборки. `"lsd"` (лагранжева самодистилляция): обусловливается начальным и конечным временами шага потока, выборка выполняется шагами Эйлера из гауссова шума. `"drifting"`: обусловливание по времени отсутствует, головка отображает шум в латентное пространство за один вызов.

loss_weighting_hidden_size (`int`, *optional*, по умолчанию 32) : Ширина MLP, обучающей веса неопределённости для членов потерь LSD на основе их временных потоков (только для обучения).

loss_weighting_num_layers (`int`, *необязательный*, по умолчанию 3) : Количество скрытых слоёв данного MLP.

Это класс конфигурации для хранения настроек модели GradiumPhononTTSModel. Он используется для создания модели Gradium Phonon Tts в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели [gradium/phonon-31m-en](https://huggingface.co/gradium/phonon-31m-en)

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

## GradiumPhononTTSModel[[transformers.GradiumPhononTTSModel]]

#### transformers.GradiumPhononTTSModel[[transformers.GradiumPhononTTSModel]]

```python
transformers.GradiumPhononTTSModel(config: GradiumPhononTTSConfig)
```

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

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

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

Базовая модель Gradium Phonon TTS: каузальный трансформер, работающий с одним потоком, состоящим из голосового промпта (латенты спикер-кодека), токенов текста и латентов аудио, возвращающий нормализованные скрытые состояния.

Эта модель наследуется от [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.GradiumPhononTTSModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, audio_prompt_latents: typing.Optional[torch.Tensor] = None, audio_prompt_latents_mask: typing.Optional[torch.Tensor] = None, audio_latents: typing.Optional[torch.Tensor] = None, audio_latents_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

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)

audio_prompt_latents (`torch.Tensor` формы `(batch_size, num_prompt_frames, latent_dim)`, *необязательный*) : Латентные представления голосовых подсказок аудиотокенизатора (закодированные процессором или из `voices/` контрольной точки), дополненные справа до длины самой длинной голосовой подсказки в батче и размещённые в позициях `audio_prompt_token_id`.

audio_prompt_latents_mask (`torch.Tensor` формы `(batch_size, num_prompt_frames)`, *необязательный*) : Маска кадров голоса (`1`) в отличие от заполнителей (`0`) в `audio_prompt_latents`.

audio_latents (`torch.Tensor` формы `(batch_size, num_latents, latent_dim)`, *необязательный*) : Нормализованные аудио-латенты, распределённые по позициям `audio_latent_token_id`. Позиция `audio_bos_token_id` перед ними, которая завершает промпт и с которой генерируется первый кадр, всегда получает обученный BOS-латент.

audio_latents_mask (`torch.Tensor` формы `(batch_size, num_latents)`, *необязательный*) : Маска латентов каждой строки (`1`) в отличие от заполнителей (`0`) в `audio_latents`, если строки содержат разное количество латентных позиций (обучение).

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

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

use_cache (`bool`, *необязательный*) : Если установлено в `True`, состояния ключей и значений `past_key_values` возвращаются и могут использоваться для ускорения декодирования (см. `past_key_values`).

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

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

Метод forward модели [GradiumPhononTTSModel](/docs/transformers/main/ru/model_doc/gradium_phonon_tts#transformers.GradiumPhononTTSModel) переопределяет специальный метод `__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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

## GradiumPhononTTSForConditionalGeneration[[transformers.GradiumPhononTTSForConditionalGeneration]]

#### transformers.GradiumPhononTTSForConditionalGeneration[[transformers.GradiumPhononTTSForConditionalGeneration]]

```python
transformers.GradiumPhononTTSForConditionalGeneration(config: GradiumPhononTTSConfig)
```

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

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

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

Модель синтеза речи Gradium Phonon TTS: базовая сеть (backbone), flow-головка, которая на каждом шаге генерирует один латентный аудиовектор, и головка определения конца речи. Модель генерирует латентные представления аудиотокенизатора, которые процессор декодирует в аудио с частотой дискретизации 24 кГц.

Эта модель наследуется от [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.GradiumPhononTTSForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, audio_prompt_latents: typing.Optional[torch.Tensor] = None, audio_prompt_latents_mask: typing.Optional[torch.Tensor] = None, audio_latents: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.Tensor] = None, labels_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

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)

audio_prompt_latents (`torch.Tensor` формы `(batch_size, num_prompt_frames, latent_dim)`, *необязательный*) : Латентные представления голосового промпта аудиотокенизатора, дополненные справа, распределённые по позициям `audio_prompt_token_id`.

audio_prompt_latents_mask (`torch.Tensor` формы `(batch_size, num_prompt_frames)`, *необязательный*) : Маска кадров голоса (`1`) в отличие от заполнителей (`0`) в `audio_prompt_latents`.

audio_latents (`torch.Tensor` формы `(batch_size, num_latents, latent_dim)`, *необязательный*) : Нормализованные аудио-латенты, распределённые по позициям `audio_latent_token_id`.

labels (`torch.Tensor` формы `(batch_size, num_frames, latent_dim)`, *необязательный*) : Целевые латенты аудио-токенизатора (обучение), дополненные справа. Промпт каждой строки заканчивается позицией `audio_bos_token_id`, за которой следует по одной позиции `audio_latent_token_id` на каждый кадр: модель подаёт нормализованные целевые значения (teacher forcing), применяет flow loss к выходам BOS и всех кадров, кроме последнего, которые предсказывают кадры, а end-of-speech loss — ко всем, причём последний является концом речи.

labels_mask (`torch.Tensor` формы `(batch_size, num_frames)`, *необязательный*) : Маска целевых кадров каждой строки (`1`) в отличие от заполнителей (`0`) в `labels`.

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

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

use_cache (`bool`, *необязательный*) : Если установлено в `True`, состояния ключей и значений `past_key_values` возвращаются и могут использоваться для ускорения декодирования (см. `past_key_values`).

**Возвращает:** `GradiumPhononTTSOutputWithPast` или `tuple(torch.Tensor)`

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

Метод forward класса [GradiumPhononTTSForConditionalGeneration](/docs/transformers/main/ru/model_doc/gradium_phonon_tts#transformers.GradiumPhononTTSForConditionalGeneration) переопределяет специальный метод `__call__`.

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

- **loss** (`torch.Tensor` формы `()`, *необязательный*, возвращается при передаче `labels`) -- Потери обучения: потери потока LSD для целевых латентов плюс `config.eos_loss_weight` умноженное на потери конца речи.
- **logits** (`torch.Tensor` формы `(batch_size, sequence_length, 1)`) -- Логиты конца речи, по одному на каждую позицию.
- **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).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания), которые можно использовать (см. вход `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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
- **last_hidden_state** (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`) -- Нормализованные скрытые состояния базовой модели, задающие условия для flow-головы.

Пример:

```python
>>> from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration

>>> model = GradiumPhononTTSForConditionalGeneration.from_pretrained("gradium/phonon-31m-en")

>>> processor = AutoProcessor.from_pretrained("gradium/phonon-31m-en")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")

>>> # generate speech
>>> speech = model(inputs["input_ids"])
```

#### generate[[transformers.GradiumPhononTTSForConditionalGeneration.generate]]

```python
generate(inputs: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

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

inputs (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательный*) : `input_ids`, подготовленные с помощью [PocketTTSProcessor](/docs/transformers/main/ru/model_doc/pocket_tts#transformers.PocketTTSProcessor). Также можно передать как `input_ids=`.

kwargs (`dict[str, Any]`, *необязательный*) : `attention_mask`, голосовой промпт (`audio_prompt_latents` и `audio_prompt_latents_mask`, либо кэш голосового префикса в виде `past_key_values`, встроенные голоса, с промптами только текста), `frames_after_eos` из процессора, параметры генерации (`do_sample`, `temperature`, `max_new_tokens`, ...), а также специфичные для Pocket TTS `num_flow_steps`, `eos_threshold` и `min_frames_before_eos`, значения по умолчанию для которых берутся из конфигурации генерации.

**Возвращаемое значение:**

[PocketTTSGenerateOutput](/docs/transformers/main/ru/model_doc/pocket_tts#transformers.models.pocket_tts.generation_pocket_tts.PocketTTSGenerateOutput) при `return_dict_in_generate=True` (конфигурация генерации чекпоинтов): дополненные `audio_latents` и их `audio_latents_mask`, которые [PocketTTSProcessor.decode()](/docs/transformers/main/ru/model_doc/pocket_tts#transformers.PocketTTSProcessor.decode) декодирует как одну партию. В противном случае — список сгенерированных латентов, по одному тензору `(num_frames, latent_dim)` на образец, каждый из которых декодируется отдельно.

Генерирует речь. Этот метод переопределяет [generate()](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationMixin.generate), чтобы по умолчанию устанавливать `max_new_tokens` равным бюджету кадров исходного времени выполнения, `ceil((num_text_tokens / 3 + 2) * frame_rate)` для самого длинного текста в батче. Всё остальное проходит через стандартные хуки генерации.

