Transformers documentation
VibeVoice Acoustic Tokenizer
このモデルは2025年8月26日にHF papersで公開され、2026年2月6日にHugging Face Transformersに貢献されました。
VibeVoice Acoustic Tokenizer
概要
VibeVoiceは、Large Language Model (LLM) の構造内で next-token diffusion アプローチを採用することで、複数話者の高忠実度かつ長時間の音声合成を実現する新しいフレームワークです。本質的な会話の「vibe」を捉えることを目的として設計されており、ポッドキャストや複数参加者のオーディオブックなどの音声コンテンツの生成に特に適しています。
VibeVoiceの重要な機能の一つは、2つの連続オーディオトークナイザーを使用することです。1つは音響特徴の抽出に、もう1つは意味的特徴の抽出に用いられます。
モデルのチェックポイントは microsoft/VibeVoice-AcousticTokenizer で利用可能です。
このモデルはEric Bezzamによって提供されました。
アーキテクチャ
アーキテクチャは、鏡像対称なエンコーダ-デコーダ構造です。エンコーダは、効率的なストリーミング処理のために1次元の深さ方向因果畳み込みを使用する、ConvNeXt風のブロックからなる7段階の階層型設計を採用しています。6つのダウンサンプリング層により、24kHzの入力から累積3200倍のダウンサンプリング率を実現し、1秒あたり7.5トークン/フレームが得られます。エンコーダ/デコーダの各コンポーネントには約340Mのパラメータがあり、合計で約680Mのパラメータです。学習目標は、DACのそれ、すなわちそのディスクリミネータと損失関数の設計に従っています。
Acoustic Tokenizer は、Variational Autoencoder (VAE) の原理を採用しています。エンコーダーは、入力オーディオを潜在分布のパラメータ、すなわち平均値にマッピングします。固定された標準偏差とともに、再パラメータ化トリックを用いて潜在ベクトルがサンプリングされます。詳細については、技術レポートを参照してください。
使用方法
以下は、オーディオをエンコードおよびデコードするための使用例です。
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}")ストリーミング
キャッシュされた状態を追跡する必要があるストリーミングASRやTTSでは、音声のエンコードまたはデコード時にuse_cacheパラメータを使用できます。
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
class 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 )
パラメータ
- 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) — 自己アテンション層で使用するスケール値です。base モデルでは 0.1、large モデルでは 1e-6 を使用します。0 に設定すると、layer scale を無効にします。 - initializer_range (
float、任意、デフォルトは0.01) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - num_filters (
int、任意、デフォルトは 32)— 初期の畳み込み層のフィルタ数。ダウンサンプリングのたびに 2 倍になります。 - 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.configVibeVoiceAcousticTokenizerEncoderConfig
クラス 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 )
パラメータ
- 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) — 自己アテンション層で使用するスケール値です。base モデルでは 0.1、large モデルでは 1e-6 を使用します。0 に設定すると、layer scale を無効にします。 - initializer_range (
float、任意、デフォルトは0.01) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - num_filters (
int、任意、デフォルトは 32)— 初期の畳み込み層のフィルタ数。ダウンサンプリングのたびに 2 倍になります。 - 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
< 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 )
パラメータ
- 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) — 自己アテンション層で使用するスケール値です。base モデルでは 0.1、large モデルでは 1e-6 を使用します。0 に設定すると、layer scale を無効にします。 - initializer_range (
float、任意、デフォルトは0.01) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - num_filters (
int、任意、デフォルトは 32)— 初期の畳み込み層のフィルタ数。ダウンサンプリングのたびに 2 倍になります。 - 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
< source >( 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__
< 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 )
パラメータ
- 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
< source >( config: VibeVoiceAcousticTokenizerConfig )
パラメータ
- config (VibeVoiceAcousticTokenizerConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
エンコーダーとデコーダーを備えた、連続的な音響トークン用の VibeVoice 音響トークナイザー。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
encode
< source >( input_valuespadding_cache = Noneuse_cache = Nonesample = True )
パラメータ
- input_values (
torch.FloatTensor、shape(batch_size, channels, sequence_length)) — 潜在表現にエンコードされる入力音声波形。 - padding_cache (
VibeVoiceAcousticTokenizerConv1dPaddingCache、optional) — ストリーミングモードでレイヤー間で畳み込み状態を維持するためのキャッシュオブジェクト。 - use_cache (
bool、任意) — 畳み込み状態のキャッシュを使用するかどうか。 - sample (
bool, 省略可) — 潜変数にガウスノイズを追加するかどうかを指定します(σ-VAE: ノイズのスケールはバッチ内の各項目に対して N(0,config.vae_std) からサンプリングされます)。False の場合、エンコーダーの出力がそのまま返されます。
decode
< source >( latentspadding_cache = Noneuse_cache = False )
forward
< source >( input_valuespadding_cache = Noneuse_cache = Falsesample = True**kwargs )
パラメータ
- input_values (
torch.FloatTensor、shape(batch_size, channels, sequence_length)) — 潜在表現にエンコードされる入力音声波形。 - padding_cache (
VibeVoiceAcousticTokenizerConv1dPaddingCache、optional) — ストリーミングモードで、レイヤー間で畳み込みの状態を維持するためのキャッシュオブジェクト。デコーダーでのみ使用されることに注意してください。 - use_cache (
bool、任意) — 畳み込み状態のキャッシュを使用するかどうか。 - sample (
bool, 省略可) — 潜変数にガウスノイズを追加するかどうかを指定します(σ-VAE: ノイズのスケールはバッチ内の各項目に対して N(0,config.vae_std) からサンプリングされます)。False の場合、エンコーダーの出力がそのまま返されます。
VibeVoiceAcousticTokenizerModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
VibeVoiceAcousticTokenizerEncoderModel
クラス transformers.VibeVoiceAcousticTokenizerEncoderModel
< source >( config: VibeVoiceAcousticTokenizerEncoderConfig )
VibeVoiceAcousticTokenizerDecoderModel
class transformers.VibeVoiceAcousticTokenizerDecoderModel
< source >( config: VibeVoiceAcousticTokenizerDecoderConfig )