Transformers documentation

VibeVoice 声学分词器

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2025-08-26 在 HF papers 上发布,并于 2026-02-06 贡献至 Hugging Face Transformers。

VibeVoice 声学分词器

概述

VibeVoice 是一个新颖的框架,通过在大型语言模型(LLM)结构中采用下一 token 扩散方法,来合成高保真、长篇幅的多说话人语音。它旨在捕捉真实对话的“氛围”,尤其适合生成播客和多参与者有声读物等音频内容。

VibeVoice 的一个关键特性是使用了两个连续的音频分词器,一个用于提取声学特征,另一个用于提取语义特征。

模型检查点可在 microsoft/VibeVoice-AcousticTokenizer 获取

该模型由 Eric Bezzam 贡献。

架构

该架构采用镜像对称的编码器-解码器结构。编码器采用分层设计,包含 7 个类似 ConvNeXt 的块,这些块使用一维深度可分离因果卷积以实现高效的流式处理。六个下采样层实现了从 24kHz 输入到 3200 倍累计下采样率,从而产生每秒 7.5 个 token/帧。每个编码器/解码器组件约有 3.4 亿个参数,总计约 6.8 亿个参数。训练目标遵循 DAC,包括其判别器和损失函数设计。

Acoustic Tokenizer 采用了变分自编码器(VAE)的原理。编码器将输入音频映射到潜在分布的参数,即均值。结合固定的标准差,随后使用重参数化技巧采样得到潜在向量。有关更多细节,请参阅技术报告。

用法

以下是用于编码和解码音频的示例用法:

import torch
from scipy.io import wavfile

from transformers import AutoFeatureExtractor, VibeVoiceAcousticTokenizerModel
from transformers.audio_utils import load_audio


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(
    "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}")

流式

对于流式 ASR 或 TTS,由于需要跟踪缓存状态,在对音频进行编码或解码时可以使用 use_cache 参数:

import torch
from scipy.io import wavfile

from transformers import AutoFeatureExtractor, VibeVoiceAcousticTokenizerModel
from transformers.audio_utils import load_audio


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

class transformers.VibeVoiceAcousticTokenizerConfig

< >

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

