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.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Ce modèle a été publié dans HF papers le 2024-08-30 et contribué à Hugging Face Transformers le 2025-08-15.

X-Codec

Aperçu

Le modèle X-Codec a été proposé dans Codec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Model par Zhen Ye, Peiwen Sun, Jiahe Lei, Hongzhan Lin, Xu Tan, Zheqi Dai, Qiuqiang Kong, Jianyi Chen, Jiahao Pan, Qifeng Liu, Yike Guo, Wei Xue.

Le modèle X-Codec est un codec audio neuronal qui intègre des informations sémantiques issues de modèles auto-supervisés (par exemple, HuBERT) en plus des informations acoustiques traditionnelles. Cela permet :

  • Poursuite musicale : une meilleure modélisation des sémantiques musicales produit des poursuites plus cohérentes.
  • Synthèse texte-son : X-Codec capture l'alignement sémantique entre les invites texte et l'audio généré.
  • Tokenisation audio tenant compte du sémantique : X-Codec est utilisé comme tokeniseur audio dans le modèle de génération de chansons à partir de paroles de YuE.

L'abstract de l'article énonce ce qui suit :

Les récentes avancées en génération audio ont été considérablement portées par les capacités des grands modèles de langage (LLM). Les recherches existantes sur les LLM audio se sont principalement concentrées sur l’amélioration de l’architecture et de l’échelle des modèles de langage audio, ainsi que sur l’exploitation de jeux de données plus volumineux. De manière générale, des codecs acoustiques, tels qu’EnCodec, sont utilisés pour la tokenisation audio. Toutefois, ces codecs ont été initialement conçus pour la compression audio, ce qui peut entraîner des performances sous-optimales dans le contexte des LLM audio. Notre recherche vise à remédier aux limites des codecs actuels pour LLM audio, en particulier leurs difficultés à préserver l’intégrité sémantique de l’audio généré. Par exemple, les méthodes existantes comme VALL-E, qui conditionnent la génération de tokens acoustiques sur des transcriptions textuelles, souffrent souvent d’imprécisions de contenu et de taux d’erreur de mot (WER) élevés en raison d’interprétations sémantiques erronées des tokens acoustiques, ce qui provoque des omissions de mots et des erreurs. Pour surmonter ces problèmes, nous proposons une approche simple mais efficace appelée X-Codec. X-Codec intègre des caractéristiques sémantiques issues d’un encodeur sémantique pré-entraîné avant l’étape de quantification vectorielle résiduelle (RVQ) et introduit une perte de reconstruction sémantique après la RVQ. En renforçant la capacité sémantique du codec, X-Codec réduit considérablement le WER dans les tâches de synthèse vocale et étend ces avantages à des applications non vocales, notamment la génération de musique et de sons. Nos expériences sur les tâches de texte-vers-parole, de continuation musicale et de texte-vers-son démontrent que l’intégration d’informations sémantiques améliore substantiellement les performances globales des modèles de langage en génération audio.

Fiches de modèle :

Ce modèle a été contribué par Manal El Aidouni. Le code d'origine peut être trouvé ici et les points de contrôle d'origine pour les cinq modèles différents ici.

Les démonstrations sont disponibles sur cette page.

Exemple d'utilisation

Voici un exemple rapide de l’encodage et du décodage d’un audio à l’aide de ce modèle :

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

Pour écouter l’audio original et reconstruit, exécutez l’extrait de code ci-dessous, puis ouvrez les fichiers original.wav et reconstruction.wav générés dans votre lecteur musical pour les comparer.

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

classe 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 )

