Transformers documentation
VibeVoice ASR
نُشر هذا النموذج في أوراق HF في 26 يناير 2026، وسُهم به في Hugging Face Transformers في 2 مارس 2026.
VibeVoice ASR
نظرة عامة
VibeVoice ASR هو نموذج للتعرف التلقائي على الكلام من Microsoft يجمع بين مُرمّزي الصوت الصوتي والدلالي مع نموذج لغوي سببي للحصول على نسخ دقيقة من الكلام إلى نص. يستخدم النموذج مُرمّزي VibeVoice الصوتي والدلالي لمعالجة الصوت عند تردد 24kHz، مقترنًا بمفكك لغوي مبني على Qwen2 لتوليد النصوص. راجع التقرير التقني لمزيد من التفاصيل.
نقطة التفتيش للنموذج متاحة في: microsoft/VibeVoice-ASR-HF
أبرز النقاط:
🕒 معالجة في مسار واحد لمدة 60 دقيقة: على عكس نماذج التعرف على الكلام التقليدية التي تقطع الصوت إلى مقاطع قصيرة (غالبًا ما يؤدي ذلك إلى فقدان السياق العام)، يقبل VibeVoice ASR مدخلات صوتية متصلة تصل إلى 60 دقيقة ضمن طول 64K رمزًا. وهذا يضمن تتبعًا متسقًا للمتحدثين وتكافؤًا دلاليًا عبر الساعة كاملة.
👤 كلمات ساخنة مخصصة: يمكن للمستخدمين تقديم كلمات ساخنة مخصصة (مثل أسماء محددة، أو مصطلحات تقنية، أو معلومات خلفية) لتوجيه عملية التعرف، مما يحسّن الدقة بشكل كبير على المحتوى المتخصص في مجال معين.
📝 النسخ الغني (من، متى، ماذا): ينفّذ النموذج مهام التعرف على الكلام (ASR) وتقسيم المتكلمين وتوقيت الأحداث بشكل مشترك، مُنتجًا مخرجات منظمة تُبيّن من قال ماذا ومتى.
🌍 دعم تعدد اللغات والتبديل بين الأكواد: يدعم أكثر من 50 لغة، ولا يتطلب تحديد اللغة بشكل صريح، ويتعامل بشكل أصلي مع التبديل بين الأكواد داخل العبارات وعبرها.
تمت مساهمة هذا النموذج من قِبل Eric Bezzam.
الاستخدام
يدعم النموذج وظائف متنوعة للتعرف التلقائي على الكلام.
نسخة صوتية مع توقيت المتكلم
من الميزات البارزة في VibeVoice ASR قدرته على نقل محتوى متعدد المتحدثين إلى نص، مع تحديد من تحدث ومتى.
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
print(f"Model loaded on {model.device} with dtype {model.dtype}")
# Prepare inputs using `apply_transcription_request`
inputs = processor.apply_transcription_request(
audio="https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/example_output/VibeVoice-1.5B_output.wav",
).to(model.device, model.dtype)
# Apply model
output_ids = model.generate(**inputs)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
transcription = processor.decode(generated_ids)[0]
print("\n" + "=" * 60)
print("RAW OUTPUT")
print("=" * 60)
print(transcription)
transcription = processor.decode(generated_ids, return_format="parsed")[0]
print("\n" + "=" * 60)
print("TRANSCRIPTION (list of dicts)")
print("=" * 60)
for speaker_transcription in transcription:
print(speaker_transcription)
# Remove speaker labels, only get raw transcription
transcription = processor.decode(generated_ids, return_format="transcription_only")[0]
print("\n" + "=" * 60)
print("TRANSCRIPTION ONLY")
print("=" * 60)
print(transcription)
"""
============================================================
RAW OUTPUT
============================================================
<|im_start|>assistant
[{"Start":0,"End":15.43,"Speaker":0,"Content":"Hello everyone and welcome to the Vibe Voice 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."},{"Start":15.43,"End":21.05,"Speaker":1,"Content":"Thanks so much for having me, Alex. And you're absolutely right. This question always brings out some seriously strong feelings."},{"Start":21.05,"End":31.66,"Speaker":0,"Content":"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."},{"Start":31.66,"End":40.93,"Speaker":1,"Content":"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."}]<|im_end|>
<|endoftext|>
============================================================
TRANSCRIPTION (list of dicts)
============================================================
{'Start': 0, 'End': 15.43, 'Speaker': 0, 'Content': "Hello everyone and welcome to the Vibe Voice 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."}
{'Start': 15.43, 'End': 21.05, 'Speaker': 1, 'Content': "Thanks so much for having me, Alex. And you're absolutely right. This question always brings out some seriously strong feelings."}
{'Start': 21.05, 'End': 31.66, 'Speaker': 0, 'Content': "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."}
{'Start': 31.66, 'End': 40.93, 'Speaker': 1, 'Content': "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."}
============================================================
TRANSCRIPTION ONLY
============================================================
Hello everyone and welcome to the Vibe Voice 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.
"""يُدرَّب نموذج VibeVoice ASR على توليد نص يشبه بنية JSON. يحاول العلم return_format="parsed" إرجاع المخرجات المولّدة على شكل قائمة من القواميس، بينما يحاول return_format="transcription_only" استخراج النص المنقول من الصوت فقط. وفي حال فشل أيٍّ منهما، تُرجع المخرجات المولّدة كما هي.
توفير السياق
من الممكن أيضًا توفير سياق. وقد يكون ذلك مفيدًا إذا تعذّر نطق كلمات معينة بشكل صحيح، مثل الأسماء الخاصة.
فيما يلي نعيد كتابة تسجيل صوتي يتحدث فيه المتحدث (بمخارج ألمانية) عن VibeVoice، مع مقارنة بين وجود السياق "About VibeVoice" وعدم وجوده.
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
print(f"Model loaded on {model.device} with dtype {model.dtype}")
# Without context
inputs = processor.apply_transcription_request(
audio="https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
).to(model.device, model.dtype)
output_ids = model.generate(**inputs)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
transcription = processor.decode(generated_ids, return_format="transcription_only")[0]
print(f"WITHOUT CONTEXT: {transcription}")
# With context
inputs = processor.apply_transcription_request(
audio="https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
prompt="About VibeVoice",
).to(model.device, model.dtype)
output_ids = model.generate(**inputs)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
transcription = processor.decode(generated_ids, return_format="transcription_only")[0]
print(f"WITH CONTEXT : {transcription}")
"""
WITHOUT CONTEXT: Revevoices is a novel framework designed for generating expressive, long-form, multi-speaker conversational audio.
WITH CONTEXT : VibeVoice is this novel framework designed for generating expressive, long-form, multi-speaker, conversational audio.
"""الاستدلال الدُفعي
يمكن إجراء الاستدلال الدُفعي (Batch inference) عن طريق تمرير قائمة من المدخلات الصوتية، وقائمة من الأوامر (prompts) إذا وُجدت. يجب أن يتطابق عدد المدخلات الصوتية مع عدد الأوامر (بالنسبة للأوامر، يمكنك تعيين العنصر إلى None إذا لم يكن مطلوباً لصوت معيّن).
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
audio = [
"https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
"https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/example_output/VibeVoice-1.5B_output.wav"
]
prompts = ["About VibeVoice", None]
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
print(f"Model loaded on {model.device} with dtype {model.dtype}")
inputs = processor.apply_transcription_request(audio, prompt=prompts).to(model.device, model.dtype)
output_ids = model.generate(**inputs)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
transcription = processor.decode(generated_ids, return_format="transcription_only")
print(transcription)ضبط حجم المقطع الخاص بمجزّئ النص (e.g. if out-of-memory)
من الميزات الأساسية في VibeVoice ASR قدرته على تحويل حتى 60 دقيقة من الصوت المتواصل إلى نص. يتم ذلك بتقسيم الصوت إلى مقاطع مدتها 60 ثانية (1440000 عينة عند 24kHz) وتخزين حالات الالتفاف (convolution states) مؤقتاً بين كل مقطع وآخر.
ومع ذلك، إذا كانت المقاطع الممتدة لـ 60 ثانية كبيرة جداً لجهازك، فيمكن تعديل الحجة acoustic_tokenizer_chunk_size المُمرَّرة إلى generate. يُرجى ملاحظة أنه يجب أن يكون مضاعفاً لطول القفزة (3200 لمُرمِّز الصوتيات الأصلي).
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
acoustic_tokenizer_chunk_size = 64000 # default is 1440000 (60s @ 24kHz)
model_id = "microsoft/VibeVoice-ASR-HF"
audio = [
"https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
"https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/example_output/VibeVoice-1.5B_output.wav"
]
prompts = ["About VibeVoice", None]
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
print(f"Model loaded on {model.device} with dtype {model.dtype}")
inputs = processor.apply_transcription_request(audio, prompt=prompts).to(model.device, model.dtype)
output_ids = model.generate(**inputs, acoustic_tokenizer_chunk_size=acoustic_tokenizer_chunk_size)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
transcription = processor.decode(generated_ids, return_format="transcription_only")
print(transcription)قالب المحادثة
يقبل VibeVoice ASR أيضاً مدخلات قالب المحادثة (فإن apply_transcription_request هو في الواقع غلاف لـ apply_chat_template من أجل التسهيل):
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
chat_template = [
[
{
"role": "user",
"content": [
{"type": "text", "text": "About VibeVoice"},
{
"type": "audio",
"path": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
},
],
}
],
[
{
"role": "user",
"content": [
{
"type": "audio",
"path": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/example_output/VibeVoice-1.5B_output.wav",
},
],
}
],
]
inputs = processor.apply_chat_template(
chat_template,
tokenize=True,
return_dict=True,
).to(model.device, model.dtype)
output_ids = model.generate(**inputs)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
transcription = processor.decode(generated_ids, return_format="transcription_only")
print(transcription)التدريب
يمكن تدريب VibeVoice ASR باستخدام الخسارة المُخرَجة من النموذج.
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
model.train()
# Prepare batch of 2
# -- NOTE: the original model is trained to output transcription, speaker ID, and timestamps in JSON-like format. Below we are only using the transcription text as the label
chat_template = [
[
{
"role": "user",
"content": [
{"type": "text", "text": "VibeVoice is this novel framework designed for generating expressive, long-form, multi-speaker, conversational audio."},
{
"type": "audio",
"path": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
},
],
}
],
[
{
"role": "user",
"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",
"path": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/example_output/VibeVoice-1.5B_output.wav",
},
],
}
],
]
inputs = processor.apply_chat_template(
chat_template,
tokenize=True,
return_dict=True,
output_labels=True,
).to(model.device, model.dtype)
loss = model(**inputs).loss
print("Loss:", loss.item())
loss.backward()Torch compile
يمكن تجميع النموذج للحصول على استدلال/تدريب أسرع.
import time
import torch
from transformers import AutoProcessor, VibeVoiceAsrForConditionalGeneration
model_id = "microsoft/VibeVoice-ASR-HF"
num_warmup = 5
num_runs = 20
# Load processor + model
processor = AutoProcessor.from_pretrained(model_id)
model = VibeVoiceAsrForConditionalGeneration.from_pretrained(model_id, device_map="auto")
# Prepare static inputs
chat_template = [
[
{
"role": "user",
"content": [
{
"type": "text",
"text": "VibeVoice is this novel framework designed for generating expressive, long-form, multi-speaker, conversational audio.",
},
{
"type": "audio",
"path": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
},
],
}
],
] * 4 # batch size 4
inputs = processor.apply_chat_template(
chat_template,
tokenize=True,
return_dict=True,
).to(model.device, torch.bfloat16)
# Benchmark without compile
print("Warming up without compile...")
with torch.no_grad():
for _ in range(num_warmup):
_ = model(**inputs)
torch.accelerator.synchronize()
print("\nBenchmarking without torch.compile...")
torch.accelerator.synchronize()
start = time.time()
with torch.no_grad():
for _ in range(num_runs):
_ = model(**inputs)
torch.accelerator.synchronize()
no_compile_time = (time.time() - start) / num_runs
print(f"Average time without compile: {no_compile_time:.4f}s")
# Benchmark with compile
print("\nCompiling model...")
model = torch.compile(model)
print("Warming up with compile (includes graph capture)...")
with torch.no_grad():
for _ in range(num_warmup):
_ = model(**inputs)
torch.accelerator.synchronize()
print("\nBenchmarking with torch.compile...")
torch.accelerator.synchronize()
start = time.time()
with torch.no_grad():
for _ in range(num_runs):
_ = model(**inputs)
torch.accelerator.synchronize()
compile_time = (time.time() - start) / num_runs
print(f"Average time with compile: {compile_time:.4f}s")
speedup = no_compile_time / compile_time
print(f"\nSpeedup: {speedup:.2f}x")استخدام خط الأنابيب
يمكن استخدام النموذج كخط أنابيب، لكن عليك تحديد طرقك الخاصة لتحليل المخرجات الخام.
from transformers import pipeline
model_id = "microsoft/VibeVoice-ASR-HF"
pipe = pipeline("any-to-any", model=model_id, device_map="auto")
chat_template = [
{
"role": "user",
"content": [
{"type": "text", "text": "About VibeVoice"},
{
"type": "audio",
"path": "https://huggingface.co/datasets/bezzam/vibevoice_samples/resolve/main/realtime_model/vibevoice_tts_german.wav",
},
],
}
]
outputs = pipe(text=chat_template, return_full_text=False)
print("\n" + "=" * 60)
print("RAW PIPELINE OUTPUT")
print("=" * 60)
print(outputs[0]["generated_text"])
print("\n" + "=" * 60)
print("DICT OUTPUT")
print("=" * 60)
dict_output = pipe.processor.extract_speaker_dict(outputs[0]["generated_text"])
print(dict_output)
print("\n" + "=" * 60)
print("TRANSCRIPT OUTPUT")
print("=" * 60)
transcription = pipe.processor.extract_transcription(outputs[0]["generated_text"])
print(transcription)VibeVoiceAsrConfig
فئة transformers.VibeVoiceAsrConfig
< 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 = Noneacoustic_tokenizer_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonesemantic_tokenizer_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_token_id: int = 151648audio_bos_token_id: int = 151646audio_eos_token_id: int = 151647acoustic_tokenizer_chunk_size: int = 1440000 )
المعاملات
- acoustic_tokenizer_encoder_config (
Union[VibeVoiceAcousticTokenizerConfig, dict], اختياري) — كائن الإعدادات أو قاموس مُرمِّز الصوتيات. يستخرج هذا المُرمِّز السمات الصوتية من الصوت. - semantic_tokenizer_encoder_config (
Union[VibeVoiceAcousticTokenizerConfig, dict]، اختياري) — كائن الإعدادات أو قاموس مُجزِّئ الرموز الدلالية. يستخرج هذا المُجزِّئ الميزات الدلالية من الصوت. - text_config (
Union[dict, ~configuration_utils.PreTrainedConfig]، اختياري) — كائن الإعدادات أو قاموس العمود الفقري النصي. - audio_token_id (
int، اختياري، القيمة الافتراضية151648) — مؤشر رمز الصوت المستخدم كعلامة مؤقتة للصوت المُدخل. - audio_bos_token_id (
int، اختياري، القيمة الافتراضية 151646) — مؤشر رمز بداية تسلسل الصوت. - audio_eos_token_id (
int, اختياري، القيمة الافتراضية 151647) — مؤشر رمز نهاية التسلسل الصوتي. - acoustic_tokenizer_chunk_size (
int, اختياري، القيمة الافتراضية 1440000) — حجم المقطع (بوحدة عدد العينات) المستخدم عند معالجة مدخلات الصوت بواسطة المُرمِّز. القيمة الافتراضية تعادل 60 ثانية عند تردد 24kHz.
هذه فئة الإعدادات المخزنة لإعدادات نموذج VibeVoiceAsrModel. تُستخدم لاستحداث نموذج Vibevoice Asr وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ microsoft/VibeVoice-ASR-HF
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import VibeVoiceAsrForConditionalGeneration, VibeVoiceAsrConfig, VibeVoiceAcousticTokenizerEncoderConfig, Qwen2Config
>>> # Initializing VibeVoice acoustic and semantic encoder configs
>>> acoustic_config = VibeVoiceAcousticTokenizerEncoderConfig()
>>> semantic_config = VibeVoiceAcousticTokenizerEncoderConfig(hidden_size=128)
>>> # Initializing a Qwen2 config
>>> text_config = Qwen2Config()
>>> # Initializing a VibeVoice ASR configuration
>>> configuration = VibeVoiceAsrConfig(acoustic_config, semantic_config, text_config)
>>> # Initializing a model from the vibevoice_asr style configuration
>>> model = VibeVoiceAsrForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVibeVoiceAsrProcessor
فئة transformers.VibeVoiceAsrProcessor
< source >( feature_extractortokenizerchat_template = Noneaudio_token = '<|box_start|>'audio_bos_token = '<|object_ref_start|>'audio_eos_token = '<|object_ref_end|>'audio_duration_token = '<|AUDIO_DURATION|>' )
المعاملات
- feature_extractor (
VibeVoiceAcousticTokenizerFeatureExtractor) — مستخرج الميزات لمعالجة الصوت. - tokenizer (
Qwen2TokenizerFast) — المُرمِّز لمعالجة النصوص. - chat_template (
str، اختياري) — قالب Jinja يُستخدم لتحويل قوائم الرسائل في المحادثة إلى نص قابل للتجزئة. - audio_token (
str، اختياري، القيمة الافتراضية"<|box_start|>") — رمز الصوت الوهمي (placeholder) المستخدم في قالب المحادثة. - audio_bos_token (
str، اختياري، القيمة الافتراضية"<|object_ref_start|>") — رمز بداية التسلسل الصوتي (begin-of-sequence) الذي يجب استخدامه في قالب المحادثة. - audio_eos_token (
str، اختياري، القيمة الافتراضية"<|object_ref_end|>") — رمز نهاية التسلسل الصوتي الذي يجب استخدامه في قالب المحادثة. - audio_duration_token (
str، اختياري، القيمة الافتراضية"<|AUDIO_DURATION|>") — رمز موضع محدد (placeholder) لمدة الصوت الذي يجب استخدامه في قالب المحادثة.
ينشئ معالج VibeVoice ASR الذي يغلّف VibeVoiceAcousticTokenizerFeatureExtractor و Qwen2TokenizerFast في معالج واحد يرث كلتا وظيفتي استخراج السمات الصوتية ومعالج الرموز.
راجع call() لمزيد من المعلومات.
__call__
< source >( text: str | 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_asr.processing_vibevoice_asr.VibeVoiceAsrProcessorKwargs'> ) → BatchFeature
المعاملات
- text (
Union[str, list[str]]) — التسلسل أو الدفعة من التسلسلات المراد ترميزها. يمكن أن يكون كل تسلسل نصًا أو قائمة من النصوص (نص مُقسَّم مسبقًا إلى رموز). إذا مررت مدخلًا مُقسَّمًا مسبقًا إلى رموز، فاضبطis_split_into_words=Trueلتجنب الغموض مع المدخلات الدفعية. - audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]], اختياري) — الصوت أو مجموعة الأصوات التي سيتم تجهيزها. يمكن أن يكون كل صوت مصفوفة NumPy أو متجه PyTorch. في حالة استخدام مصفوفة NumPy أو متجه PyTorch، يجب أن يكون شكل كل صوت (C, T)، حيث C هو عدد القنوات، وT هو طول العينة للصوت. - output_labels (
bool، اختياري، الافتراضي=False) — ما إذا كان يجب إرجاع التسميات للتدريب. - return_tensors (
strأو TensorType, اختياري) — إذا تم تعيينه، فسيُعاد تينسورات من إطار عمل محدد. القيم المقبولة هي:'pt': إرجاع كائناتtorch.Tensorمن PyTorch.'np': إرجاع كائناتnp.ndarrayمن NumPy.
- **kwargs (ProcessingKwargs، اختياري) — خيارات معالجة إضافية لكل نمط (نص، صور، مقاطع فيديو، صوت). تُدرج المعلمات الخاصة بالنموذج أعلاه؛ راجع فئة TypedDict للحصول على القائمة الكاملة للحجج المدعومة.
يعيد
قاموس يحتوي على النص المُرمَّز (input_ids، attention_mask) وميزات الصوت (input_values، padding_mask).
apply_transcription_request
< source >( audio: typing.Union[str, list[str], numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]prompt: str | list[str] | None = Nonetokenize: bool = True**kwargs: *<class 'transformers.models.vibevoice_asr.processing_vibevoice_asr.VibeVoiceAsrProcessorKwargs'> ) → BatchFeature or list[str]
المعاملات
- audio (
str،list[str]،np.ndarray،torch.Tensor،list[np.ndarray]،list[torch.Tensor]) — الصوت المراد تحويله إلى نص. تُفسَّر السلاسل النصية كمسارات محلية أو عناوين URL وسيتم تحميلها تلقائيًا بواسطة مُحمِّل قالب المحادثة؛ بينما تُمرَّر مصفوفات NumPy ومُتجهات PyTorch مباشرةً. - prompt (
strأوlist[str]، اختياري) — موجّه(ات) مخصص(ة) لتضمينها في دور المستخدم كسياق إضافي. يجب أن تكون القائمة بنفس طول الدفعة. عند تعيينNone، لا يُوفَّر أي سياق إضافي. - tokenize (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم ترميز الأوامر (prompts) ومعالجة الصوت. إذا كانت القيمةFalse، فلن يتم تحميل الصوت وتُعاد الأوامر كنصوص مع بقاء محددات الصوت (audio placeholders) دون توسيع. عند تمريرها مع الصوت إلى المعالج،processor(text=prompts, audio=audio)، تُنتج نفس المخرجات كما لو كانتtokenize=True. - **kwargs —
حجج إضافية بالاسم تُمرَّر إلى apply_chat_template() (على سبيل المثال
text_kwargs،audio_kwargs، ...).
يعيد
BatchFeature أو list[str]
موجّه واحد لكل ملف صوتي عند tokenize=False، وإلا فإن المعالج يُخرج مخرجات جاهزة للتقديم إلى VibeVoiceAsrForConditionalGeneration.generate().
جهّز المدخلات للتعرف التلقائي على الكلام دون كتابة قالب المحادثة يدويًا.
decode
< source >( *argsreturn_format = 'raw'**kwargs )
المعاملات
- return_format (
str, اختياري, الافتراضي هو"raw") — الخيارات المتاحة هي:"raw": إرجاع قائمة من النصوص المُفكَّكة الخام من مُجزِّئ الرموز، دون أي تحليل."parsed": إرجاع قائمة تحتوي على قوائم من كائنات القاموس المُحلَّلة لكل نطق متحدث مع الطوابع الزمنية."transcription_only": إرجاع قائمة من نصوص النسخ المستخرجة.
يُفرض
skip_special_tokensتلقائيًا (بشكل صارم) علىTrueفي حالتي"parsed"و"transcription_only".
مرّر الحُجج إلى decode() وقم، عند الحاجة، بتحليل المخرجات المشابهة للقاموس.
VibeVoiceAsrModel
فئة transformers.VibeVoiceAsrModel
< source >( config: VibeVoiceAsrConfig )
المعاملات
- config (VibeVoiceAsrConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج VibeVoice ASR (المُرمِّز الصوتي + المُرمِّز الدلالي + المُسقط متعدد الوسائط + نموذج اللغة)، دون رأس نمذجة اللغة.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinput_values: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.BoolTensor] = Nonesample: bool = True**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → VibeVoiceAsrModelOutputWithPast or tuple(torch.Tensor)
المعاملات
- input_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.
- attention_mask (
torch.Tensorبشكل(batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي[0, 1]:- 1 للرموز التي لم تُقنَّع،
- 0 للرموز التي تم إخفاؤها.
- past_key_values (
~cache_utils.Cache, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً منpast_key_valuesالذي يعيده النموذج في مرحلة سابقة من فك الترميز، عندماuse_cache=Trueأوconfig.use_cache=True.يُسمح فقط بمرجع Cache كمدخل، راجع دليل ذاكرة kv لدينا. إذا لم يتم تمرير
past_key_values، فسيتم تهيئة DynamicCache افتراضياً.سيُخرج النموذج نفس صيغة الكاش التي تُمرَّر كمدخل.
عند استخدام
past_key_values، يُتوقَّع من المستخدم إدخالinput_idsغير المعالجة فقط (تلك التي لم تُقدَّم حالات مفاتيحها وقيمها السابقة إلى هذا النموذج) بأبعاد(batch_size, unprocessed_length)بدلاً من جميعinput_idsبأبعاد(batch_size, sequence_length). - inputs_embeds (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - input_values (
torch.Tensorمن الشكل(batch_size, sequence_length)، اختياري) — قيم رقمية عشرية لموجة الصوت الخام المُدخلة. يمكن الحصول على هذه القيم عن طريق تحميل ملف صوتي من نوع.flacأو.wavفي مصفوفة من النوعlist[float]أوnumpy.ndarrayأوtorch.Tensor، على سبيل المثال باستخدام مكتبة torchcodec (pip install torchcodec) أو مكتبة soundfile (pip install soundfile). لتجهيز المصفوفة إلىinput_values، يجب استخدام AutoProcessor لإضافة الحشو والتحويل إلى تينسور من النوعtorch.Tensor. راجع VibeVoiceAsrProcessor.call() للتفاصيل. - padding_mask (
torch.BoolTensorمن الشكل(batch_size, sequence_length)، اختياري) — قناع لتجنّب تنفيذ العمليات على فهارس الحشو. - sample (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إضافة ضوضاء غاوسية إلى الكمّات الصوتية، كما في النموذج الأصلي (σ-VAE: يتم سحب مقياس الضوضاء لكل عنصر في الدفعة من N(0،vae_std)). إذا كانت القيمة False، يُستخدم مخرج المُشفِّر كما هو، وبالتالي يكون المخرج حتمياً.
يعيد
VibeVoiceAsrModelOutputWithPast أو tuple(torch.Tensor)
VibeVoiceAsrModelOutputWithPast أو مجموعة مرتبة من
torch.Tensor (في حال تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتماداً على الإعدادات (VibeVoiceAsrConfig) والمدخلات.
تُعيد طريقة VibeVoiceAsrModel الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
last_hidden_state (
torch.Tensorمن الشكل(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.hidden_states (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
attentions (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
audio_hidden_states (
torch.Tensor، اختياري) — حالات مخفية صوتية مُسقطَة.
VibeVoiceAsrForConditionalGeneration
فئة transformers.VibeVoiceAsrForConditionalGeneration
< source >( config: VibeVoiceAsrConfig )
المعاملات
- config (VibeVoiceAsrConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج VibeVoice ASR مع مُرمِّزات صوتية مُدرَّبة مسبقًا ونموذج لغوي.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinput_values: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.BoolTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0sample: bool = True**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → VibeVoiceAsrCausalLMOutputWithPast or tuple(torch.Tensor)
المعاملات
- input_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.
- attention_mask (
torch.Tensorبشكل(batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي[0, 1]:- 1 للرموز التي لم تُقنَّع،
- 0 للرموز التي تم إخفاؤها.
- past_key_values (
~cache_utils.Cache, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً منpast_key_valuesالذي يعيده النموذج في مرحلة سابقة من فك الترميز، عندماuse_cache=Trueأوconfig.use_cache=True.يُسمح فقط بمرجع Cache كمدخل، راجع دليل ذاكرة kv لدينا. إذا لم يتم تمرير
past_key_values، فسيتم تهيئة DynamicCache افتراضياً.سيُخرج النموذج نفس صيغة الكاش التي تُمرَّر كمدخل.
عند استخدام
past_key_values، يُتوقَّع من المستخدم إدخالinput_idsغير المعالجة فقط (تلك التي لم تُقدَّم حالات مفاتيحها وقيمها السابقة إلى هذا النموذج) بأبعاد(batch_size, unprocessed_length)بدلاً من جميعinput_idsبأبعاد(batch_size, sequence_length). - inputs_embeds (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - input_values (
torch.Tensorمن الشكل(batch_size, sequence_length)، اختياري) — قيم عشرية لموجة الصوت الخام المُدخلة. يمكن الحصول على هذه القيم عن طريق تحميل ملف صوتي من نوع.flacأو.wavفي مصفوفة من النوعlist[float]أوnumpy.ndarrayأوtorch.Tensor، على سبيل المثال باستخدام مكتبة torchcodec (pip install torchcodec) أو مكتبة soundfile (pip install soundfile). لتجهيز المصفوفة إلىinput_values، يجب استخدام AutoProcessor لإضافة الحشو والتحويل إلى تينسور من النوعtorch.Tensor. راجع VibeVoiceAsrProcessor.call() للتفاصيل. - padding_mask (
torch.BoolTensorمن الشكل(batch_size, sequence_length)، اختياري) — قناع لتجنّب تنفيذ العمليات على فهارس الحشو. - labels (
torch.LongTensorمن الشكل(batch_size, sequence_length)، اختياري) — التسميات لحساب خسارة نمذجة اللغة المقنّعة. يجب أن تكون الفهارس ضمن[0, ..., config.vocab_size]أو -100 (انظرinput_idsdocstring). يتم تجاهل الرموز التي فهارسها مضبوطة على-100(مقنّعة)، ولا تُحسب الخسارة إلا للرموز التي تسمياتها ضمن[0, ..., config.vocab_size]. - logits_to_keep (
Union[int, torch.Tensor]، اختياري، القيمة الافتراضية0) — إذا كانint، يتم حساب logits لآخرlogits_to_keepرموز. إذا كانت القيمة0، يتم حساب logits لجميعinput_ids(حالة خاصة). لا يُحتاج إلى logits إلا للرمز الأخير في عملية التوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة كبيرة، وهو أمر مهم بشكل ملحوظ للتسلسلات الطويلة أو حجم المفردات الكبير. إذا كانtorch.Tensor، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول التسلسل. يكون هذا مفيدًا عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول التسلسل). - sample (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إضافة ضوضاء غاوسية إلى الكمّات الصوتية، كما في النموذج الأصلي (σ-VAE: يتم سحب مقياس الضوضاء لكل عنصر في الدفعة من N(0،vae_std)). إذا كانت القيمة False، يُستخدم مخرج المُشفِّر كما هو، وبالتالي يكون المخرج حتمياً.
يعيد
VibeVoiceAsrCausalLMOutputWithPast أو tuple(torch.Tensor)
أمر VibeVoiceAsrCausalLMOutputWithPast أو مجموعة مرتبة من
torch.Tensor (في حال تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعدادات (VibeVoiceAsrConfig) والمدخلات.
تُعيد طريقة VibeVoiceAsrForConditionalGeneration الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
loss (
torch.Tensorof shape(1,), اختياري, يُعاد عند توفيرlabels) — خسارة نمذجة اللغة.logits (
torch.Tensorمن الشكل(batch_size, sequence_length, config.vocab_size)) — درجات التنبؤ.past_key_values (
Cache، اختياري) — كائن من نوع Cache.hidden_states (
tuple[torch.Tensor]، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
attentions (
tuple[torch.Tensor]، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
audio_hidden_states (
torch.Tensor، اختياري) — حالات مخفية صوتية مُسقطَة.