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

Bu model 2024-08-30 tarihinde HF papers'ta yayımlandı ve 2025-08-15 tarihinde Hugging Face Transformers'a katkıda bulunuldu.

X-Codec

Genel Bakış

X-Codec modeli, Zhen Ye, Peiwen Sun, Jiahe Lei, Hongzhan Lin, Xu Tan, Zheqi Dai, Qiuqiang Kong, Jianyi Chen, Jiahao Pan, Qifeng Liu, Yike Guo ve Wei Xue tarafından Codec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Model makalesinde önerilmiştir.

X-Codec modeli, kendinden denetimli modellerden (ör. HuBERT) gelen semantik bilgileri geleneksel akustik bilgilerle birleştiren sinirsel bir ses kodlayıcısıdır. Bu sayede:

  • Müzik devamı: Müziksel anlambilimin daha iyi modellenmesi, daha tutarlı devamlar sağlar.
  • Ses Sentezi: X-Codec, metin istemleri ile üretilen ses arasındaki anlamsal uyumu yakalar.
  • Anlama duyarlı ses tokenizasyonu: X-Codec, YuE sözlerden şarkı üretim modelinde ses tokenizatörü olarak kullanılır.

Makalenin özeti şunları belirtmektedir:

Ses üretimi alanındaki son gelişmeler, Büyük Dil Modellerinin (LLM) yetenekleri tarafından önemli ölçüde desteklenmiştir. Ses LLM'leri üzerine yapılan mevcut araştırmalar, ağırlıklı olarak ses dil modellerinin mimarisini ve ölçeğini iyileştirmeye, daha büyük veri kümelerinden yararlanmaya odaklanmıştır ve genel olarak EnCodec gibi akustik codec'ler ses tokenizasyonu için kullanılmaktadır. Ancak bu codec'ler başlangıçta ses sıkıştırma için tasarlandığından, ses LLM bağlamında suboptimal performansa yol açabilir. Araştırmamız, mevcut ses LLM codec'lerinin eksikliklerini, özellikle üretilen seslerde semantik bütünlüğü korumadaki zorluklarını ele almayı hedeflemektedir. Örneğin, akustik token üretimini metin transkripsiyonlarına koşullandıran VALL-E gibi mevcut yöntemler, akustik tokenlerin semantik yanlış yorumlanması nedeniyle içerik doğruluğu sorunları ve yüksek kelime hata oranlarına (WER) maruz kalır; bu durum kelime atlama ve hatalara neden olur. Bu sorunları aşmak için X-Codec adlı basit ama etkili bir yaklaşım öneriyoruz. X-Codec, Residual Vector Quantization (RVQ) aşamasından önce önceden eğitilmiş bir semantik kodlayıcıdan semantik özellikleri dahil eder ve RVQ'den sonra bir semantik yeniden yapılandırma kaybı (loss) tanıtır. Codec'in semantik yeteneğini artırarak X-Codec, konuşma sentez görevlerinde WER'i önemli ölçüde azaltır ve bu faydaları müzik ve ses üretimi gibi konuşma dışı uygulamalara da taşır. Metinden konuşmaya, müzik devamı ve metinden sese görevlerindeki deneyimlerimiz, semantik bilginin entegrasyonunun ses üretiminde dil modellerinin genel performansını önemli ölçüde iyileştirdiğini göstermektedir.

Model kartları:

Bu model Manal El Aidouni tarafından katkıda bulunmuştur. Orijinal kod burada ve beş farklı modelin orijinal denetim noktaları burada bulunabilir.

Demolar bu sayfada bulunabilir.

Kullanım örneği

Bu modelle bir ses dosyasını kodlama ve çözmeye dair hızlı bir örnek:

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

Orijinal ve yeniden oluşturulan sesi dinlemek için aşağıdaki kod parçasını çalıştırın ve ardından karşılaştırma yapmak için oluşturulan original.wav ve reconstruction.wav dosyalarını müzik çalarınızda açın.

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

sınıf 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 )

