Transformers documentation

X-Codec

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

and get access to the augmented documentation experience

to get started

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

X-Codec

Обзор

Модель X-Codec была предложена в статье Codec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Model авторами Zhen Ye, Peiwen Sun, Jiahe Lei, Hongzhan Lin, Xu Tan, Zheqi Dai, Qiuqiang Kong, Jianyi Chen, Jiahao Pan, Qifeng Liu, Yike Guo, Wei Xue.

Модель X-Codec — это нейронный аудиокодек, который объединяет семантическую информацию из самообучаемых моделей (например, HuBERT) с традиционной акустической информацией. Это позволяет:

  • Продолжение музыки: Более точное моделирование музыкальной семантики обеспечивает более связные продолжения.
  • Синтез звука из текста: X-Codec обеспечивает семантическое согласование между текстовыми запросами и генерируемым аудио.
  • Семантически осведомленная токенизация аудио: X-Codec используется в качестве аудио-токенизатора в модели YuE для генерации песни по тексту.

В аннотации к статье сказано следующее:

Недавние достижения в области генерации аудио были значительно продвинуты благодаря возможностям больших языковых моделей (LLM). Существующие исследования в области аудио-LLM в основном сосредоточены на улучшении архитектуры и масштаба моделей аудиоязыка, а также на использовании более крупных наборов данных. Как правило, для токенизации аудио применяются акустические кодексы, такие как EnCodec. Однако эти кодексы изначально были разработаны для сжатия аудио, что может приводить к неоптимальной производительности в контексте аудио-LLM. Наша работа направлена на устранение недостатков текущих кодеков для аудио-LLM, в частности, их трудностей с сохранением семантической целостности в генерируемом аудио. Например, существующие методы, такие как VALL-E, которые обусловливают генерацию акустических токенов текстовой транскрипцией, часто страдают от неточностей в содержании и повышенного показателя ошибки распознавания слов (WER) из-за семантических искажений акустических токенов, что приводит к пропуску слов и ошибкам. Для решения этих проблем мы предлагаем простой, но эффективный подход, названный X-Codec. X-Codec включает семантические признаки из предварительно обученного семантического энкодера перед этапом остаточного векторного квантования (RVQ) и вводит потерю семантической реконструкции после RVQ. За счет усиления семантических возможностей кодека X-Codec значительно снижает WER в задачах синтеза речи и распространяет эти преимущества на приложения, не связанные с речью, включая генерацию музыки и звуков. Наши эксперименты в задачах преобразования текста в речь, продолжения музыки и преобразования текста в звук демонстрируют, что интеграция семантической информации существенно улучшает общую производительность языковых моделей в генерации аудио.

Карточки моделей:

Эта модель была предоставлена Manal El Aidouni. Исходный код можно найти здесь, а исходные контрольные точки для пяти различных моделей — здесь.

Демо можно найти на этой странице.

Пример использования

Вот краткий пример того, как закодировать и декодировать аудио с помощью этой модели:

from datasets import Audio, load_dataset

from transformers import AutoFeatureExtractor, XcodecModel


dummy_dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

# load model and feature extractor
model_id = "hf-audio/xcodec-hubert-librispeech"
model = XcodecModel.from_pretrained(model_id, device_map="auto")
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

