Transformers documentation
VibeVoice Acoustic Tokenizer
Model ini dipublikasikan di HF papers pada 2025-08-26 dan disumbangkan ke Hugging Face Transformers pada 2026-02-06.
VibeVoice Acoustic Tokenizer
Ikhtisar
VibeVoice adalah kerangka kerja baru untuk mensintesis ucapan berdurasi panjang dengan fidelitas tinggi yang melibatkan beberapa pembicara, dengan menggunakan pendekatan next-token diffusion di dalam struktur Large Language Model (LLM). Kerangka kerja ini dirancang untuk menangkap “vibe” percakapan yang autentik, dan sangat cocok untuk menghasilkan konten audio seperti podcast dan buku audio dengan banyak peserta.
Salah satu fitur utama VibeVoice adalah penggunaan dua tokenizer audio kontinu, satu untuk mengekstrak fitur akustik dan yang lain untuk fitur semantik.
Checkpoint model tersedia di microsoft/VibeVoice-AcousticTokenizer
Model ini disumbangkan oleh Eric Bezzam.
Arsitektur
Arsitekturnya adalah struktur encoder-decoder yang simetris cermin. Encoder menggunakan desain hierarkis dengan 7 tahap blok mirip ConvNeXt, yang memakai konvolusi kausal depth-wise 1D untuk pemrosesan streaming yang efisien. Enam lapisan downsampling mencapai tingkat downsampling kumulatif 3200X dari input 24kHz, menghasilkan 7,5 token/frame per detik. Setiap komponen encoder/decoder memiliki sekitar 340M parameter, sehingga totalnya sekitar 680M parameter. Tujuan pelatihan mengikuti DAC, termasuk desain diskriminator dan loss-nya.
Acoustic Tokenizer mengadopsi prinsip dari Variational Autoencoder (VAE). Encoder memetakan audio input ke parameter dari distribusi laten, yaitu mean. Bersama dengan standar deviasi yang tetap, vektor laten kemudian disampelkan menggunakan reparameterization trick. Silakan merujuk ke laporan teknis untuk detail lebih lanjut.
Penggunaan
Berikut adalah contoh penggunaan untuk mengodekan dan mendekodekan audio:
import torch
from scipy.io import wavfile
from transformers import AutoFeatureExtractor, VibeVoiceAcousticTokenizerModel
from transformers.audio_utils import load_audio_librosa
model_id = "microsoft/VibeVoice-AcousticTokenizer"
# load model
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)
model = VibeVoiceAcousticTokenizerModel.from_pretrained(model_id, device_map="auto")
print("Model loaded on device:", model.device)
print("Model dtype:", model.dtype)
# load audio
audio = load_audio_librosa(
"https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
sampling_rate=feature_extractor.sampling_rate,
)
# preprocess audio
inputs = feature_extractor(
audio,
sampling_rate=feature_extractor.sampling_rate,
pad_to_multiple_of=3200,
).to(model.device, model.dtype)
print("Input audio shape:", inputs.input_values.shape)
# Input audio shape: torch.Size([1, 1, 224000])
with torch.no_grad():
# set VAE sampling to False for deterministic output
encoded_outputs = model.encode(inputs.input_values, sample=False)
print("Latent shape:", encoded_outputs.latents.shape)
# Latent shape: torch.Size([1, 70, 64])
decoded_outputs = model.decode(**encoded_outputs)
print("Reconstructed audio shape:", decoded_outputs.audio.shape)
# Reconstructed audio shape: torch.Size([1, 1, 224000])
# Save audio
output_fp = "vibevoice_acoustic_tokenizer_reconstructed.wav"
wavfile.write(output_fp, feature_extractor.sampling_rate, decoded_outputs.audio.squeeze().float().cpu().numpy())
print(f"Reconstructed audio saved to : {output_fp}")Streaming
Untuk streaming ASR atau TTS, di mana status cache perlu dilacak, parameter use_cache dapat digunakan saat meng-encode atau meng-decode audio:
import torch
from scipy.io import wavfile
from transformers import AutoFeatureExtractor, VibeVoiceAcousticTokenizerModel
from transformers.audio_utils import load_audio_librosa
model_id = "microsoft/VibeVoice-AcousticTokenizer"
# load model
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)
model = VibeVoiceAcousticTokenizerModel.from_pretrained(model_id, device_map="auto")
print("Model loaded on device:", model.device)
print("Model dtype:", model.dtype)
# load audio
audio = load_audio_librosa(
"https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
sampling_rate=feature_extractor.sampling_rate,
)
# preprocess audio
inputs = feature_extractor(
audio,
sampling_rate=feature_extractor.sampling_rate,
pad_to_multiple_of=3200,
).to(model.device, model.dtype)
print("Input audio shape:", inputs.input_values.shape)
# Input audio shape: torch.Size([1, 1, 224000])
# cache will be initialized after a first pass
encoder_cache = None
decoder_cache = None
with torch.no_grad():
# set VAE sampling to False for deterministic output
encoded_outputs = model.encode(inputs.input_values, sample=False, padding_cache=encoder_cache, use_cache=True)
print("Latent shape:", encoded_outputs.latents.shape)
# Latent shape: torch.Size([1, 70, 64])
decoded_outputs = model.decode(encoded_outputs.latents, padding_cache=decoder_cache, use_cache=True)
print("Reconstructed audio shape:", decoded_outputs.audio.shape)
# Reconstructed audio shape: torch.Size([1, 1, 224000])
# `padding_cache` can be extracted from the outputs for subsequent passes
encoder_cache = encoded_outputs.padding_cache
print("Number of cached encoder layers:", len(encoder_cache.per_layer_in_channels))
# Number of cached encoder layers: 34
decoder_cache = decoded_outputs.padding_cache
print("Number of cached decoder layers:", len(decoder_cache.per_layer_in_channels))
# Number of cached decoder layers: 34
# Save audio
output_fp = "vibevoice_acoustic_tokenizer_reconstructed.wav"
wavfile.write(output_fp, feature_extractor.sampling_rate, decoded_outputs.audio.squeeze().float().cpu().numpy())
print(f"Reconstructed audio saved to : {output_fp}")VibeVoiceAcousticTokenizerConfig
kelas transformers.VibeVoiceAcousticTokenizerConfig
< source >( 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 = Nonechannels: int = 1hidden_size: int = 64kernel_size: int = 7rms_norm_eps: float = 1e-05layer_scale_init_value: float = 1e-06initializer_range: float = 0.01num_filters: int = 32downsampling_ratios: list[int] | tuple[int, ...] = (2, 2, 4, 5, 5, 8)depths: list[int] | tuple[int, ...] = (3, 3, 3, 3, 3, 3, 8)hidden_act: str = 'gelu'ffn_expansion: int = 4vae_std: float = 0.625 )
Parameter
- channels (
int, opsional, default 1) — Jumlah channel input. - hidden_size (
int, opsional, default 64) — Dimensi dari representasi laten. - kernel_size (
int, opsional, default 7) — Ukuran kernel untuk lapisan konvolusional. - rms_norm_eps (
float, opsional, defaultnya1e-05) — Epsilon yang digunakan oleh lapisan normalisasi rms. - layer_scale_init_value (
float, opsional, default1e-06) — Skala yang digunakan pada lapisan self-attention. 0.1 untuk base, 1e-6 untuk large. Setel 0 untuk menonaktifkan layer scale. - initializer_range (
float, opsional, defaultnya0.01) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - num_filters (
int, opsional, default 32) — Jumlah filter pada lapisan konvolusional awal, dan digandakan setelah setiap downsampling. - downsampling_ratios (
List[int], opsional, default[2, 2, 4, 5, 5, 8]) — Rasio downsampling untuk setiap layer. - depths (
List[int], opsional, default[3, 3, 3, 3, 3, 3, 8]) — Jumlah blok ConvNeXt di setiap tahap. - hidden_act (
str, opsional, defaultnyagelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - ffn_expansion (
int, opsional, default 4) — Faktor ekspansi untuk jaringan feed-forward. - vae_std (
float, opsional, default 0.625) — Standar deviasi dari distribusi Gaussian yang digunakan untuk mengambil skala noise per sampel ketika noise ditambahkan ke latents encoder (sample=True).
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari VibeVoiceAcousticTokenizerModel. Kelas ini digunakan untuk membuat model Vibevoice Acoustic Tokenizer berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari microsoft/VibeVoice-1.5B
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> from transformers import VibeVoiceAcousticTokenizerModel, VibeVoiceAcousticTokenizerConfig
>>> # Initializing a VibeVoice Acoustic Tokenizer configuration
>>> configuration = VibeVoiceAcousticTokenizerConfig()
>>> # Initializing a model (with random weights)
>>> model = VibeVoiceAcousticTokenizerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVibeVoiceAcousticTokenizerEncoderConfig
kelas transformers.VibeVoiceAcousticTokenizerEncoderConfig
< source >( 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 = Nonechannels: int = 1hidden_size: int = 64kernel_size: int = 7rms_norm_eps: float = 1e-05layer_scale_init_value: float = 1e-06initializer_range: float = 0.01num_filters: int = 32downsampling_ratios: list[int] | tuple[int, ...] = (2, 2, 4, 5, 5, 8)depths: list[int] | tuple[int, ...] = (3, 3, 3, 3, 3, 3, 8)hidden_act: str = 'gelu'ffn_expansion: int = 4vae_std: float = 0.625 )
Parameter
- channels (
int, opsional, default 1) — Jumlah channel input. - hidden_size (
int, opsional, default 64) — Dimensi dari representasi laten. - kernel_size (
int, opsional, default 7) — Ukuran kernel untuk lapisan konvolusional. - rms_norm_eps (
float, opsional, defaultnya1e-05) — Epsilon yang digunakan oleh lapisan normalisasi rms. - layer_scale_init_value (
float, opsional, default1e-06) — Skala yang digunakan pada lapisan self-attention. 0.1 untuk base, 1e-6 untuk large. Setel 0 untuk menonaktifkan layer scale. - initializer_range (
float, opsional, defaultnya0.01) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - num_filters (
int, opsional, default 32) — Jumlah filter pada lapisan konvolusional awal, dan digandakan setelah setiap downsampling. - downsampling_ratios (
List[int], opsional, default[2, 2, 4, 5, 5, 8]) — Rasio downsampling untuk setiap layer. - depths (
List[int], opsional, default[3, 3, 3, 3, 3, 3, 8]) — Jumlah blok ConvNeXt di setiap tahap. - hidden_act (
str, opsional, defaultnyagelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - ffn_expansion (
int, opsional, default 4) — Faktor ekspansi untuk jaringan feed-forward. - vae_std (
float, opsional, default 0.625) — Standar deviasi dari distribusi Gaussian yang digunakan untuk mengambil skala noise per sampel ketika noise ditambahkan ke latents encoder (sample=True).
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari VibeVoiceAcousticTokenizerModel. Kelas ini digunakan untuk menginstansiasi model Vibevoice Acoustic Tokenizer sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Menginstansiasi konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari microsoft/VibeVoice-1.5B
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
VibeVoiceAcousticTokenizerDecoderConfig
kelas transformers.VibeVoiceAcousticTokenizerDecoderConfig
< source >( 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 = Nonechannels: int = 1hidden_size: int = 64kernel_size: int = 7rms_norm_eps: float = 1e-05layer_scale_init_value: float = 1e-06initializer_range: float = 0.01num_filters: int = 32downsampling_ratios: list[int] | tuple[int, ...] = (2, 2, 4, 5, 5, 8)depths: list[int] | tuple[int, ...] = (3, 3, 3, 3, 3, 3, 8)hidden_act: str = 'gelu'ffn_expansion: int = 4vae_std: float = 0.625 )
Parameter
- channels (
int, opsional, default 1) — Jumlah channel input. - hidden_size (
int, opsional, default 64) — Dimensi dari representasi laten. - kernel_size (
int, opsional, default 7) — Ukuran kernel untuk lapisan konvolusional. - rms_norm_eps (
float, opsional, defaultnya1e-05) — Epsilon yang digunakan oleh lapisan normalisasi rms. - layer_scale_init_value (
float, opsional, default1e-06) — Skala yang digunakan pada lapisan self-attention. 0.1 untuk base, 1e-6 untuk large. Setel 0 untuk menonaktifkan layer scale. - initializer_range (
float, opsional, defaultnya0.01) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - num_filters (
int, opsional, default 32) — Jumlah filter pada lapisan konvolusional awal, dan digandakan setelah setiap downsampling. - downsampling_ratios (
List[int], opsional, default[2, 2, 4, 5, 5, 8]) — Rasio downsampling untuk setiap layer. - depths (
List[int], opsional, default[3, 3, 3, 3, 3, 3, 8]) — Jumlah blok ConvNeXt di setiap tahap. - hidden_act (
str, opsional, defaultnyagelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - ffn_expansion (
int, opsional, default 4) — Faktor ekspansi untuk jaringan feed-forward. - vae_std (
float, opsional, default 0.625) — Standar deviasi dari distribusi Gaussian yang digunakan untuk mengambil skala noise per sampel ketika noise ditambahkan ke latents encoder (sample=True).
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari VibeVoiceAcousticTokenizerModel. Kelas ini digunakan untuk menginstansiasi model Vibevoice Acoustic Tokenizer sesuai dengan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Menginstansiasi konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari microsoft/VibeVoice-1.5B
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
VibeVoiceAcousticTokenizerFeatureExtractor
kelas transformers.VibeVoiceAcousticTokenizerFeatureExtractor
< source >( feature_size = 1sampling_rate = 24000padding_value = 0.0normalize_audio = Truetarget_dB_FS = -25eps = 1e-06pad_to_multiple_of = 3200**kwargs )
Parameter
- feature_size (
int, opsional, default 1) — Jumlah channel. - sampling_rate (
int, opsional, default 24000) — Laju sampling di mana gelombang audio harus didigitalisasi, dinyatakan dalam hertz (Hz). - padding_value (
float, opsional, default 0.0) — Nilai yang digunakan untuk padding. - normalize_audio (
bool, opsional, defaultTrue) — Apakah akan menormalisasi audio ke dB FS target. - target_dB_FS (
float, opsional, default -25) — Target dB FS untuk normalisasi. - eps (
float, opsional, default 1e-06) — Nilai kecil untuk menghindari pembagian dengan nol saat normalisasi. - pad_to_multiple_of (
int, opsional, default 3200) — Pad audio menjadi kelipatan dari nilai ini, yang harus sesuai dengan hop length dari acoustic tokenizer, yaitu faktor downsampling dari encoder-nya.
Membangun feature extractor VibeVoiceAcousticTokenizer.
__call__
< source >( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]sampling_rate: int | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy | None = Truepad_to_multiple_of: int | None = Nonemax_length: int | None = Nonereturn_attention_mask: bool | None = Truereturn_tensors: str | None = 'pt'**kwargs )
Parameter
- audio (
np.ndarray,torch.Tensor,list[np.ndarray],list[torch.Tensor]— Urutan atau batch dari urutan yang akan diproses. Setiap urutan dapat berupa array numpy, tensor torch, daftar array numpy, atau daftar tensor torch. - sampling_rate (
int, opsional) — Laju sampling di mana inputaudiodisampelkan. Sangat disarankan untuk meneruskansampling_ratepada panggilan forward untuk mencegah kesalahan yang tidak terdeteksi. - padding (
bool,stratau PaddingStrategy, opsional, defaultnyaTrue) — Pilih strategi untuk melakukan padding pada urutan yang dikembalikan (sesuai sisi padding dan indeks padding model) di antara:Trueatau'longest': Pad hingga urutan terpanjang dalam batch (atau tanpa padding jika hanya satu urutan yang diberikan).'max_length': Pad hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan.Falseatau'do_not_pad'(default): Tidak ada padding (yaitu, dapat menghasilkan batch dengan urutan yang panjangnya berbeda).
- pad_to_multiple_of (
int, opsional) — Jika diset, akan melakukan padding pada urutan menjadi kelipatan dari nilai yang diberikan. Secara default menggunakanself.pad_to_multiple_ofjika tidak disediakan.
VibeVoiceAcousticTokenizerModel
kelas transformers.VibeVoiceAcousticTokenizerModel
< source >( config: VibeVoiceAcousticTokenizerConfig )
Parameter
- config (VibeVoiceAcousticTokenizerConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
VibeVoice acoustic tokenizer dengan encoder dan decoder untuk token akustik kontinu.
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.
encode
< source >( input_valuespadding_cache = Noneuse_cache = Nonesample = True )
Parameter
- input_values (
torch.FloatTensordengan bentuk(batch_size, channels, sequence_length)) — Gelombang audio masukan yang akan dikodekan menjadi representasi laten. - padding_cache (
VibeVoiceAcousticTokenizerConv1dPaddingCache, opsional) — Objek cache untuk mode streaming guna mempertahankan status konvolusi antar lapisan. - use_cache (
bool, opsional) — Apakah akan menggunakan cache untuk state konvolusi. - sample (
bool, opsional) — Apakah akan menambahkan noise Gaussian ke latents (σ-VAE: skala noise diambil per item batch dari N(0,config.vae_std)). Jika False, output encoder dikembalikan apa adanya.
decode
< source >( latentspadding_cache = Noneuse_cache = False )
Parameter
- latents (
torch.FloatTensordengan bentuk(batch_size, channels, sequence_length)) — Representasi laten input yang akan didekode kembali menjadi audio. - padding_cache (
VibeVoiceAcousticTokenizerConv1dPaddingCache, opsional) — Objek cache untuk mode streaming guna mempertahankan status konvolusi antar lapisan. - use_cache (
bool, opsional) — Apakah akan menggunakan cache untuk state konvolusi.
forward
< source >( input_valuespadding_cache = Noneuse_cache = Falsesample = True**kwargs )
Parameter
- input_values (
torch.FloatTensordengan bentuk(batch_size, channels, sequence_length)) — Gelombang audio masukan yang akan dikodekan menjadi representasi laten. - padding_cache (
VibeVoiceAcousticTokenizerConv1dPaddingCache, opsional) — Objek cache untuk mode streaming guna mempertahankan status konvolusi antar lapisan. Perhatikan bahwa ini hanya digunakan oleh decoder. - use_cache (
bool, opsional) — Apakah akan menggunakan cache untuk state konvolusi. - sample (
bool, opsional) — Apakah akan menambahkan noise Gaussian ke latents (σ-VAE: skala noise diambil per item batch dari N(0,config.vae_std)). Jika False, output encoder dikembalikan apa adanya.
Metode forward dari VibeVoiceAcousticTokenizerModel menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
VibeVoiceAcousticTokenizerEncoderModel
kelas transformers.VibeVoiceAcousticTokenizerEncoderModel
< source >( config: VibeVoiceAcousticTokenizerEncoderConfig )
VibeVoiceAcousticTokenizerDecoderModel
kelas transformers.VibeVoiceAcousticTokenizerDecoderModel
< source >( config: VibeVoiceAcousticTokenizerDecoderConfig )