Parametreler

  • target_bandwidths (List[float], isteğe bağlı, varsayılan [0.5, 1, 1.5, 2, 4]) — Modelin ses kodlayabileceği farklı bant genişliklerinin (kbps cinsinden) aralığı.
  • sample_rate (int, isteğe bağlı, varsayılan 16000) — Ses dosyalarının dijitalleştirilmesi gereken örnekleme hızı, hertz (Hz) cinsinden ifade edilir.
  • kernel_size (int, isteğe bağlı, varsayılan 3) — Konvolüsyon çekirdeğinin boyutu.
  • channel_ratios (List[float], isteğe bağlı, varsayılan [1, 1]) — Her anlamsal blokta çıktı kanal sayısının genişleme çarpanları.
  • strides (List[int], isteğe bağlı, varsayılan [1, 1]) — Her anlamsal kodlayıcı bloğu için adımlar.
  • block_dilations (List[int], isteğe bağlı, varsayılan [1, 1]) — Anlamsal bloklardaki artımsal birimler için genişleme çarpanları.
  • unit_kernel_size (int, isteğe bağlı, varsayılan 3) — Anlamsal bloklardaki her ResidualUnit içindeki çekirdek boyutu.
  • codebook_size (int, isteğe bağlı, varsayılan 1024) — Modelin kullandığı paralel kod kitaplarının sayısı.
  • codebook_dim (int, isteğe bağlı) — Her codebook gömme vektörünün boyutu.
  • initializer_range (float, isteğe bağlı, varsayılan 0.02) — Tüm ağırlık matrislerini başlatmak için kullanılan truncated_normal_initializer'ın standart sapması.
  • acoustic_model_config (Union[Dict, DacConfig], isteğe bağlı) — Akustik (DAC) modelinin yapılandırma örneği.
  • semantic_model_config (Union[Dict, HubertConfig, WavLMConfig], isteğe bağlı) — Semantik (HuBERT) modelinin yapılandırma nesnesinin bir örneği.

Bu, bir XcodecModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Xcodec modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılan değerlerle bir yapılandırma örneği oluşturmak, Manel/X-Codec ile benzer bir yapılandırmaya yol açar.

Yapılandırma nesneleri PreTrainedConfig sınıfından devralır ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için PreTrainedConfig belgesini okuyun.

Örnek:

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

sınıf transformers.XcodecModel

< >

( config: XcodecConfig )

Parametreler

  • config (XcodecConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

Xcodec sinirsel ses kodlayıcı modeli.

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

decode

< >

( audio_codes: Tensorreturn_dict: bool | None = None )

Parametreler

  • audio_codes (torch.LongTensor, şekli (batch_size, num_quantizers, codes_length)) — model.encode kullanılarak hesaplanan ayrık kod dizinleri.
  • return_dict (bool, isteğe bağlı) — Bir ModelOutput döndürülecek mi

encode

< >

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

Parametreler

  • input_values (torch.Tensor, şekli (batch_size, channels, num_samples)) — Giriş ses dalgasının ondalık sayı değerleri.
  • bandwidth (float, isteğe bağlı) — (kbps) cinsinden hedef bant genişliği, yalnızca config.target_bandwidths içindeki değerleri destekler. Varsayılan olarak en yüksek kullanılabilir bant genişliği olan 4.0 kbps kullanılır.
  • return_dict (bool, isteğe bağlı) — Bir ModelOutput döndürülecek mi?

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)

Parametreler

  • input_values (torch.Tensor, şekli (batch_size, channels, num_samples)) — Girdi ses dalgasının ham ondalık sayı değerleri.
  • audio_codes (torch.LongTensor, şekli (batch_size, num_quantizers, codes_length) — model.encode kullanılarak hesaplanan ayrık kod dizinleri.
  • bandwidth (float, isteğe bağlı) — kbps cinsinden hedef bant genişliği. config.target_bandwidths içindeki değerlerden biri olmalıdır. Varsayılan olarak en yüksek kullanılabilir bant genişliği kullanılır.
  • bandwidth (float, isteğe bağlı) — kbps cinsinden hedef bant genişliği. config.target_bandwidths içindeki değerlerden biri olmalıdır. Varsayılan olarak en yüksek kullanılabilir bant genişliği kullanılır.

Dönüş değeri

XcodecOutput veya (audio_codes, audio_values) tuple'ı

  • audio_codes, şekli (batch_size, num_quantizers, codes_length): kuantize edilmiş ayrık kodlar.
  • audio_values, şekli (batch_size, channels, num_samples): kodlara göre yeniden oluşturulan ses dalgası.

XcodecModel forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

Örnek:

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