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

该模型于 2024-08-30 在 HF papers 上发布,并于 2025-08-15 贡献至 Hugging Face Transformers。

X-Codec

概述

X-Codec 模型由 Zhen Ye、Peiwen Sun、Jiahe Lei、Hongzhan Lin、Xu Tan、Zheqi Dai、Qiuqiang Kong、Jianyi Chen、Jiahao Pan、Qifeng Liu、Yike Guo 和 Wei Xue 在 Codec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Model 中提出。

X-Codec 模型是一种神经音频编解码器,它将自监督模型(例如 HuBERT)中的语义信息与传统的声学信息相结合。这使得:

  • 音乐续写:对音乐语义的更好建模能够生成更连贯的续写内容。
  • 文本到声音合成:X-Codec 捕获了文本提示词与生成音频之间的语义对齐。
  • 语义感知音频分词:X-Codec 被用作 YuE 歌词到歌曲生成模型中的音频分词器。

该论文的摘要指出:

音频生成领域的最新进展在很大程度上得益于大语言模型(LLM)的能力。现有的音频 LLM 研究主要集中于提升音频语言模型的架构与规模,以及利用更大的数据集;通常,会使用 EnCodec 等声学编解码器进行音频分词。然而,这些编解码器最初是为音频压缩而设计的,在音频 LLM 的语境下可能会导致次优的性能。我们的研究旨在解决当前音频 LLM 编解码器的不足,特别是它们在生成音频中保持语义完整性方面面临的挑战。例如,VALL-E 等现有方法以文本转录为条件来生成声学 token,往往会因对声学 token 的语义误解而出现内容不准确和较高的词错误率(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]) — 模型可用于编码音频的不同带宽范围(单位:kbps)。
  • sample_rate (int,可选,默认为 16000) — 音频文件应被数字化时的采样率,以赫兹(Hz)为单位。
  • 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

class transformers.XcodecModel

< >

( config: XcodecConfig )

参数

  • config (XcodecConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

Xcodec 神经音频编解码器模型。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

decode

< >

( audio_codes: Tensorreturn_dict: bool | None = None )

参数

  • audio_codes(形状为 (batch_size, num_quantizers, codes_length) 的 torch.LongTensor)— 使用 model.encode 计算得出的离散编码索引。
  • return_dict (bool, 可选) — 是否返回 ModelOutput

encode

< >

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

参数

  • input_values(形状为 (batch_size, channels, num_samples) 的 torch.Tensor)— 输入音频波形的浮点值。
  • bandwidth (float, 可选) — 目标带宽(kbps),仅支持 config.target_bandwidths 中的值。 默认为可用的最高带宽 4.0 kbps。
  • 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(形状为 (batch_size, channels, num_samples) 的 torch.Tensor)— 输入音频波形的原始浮点值。
  • audio_codes (torch.LongTensor,形状为 (batch_size, num_quantizers, codes_length) — 使用 model.encode 计算得出的离散编码索引。
  • bandwidth (float, 可选) — 目标带宽,单位为 kbps。必须是 config.target_bandwidths 中的一个值。默认使用可用的最高带宽。
  • bandwidth (float, 可选) — 目标带宽,单位为 kbps。必须是 config.target_bandwidths 中的一个值。默认使用可用的最高带宽。

返回值

XcodecOutput 或元组 (audio_codes, audio_values)

  • 形状为 (batch_size, num_quantizers, codes_length) 的 audio_codes:量化后的离散编码。
  • 形状为 (batch_size, channels, num_samples) 的 audio_values:根据编码重建的音频波形。

XcodecModel 的 forward 方法重写了 __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