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

Model ini dipublikasikan di HF papers pada 2024-08-30 dan disumbangkan ke Hugging Face Transformers pada 2025-08-15.

X-Codec

Ikhtisar

Model X-Codec diusulkan dalam Codec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Model oleh Zhen Ye, Peiwen Sun, Jiahe Lei, Hongzhan Lin, Xu Tan, Zheqi Dai, Qiuqiang Kong, Jianyi Chen, Jiahao Pan, Qifeng Liu, Yike Guo, Wei Xue.

Model X-Codec adalah codec audio neural yang mengintegrasikan informasi semantik dari model self-supervised (misalnya, HuBERT) bersama dengan informasi akustik tradisional. Hal ini memungkinkan:

  • Continuasi musik: Pemodelan semantik musik yang lebih baik menghasilkan continuasi yang lebih koheren.
  • Sintesis Teks-ke-Suara: X-Codec menangkap keselarasan semantik antara prompt teks dan audio yang dihasilkan.
  • Tokenisasi audio yang sadar semantik: X-Codec digunakan sebagai tokenizer audio dalam model YuE untuk menghasilkan lagu dari lirik.

Abstrak dari makalah tersebut menyatakan hal berikut:

Perkembangan terbaru dalam generasi audio telah didorong secara signifikan oleh kemampuan Large Language Models (LLM). Penelitian yang ada tentang audio LLM terutama berfokus pada peningkatan arsitektur dan skala model bahasa audio, serta pemanfaatan dataset yang lebih besar. Secara umum, codec akustik, seperti EnCodec, digunakan untuk tokenisasi audio. Namun, codec ini awalnya dirancang untuk kompresi audio, yang dapat menyebabkan kinerja yang kurang optimal dalam konteks audio LLM. Penelitian kami bertujuan untuk mengatasi kekurangan codec audio LLM saat ini, khususnya tantangan mereka dalam menjaga integritas semantik pada audio yang dihasilkan. Sebagai contoh, metode yang ada seperti VALL-E, yang mengondisikan generasi token akustik pada transkripsi teks, sering kali mengalami ketidakakuratan konten dan peningkatan word error rate (WER) akibat salah tafsir semantik dari token akustik, yang mengakibatkan lompatan kata dan kesalahan. Untuk mengatasi masalah ini, kami mengusulkan pendekatan yang sederhana namun efektif yang disebut X-Codec. X-Codec mengintegrasikan fitur semantik dari encoder semantik yang telah dilatih sebelumnya sebelum tahap Residual Vector Quantization (RVQ) dan memperkenalkan loss rekonstruksi semantik setelah RVQ. Dengan meningkatkan kemampuan semantik codec, X-Codec secara signifikan mengurangi WER dalam tugas sintesis ucapan dan memperluas manfaat ini ke aplikasi non-ucapan, termasuk generasi musik dan suara. Eksperimen kami dalam tugas text-to-speech, kelanjutan musik, dan text-to-sound menunjukkan bahwa integrasi informasi semantik secara substansial meningkatkan kinerja keseluruhan model bahasa dalam generasi audio.

Kartu model:

Model ini disumbangkan oleh Manal El Aidouni. Kode aslinya dapat ditemukan di sini dan checkpoint asli untuk lima model yang berbeda di sini.

Demo dapat ditemukan di halaman ini.

Contoh penggunaan

Berikut adalah contoh singkat tentang cara mengkodekan dan mendekodekan audio menggunakan model ini:

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

Untuk mendengarkan audio asli dan audio yang direkonstruksi, jalankan potongan kode di bawah ini, lalu buka file original.wav dan reconstruction.wav yang dihasilkan di pemutar musik Anda untuk membandingkannya.

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

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

Parameter

  • target_bandwidths (List[float], opsional, default [0.5, 1, 1.5, 2, 4]) — Rentang berbagai bandwidth (dalam kbps) yang dapat digunakan model untuk mengodekan audio.
  • sample_rate (int, opsional, default 16000) — Laju sampling yang digunakan untuk mendigitalisasi file audio, dinyatakan dalam hertz (Hz).
  • kernel_size (int, opsional, defaultnya 3) — Ukuran kernel konvolusi.
  • channel_ratios (List[float], opsional, default [1, 1]) — Faktor ekspansi untuk jumlah channel output di setiap blok semantik.
  • strides (List[int], opsional, default [1, 1]) — Strides untuk setiap blok semantic encoder.
  • block_dilations (List[int], opsional, default [1, 1]) — Faktor dilasi untuk unit residual dalam blok semantik.
  • unit_kernel_size (int, opsional, default 3) — Ukuran kernel di dalam setiap ResidualUnit pada blok semantik.
  • codebook_size (int, opsional, defaultnya 1024) — Jumlah codebook paralel yang digunakan oleh model.
  • codebook_dim (int, opsional) — Dimensi dari setiap vektor embedding codebook.
  • initializer_range (float, opsional, defaultnya 0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot.
  • acoustic_model_config (Union[Dict, DacConfig], opsional) — Instans dari konfigurasi untuk model akustik (DAC).
  • semantic_model_config (Union[Dict, HubertConfig, WavLMConfig], opsional) — Instans dari objek konfigurasi untuk model semantik (HuBERT).

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari XcodecModel. Kelas ini digunakan untuk membuat instans model Xcodec berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari Manel/X-Codec

Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.

Contoh:

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

kelas transformers.XcodecModel

< >

( config: XcodecConfig )

Parameter

  • config (XcodecConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya saja. Lihat metode from_pretrained() untuk memuat bobot model.

Model codec audio neural Xcodec.

Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)

Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.

decode

< >

( audio_codes: Tensorreturn_dict: bool | None = None )

Parameter

  • audio_codes (torch.LongTensor dengan bentuk (batch_size, num_quantizers, codes_length)) — Indeks kode diskrit yang dihitung menggunakan model.encode.
  • return_dict (bool, opsional) — Apakah akan mengembalikan ModelOutput

encode

< >

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

Parameter

  • input_values (torch.Tensor dengan bentuk (batch_size, channels, num_samples)) — Nilai float dari waveform audio input.
  • bandwidth (float, opsional) — Bandwidth target dalam (kbps) hanya mendukung nilai yang ada di config.target_bandwidths. Nilai default adalah bandwidth tertinggi yang tersedia 4.0 kbps.
  • return_dict (bool, opsional) — Apakah akan mengembalikan ModelOutput atau tidak.

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)

Parameter

  • input_values (torch.Tensor dengan bentuk (batch_size, channels, num_samples)) — Nilai float mentah dari gelombang audio input.
  • audio_codes (torch.LongTensor dengan bentuk (batch_size, num_quantizers, codes_length) — Indeks kode diskrit yang dihitung menggunakan model.encode.
  • bandwidth (float, opsional) — Bandwidth target dalam kbps. Harus salah satu dari config.target_bandwidths. Secara default menggunakan bandwidth tertinggi yang tersedia.
  • bandwidth (float, opsional) — Bandwidth target dalam kbps. Harus salah satu dari config.target_bandwidths. Secara default menggunakan bandwidth tertinggi yang tersedia.

Mengembalikan

XcodecOutput atau tuple (audio_codes, audio_values)

  • audio_codes dengan bentuk (batch_size, num_quantizers, codes_length): kode diskrit terkuantisasi.
  • audio_values dengan bentuk (batch_size, channels, num_samples): gelombang audio yang direkonstruksi berdasarkan kode.

Metode forward dari XcodecModel menimpa metode khusus __call__.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

Contoh:

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