Transformers documentation
VibeVoice
このモデルは2025年8月26日にHF papersで公開され、2026年8月27日にHugging Face Transformersに貢献されました。
VibeVoice
概要
VibeVoiceは、Large Language Model (LLM) の構造内で next-token diffusion アプローチを採用することで、複数話者の高忠実度かつ長時間の音声合成を実現する新しいフレームワークです。本質的な会話の「vibe」を捉えることを目的として設計されており、ポッドキャストや複数参加者のオーディオブックなどの音声コンテンツの生成に特に適しています。
2つのモデルチェックポイントが以下の場所で利用可能です:
このモデルはEric Bezzamによって提供されました。
アーキテクチャ

VibeVoice フレームワークは、3 つの主要なコンポーネントを統合しています:
- 連続音声トークナイザ: 専用の音響トークナイザとセマンティックトークナイザ。音響トークナイザは $\sigma$-VAE を用いて超低圧縮(7.5 トークン/秒、3200 倍)を実現し、スケーラビリティと忠実性を確保します。一方、セマンティックトークナイザは ASR プロキシタスクを用いて、内容中心の特徴抽出を行います。
- 大規模言語モデル(LLM): コアとなるシーケンスモデルとして、Qwen2.5(1.5Bおよび7Bのバージョン)を使用します。
- トークンレベルの拡散ヘッド: LLMの隠れ状態を条件とし、ストリーミング方式で連続的なVAE特徴を予測する役割を担います。
元のVibeVoice-1.5Bチェックポイントは、Hugging Face上のMicrosoft組織で利用可能です。
主な機能
- 長文合成:最大90分間の複数話者による会話音声の合成が可能です。
- マルチスピーカー対話: 最大4人のスピーカーを含むオーディオを合成できます。
- 最先端の品質: 主観的指標および客観的指標の両方で、ベースラインを上回る性能を発揮します。
- 高圧縮: 7.5 Hz という超低フレームレートで動作する新しい音声トークナイザーにより実現されています。
- スケーラブルなLLM: コアとなるLLMを1.5Bから7Bにスケールさせることで、知覚品質が大幅に向上します。
使用方法
セットアップ
音声生成は拡散プロセスに依存するため、ノイズスケジューラーが必要です。最も簡単なアプローチ(モデル開発者が採用している方法)は、diffusers ライブラリのノイズスケジューラーを使用することです。デフォルトでは、モデルは内部で diffusers を使用してノイズスケジューラーを作成します。
pip install diffusers
pip install soundfile # for saving audioモデルの読み込み
from transformers import AutoProcessor, AutoModelForTextToWaveform
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(model_id)テキストから音声への変換(TTS)
import os
from transformers import AutoProcessor, AutoModelForTextToWaveform
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
text = "Hello, nice to meet you. How are you?"
# Load model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")
# Prepare input
conversation = [{"role": "0", "content": [{"type": "text", "text": text}]}]
inputs = processor.apply_chat_template(
conversation, return_dict=True, tokenize=True, add_generation_prompt=True,
).to(model.device, model.dtype)
# Generate!
audio = model.generate(**inputs)
# Save to file
file_name = f"{os.path.basename(model_id)}_tts.wav"
processor.save_audio(audio, file_name)
print(f"Saved output to {file_name}")TTS音声クローニング
参照音声をテキストとともにチャットテンプレートの辞書に含めることで、ボイスのクローニングを行うことができます。
import os
from transformers import AutoProcessor, AutoModelForTextToWaveform, set_seed
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
text = "Hello, nice to meet you. How are you?"
set_seed(42) # for deterministic results
# Load model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")
sampling_rate = processor.feature_extractor.sampling_rate
# Prepare input
conversation = [
{
"role": "0",
"content": [
{"type": "text", "text": text},
{
"type": "audio",
"url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
},
],
}
]
inputs = processor.apply_chat_template(
conversation, return_dict=True, tokenize=True, add_generation_prompt=True,
).to(model.device, model.dtype)
# Generate!
audio = model.generate(**inputs)
# Save to file
fn = f"{os.path.basename(model_id)}_tts_clone.wav"
processor.save_audio(audio, fn)
print(f"Saved output to {fn}")スクリプトからポッドキャストを生成する
…以下は、チャットテンプレート内の各一意のロールIDに対して参照オーディオを提供することで、それぞれの声声をクローンし、2人の話者間の会話を生成する例です。
以下の例では、生成の進捗を追跡するためにmonitor_progressオプションも使用しています。
import os
import time
from transformers import AutoProcessor, AutoModelForTextToWaveform
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
max_new_tokens = 400 # `None` to ensure full generation
# create conversation with an audio for the first time a speaker appears to clone that particular voice
conversation = [
{
"role": "0",
"content": [
{
"type": "text", "text": "Hello everyone, and welcome to the VibeVoice podcast. I'm your host, Linda, and today we're getting into one of the biggest debates in all of sports: who's the greatest basketball player of all time? I'm so excited to have Thomas here to talk about it with me.",
},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
},
],
},
{
"role": "1",
"content": [
{
"type": "text", "text": "Thanks so much for having me, Linda. You're absolutely right—this question always brings out some seriously strong feelings.",
},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Frank_man.wav",
},
],
},
{
"role": "0",
"content": [
{
"type": "text", "text": "Okay, so let's get right into it. For me, it has to be Michael Jordan. Six trips to the Finals, six championships. That kind of perfection is just incredible.",
},
],
},
{
"role": "1",
"content": [
{
"type": "text", "text": "Oh man, the first thing that always pops into my head is that shot against the Cleveland Cavaliers back in '89. Jordan just rises, hangs in the air forever, and just sinks it",
},
],
},
]
# Load model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")
# prepare inputs
inputs = processor.apply_chat_template(
conversation, return_dict=True, tokenize=True, add_generation_prompt=True,
).to(model.device, model.dtype)
# Generate audio with a progress bar to track generation
model.generation_config.max_new_tokens = max_new_tokens
start_time = time.time()
audio = model.generate(**inputs, monitor_progress=True)
generation_time = time.time() - start_time
print(f"Generation time: {generation_time:.2f} seconds")
# Save audio
fn = f"{os.path.basename(model_id)}_script.wav"
processor.save_audio(audio, fn)
print(f"Saved output to {fn}")バッチ推論
バッチ処理では、会話のリストをprocessor.apply_chat_templateに渡すことができます:
import os
import time
from transformers import AutoProcessor, AutoModelForTextToWaveform
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
max_new_tokens = 400 # `None` to ensure full generation
conversation = [
[
{
"role": "0",
"content": [
{
"type": "text", "text": "Hello everyone, and welcome to the VibeVoice podcast. I'm your host, Linda, and today we're getting into one of the biggest debates in all of sports: who's the greatest basketball player of all time? I'm so excited to have Thomas here to talk about it with me.",
},
{
"type": "audio",
"url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
},
],
},
{
"role": "1",
"content": [
{
"type": "text", "text": "Thanks so much for having me, Linda.",
},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Frank_man.wav",
},
],
},
],
[
{
"role": "0",
"content": [
{
"type": "text", "text": "Hello and welcome to Planet in Peril. I'm your host, Alice. We're here today to discuss a really sobering new report that looks back at the last ten years of climate change. I'm joined by our expert panel. Welcome Carter, Frank, and Maya.",
},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
},
],
},
{
"role": "1",
"content": [
{"type": "text", "text": "Hi Alice, it's great to be here. I'm Carter."},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Carter_man.wav",
},
],
},
{
"role": "2",
"content": [
{"type": "text", "text": "Hello, uh, I'm Frank. Good to be on."},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Frank_man.wav",
},
],
},
{
"role": "3",
"content": [
{"type": "text", "text": "And I'm Maya. Thanks for having me."},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Maya_woman.wav",
},
],
},
],
]
# Load model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")
# prepare inputs
inputs = processor.apply_chat_template(
conversation, return_dict=True, tokenize=True, add_generation_prompt=True,
).to(model.device, model.dtype)
# Generate audio with a progress bar to track generation
model.generation_config.max_new_tokens = max_new_tokens
start_time = time.time()
audio = model.generate(**inputs, monitor_progress=True)
generation_time = time.time() - start_time
print(f"Generation time: {generation_time:.2f} seconds")
# Save audio
output_dir = f"{os.path.basename(model_id)}_batch"
processor.save_audio(audio, output_dir)
print(f"Saved output to {output_dir}")Pipelineの使用方法
VibeVoice はパイプラインとして読み込むこともできます。以下では、拡散パラメータを調整する方法も示します。
import os
import soundfile as sf
from transformers import pipeline
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
text = "Hello, nice to meet you. How are you?"
pipe = pipeline("text-to-speech", model=model_id)
# Generate!
conversation = [
{
"role": "0",
"content": [
{"type": "text", "text": text},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/voices/en-Alice_woman.wav",
},
],
}
]
# optional kwargs for generation
generate_kwargs = {"guidance_scale": 1.3, "num_diffusion_steps": 10}
output = pipe(conversation, generate_kwargs=generate_kwargs)
# Save to file
fn = f"{os.path.basename(model_id)}_pipeline.wav"
sf.write(fn, output["audio"], output["sampling_rate"])
print(f"Saved output to {fn}")トレーニング
VibeVoiceは、モデルが出力する損失で学習できます。
from transformers import AutoProcessor, AutoModelForTextToWaveform
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
# Load model and processor
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(
model_id,
diffusion_loss_weight=0.75, # by default, equal weighting (0.5) of language modeling loss (CE) and diffusion loss is applied
device_map="auto"
)
model.train()
# Prepare batch of 2
conversation = [
[
{
"role": "0",
"content": [
{
"type": "text", "text": "VibeVoice is this novel framework designed for generating expressive, long-form, multi-speaker, conversational audio.",
},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
},
],
}
],
# NOTE: multiple speakers not supported yet
[
{
"role": "0",
"content": [
{
"type": "text", "text": "Hello everyone and welcome to the VibeVoice podcast. I'm your host, Alex, and today we're getting into one of the biggest debates in all of sports: who's the greatest basketball player of all time? I'm so excited to have Sam here to talk about it with me. Thanks so much for having me, Alex. And you're absolutely right. This question always brings out some seriously strong feelings. Okay, so let's get right into it. For me, it has to be Michael Jordan. Six trips to the finals, six championships. That kind of perfection is just incredible. Oh man, the first thing that always pops into my head is that shot against the Cleveland Cavaliers back in '89. Jordan just rises, hangs in the air forever, and just sinks it.",
},
{
"type": "audio",
"url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/example_output/VibeVoice-1.5B_output.wav",
},
],
}
],
]
# Process with apply_chat_template and output_labels=True for training
inputs = processor.apply_chat_template(
conversation,
tokenize=True,
return_dict=True,
processor_kwargs={"output_labels": True},
).to(model.device, model.dtype)
# Forward pass
outputs = model(**inputs, ddpm_batch_multiplier=2, num_diffusion_steps=2)
print(f"Total loss: {outputs.loss.item():.4f}")
# Backward pass
outputs.loss.backward()Torch compile
モデルはtorch.compileでコンパイルすることで、より高速な推論を行うことができます。コンパイル済みモデルが最大速度に達するには、数回のウォームアップ実行が必要です。
A100でバッチサイズ4の場合、コンパイル済み推論とコンパイルなし推論の間で約1.5倍の高速化を確認しました。このスクリプトを参照してください。
import os
import time
import torch
from transformers import AutoModelForTextToWaveform, AutoProcessor, CompileConfig
model_id = "vibevoice/VibeVoice-1.5B-hf" # "vibevoice/VibeVoice-7B-hf"
num_warmup = 5
max_new_tokens = 128
torch.set_float32_matmul_precision("high")
# Load processor + model
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForTextToWaveform.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto").eval()
# Prepare inputs
conversation = [
[
{
"role": "0",
"content": [
{"type": "text", "text": "VibeVoice is a novel framework for generating expressive audio."},
{
"type": "audio", "url": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
},
],
}
],
] * 4 # batch size 4
inputs = processor.apply_chat_template(
conversation, tokenize=True, return_dict=True, add_generation_prompt=True,
).to(model.device, model.dtype)
compile_config = CompileConfig(mode="default", dynamic=False)
generate_kwargs = dict(
**inputs,
max_new_tokens=max_new_tokens,
cache_implementation="static",
compile_config=compile_config,
)
# Warmup
print("Warming up...")
warmup_start = time.time()
with torch.inference_mode():
for _ in range(num_warmup):
torch.compiler.cudagraph_mark_step_begin()
_ = model.generate(**generate_kwargs)
torch.cuda.synchronize()
print(f"Warmup complete in {time.time() - warmup_start:.2f}s. Ready!")
# Apply model
with torch.inference_mode():
torch.compiler.cudagraph_mark_step_begin()
audio = model.generate(**generate_kwargs)
output_folder = f"{os.path.basename(model_id)}_compiled_output"
processor.save_audio(audio, output_folder)
print(f"Saved output to {output_folder}")VibeVoiceConfig
クラス transformers.VibeVoiceConfig
< 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 = Noneaudio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonesemantic_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonediffusion_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonepad_token_id: int = 151643eos_token_id: int = 151643audio_bos_token_id: int = 151652audio_eos_token_id: int = 151653audio_token_id: int = 151654diffusion_loss_weight: float = 0.5 )
パラメータ
- audio_config (
Union[dict, ~configuration_utils.PreTrainedConfig]、任意) — オーディオバックボーンの config オブジェクトまたは辞書。 - semantic_model_config (
Union[AutoConfig, dict]、省略可) — セマンティック トークナイザー エンコーダーの config オブジェクトまたは辞書です。このトークナイザーは、音声からセマンティックな特徴量を抽出します。 - text_config (
Union[dict, ~configuration_utils.PreTrainedConfig]、省略可) — テキストバックボーンの設定オブジェクトまたは辞書。 - diffusion_head_config (
Union[VibeVoiceDiffusionHeadConfig, dict], 任意) — 音響潜在変数の合成に使用される拡散ヘッドの設定オブジェクトまたは辞書。 - pad_token_id (
int、任意、デフォルトは151643) — 語彙内でパディングに使用されるトークン ID。 - eos_token_id (
int、任意、デフォルトは151643) — 語彙におけるストリーム終了に使用されるトークン ID。 - audio_bos_token_id (
int、任意、デフォルトは 151652) — オーディオトークンの開始を示すトークン ID。 - audio_eos_token_id (
int、任意、デフォルトは 151653) — オーディオトークンの終了を示すトークン ID。 - audio_token_id (
int、任意、デフォルトは151654) — 入力音声のプレースホルダーとして使用されるオーディオトークンのインデックスです。 - diffusion_loss_weight (
float, 任意、デフォルト値は 0.5) — 全体の損失計算における拡散損失の重みです。言語モデリングヘッドのクロスエントロピー損失は、(1 - diffusion_loss_weight)で重み付けされます。
これは、VibeVoiceForConditionalGeneration の設定を保存するための設定クラスです。指定された引数に基づいて Vibevoice モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、vibevoice/VibeVoice-1.5B-hf と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
>>> from transformers import VibeVoiceForConditionalGeneration, VibeVoiceConfig
>>> # Initializing a VibeVoice configuration
>>> configuration = VibeVoiceConfig()
>>> # Initializing a 1.5B model with random weights
>>> model = VibeVoiceForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVibeVoiceDiffusionHeadConfig
クラス transformers.VibeVoiceDiffusionHeadConfig
< 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 = Nonehidden_size: int = 1536latent_size: int = 64num_hidden_layers: int = 4intermediate_size: int = 4608rms_norm_eps: float = 1e-05hidden_act: str = 'silu'frequency_embedding_size: int = 256diffusion_max_period: int = 10000mlp_bias: bool = False )
パラメータ
- hidden_size (
int、任意、デフォルトは1536) — 隠れ表現の次元数。 - latent_size (
int、任意、デフォルトは 64) — ヘッドがノイズ除去を行う音響潜在変数の次元数。 - num_hidden_layers (
int、任意、デフォルトは4) — Transformer デコーダーの隠れ層の数。 - intermediate_size (
int、任意、デフォルトは4608) — MLP 表現の次元数。 - rms_norm_eps (
float、任意、デフォルト値は1e-05) — RMS正規化レイヤーで使用するepsilonです。 - hidden_act (
str、任意、デフォルトはsilu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - frequency_embedding_size (
int, 任意、デフォルト値は 256) — 拡散ヘッドにおけるタイムステップエンコーディング用の正弦波周波数埋め込みのサイズです。 - diffusion_max_period (
int、任意、デフォルト値は 10000)— diffusion head における正弦波周波数埋め込みの最大周期です。 - mlp_bias (
bool、任意、デフォルトはFalse) — MLP層のup_proj、down_proj、gate_proj層でバイアスを使用するかどうかを指定します。
これは、VibeVoiceForConditionalGeneration の設定を保存するための設定クラスです。指定された引数に基づいて Vibevoice モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、vibevoice/VibeVoice-1.5B-hf と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
VibeVoiceProcessor
class transformers.VibeVoiceProcessor
< source >( feature_extractortokenizerchat_template = Noneaudio_bos_token = '<|vision_start|>'audio_eos_token = '<|vision_end|>'audio_token = '<|vision_pad|>' )
パラメータ
- feature_extractor (
VibeVoiceAcousticTokenizerFeatureExtractor) — フィーチャーエクストラクターは必須の入力です。 - tokenizer (
Qwen2TokenizerFast) — トークナイザーは必須の入力です。 - chat_template (
str) — チャット内のメッセージのリストをトークン化可能な文字列に変換するための Jinja テンプレート。 - audio_bos_token (
str、任意、デフォルトは"<|vision_start|>") — 音声生成の開始を示すために使用されるトークンです。 - audio_eos_token (
str、任意、デフォルトは"<|vision_end|>") — 音声生成の終了を示すために使用されるトークンです。 - audio_token (
str、任意、デフォルトは"<|vision_pad|>") — 音声の生成を継続することを示すために使用されるトークンです。
VibeVoiceProcessorを構築します。これは、フィーチャーエクストラクターとトークナイザーを単一のプロセッサーにラップします。
VibeVoiceProcessor は、VibeVoiceAcousticTokenizerFeatureExtractor と Qwen2TokenizerFast のすべての機能を提供します。詳細については、~VibeVoiceAcousticTokenizerFeatureExtractor および ~Qwen2TokenizerFast を参照してください。
__call__
< source >( text: str | list[str] | list[list[str]]audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = Noneoutput_labels: bool | None = False**kwargs: *<class 'transformers.models.vibevoice.processing_vibevoice.VibeVoiceProcessorKwargs'> ) → BatchFeature
パラメータ
- text (
str,List[str]) — 処理対象の入力テキストです。通常、音声トークンのプレースホルダーを含む形で、apply_chat_template によって準備されます。 - audio (
List[Union[str, np.ndarray]], 任意) — 話者の声のクローニングに使用する音声サンプルです。テキスト内の音声トークンプレースホルダーの数と一致する必要があります。 - output_labels (
bool、省略可、デフォルト: False) — 学習用のラベルを返すかどうか。 - **kwargs — トークナイザーとフィーチャーエクストラクターに渡される追加のキーワード引数。
- return_tensors (
strまたは TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。
- **kwargs (ProcessingKwargs、任意) — 各モダリティ(テキスト、画像、動画、音声)の追加処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。
戻り値
以下のフィールドを持つBatchFeature:
- input_ids — モデルに与えるトークン ID のリスト。
- attention_mask — モデルがどのトークンに注意を払うべきかを指定するインデックスのリスト(
return_attention_mask=Trueの場合)。 - input_values — モデルに渡す音声値のリスト。
audioがNoneでない場合に返されます。 - padding_mask — モデルがどの音声フレームに注意を払うべきかを指定するインデックスのリスト。
audioがNoneでない場合に返されます。 - labels — 言語モデルの学習用のラベル。パディングおよびオーディオ拡散トークンは -100 でマスクされます(オーディオ拡散トークンの埋め込みはオーディオ特徴量に置き換えられるため、そのトークン自体は意味のあるターゲットになりません)。オーディオの bos/eos トークンおよびテキストの eos トークンはターゲットとして保持されるため、LM はオーディオ生成を開始し、停止するタイミングを学習します。
output_labels=Trueの場合に返されます。 - acoustic_loss_mask — 拡散損失を計算する位置の Boolean マスク。音声拡散トークンの位置で True になります。
output_labels=Trueの場合に返されます。
VibeVoiceForConditionalGeneration
クラス transformers.VibeVoiceForConditionalGeneration
< source >( config: VibeVoiceConfig )
パラメータ
- config (VibeVoiceConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
言語モデル、オーディオトークナイザー、コネクタ、拡散ヘッドで構成されるVibeVoiceモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: LongTensor = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Nonelogits_to_keep: int | slice = 0input_values: typing.Optional[torch.FloatTensor] = Nonepadding_mask: typing.Optional[torch.BoolTensor] = Noneacoustic_loss_mask: typing.Optional[torch.BoolTensor] = Nonenoise_scheduler: object | None = Noneddpm_batch_multiplier: int = 4num_diffusion_steps: int = 10sample: bool = True**kwargs ) → VibeVoiceCausalLMOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - labels (
torch.LongTensor、shape(batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは[0, ..., config.vocab_size]の範囲内であるか、-100 である必要があります(input_idsの docstring を参照)。インデックスが-100に設定されたトークンは無視(マスク)され、損失は[0, ..., config.vocab_size]の範囲内のラベルを持つトークンに対してのみ計算されます。 - logits_to_keep (
Union[int, slice]、省略可、デフォルトは0) —intの場合、最後のlogits_to_keepトークンについて logits を計算します。0の場合、すべてのinput_idsについて logits を計算します(特殊ケース)。生成には最後のトークンの logits だけで十分であり、そのトークンについてのみ計算することでメモリを節約できます。これは長いシーケンスや大規模な語彙サイズの場合に、かなり大きな効果があります。torch.Tensorの場合、シーケンス長次元で保持するインデックスに対応する 1 次元テンソルである必要があります。これは、パックされたテンソル形式(バッチとシーケンス長を単一の次元にまとめた形式)を使用する場合に有用です。 - input_values (
torch.FloatTensor、任意) — ボイスクローニング用に前処理された音声波形。 - padding_mask (
torch.BoolTensor, 任意) — 有効な入力フレームを示すマスク。 - acoustic_loss_mask (
torch.BoolTensor、任意) — 特定の音響トークンに対してのみ拡散損失を計算するためのマスクです。 - noise_scheduler (
object、任意) — 拡散損失のノイズターゲットを計算するために学習で必要です。デフォルトでは、モデルのgeneration_configで指定されたノイズスケジューラの設定を使用します。 - ddpm_batch_multiplier (
int、任意、デフォルト値は 4) — 学習において、拡散損失の計算のために各オーディオトークンごとに生成するノイズサンプルの数です。これを調整することで、学習の安定化に役立ちます。 - num_diffusion_steps (
int、任意、デフォルト値は 10)— 学習時に使用する拡散ステップ数です。指定されない場合、デフォルトで 10 になります。 - sample (
bool、省略可能、デフォルトはTrue) — 元のモデルと同様に、音響潜在変数にガウスノイズを追加するかどうかを指定します(σ-VAE: ノイズのスケールはバッチ内の各項目に対して N(0,vae_std) からサンプリングされます)。False の場合、エンコーダーの出力がそのまま使用されるため、出力は決定論的になります。
戻り値
VibeVoiceCausalLMOutputWithPast または tuple(torch.FloatTensor)
VibeVoiceCausalLMOutputWithPast、または torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(VibeVoiceConfig)や入力に応じて、さまざまな要素で構成されます。
VibeVoiceForConditionalGenerationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。past_key_valuesが使用されている場合、出力されるのは、形状(batch_size, 1, hidden_size)のシーケンスの最後の隠れ状態のみです。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己アテンションブロック(および
config.is_encoder_decoder=Trueの場合、クロスカレンションブロック)の事前計算済みヒドゥンステート(キーとバリュー)を保持します。これらは逐次デコーディングを高速化するために使用できます(past_key_values入力参照)。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます) — 言語モデリングの損失(次のトークン予測用)。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。audio_features (
torch.FloatTensor、shape(batch_size, sequence_length, feature_size)、任意) — 言語モデルの条件付けに使用できる抽出済みオーディオ特徴量。
例:
>>> from transformers import AutoProcessor, VibeVoiceForConditionalGeneration
>>> model = VibeVoiceForConditionalGeneration.from_pretrained("vibevoice/VibeVoice-1.5B-hf")
>>> processor = AutoProcessor.from_pretrained("vibevoice/VibeVoice-1.5B-hf")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")
>>> # generate speech
>>> speech = model(inputs["input_ids"])generate
< source >( inputs: typing.Optional[torch.Tensor] = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = Nonestopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonesynced_gpus: bool | None = Noneassistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = Nonestreamer: typing.Optional[ForwardRef('BaseStreamer')] = Nonenegative_prompt_ids: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonecustom_generate: str | collections.abc.Callable | None = None**kwargs ) → ModelOutput or torch.LongTensor
パラメータ
- inputs(
torch.Tensor、モダリティによって形状が異なり、省略可) — 生成のプロンプトとして使用されるシーケンス、またはエンコーダーへのモデル入力です。Noneの場合、bos_token_idとバッチサイズ 1 で初期化されます。デコーダー専用モデルでは、inputsはinput_idsの形式である必要があります。エンコーダーデコーダーモデルでは、inputs はinput_ids、input_values、input_features、またはpixel_valuesのいずれかを表すことができます。 - generation_config (GenerationConfig、任意) —
生成呼び出しのベースパラメータ化として使用される生成設定です。
**kwargsで generate に渡され、generation_configの属性と一致するものは、それらをオーバーライドします。generation_configが指定されない場合、デフォルトが使用されます。その読み込み優先順位は以下の通りです: 1) 存在する場合、generation_config.jsonモデルファイルから; 2) モデル設定から。未指定のパラメータは GenerationConfig のデフォルト値を継承することに注意してください。生成をパラメータ化するには、そのドキュメントを確認する必要があります。 - logits_processor (
LogitsProcessorList、省略可) — 引数や生成設定から構築されるデフォルトの logits プロセッサを補完する、カスタムの logits プロセッサです。引数や生成設定によってすでに作成済みの logits プロセッサが渡された場合、エラーが発生します。この機能は上級ユーザー向けに設計されています。 - stopping_criteria (
StoppingCriteriaList、省略可) — 引数と生成設定から構築されるデフォルトの停止条件を補完する、カスタムの停止条件です。引数や生成設定からすでに作成された停止条件が渡された場合、エラーが発生します。停止条件がscores入力を参照する場合、generateにreturn_dict_in_generate=True, output_scores=Trueを渡すことを確認してください。この機能は上級ユーザー向けです。 - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]], 省略可) — 指定された場合、この関数は各ステップにおいてビームサーチを許可されたトークンのみに制限します。指定されない場合、制限は適用されません。この関数は 2 つの引数を受け取ります: バッチ IDbatch_idとinput_idsです。バッチ IDbatch_idと以前に生成されたトークンinputs_idsに基づいて、次の生成ステップで許可されるトークンのリストを返す必要があります。この引数は、Autoregressive Entity Retrieval に記載されているような、プレフィックスに条件付けられた制約付き生成に有用です。 - synced_gpus (
bool, 省略可) — max_length まで while ループの実行を継続するかどうか。上書きされない場合、FullyShardedDataParallelまたは DeepSpeed ZeRO Stage 3 を複数の GPU で使用している場合は、ある GPU が他の GPU より先に生成を終了した場合のデッドロックを回避するために、このフラグはTrueに設定されます。それ以外の場合は、デフォルトでFalseになります。 - assistant_model (
PreTrainedModel, 任意) — 生成を高速化するために使用できるアシスタントモデルです。アシスタントモデルは、呼び出し元のモデルと完全に同一のトークナイザーを持つ必要があります。アシスタントモデルによる候補トークンの予測が、呼び出し元のモデルで generate を実行するよりもはるかに高速な場合に、高速化が実現されます。そのため、アシスタントモデルは呼び出し元のモデルよりもはるかに小さいものである必要があります。 - streamer (
BaseStreamer、任意) — 生成されたシーケンスをストリーミングするために使用される Streamer オブジェクトです。生成されたトークンはstreamer.put(token_ids)を介して渡され、その後の処理はすべて streamer が担当します。 - negative_prompt_ids (
torch.LongTensor、形状(batch_size, sequence_length)、任意) — CFG などの一部のプロセッサに必要となるネガティブプロンプトです。バッチサイズは、入力バッチサイズと一致する必要があります。これは実験的な機能であり、将来のバージョンで API が破壊的に変更される可能性があります。 - negative_prompt_attention_mask (
torch.LongTensor、形状(batch_size, sequence_length)、任意) —negative_prompt_ids用の Attention_mask です。 - custom_generate (
strまたはCallable, 省略可) — 次のいずれか:str(Hugging Face Hub リポジトリ名): 標準のgenerateメソッドではなく、そのリポジトリ内のcustom_generate/generate.pyで定義されたカスタムのgenerate関数を実行します。リポジトリが生成ロジックを完全に置き換え、戻り値の型が異なる場合があります。str(ローカルリポジトリのパス):上記と同様ですが、ローカルパスから読み込みます。ローカルディレクトリの場合も、ローカルのcustom_generate/generate.pyが実行されるため、trust_remote_code=Trueが必要です。Callable:generateは通常の入力準備手順を実行し、その後、デコーディングループを実行するために指定された callable を呼び出します。詳細については、ドキュメントを参照してください。
- kwargs (
dict[str, Any]、省略可) —generation_configのアドホックなパラメータ化、およびモデルのforward関数に転送されるモデル固有の追加 kwargs です。モデルがエンコーダー・デコーダーモデルの場合、エンコーダー固有の kwargs にはプレフィックスを付与せず、デコーダー固有の kwargs には decoder_ をプレフィックスとして付与してください。
戻り値
ModelOutput または torch.LongTensor
return_dict_in_generate=True の場合、または config.return_dict_in_generate=True の場合は ModelOutput、それ以外は torch.LongTensor。
モデルがエンコーダー・デコーダーモデルでない場合(model.config.is_encoder_decoder=False)、考えられるModelOutputの型は以下の通りです:
モデルがエンコーダー・デコーダーモデル(model.config.is_encoder_decoder=True)の場合、考えられるModelOutputの型は以下の通りです:
言語モデリングヘッドを持つモデルに対して、トークンIDのシーケンスを生成します。
生成を制御するほとんどのパラメータは
generation_configで設定されます。この引数が渡されない場合、モデルのデフォルトの生成設定が使用されます。generation_configの任意の値は、generate() に対応するパラメータを渡すことで上書きできます。例えば、.generate(inputs, num_beams=4, do_sample=True)のように指定します。生成戦略の概要とコード例については、次のガイドを参照してください。
VibeVoiceModel
クラス transformers.VibeVoiceModel
< source >( config: VibeVoiceConfig )
パラメータ
- config (VibeVoiceConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
音声トークナイザーとLLMバックボーンで構成され、言語モデリングヘッドを備えないVibeVoiceモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: LongTensor = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneinput_values: typing.Optional[torch.FloatTensor] = Nonepadding_mask: typing.Optional[torch.BoolTensor] = Nonesample: bool = True**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - input_values (
torch.FloatTensor、shape(batch_size, sequence_length)、任意) — 入力生の音声波形の浮動小数点値。値は、.flacまたは.wav形式のオーディオファイルを読み込み、list[float]、numpy.ndarray、またはtorch.Tensor型の配列に変換することで取得できます。例えば、torchcodec ライブラリ(pip install torchcodec)や soundfile ライブラリ(pip install soundfile)を通じて行います。 配列をinput_valuesに整えるには、パディングとtorch.FloatTensor型への変換のために AutoProcessor を使用してください。詳細は VibeVoiceProcessor.call() を参照してください。 - padding_mask (
torch.Tensor、形状(batch_size, padded_audio_length)) — オーディオの埋め込み部分を除去するためのパディングマスクです。 - sample (
bool、省略可能、デフォルトはTrue) — 元のモデルと同様に、音響潜在変数にガウスノイズを追加するかどうかを指定します(σ-VAE: ノイズのスケールはバッチ内の各項目に対して N(0,vae_std) からサンプリングされます)。False の場合、エンコーダーの出力がそのまま使用されるため、出力は決定論的になります。
戻り値
BaseModelOutputWithPast または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPast。設定(VibeVoiceConfig)や入力に応じて、さまざまな要素で構成されます。
VibeVoiceModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。past_key_valuesが使用されている場合、出力されるのは、形状(batch_size, 1, hidden_size)のシーケンスの最後の隠れ状態のみです。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己アテンションブロック(および
config.is_encoder_decoder=Trueの場合、クロスカレンションブロック)の事前計算済みヒドゥンステート(キーとバリュー)を保持します。これらは逐次デコーディングを高速化するために使用できます(past_key_values入力参照)。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
get_audio_features
< source >( input_values: FloatTensorpadding_mask: Tensorsample: bool = True**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
パラメータ
- input_values (
torch.FloatTensor) — (正規化された)音声波形の浮動小数点値。 - padding_mask (
torch.Tensor、形状(batch_size, padded_audio_length)) — オーディオの埋め込み部分を除去するためのパディングマスクです。 - sample (
bool、省略可能、デフォルトはTrue) — 元のモデルと同様に、音響潜在変数にガウスノイズを追加するかどうかを指定します(σ-VAE: ノイズのスケールはバッチ内の各項目に対して N(0,vae_std) からサンプリングされます)。False の場合、エンコーダーの出力がそのまま使用されるため、出力は決定論的になります。
戻り値
BaseModelOutputWithPooling または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPooling。設定(VibeVoiceConfig)や入力に応じて、さまざまな要素で構成されます。
このメソッドは、入力された音声波形から、音声埋め込み(入力シーケンス内のプレースホルダー音声トークンを置き換えるもの)と、音響特徴量(拡散のターゲットとして使用されるもの)を取得するために使用されます。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。pooler_output (
torch.FloatTensor、shape(batch_size, hidden_size)) — 補助事前学習タスクに使用される層をさらに通して処理された後、シーケンスの最初のトークン(分類トークン)の最終層の隠れ状態。例えば、BERT 系のモデルでは、線形層と tanh 活性化関数を経て処理された後の分類トークンを返します。この線形層の重みは、事前学習中の次文予測(分類)目的から学習されます。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
get_placeholder_mask
< source >( input_ids: LongTensorinputs_embeds: FloatTensoraudio_features: FloatTensor )
input_idsまたはinputs_embedsからマルチモーダルプレースホルダーマスクを取得し、プレースホルダートークンの数がマルチモーダル特徴の長さと等しいことを確認します。長さが異なる場合、エラーが発生します。