Transformers documentation

Moshi

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 17.09.2024 и добавлена в Hugging Face Transformers 16.10.2024.

Moshi

FlashAttention SDPA

Обзор

Модель 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 работает с тремя потоками информации:

  1. Аудио пользователя
  2. Аудио Moshi
  3. Текстовый вывод 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

Как использовать модель

Эта реализация преследует две основные цели:

  1. быстро протестировать генерацию модели, упростив исходный API
  2. упростить обучение. Руководство по обучению появится в ближайшее время, но предложения от пользователей приветствуются!

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

1. Генерация модели

Moshi — это потоковая авто-регрессивная модель с двумя потоками аудио. Иными словами, один аудиопоток соответствует тому, что модель сказала/скажет, а другой аудиопоток — тому, что пользователь сказал/скажет.

MoshiForConditionalGeneration.generate() требует 3 входных параметра:

  1. input_ids — соответствует истории токенов текста
  2. moshi_input_values или moshi_audio_codes — соответствующие истории аудио модели
  3. user_input_values или user_audio_codes — соответствуют истории аудио пользователя

Эти три входных параметра должны быть синхронизированы. Это означает, что их длины должны соответствовать одному и тому же количеству токенов.

Вы можете динамически использовать 3 входа в зависимости от того, что вы хотите протестировать:

  1. Просто проверьте ответ модели на запрос пользователя — в этом случае input_ids можно заполнить токенами pad, а user_input_values может быть нулевым тензором той же формы, что и запрос пользователя.
  2. Тестирование более сложного поведения — в этом случае необходимо внимательно следить за синхронизацией входных токенов с аудио.

Исходная модель представляет собой синхронизированный текст и аудио, где текст дополняется заполнителями между произнесением каждого токена.

Чтобы следовать примеру на приведённом ниже изображении, "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_sequences

2. Обучение модели

Большая часть работы приходится на этап создания/предобработки данных, поскольку необходимо выравнивать/синхронизировать потоки.

Когда это будет готово, достаточно передать text_labels и audio_labels в MoshiForConditionalGeneration.forward() вместе с обычными входными данными, чтобы получить потерю модели.

Руководство по обучению появится в ближайшее время, но мы приветствуем вклад от пользователей!

Как модель обрабатывает входные данные / генерирует

  1. Входные потоки встраиваются и объединяются в inputs_embeds.

  2. inputs_embeds передается в основной декодер, который обрабатывает его так, как это делает обычная LLM.

  3. Основной декодер выводит text logits, а также его last hidden state, который в статье называется temporal context.

  4. Глубинный декодер переключает размерность, по которой выполняется передача / генерация (кодовые книги вместо времени). Он использует токен, сгенерированный из text logits, и temporal context, чтобы авто-регрессивно генерировать аудиокниги кодов.

Эта модель была предоставлена Yoach Lacombe (ylacombe).

Исходный код можно найти здесь.

MoshiConfig

класс transformers.MoshiConfig

< >

( 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

< >

( audio_encoder_config: PreTrainedConfig**kwargs ) → MoshiConfig

Возвращает

MoshiConfig

Экземпляр объекта конфигурации

Создайте экземпляр MoshiConfig (или производного класса) из конфигурации аудио-энкодера.

MoshiDepthConfig

класс transformers.MoshiDepthConfig

< >

( 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.config

MoshiModel

класс transformers.MoshiModel

< >

( config: MoshiConfig )

Параметры

  • config (MoshiConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель Moshi без дополнительных компонентов, выводящая необработанные скрытые состояния без какого-либо специализированного слоя.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( 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

< >

( config: MoshiConfig )

Параметры

  • config (MoshiConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель декодера Moshi с головкой для языкового моделирования текста. Используется только для текста.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( 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 (см. docstring input_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

< >

( config: MoshiConfig )

Параметры

  • config (MoshiConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Исходная модель Moshi с аудио-энкодером, глубинным декодером Moshi и декодером Moshi, для преобразования речи в речь.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( 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.Tensor of shape (batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio user prompt for the generation. Has priority over user_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.Tensor of shape (batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio Moshi prompt for the generation. Has priority over moshi_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

< >

( 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.Tensor of shape (batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio user prompt for the generation. Has priority over user_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.Tensor of shape (batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio Moshi prompt for the generation. Has priority over moshi_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

< >

( 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)
Update on GitHub