参数

  • channels (int,可选,默认为 1) — 输入通道数。
  • hidden_size (int,可选,默认为 64) — 潜在表示的维度。
  • kernel_size (int,可选,默认为 7) — 卷积层的核大小。
  • rms_norm_eps (float,可选,默认为 1e-05) — RMS 归一化层使用的 epsilon 值。
  • layer_scale_init_value (float, 可选, 默认值为 1e-06) — 用于自注意力层的缩放值。基础模型使用 0.1,大型模型使用 1e-6。设置为 0 可禁用 layer scale。
  • initializer_range (float,可选,默认为 0.01) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • num_filters (int,可选,默认为 32) — 初始卷积层的滤波器数量,每次下采样后数量翻倍。
  • downsampling_ratios (List[int],可选,默认为 [2, 2, 4, 5, 5, 8]) — 各层的下采样比率。
  • depths(List[int],可选,默认为 [3, 3, 3, 3, 3, 3, 8])— 每个阶段的 ConvNeXt 块数量。
  • hidden_act (str,可选,默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • ffn_expansion (int,可选,默认值为 4) — 前馈网络的扩展因子。
  • vae_std (float,可选,默认值为 0.625) — 当向编码器潜在表示添加噪声(sample=True)时,用于绘制每个样本噪声尺度的高斯分布的标准差。

这是用于存储 VibeVoiceAcousticTokenizerModel 配置的类。它根据指定的参数实例化 Vibevoice Acoustic Tokenizer 模型,并定义模型架构。使用默认值实例化配置将得到与 microsoft/VibeVoice-1.5B 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

示例:

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

VibeVoiceAcousticTokenizerEncoderConfig

类 transformers.VibeVoiceAcousticTokenizerEncoderConfig

< >

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

参数

  • channels (int,可选,默认为 1) — 输入通道数。
  • hidden_size (int,可选,默认为 64) — 潜在表示的维度。
  • kernel_size (int,可选,默认为 7) — 卷积层的核大小。
  • rms_norm_eps (float,可选,默认为 1e-05) — RMS 归一化层使用的 epsilon 值。
  • layer_scale_init_value (float, 可选, 默认值为 1e-06) — 用于自注意力层的缩放值。基础模型使用 0.1,大型模型使用 1e-6。设置为 0 可禁用 layer scale。
  • initializer_range (float,可选,默认为 0.01) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • num_filters (int,可选,默认为 32) — 初始卷积层的滤波器数量,每次下采样后数量翻倍。
  • downsampling_ratios (List[int],可选,默认为 [2, 2, 4, 5, 5, 8]) — 各层的下采样比率。
  • depths(List[int],可选,默认为 [3, 3, 3, 3, 3, 3, 8])— 每个阶段的 ConvNeXt 块数量。
  • hidden_act (str,可选,默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • ffn_expansion (int,可选,默认值为 4) — 前馈网络的扩展因子。
  • vae_std (float,可选,默认值为 0.625) — 当向编码器潜在表示添加噪声(sample=True)时,用于绘制每个样本噪声尺度的高斯分布的标准差。

这是用于存储 VibeVoiceAcousticTokenizerModel 配置的类。它根据指定的参数实例化 Vibevoice Acoustic Tokenizer 模型,并定义模型架构。使用默认值实例化配置将得到与 microsoft/VibeVoice-1.5B 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

VibeVoiceAcousticTokenizerDecoderConfig

类 transformers.VibeVoiceAcousticTokenizerDecoderConfig

< >

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

参数

  • channels (int,可选,默认为 1) — 输入通道数。
  • hidden_size (int,可选,默认为 64) — 潜在表示的维度。
  • kernel_size (int,可选,默认为 7) — 卷积层的核大小。
  • rms_norm_eps (float,可选,默认为 1e-05) — RMS 归一化层使用的 epsilon 值。
  • layer_scale_init_value (float, 可选, 默认值为 1e-06) — 用于自注意力层的缩放值。基础模型使用 0.1,大型模型使用 1e-6。设置为 0 可禁用 layer scale。
  • initializer_range (float,可选,默认为 0.01) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • num_filters (int,可选,默认为 32) — 初始卷积层的滤波器数量,每次下采样后数量翻倍。
  • downsampling_ratios (List[int],可选,默认为 [2, 2, 4, 5, 5, 8]) — 各层的下采样比率。
  • depths(List[int],可选,默认为 [3, 3, 3, 3, 3, 3, 8])— 每个阶段的 ConvNeXt 块数量。
  • hidden_act (str,可选,默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • ffn_expansion (int,可选,默认值为 4) — 前馈网络的扩展因子。
  • vae_std (float,可选,默认值为 0.625) — 当向编码器潜在表示添加噪声(sample=True)时,用于绘制每个样本噪声尺度的高斯分布的标准差。

这是用于存储 VibeVoiceAcousticTokenizerModel 配置的类。它根据指定的参数实例化 Vibevoice Acoustic Tokenizer 模型,并定义模型架构。使用默认值实例化配置将得到与 microsoft/VibeVoice-1.5B 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

VibeVoiceAcousticTokenizerFeatureExtractor

class transformers.VibeVoiceAcousticTokenizerFeatureExtractor

< >

( feature_size = 1sampling_rate = 24000padding_value = 0.0normalize_audio = Truetarget_dB_FS = -25eps = 1e-06pad_to_multiple_of = 3200**kwargs )

参数

  • feature_size (int,可选,默认为 1) — 通道数。
  • sampling_rate (int, 可选,默认为 24000) — 用于对音频波形进行数字化的采样率,以赫兹(Hz)为单位。
  • padding_value (float,可选,默认为 0.0) — 用于填充的值。
  • normalize_audio (bool,可选,默认为 True) — 是否将音频归一化到目标 dB FS。
  • target_dB_FS (float,可选,默认为 -25) — 用于归一化的目标 dB FS。
  • eps (float, 可选,默认为 1e-06) — 用于在归一化时避免除以零的小数值。
  • pad_to_multiple_of (int,可选,默认值为 3200) — 将音频填充为该值的整数倍,该值应对应声学分词器的跳跃长度(hop length),即其编码器的下采样因子。

构建 VibeVoiceAcousticTokenizer 特征提取器。

__call__

< >

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

参数

  • audio (np.ndarray, torch.Tensor, list[np.ndarray], list[torch.Tensor] — 要处理的序列或序列批次。每个序列可以是 numpy 数组、torch 张量、numpy 数组列表或 torch 张量列表。
  • sampling_rate (int, 可选) — audio 输入被采样时的采样率。强烈建议在 forward 调用时传入 sampling_rate,以避免静默错误。
  • padding (bool, str 或 PaddingStrategy, 可选, 默认为 True) — 选择一种策略,根据模型的填充侧和填充索引对返回的序列进行填充,可选策略如下:
    • True 或 'longest':填充至批次中最长的序列(如果仅提供单个序列,则不进行填充)。
    • 'max_length':填充至由参数 max_length 指定的最大长度;若未提供该参数,则填充至模型可接受的最大输入长度。
    • False 或 'do_not_pad'(默认值):不进行填充(即可以输出包含不同长度序列的批次)。
  • pad_to_multiple_of (int, 可选) — 如果设置,则将序列填充为所提供值的倍数。如果未提供,则默认为 self.pad_to_multiple_of。

VibeVoiceAcousticTokenizerModel

class transformers.VibeVoiceAcousticTokenizerModel

< >

( config: VibeVoiceAcousticTokenizerConfig )

参数

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

VibeVoice 声学分词器,包含用于连续声学 token 的编码器和解码器。

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

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

encode

< >

( input_valuespadding_cache = Noneuse_cache = Nonesample = True )

参数

  • input_values(形状为 (batch_size, channels, sequence_length) 的 torch.Tensor)— 要编码为潜在表示的输入音频波形。
  • padding_cache (VibeVoiceAcousticTokenizerConv1dPaddingCache,可选) — 用于流式模式的缓存对象,用于在层间保持卷积状态。
  • use_cache (bool,可选) — 是否使用缓存来存储卷积状态。
  • sample (bool, 可选) — 是否向潜在变量添加高斯噪声(σ-VAE:噪声尺度从 N(0, config.vae_std) 中按批次项抽取)。如果为 False,则直接返回编码器输出。

decode

< >

( latentspadding_cache = Noneuse_cache = False )

参数

  • latents(形状为 (batch_size, channels, sequence_length) 的 torch.Tensor)— 要解码回音频的输入潜在表示。
  • padding_cache (VibeVoiceAcousticTokenizerConv1dPaddingCache,可选) — 用于流式模式的缓存对象,用于在层间保持卷积状态。
  • use_cache (bool,可选) — 是否使用缓存来存储卷积状态。

forward

< >

( input_valuespadding_cache = Noneuse_cache = Falsesample = True**kwargs )

参数

  • input_values(形状为 (batch_size, channels, sequence_length) 的 torch.Tensor)— 要编码为潜在表示的输入音频波形。
  • padding_cache (VibeVoiceAcousticTokenizerConv1dPaddingCache,可选) — 用于流式模式的缓存对象,用于在层间保持卷积状态。注意仅由解码器使用。
  • use_cache (bool,可选) — 是否使用缓存来存储卷积状态。
  • sample (bool, 可选) — 是否向潜在变量添加高斯噪声(σ-VAE:噪声尺度从 N(0, config.vae_std) 中按批次项抽取)。如果为 False,则直接返回编码器输出。

VibeVoiceAcousticTokenizerModel 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

VibeVoiceAcousticTokenizerEncoderModel

class transformers.VibeVoiceAcousticTokenizerEncoderModel

< >

( config: VibeVoiceAcousticTokenizerEncoderConfig )

forward

< >

( hidden_statespadding_cache = Noneuse_cache = False**kwargs )

VibeVoiceAcousticTokenizerDecoderModel

class transformers.VibeVoiceAcousticTokenizerDecoderModel

< >

( config: VibeVoiceAcousticTokenizerDecoderConfig )

forward

< >

( hidden_statespadding_cache = Noneuse_cache = False**kwargs )

Update on GitHub