# load audio sample
dummy_dataset = dummy_dataset.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
audio_sample = dummy_dataset[-1]["audio"]["array"]
inputs = feature_extractor(raw_audio=audio_sample, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt").to(model.device)

# encode and decode
encoder_outputs = model.encode(inputs["input_values"])
decoder_outputs = model.decode(encoder_outputs.audio_codes)
audio_values = decoder_outputs.audio_values

# or the equivalent with a forward pass
audio_values = model(inputs["input_values"]).audio_values

Чтобы прослушать исходный и восстановленный звук, выполните приведённый ниже фрагмент кода, а затем откройте сгенерированные файлы original.wav и reconstruction.wav в музыкальном плеере для сравнения.

import soundfile as sf


original = audio_sample
reconstruction = audio_values[0].cpu().detach().numpy()
sampling_rate = feature_extractor.sampling_rate

sf.write("original.wav", original, sampling_rate)
sf.write("reconstruction.wav", reconstruction.T, sampling_rate)

XcodecConfig

класс transformers.XcodecConfig

< >

( 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 = Nonetarget_bandwidths: list[int | float] | tuple[int | float, ...] = (0.5, 1, 1.5, 2, 4)sample_rate: int = 16000kernel_size: int = 3channel_ratios: list[int] | tuple[int, ...] = (1, 1)strides: list[int] | tuple[int, ...] = (1, 1)block_dilations: list[int] | tuple[int, ...] = (1, 1)unit_kernel_size: int = 3codebook_size: int = 1024codebook_dim: int | None = Noneinitializer_range: float = 0.02acoustic_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonesemantic_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None )

Параметры

  • target_bandwidths (List[float], необязательный, по умолчанию [0.5, 1, 1.5, 2, 4]) — Диапазон различных значений пропускной способности (в кбит/с), с которыми модель может кодировать аудио.
  • sample_rate (int, необязательный, по умолчанию 16000) — Частота дискретизации, с которой аудиофайлы должны быть оцифрованы, выраженная в герцах (Гц).
  • kernel_size (int, необязательный, по умолчанию 3) — Размер свёрточного ядра.
  • channel_ratios (List[float], необязательный, по умолчанию [1, 1]) — Коэффициенты расширения для количества выходных каналов в каждом семантическом блоке.
  • strides (List[int], необязательный, по умолчанию [1, 1]) — Шаги для каждого блока семантического кодировщика.
  • block_dilations (List[int], необязательный, по умолчанию [1, 1]) — Коэффициенты дилатации для остаточных блоков в семантических блоках.
  • unit_kernel_size (int, необязательный, по умолчанию 3) — Размер ядра внутри каждого ResidualUnit в семантических блоках.
  • codebook_size (int, необязательный, по умолчанию 1024) — Количество параллельных кодовых книг, используемых моделью.
  • codebook_dim (int, необязательный) — Размерность каждого вектора встраивания кодовой книги.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • acoustic_model_config (Union[Dict, DacConfig], необязательный) — Экземпляр конфигурации акустической (DAC) модели.
  • semantic_model_config (Union[Dict, HubertConfig, WavLMConfig], необязательный) — Экземпляр объекта конфигурации для семантической (HuBERT) модели.

Это класс конфигурации для хранения конфигурации модели XcodecModel. Он используется для создания модели Xcodec в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации Manel/X-Codec

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> from transformers import XcodecModel, XcodecConfig

>>> # Initializing configuration
>>> configuration = XcodecConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = XcodecModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

XcodecModel

класс transformers.XcodecModel

< >

( config: XcodecConfig )

Параметры

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

Модель нейросетевого аудиокодека Xcodec.

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

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

decode

< >

( audio_codes: Tensorreturn_dict: bool | None = None )

Параметры

  • audio_codes (torch.LongTensor формы (batch_size, num_quantizers, codes_length)) — Дискретные индексы кодов, вычисленные с помощью model.encode.
  • return_dict (bool, необязательный) — Возвращать ли ModelOutput

encode

< >

( input_values: Tensorbandwidth: float | None = Nonereturn_dict: bool | None = None )

Параметры

  • input_values (torch.Tensor формы (batch_size, channels, num_samples)) — Значения типа float входной аудиоволны.
  • bandwidth (float, необязательный) — Целевая пропускная способность (в кбит/с); поддерживаются только значения из config.target_bandwidths. По умолчанию используется максимальная доступная пропускная способность 4.0 кбит/с.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput.

forward

< >

( input_values: Tensoraudio_codes: typing.Optional[torch.Tensor] = Nonebandwidth: float | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → XcodecOutput or tuple (audio_codes, audio_values)

Параметры

  • input_values (torch.Tensor формы (batch_size, channels, num_samples)) — Сырые значения с плавающей точкой входной аудиоволны.
  • audio_codes (torch.LongTensor с формой (batch_size, num_quantizers, codes_length) — Индексы дискретных кодов, вычисленные с помощью model.encode.
  • bandwidth (float, необязательный) — Целевая пропускная способность в кбит/с. Должно быть одним из значений config.target_bandwidths. По умолчанию используется максимальная доступная пропускная способность.
  • bandwidth (float, необязательный) — Целевая пропускная способность в кбит/с. Должно быть одним из значений config.target_bandwidths. По умолчанию используется максимальная доступная пропускная способность.

Возвращает

XcodecOutput или кортеж (audio_codes, audio_values)

  • audio_codes формы (batch_size, num_quantizers, codes_length): квантованные дискретные коды.
  • audio_values формы (batch_size, channels, num_samples): восстановленная аудиоволна, полученная по кодам.

Метод forward модели XcodecModel переопределяет специальный метод __call__.

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

Пример:

>>> from datasets import load_dataset
>>> from transformers import AutoFeatureExtractor, XcodecModel

>>> model_id = "hf-audio/xcodec-hubert-librispeech"
>>> model = XcodecModel.from_pretrained(model_id)
>>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
>>> audio_sample = dataset[0]['audio']['array']

>>> inputs = feature_extractor(raw_audio=audio_sample, return_tensors="pt")

>>> outputs = model(**inputs)
>>> audio_codes = outputs.audio_codes
>>> audio_values = outputs.audio_values
Update on GitHub