Transformers documentation
Moshi
Эта модель была опубликована в HF papers 17.09.2024 и добавлена в Hugging Face Transformers 16.10.2024.
Moshi
Обзор
Модель Moshi была предложена в работе Moshi: a speech-text foundation model for real-time dialogue авторами Alexandre Défossez, Laurent Mazaré, Manu Orsini, Amélie Royer, Patrick Pérez, Hervé Jégou, Edouard Grave и Neil Zeghidour.
Moshi — это фундаментальная модель для работы с речью и текстом, которая рассматривает устный диалог как генерацию речи из речи. На основе базовой модели текстового языка Moshi генерирует речь в виде токенов из остаточного квантизатора нейронного аудиокодека, при этом отдельно моделируя собственную речь и речь пользователя в параллельных потоках. Это позволяет отказаться от явного чередования реплик говорящих и моделировать произвольную динамику разговора. Moshi также предсказывает текстовые токены, синхронизированные по времени, как префикс к аудиотокенам. Этот метод «Inner Monologue» значительно повышает лингвистическое качество генерируемой речи и обеспечивает потоковое распознавание речи и синтез речи из текста. В результате Moshi становится первой полнодуплексной речевой большой языковой моделью реального времени с теоретической задержкой 160 мс и фактической задержкой 200 мс.

Аннотация из статьи следующая:
Мы представляем Moshi — фундаментальную модель для работы с речью и текстом, а также полнодуплексный фреймворк для устного диалога. Современные системы устного диалога опираются на конвейеры из независимых компонентов: обнаружение активности голоса, распознавание речи, текстовый диалог и синтез речи из текста. Подобные фреймворки не способны воспроизвести ощущения от реального разговора. Во-первых, их сложность приводит к задержке в несколько секунд между взаимодействиями. Во-вторых, поскольку текст выступает промежуточной модальностью для диалога, нелингвистическая информация, влияющая на смысл, — например, эмоции или неречевые звуки, — теряется в процессе взаимодействия. Наконец, такие системы полагаются на сегментацию по репликам говорящих, что не учитывает наложение речи, перебивания и вставки. Moshi решает все эти проблемы в совокупности, рассматривая устный диалог как генерацию речи из речи. Исходя из базовой текстовой языковой модели, Moshi генерирует речь в виде токенов из остаточного квантизатора нейронного аудиокодека, при этом отдельно моделируя собственную речь и речь пользователя в параллельных потоках. Это позволяет отказаться от явных реплик говорящих и моделировать произвольную динамику разговора. Кроме того, мы расширяем иерархическую генерацию семантических и акустических токенов, предложенную в предыдущих работах, так, чтобы сначала предсказывать текстовые токены, выровненные по времени, в качестве префикса к аудиотокенам. Не только этот метод «Внутреннего монолога» значительно повышает лингвистическое качество генерируемой речи, но мы также показываем, как он может обеспечивать потоковое распознавание речи и синтез речи из текста. Наша итоговая модель — первая полнодуплексная устная большая языковая модель в реальном времени с теоретической задержкой 160 мс и практической задержкой 200 мс; она доступна по адресу github.com/kyutai-labs/moshi.
Moshi работает с тремя потоками информации:
- Аудио пользователя
- Аудио Moshi
- Текстовый вывод Moshi
Аналогично ~MusicgenModel, аудио представляется с помощью аудиокниг кодов, которые можно интерпретировать как токены. Главное отличие текстовых токенов от аудиокниг кодов состоит в том, что аудиокниги кодов вводят дополнительное измерение информации.
Текстовые токены обычно имеют размерность (batch_size, sequence_length), тогда как аудиотокены имеют размерность (batch_size, num_codebooks, sequence_length).
Moshi состоит из 3 компонентов:
1. Основной декодер (Helium в статье)
Он соответствует MoshiForCausalLM. Это строго классическая текстовая LLM, использующая архитектуру, аналогичную ~GemmaForCausalLM. Иными словами, она принимает токены текста, выполняет их эмбеддинг, прогоняет через декодер и языковую голову, чтобы получить текстовые логиты.
2. Декодер глубины
Сам по себе это тоже классическая LLM, но на этот раз генерация происходит не по временному измерению, а по измерению кодовой книги.
Это также означает, что длина его контекста равна num_codebooks, поэтому он не может сгенерировать больше, чем num_codebooks.
Обратите внимание, что для каждого временного метки — то есть для каждого кодового блока — используется собственный набор линейных слоёв и эмбеддингов.
3. MimiModel
Это аудио-энкодер от Kyutai, который недавно был интегрирован в transformers и используется для «токенизации» аудио. Он выполняет ту же роль, что и ~EncodecModel в ~MusicgenModel.
Советы
Исходные контрольные точки можно преобразовать с помощью скрипта конвертации src/transformers/models/moshi/convert_moshi_transformers.py
Как использовать модель
Эта реализация преследует две основные цели:
- быстро протестировать генерацию модели, упростив исходный API
- упростить обучение. Руководство по обучению появится в ближайшее время, но предложения от пользователей приветствуются!
Она предназначена для промежуточного использования. Мы настоятельно рекомендуем использовать исходную реализацию для инференса модели в режиме реального времени.
1. Генерация модели
Moshi — это потоковая авто-регрессивная модель с двумя потоками аудио. Иными словами, один аудиопоток соответствует тому, что модель сказала/скажет, а другой аудиопоток — тому, что пользователь сказал/скажет.
MoshiForConditionalGeneration.generate() требует 3 входных параметра:
input_ids— соответствует истории токенов текстаmoshi_input_valuesилиmoshi_audio_codes— соответствующие истории аудио моделиuser_input_valuesилиuser_audio_codes— соответствуют истории аудио пользователя
Эти три входных параметра должны быть синхронизированы. Это означает, что их длины должны соответствовать одному и тому же количеству токенов.
Вы можете динамически использовать 3 входа в зависимости от того, что вы хотите протестировать:
- Просто проверьте ответ модели на запрос пользователя — в этом случае
input_idsможно заполнить токенами pad, аuser_input_valuesможет быть нулевым тензором той же формы, что и запрос пользователя. - Тестирование более сложного поведения — в этом случае необходимо внимательно следить за синхронизацией входных токенов с аудио.
Исходная модель представляет собой синхронизированный текст и аудио, где текст дополняется заполнителями между произнесением каждого токена.
Чтобы следовать примеру на приведённом ниже изображении,
"Hello, I'm Moshi"может быть преобразован в"Hello,<pad><unk>I'm Moshi".