Paramètres

  • target_bandwidths (List[float], facultatif, par défaut [0.5, 1, 1.5, 2, 4]) — La plage de différentes largeurs de bande (en kbps) avec lesquelles le modèle peut encoder l'audio.
  • sample_rate (int, facultatif, par défaut 16000) — Taux d'échantillonnage auquel les fichiers audio doivent être numérisés, exprimé en hertz (Hz).
  • kernel_size (int, facultatif, par défaut 3) — La taille du noyau de convolution.
  • channel_ratios (List[float], facultatif, par défaut [1, 1]) — Facteurs d'expansion du nombre de canaux de sortie dans chaque bloc sémantique.
  • strides (List[int], facultatif, par défaut [1, 1]) — Pas pour chaque bloc d'encodeur sémantique.
  • block_dilations (List[int], facultatif, par défaut [1, 1]) — Facteurs de dilatation pour les unités résiduelles dans les blocs sémantiques.
  • unit_kernel_size (int, facultatif, valeur par défaut 3) — Taille du noyau à l'intérieur de chaque ResidualUnit des blocs sémantiques.
  • codebook_size (int, facultatif, par défaut 1024) — Le nombre de codebooks parallèles utilisés par le modèle.
  • codebook_dim (int, facultatif) — Dimension de chaque vecteur d'embedding du codebook.
  • initializer_range (float, facultatif, par défaut 0.02) — L'écart-type de la truncated_normal_initializer utilisé pour initialiser toutes les matrices de poids.
  • acoustic_model_config (Union[Dict, DacConfig], facultatif) — Une instance de la configuration du modèle acoustique (DAC).
  • semantic_model_config (Union[Dict, HubertConfig, WavLMConfig], facultatif) — Une instance de l'objet de configuration du modèle sémantique (HuBERT).

Il s’agit de la classe de configuration destinée à stocker la configuration d’un XcodecModel. Elle est utilisée pour instancier un modèle Xcodec en fonction des arguments spécifiés, en définissant l’architecture du modèle. L’instanciation d’une configuration avec les valeurs par défaut produira une configuration similaire à celle de Manel/X-Codec

Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.

Exemple :

>>> 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

classe transformers.XcodecModel

< >

( config: XcodecConfig )

Paramètres

  • config (XcodecConfig) — Classe de configuration du modèle contenant tous les paramètres du modèle. L’initialisation à partir d’un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode from_pretrained() pour charger les poids du modèle.

Le modèle de codec audio neuronal Xcodec.

Ce modèle hérite de PreTrainedModel. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, la taille des têtes, etc.)

Ce modèle est également une sous-classe de torch.nn.Module de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l'utilisation et le comportement généraux.

décoder

< >

( audio_codes: Tensorreturn_dict: bool | None = None )

Paramètres

  • audio_codes (torch.LongTensor de forme (batch_size, num_quantizers, codes_length)) — Indices de codes discrets calculés à l'aide de model.encode.
  • return_dict (bool, facultatif) — Indique s'il faut retourner un ModelOutput

encode

< >

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

Paramètres

  • input_values (torch.Tensor de forme (batch_size, channels, num_samples)) — Valeurs flottantes de la forme d'onde audio d'entrée.
  • bandwidth (float, facultatif) — La bande passante cible en (kbps) ne prend en charge que les valeurs de config.target_bandwidths. Par défaut, la bande passante disponible la plus élevée, soit 4.0 kbps.
  • return_dict (bool, facultatif) — Indique s'il faut ou non retourner un 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)

Paramètres

  • input_values (torch.Tensor de forme (batch_size, channels, num_samples)) — Les valeurs flottantes brutes de la forme d'onde audio d'entrée.
  • audio_codes (torch.LongTensor de forme (batch_size, num_quantizers, codes_length) — Indices de codes discrets calculés à l'aide de model.encode.
  • bandwidth (float, facultatif) — Bande passante cible en kbps. Doit être l’une des valeurs de config.target_bandwidths. Par défaut, la bande passante disponible la plus élevée est utilisée.
  • bandwidth (float, facultatif) — Bande passante cible en kbps. Doit être l’une des valeurs de config.target_bandwidths. Par défaut, la bande passante disponible la plus élevée est utilisée.

Retourne

XcodecOutput ou tuple (audio_codes, audio_values)

  • audio_codes de forme (batch_size, num_quantizers, codes_length) : les codes discrets quantifiés.
  • audio_values de forme (batch_size, channels, num_samples) : la forme d’onde audio reconstruite à partir des codes.

La méthode forward du modèle XcodecModel redéfinit la méthode spéciale __call__.

Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance Module plutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.

Exemple :

>>> 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