Затем MoshiForConditionalGeneration.generate() авто-регрессивно подставляет в себя собственный аудиопоток, однако, поскольку при использовании transformers у модели нет доступа к потоку ввода пользователя, она будет считать, что пользователь воспроизводит тишину.
import math
import torch
from datasets import Audio, load_dataset
from transformers import AutoFeatureExtractor, AutoTokenizer
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
feature_extractor = AutoFeatureExtractor.from_pretrained("kyutai/moshiko-pytorch-bf16")
tokenizer = AutoTokenizer.from_pretrained("kyutai/moshiko-pytorch-bf16")
dtype = torch.bfloat16
# prepare user input audio
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
audio_sample = librispeech_dummy[-1]["audio"]["array"]
user_input_values = feature_extractor(raw_audio=audio_sample, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt").to(device=device, dtype=dtype)
# prepare moshi input values - we suppose moshi didn't say anything while the user spoke
moshi_input_values = torch.zeros_like(user_input_values.input_values)
# prepare moshi input ids - we suppose moshi didn't say anything while the user spoke
num_tokens = math.ceil(moshi_input_values.shape[-1] * waveform_to_token_ratio)
input_ids = torch.ones((1, num_tokens), device=device, dtype=torch.int64) * tokenizer.encode("<pad>")[0]
# generate 25 new tokens (around 2s of audio)
output = model.generate(input_ids=input_ids, user_input_values=user_input_values.input_values, moshi_input_values=moshi_input_values, max_new_tokens=25)
text_tokens = output.sequences
audio_waveforms = output.audio_sequences2. Обучение модели
Большая часть работы приходится на этап создания/предобработки данных, поскольку необходимо выравнивать/синхронизировать потоки.
Когда это будет готово, достаточно передать text_labels и audio_labels в MoshiForConditionalGeneration.forward() вместе с обычными входными данными, чтобы получить потерю модели.
Руководство по обучению появится в ближайшее время, но мы приветствуем вклад от пользователей!
Как модель обрабатывает входные данные / генерирует
Входные потоки встраиваются и объединяются в
inputs_embeds.inputs_embedsпередается в основной декодер, который обрабатывает его так, как это делает обычная LLM.Основной декодер выводит
text logits, а также егоlast hidden state, который в статье называетсяtemporal context.Глубинный декодер переключает размерность, по которой выполняется передача / генерация (кодовые книги вместо времени). Он использует токен, сгенерированный из
text logits, иtemporal context, чтобы авто-регрессивно генерировать аудиокниги кодов.
Эта модель была предоставлена Yoach Lacombe (ylacombe).
Исходный код можно найти здесь.
MoshiConfig
класс transformers.MoshiConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 32000hidden_size: int = 4096num_hidden_layers: int = 32num_attention_heads: int = 32num_key_value_heads: int | None = Noneaudio_vocab_size: int | None = Nonemax_position_embeddings: int = 3000rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonehidden_act: str = 'silu'head_dim: int | None = Noneinitializer_range: float = 0.02use_cache: bool = Truesliding_window: int = 3000attention_dropout: float | int = 0.0ffn_dim: int = 22528rms_norm_eps: float = 1e-08num_codebooks: int = 8tie_word_embeddings: bool = Falsepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Noneaudio_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonedepth_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None )
Параметры
- vocab_size (
int, необязательный, по умолчанию32000) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены вinput_ids. - hidden_size (
int, необязательный, по умолчанию4096) — Размерность скрытых представлений. - num_hidden_layers (
int, необязательный, по умолчанию32) — Количество скрытых слоев в декодере Transformer. - num_attention_heads (
int, необязательный, по умолчанию32) — Количество головок внимания в каждом слое внимания декодера Transformer. - num_key_value_heads (
int, необязательный) — Количество ключевых и 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. При конвертации мультиголовного чекпоинта в GQA-чекпоинт каждая групповая ключевая и value-голова должна построиться путём усреднения (meanpooling) всех исходных голов в этой группе. Дополнительные сведения см. в этой статье. Если параметр не задан, по умолчанию используетсяnum_attention_heads. - audio_vocab_size (
int, необязательный) — Размер словаря аудиочасти модели. Определяет количество различных токенов, которые могут быть представленыaudio_codes, передаваемыми при вызове моделей Moshi. - max_position_embeddings (
int, необязательный, по умолчанию3000) — Максимальная длина последовательности, с которой может использоваться эта модель. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], необязательный) — Словарь, содержащий параметры конфигурации для эмбеддингов RoPE. Словарь должен содержать значение дляrope_thetaи, при необходимости, параметры, используемые для масштабирования, если вы хотите использовать RoPE с более длиннымиmax_position_embeddings. - hidden_act (
str, необязательный, по умолчаниюsilu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - head_dim (
int, необязательный) — Размер измерения головы внимания. Если значение равно None, по умолчанию используется hidden_size // num_attention_heads - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - use_cache (
bool, необязательный, по умолчаниюTrue) — Указывает, должен ли модель возвращать последние ключи/значения внимания (не используется во всех моделях). Актуально только еслиconfig.is_decoder=Trueили если модель является генеративной моделью только с декодером. - sliding_window (
int, необязательный, по умолчанию3000) — Размер окна для скользящего внимания. ЕслиNone, скользящее окно не применяется. - attention_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - ffn_dim (
int, необязательный, по умолчанию 22528) — Размерность «промежуточного» (часто называемого feed-forward) слоя в основном блоке декодера. Должно быть чётным. - rms_norm_eps (
float, необязательный, по умолчанию1e-08) — Значение epsilon, используемое слоями нормализации rms. - num_codebooks (
int, необязательный, по умолчанию8) — Количество параллельных кодовых книг, используемых моделью. - tie_word_embeddings (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели. - pad_token_id (
int, необязательный) — Идентификатор токена, используемого для выравнивания в словаре. - bos_token_id (
int, необязательный) — Идентификатор токена, используемого для обозначения начала потока в словаре. - eos_token_id (
Union[int, list[int]], необязательный) — Идентификатор токена, используемого для обозначения конца потока в словаре. - audio_encoder_config (
PreTrainedConfig | dict, необязательный) — Конфигурация аудио-энкодера. - depth_decoder_config (
PreTrainedConfig | dict, необязательный) — Конфигурация декодера глубины.
Это класс конфигурации для хранения настроек модели MoshiModel. Он используется для создания модели Moshi в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации kmhf/hf-moshika
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import (
... MoshiConfig,
... MoshiForConditionalGeneration,
... )
>>> configuration = MoshiConfig()
>>> # Initializing a MoshiForConditionalGeneration (with random weights) from the kmhf/hf-moshika style configuration
>>> model = MoshiForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # Saving the model, including its configuration
>>> model.save_pretrained("kmhf/hf-moshika")
>>> # loading model and config from pretrained folder
>>> moshi_config = MoshiConfig.from_pretrained("kmhf/hf-moshika")
>>> model = MoshiForConditionalGeneration.from_pretrained("kmhf/hf-moshika", config=moshi_config)from_audio_encoder_config
< source >( audio_encoder_config: PreTrainedConfig**kwargs ) → MoshiConfig
Возвращает
Экземпляр объекта конфигурации
Создайте экземпляр MoshiConfig (или производного класса) из конфигурации аудио-энкодера.
MoshiDepthConfig
класс transformers.MoshiDepthConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 32000hidden_size: int = 1024input_size: int = 4096num_hidden_layers: int = 6num_attention_heads: int = 16num_key_value_heads: int | None = Noneaudio_vocab_size: int = 2048max_position_embeddings: int = 9hidden_act: str = 'silu'head_dim: int | None = Noneinitializer_range: float = 0.02use_cache: bool = Truesliding_window: int = 8attention_dropout: float | int = 0.0ffn_dim: int = 5632rms_norm_eps: float = 1e-08num_codebooks: int = 8tie_word_embeddings: bool = Falsepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = None )
Параметры
- vocab_size (
int, необязательный, по умолчанию32000) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены вinput_ids. - hidden_size (
int, необязательный, по умолчанию1024) — Размерность скрытых представлений. - input_size (
int, необязательный, по умолчанию 4096) — Размерность входных скрытых состояний. Используется для соединения основного декодера с глубинным декодером. - num_hidden_layers (
int, необязательный, по умолчанию6) — Количество скрытых слоев в декодере Transformer. - num_attention_heads (
int, необязательный, по умолчанию16) — Количество головок внимания в каждом слое внимания декодера Transformer. - num_key_value_heads (
int, необязательный) — Количество ключевых и 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. При конвертации мультиголовного чекпоинта в GQA-чекпоинт каждая групповая ключевая и value-голова должна построиться путём усреднения (meanpooling) всех исходных голов в этой группе. Дополнительные сведения см. в этой статье. Если параметр не задан, по умолчанию используетсяnum_attention_heads. - audio_vocab_size (
int, необязательный, по умолчанию 2048) — Размер словаря аудиочасти модели. Определяет количество различных токенов, которые могут быть представленыaudio_codes, передаваемыми при вызове моделей Moshi. - max_position_embeddings (
int, необязательный, по умолчанию9) — Максимальная длина последовательности, с которой может использоваться эта модель. - hidden_act (
str, необязательный, по умолчаниюsilu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - head_dim (
int, необязательный) — Размер измерения головы внимания. Если значение равно None, по умолчанию используется hidden_size // num_attention_heads - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - use_cache (
bool, необязательный, по умолчаниюTrue) — Указывает, должен ли модель возвращать последние ключи/значения внимания (не используется во всех моделях). Актуально только еслиconfig.is_decoder=Trueили если модель является генеративной моделью только с декодером. - sliding_window (
int, необязательный, по умолчанию8) — Размер окна скользящего внимания. ЕслиNone, скользящее окно не применяется. - attention_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - ffn_dim (
int, необязательный, по умолчанию 5632) — Размерность «промежуточного» (часто называемого feed-forward) слоя в блоке декодера глубины. Должно быть чётным. - rms_norm_eps (
float, необязательный, по умолчанию1e-08) — Значение epsilon, используемое слоями нормализации rms. - num_codebooks (
int, необязательный, по умолчанию8) — Количество параллельных кодовых книг, используемых моделью. - tie_word_embeddings (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели. - pad_token_id (
int, необязательный) — Идентификатор токена, используемого для выравнивания в словаре. - bos_token_id (
int, необязательный) — Идентификатор токена, используемого для обозначения начала потока в словаре. - eos_token_id (
Union[int, list[int]], необязательный) — Идентификатор токена, используемого для обозначения конца потока в словаре.
Это класс конфигурации для хранения настроек модели MoshiModel. Он используется для создания модели Moshi в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации kmhf/hf-moshika
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import (
... MoshiDepthConfig,
... MoshiDepthDecoder,
... )
>>> configuration = MoshiDepthConfig()
>>> # Initializing a MoshiDepthDecoder (with random weights) from the kmhf/hf-moshika style configuration
>>> model = MoshiDepthDecoder(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMoshiModel
класс transformers.MoshiModel
< source >( config: MoshiConfig )
Параметры
- config (MoshiConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель Moshi без дополнительных компонентов, выводящая необработанные скрытые состояния без какого-либо специализированного слоя.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.Tensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- position_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - use_cache (
bool, необязательный) — Если установлено вTrue, возвращаются состояния ключей и значенийpast_key_values, которые можно использовать для ускорения декодирования (см.past_key_values).
Возвращает
BaseModelOutputWithPast или tuple(torch.Tensor)
Объект BaseModelOutputWithPast или кортеж
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MoshiConfig) и входных данных.
Метод forward модели MoshiModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.Если используется
past_key_values, выводится только последнее скрытое состояние последовательностей формы(batch_size, 1, hidden_size).past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если
config.is_encoder_decoder=True, в блоках кросс-внимания), которые можно использовать (см. входной параметрpast_key_values) для ускорения последовательного декодирования.hidden_states (
tuple(torch.Tensor), optional, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
MoshiForCausalLM
класс transformers.MoshiForCausalLM
< source >( config: MoshiConfig )
Параметры
- config (MoshiConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель декодера Moshi с головкой для языкового моделирования текста. Используется только для текста.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Nonelabels: typing.Optional[torch.LongTensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoshiCausalLMOutputWithPast or tuple(torch.Tensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- position_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - use_cache (
bool, необязательный) — Если установлено вTrue, возвращаются состояния ключей и значенийpast_key_values, которые можно использовать для ускорения декодирования (см.past_key_values). - labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне[0, ..., config.vocab_size]или быть равны -100 (см. docstringinput_ids). Токены с индексами, установленными в-100, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне[0, ..., config.vocab_size]. - logits_to_keep (
Union[int, torch.Tensor], необязательный, по умолчанию0) — Если передано значение типаint, вычисляет logits для последнихlogits_to_keepтокенов. Если указано0, logits вычисляются для всехinput_ids(особый случай). Для генерации нужны logits только последнего токена, и вычисление их только для этого токена позволяет сэкономить память, что становится весьма значимым для длинных последовательностей или большого размера словаря. Если передано значение типаtorch.Tensor, оно должно быть одномерным и соответствовать индексам, которые нужно сохранить в измерении длины последовательности. Это полезно при использовании упакованного формата тензоров (один размер для batch и длины последовательности).
Возвращает
MoshiCausalLMOutputWithPast или tuple(torch.Tensor)
MoshiCausalLMOutputWithPast или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MoshiConfig) и входных данных.
Метод forward класса MoshiForCausalLM переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери языковой модели (для предсказания следующего токена).logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя модели.past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания), которые можно использовать (см. вход
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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Пример:
>>> from transformers import AutoTokenizer, MoshiForCausalLM
>>> model = MoshiForCausalLM.from_pretrained("kmhf/hf-moshika")
>>> tokenizer = AutoTokenizer.from_pretrained("kmhf/hf-moshika")
>>> prompt = "What is your favorite condiment?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"What is your favorite condiment?"MoshiForConditionalGeneration
класс transformers.MoshiForConditionalGeneration
< source >( config: MoshiConfig )
Параметры
- config (MoshiConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Исходная модель Moshi с аудио-энкодером, глубинным декодером Moshi и декодером Moshi, для преобразования речи в речь.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.BoolTensor] = Noneuser_input_values: typing.Optional[torch.Tensor] = Noneuser_audio_codes: typing.Optional[torch.Tensor] = Nonemoshi_input_values: typing.Optional[torch.Tensor] = Nonemoshi_audio_codes: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonetext_labels: typing.Optional[torch.LongTensor] = Noneaudio_labels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs ) → MoshiConditionalGenerationOutputWithPast or tuple(torch.Tensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.BoolTensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- user_input_values (
torch.Tensorформы `(batch_size, 1, audio_sequence_length), необязательный) — Аудиосигналы, используемые в качестве аудио-промпта пользователя для генерации. - user_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio user prompt for the generation. Has priority overuser_input_valuesand represents the audio "tokens" ofuser_input_values` once passed through the audio encoder. - moshi_input_values (
torch.Tensorформы `(batch_size, 1, audio_sequence_length), необязательный) — Аудиосигналы, используемые в качестве аудио-промпта Moshi для генерации. - moshi_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio Moshi prompt for the generation. Has priority overmoshi_input_valuesand represents the audio "tokens" ofmoshi_input_values` once passed through the audio encoder. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательно) — Необязательно, вместо передачиinput_idsможно напрямую передать встроенное представление. Еслиpast_key_valuesиспользуется, необязательно вводить только последниеinputs_embeds(см.past_key_values). Это полезно, если вы хотите больше контролировать, как индексыinput_idsпреобразуются в соответствующие векторы, чем это делает внутренняя матрица поиска эмбеддингов модели.Если
input_idsиinputs_embedsне заданы,inputs_embedsпринимает значениеinputs_embeds. - text_labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для языкового моделирования текста. Обратите внимание, что метки сдвинуты внутри модели, то есть можно задатьlabels = input_idsИндексы выбираются из диапазона[-100, 0, ..., config.vocab_size]Все метки, установленные в-100, игнорируются (маскируются); функция потерь вычисляется только для меток из диапазона[0, ..., config.vocab_size] - audio_labels (
torch.LongTensorформы(batch_size, num_codebooks, sequence_length), необязательный) — Метки для моделирования языка. Обратите внимание, что метки сдвинуты внутри модели, то есть можно задатьlabels = input_idsИндексы выбираются из[-100, 0, ..., config.vocab_size]Все метки, установленные в-100, игнорируются (маскируются); потеря вычисляется только для меток из[0, ..., config.audio_vocab_size] - use_cache (
bool, необязательный) — Если установлено вTrue, возвращаются состояния ключей и значенийpast_key_values, которые можно использовать для ускорения декодирования (см.past_key_values).
Возвращает
MoshiConditionalGenerationOutputWithPast или tuple(torch.Tensor)
MoshiConditionalGenerationOutputWithPast или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MoshiConfig) и входных данных.
Метод forward класса MoshiForConditionalGeneration переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если переданtext_labels) — Потеря языковой модели для текста (для предсказания следующего токена).logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели текста (оценки для каждого токена словаря до применения SoftMax).last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя модели.past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания), которые можно использовать (см. вход
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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
depth_loss (
torch.Tensorформы(1,), необязательный, возвращается, если переданaudio_labels) — Потеря аудиоязыковой модели (для предсказания следующего токена).audio_logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний головок языковой модели для аудио.depth_past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — Предыдущие ключи и значения декодера глубины.depth_hidden_states (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили приconfig.output_hidden_states=True) — Скрытые состояния декодера глубиныdepth_attentions (
tuple(torch.Tensor), optional, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — веса внимания декодера глубины после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> from transformers import MoshiForConditionalGeneration
>>> import torch
>>> model = MoshiForConditionalGeneration.from_pretrained("kmhf/hf-moshika")
>>> inputs = moshi.get_unconditional_inputs()
>>> logits = model(**inputs, ).logits
>>> logits.shape # (bsz, seq_len, text_vocab_size)
torch.Size([1, 1, 32000])generate
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneuser_input_values: typing.Optional[torch.Tensor] = Noneuser_audio_codes: typing.Optional[torch.Tensor] = Nonemoshi_input_values: typing.Optional[torch.Tensor] = Nonemoshi_audio_codes: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonereturn_audio_waveforms: bool | None = Truereturn_audio_codes: bool | None = Noneconcat_unconditional_inputs: bool | None = True**kwargs )
Параметры
- input_ids (
torch.Tensorформы `(batch_size, sequence_length), необязательный) — Последовательность, используемая в качестве текстового промпта для генерации. - user_input_values (
torch.Tensorформы `(batch_size, 1, audio_sequence_length), необязательный) — Аудиосигналы, используемые в качестве аудио-промпта пользователя для генерации. - user_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio user prompt for the generation. Has priority overuser_input_valuesand represents the audio "tokens" ofuser_input_values` once passed through the audio encoder. - moshi_input_values (
torch.Tensorформы `(batch_size, 1, audio_sequence_length), необязательный) — Аудиосигналы, используемые в качестве аудио-промпта Moshi для генерации. - moshi_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio Moshi prompt for the generation. Has priority overmoshi_input_valuesand represents the audio "tokens" ofmoshi_input_values` once passed through the audio encoder. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsи аудиовходов, можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как входы преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - return_audio_waveforms (
bool, необязательный, по умолчаниюTrue) — ЕслиFalse, звуковые волны не будут генерироваться. - return_audio_codes (
bool, необязательный) — ЕслиTrue, также возвращает сгенерированные аудиокоды, то есть промежуточные аудио-«токены», которые преобразуются вaudio_sequencesпосле прохода через аудиодекодер. - concat_unconditional_inputs (
bool, необязательный, по умолчаниюTrue) — ЕслиFalse, начальные аудио- и текстовые токены не будут объединены. - kwargs (
dict[str, Any], необязательный) — Остальные именованные аргументы, передаваемые в методgenerate. Подробности об их использовании см. в исходных документациях методаgenerate. Обратите внимание, что аргументы с префиксом depth_ будут переданы в методgenerateдекодера глубины. В противном случае последний будет использовать конфигурацию генерации по умолчанию.
Генерирует последовательности идентификаторов токенов текста и идентификаторов аудио-токенов.
get_unconditional_inputs
< source >( num_samples = 1 )
Параметры
- num_samples (int, необязательный) — Количество аудиовыборок, которые нужно сгенерировать без условий.
- max_new_tokens (int, необязательный) — Количество токенов, генерируемых для каждого примера. Чем больше токенов, тем длиннее аудиоприем, но тем дольше выполняется инференс (так как для каждого примера нужно сгенерировать больше аудиотокенов).
Вспомогательная функция для получения нулевых входных данных для безусловной генерации, что позволяет использовать модель без feature extractor или tokenizer.
Пример:
>>> from transformers import MoshiForConditionalGeneration
>>> model = MoshiForConditionalGeneration.from_pretrained("kmhf/hf-moshika")
>>> # get the unconditional (or 'null') inputs for the model
>>> unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
>>> audio_samples = model.generate(**unconditional_inputs, max_new_tokens=256)