# VibeVoice

## نظرة عامة

[VibeVoice](https://huggingface.co/papers/2508.19205) هو إطار عمل جديد لتوليد كلام عالي الدقة وطويل المدة يتضمن عدة متحدثين، وذلك من خلال توظيف نهج الانتشار (diffusion) للرمز التالي ضمن بنية نموذج لغة كبير (LLM). صُمم هذا الإطار لالتقاط "الروح" الحقيقية للمحادثات، وهو مناسب بشكل خاص لتوليد محتوى صوتي مثل البودكاست والكتب الصوتية متعددة المشاركين.

يتوفر نقطتا تفتيش للنموذج في:
- [vibevoice/VibeVoice-1.5B-hf](https://huggingface.co/vibevoice/VibeVoice-1.5B-hf)
- [vibevoice/VibeVoice-7B-hf](https://huggingface.co/vibevoice/VibeVoice-7B-hf)

تمت مساهمة هذا النموذج من قِبل [Eric Bezzam](https://huggingface.co/bezzam).

## البنية

    

يتكامل إطار عمل VibeVoice مع ثلاثة مكونات رئيسية:
1. **مُرمّزات الكلام المستمرة:** مُرمّزات [صوتية](./vibevoice_acoustic_tokenizer) ودلالية متخصصة، حيث يستخدم المُرمّز الصوتي نموذج $\sigma$-VAE لتحقيق ضغط منخفض للغاية (7.5 رمز/ثانية، 3200x) من أجل قابلية التوسع والوفاء، بينما يستخدم المُرمّز الدلالي مهمة بديلة للتعرف الآلي على الكلام لاستخراج ميزات تركز على المحتوى.
2. **نموذج اللغة الكبير (LLM):** يستخدم Qwen2.5 (في إصداري 1.5B و7B) كنموذج تسلسل أساسي.
3. **رأس الانتشار على مستوى الرموز:** مشروط بحالة النموذج اللغوي الكبيرة المخفية، وهو المسؤول عن التنبؤ بخصائص VAE المستمرة بطريقة التدفق.

يتوفر نقطة الفحص الأصلية لنموذج VibeVoice-1.5B تحت منظمة [Microsoft](https://huggingface.co/microsoft/VibeVoice-1.5B) على Hugging Face.

## الميزات الرئيسية

- **التركيب الطويل**: يمكنه تركيب محادثات كلامية متعددة المتحدثين تصل مدتها إلى 90 دقيقة.
- **حوار متعدد المتحدثين**: قادر على توليد صوت يحتوي على ما يصل إلى 4 متحدثين.
- **جودة متقدمة**: يتفوق على الخطوط الأساسية في المقاييس الذاتية والموضوعية على حد سواء.
- **ضغط عالٍ**: يُحقَّق بواسطة مُرمِّز صوتي جديد يعمل بمعدل إطارات منخفض للغاية يبلغ 7.5 هرتز.
- **نموذج LLM قابل للتوسع**: يؤدي توسيع النموذج الأساسي LLM من 1.5 مليار إلى 7 مليارات إلى تحسين كبير في الجودة الإدراكية.

## الاستخدام

### الإعداد 

يُعدّ جدولة الضوضاء ضروريًا لأن توليد الصوت يعتمد على عملية الانتشار. وأبسط طريقة (والتي اتبعها مطوّر النموذج) هي استخدام جدولة ضوضاء من مكتبة `diffusers`. وبشكل افتراضي، سيقوم النموذج بإنشاء جدولة ضوضاء داخليًا باستخدام `diffusers`.
```
pip install diffusers
pip install soundfile   # for saving audio
```

### تحميل النموذج

```python
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)

```python
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

يمكن استنساخ صوت من خلال تقديم صوت مرجعي إلى جانب النص داخل قاموس قالب المحادثة.

```python
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}")
```

### إنشاء بودكاست من نص

فيما يلي مثال لتوليد محادثة بين متحدثين، حيث يتم استنساخ أصواتهما من خلال تقديم صوت مرجعي لكل معرف دور فريد في قالب المحادثة.

استخدم المثال أدناه أيضاً خيار `monitor_progress` لتتبع تقدم التوليد.

```python
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`:

```python
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}")
```

### استخدام خط الأنابيب

يمكن أيضًا تحميل VibeVoice كخط أنابيب. كما نُبيّن أدناه كيفية ضبط معاملات الانتشار.

```python
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 باستخدام الخسارة المُخرَجة من النموذج.

```python
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.5x بين الاستدلال المُجمَّع وغير المُجمَّع، راجع [هذا النص البرمجي](https://gist.github.com/ebezzam/c45b9fdee65f3029e17d566e30c59399).

```python
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]]

#### transformers.VibeVoiceConfig[[transformers.VibeVoiceConfig]]

```python
transformers.VibeVoiceConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, audio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, semantic_model_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, text_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, diffusion_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, pad_token_id: int = 151643, eos_token_id: int = 151643, audio_bos_token_id: int = 151652, audio_eos_token_id: int = 151653, audio_token_id: int = 151654, diffusion_loss_weight: float = 0.5)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/configuration_vibevoice.py#L49)

**المعاملات:**

audio_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`، *اختياري*) : كائن الإعداد أو قاموس العمود الفقري الصوتي.

semantic_model_config (`Union[AutoConfig, dict]`، *اختياري*) : كائن الإعدادات أو قاموس مُشفِّر مُجزِّئ الدلالات. يستخرج هذا المُجزِّئ السمات الدلالية من الصوت.

text_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`، *اختياري*) : كائن الإعداد أو قاموس العمود الفقري النصي.

diffusion_head_config (`Union[VibeVoiceDiffusionHeadConfig, dict]`، *اختياري*) : كائن الإعداد أو قاموس رأس الانتشار المستخدم لتوليد الكمونيات الصوتية.

pad_token_id (`int`، *اختياري*، القيمة الافتراضية `151643`) : معرّف الرمز المستخدم للتعبئة في المفردات.

eos_token_id (`int`، *اختياري*، القيمة الافتراضية `151643`) : معرّف الرمز المستخدم لنهاية البث في المفردات.

audio_bos_token_id (`int`، *اختياري*، القيمة الافتراضية 151652) : معرّف الرمز الذي يشير إلى بداية رموز الصوت.

audio_eos_token_id (`int`، *اختياري*، القيمة الافتراضية 151653) : معرّف الرمز الذي يشير إلى نهاية رموز الصوت.

audio_token_id (`int`، *اختياري*، القيمة الافتراضية `151654`) : فهرس رمز الصوت المستخدم كعلامة محجوزة للصوت المُدخل.

diffusion_loss_weight (`float`، *اختياري*، القيمة الافتراضية 0.5) : وزن خسارة الانتشار في حساب الخسارة الإجمالية. تُوزَّن خسارة الانتروبيا المتقاطعة لرأس نمذجة اللغة بـ`(1 - diffusion_loss_weight)`.

هذه فئة الإعدادات المخزنة لإعدادات VibeVoiceForConditionalGeneration. تُستخدم لإنشاء نموذج Vibevoice وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ [vibevoice/VibeVoice-1.5B-hf](https://huggingface.co/vibevoice/VibeVoice-1.5B-hf)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

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

## VibeVoiceDiffusionHeadConfig[[transformers.VibeVoiceDiffusionHeadConfig]]

#### transformers.VibeVoiceDiffusionHeadConfig[[transformers.VibeVoiceDiffusionHeadConfig]]

```python
transformers.VibeVoiceDiffusionHeadConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, hidden_size: int = 1536, latent_size: int = 64, num_hidden_layers: int = 4, intermediate_size: int = 4608, rms_norm_eps: float = 1e-05, hidden_act: str = 'silu', frequency_embedding_size: int = 256, diffusion_max_period: int = 10000, mlp_bias: bool = False)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/configuration_vibevoice.py#L24)

**المعاملات:**

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.

hidden_act (`str`، *اختياري*، القيمة الافتراضية `silu`) : دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، `"gelu"`، `"relu"`، `"silu"`، وما إلى ذلك.

frequency_embedding_size (`int`، *اختياري*، القيمة الافتراضية 256) : حجم التضمين الترددي الجيبوي (sinusoidal) لتشفير خطوة الزمن (timestep) في رأس الانتشار (diffusion head).

diffusion_max_period (`int`، *اختياري*، القيمة الافتراضية 10000) : الحد الأقصى للفترة الخاصة بتضمين التردد الجيبية في رأس الانتشار.

mlp_bias (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام انحياز في طبقات up_proj و down_proj و gate_proj ضمن طبقات MLP.

هذه فئة الإعدادات المخزنة لإعدادات VibeVoiceForConditionalGeneration. تُستخدم لإنشاء نموذج Vibevoice وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ [vibevoice/VibeVoice-1.5B-hf](https://huggingface.co/vibevoice/VibeVoice-1.5B-hf)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

## VibeVoiceProcessor[[transformers.VibeVoiceProcessor]]

#### transformers.VibeVoiceProcessor[[transformers.VibeVoiceProcessor]]

```python
transformers.VibeVoiceProcessor(feature_extractor, tokenizer, chat_template = None, audio_bos_token = '<|vision_start|>', audio_eos_token = '<|vision_end|>', audio_token = '<|vision_pad|>')
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/processing_vibevoice.py#L46)

**المعاملات:**

feature_extractor (`VibeVoiceAcousticTokenizerFeatureExtractor`) : مُستخرج الميزات هو مدخل إلزامي.

tokenizer (`Qwen2TokenizerFast`) : مُجزِّئ النص (tokenizer) هو مدخل إلزامي.

chat_template (`str`) : قالب Jinja لتحويل قوائم الرسائل في المحادثة إلى نص قابل للتحويم.

audio_bos_token (`str`، *اختياري*، القيمة الافتراضية `"<|vision_start|>"`) : الرمز المستخدم للإشارة إلى بداية توليد الصوت.

audio_eos_token (`str`، *اختياري*، القيمة الافتراضية `"<|vision_end|>"`) : الرمز المستخدم للإشارة إلى نهاية توليد الصوت.

audio_token (`str`، *اختياري*، القيمة الافتراضية `"<|vision_pad|>"`) : الرمز المستخدم للإشارة إلى مواصلة توليد الصوت.

ينشئ VibeVoiceProcessor الذي يجمع بين مستخرج الميزات ومجزئ الرموز في معالج واحد.

يوفر [VibeVoiceProcessor](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceProcessor) جميع وظائف [VibeVoiceAcousticTokenizerFeatureExtractor](/docs/transformers/main/ar/model_doc/vibevoice_acoustic_tokenizer#transformers.VibeVoiceAcousticTokenizerFeatureExtractor) و[Qwen2TokenizerFast](/docs/transformers/main/ar/model_doc/qwen2#transformers.Qwen2Tokenizer). راجع [~VibeVoiceAcousticTokenizerFeatureExtractor](/docs/transformers/main/ar/model_doc/vibevoice_acoustic_tokenizer#transformers.VibeVoiceAcousticTokenizerFeatureExtractor) و[~Qwen2TokenizerFast](/docs/transformers/main/ar/model_doc/qwen2#transformers.Qwen2Tokenizer) لمزيد من المعلومات.

#### __call__[[transformers.VibeVoiceProcessor.__call__]]

```python
__call__(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] = None, output_labels: bool | None = False, **kwargs: *<class 'transformers.models.vibevoice.processing_vibevoice.VibeVoiceProcessorKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/processing_vibevoice.py#L98)

**المعاملات:**

text (`str`, `List[str]`) : النص (أو النصوص) المُدخل للمعالجة، والذي يُحضَّر عادةً باستخدام apply_chat_template مع رموز محجوزة (placeholders) للرموز الصوتية.

audio (`List[Union[str, np.ndarray]]`، *اختياري*) : عينات صوتية لاستنساخ صوت المتحدث. يجب أن تتطابق مع عدد رموز الصوت الوهمية في النص.

output_labels (`bool`، *اختياري*، الافتراضي=False) : ما إذا كان يجب إرجاع التسميات للتدريب.

- ****kwargs** : حُجج إضافية تُمرَّر إلى مُجزِّئ النص ومستخرج الميزات.

return_tensors (`str` أو [TensorType](/docs/transformers/main/ar/internal/file_utils#transformers.TensorType)، *اختياري*) : إذا تم تعيينه، فسيُرجع تينسورات من إطار عمل محدد. القيم المقبولة هي:  - `'pt'`: يُرجع كائنات `torch.Tensor` من PyTorch. - `'np'`: يُرجع كائنات `np.ndarray` من NumPy.

- ****kwargs** ([ProcessingKwargs](/docs/transformers/main/ar/main_classes/processors#transformers.ProcessingKwargs)، *اختياري*) : خيارات معالجة إضافية لكل نمط (نص، صور، مقاطع فيديو، صوت). تُدرج المعلمات الخاصة بالنموذج أعلاه؛ راجع فئة TypedDict للحصول على القائمة الكاملة للحجج المدعومة.

**يعيد:** [BatchFeature](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.BatchFeature)

[BatchFeature](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.BatchFeature) يحتوي على الحقول التالية:
- **input_ids** -- قائمة معرّفات الرموز التي ستُمرَّر إلى النموذج.
- **attention_mask** -- قائمة بالفهارس تحدد الرموز التي يجب على النموذج الانتباه إليها (عندما يكون `return_attention_mask=True`).
- **input_values** -- قائمة بقيم الصوت التي تُغذّى بها النموذج. تُعاد عندما لا تكون `audio` مساوية لـ`None`.
- **padding_mask** -- قائمة من الفهارس تحدد إطارات الصوت التي يجب أن يوليها النموذج اهتمامه. تُعاد عندما لا تكون `audio` قيمة `None`.
- **labels** -- تسميات لتدريب نموذج اللغة. يتم إخفاء رموز الحشو ورموز الانتشار الصوتي باستخدام القيمة -100 (حيث تُستبدل تمثيلات رموز الانتشار الصوتي بخصائص الصوت، لذا فإن هوية هذه الرموز ليست هدفاً ذا معنى). تُحافظ رموز بداية/نهاية الصوت (bos/eos) ورمز نهاية النص (eos) على وضعها كأهداف حتى يتعلم نموذج اللغة متى يبدأ التوليد الصوتي ومتى يتوقف. تُعاد هذه التسميات عند تعيين `output_labels=True`.
- **acoustic_loss_mask** -- قناع منطقي للمواقع التي يُحسب فيها خسارة الانتشار. تكون قيمته True في مواقع رموز انتشار الصوت. يُعاد عند تعيين `output_labels=True`.

## VibeVoiceForConditionalGeneration[[transformers.VibeVoiceForConditionalGeneration]]

#### transformers.VibeVoiceForConditionalGeneration[[transformers.VibeVoiceForConditionalGeneration]]

```python
transformers.VibeVoiceForConditionalGeneration(config: VibeVoiceConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/modeling_vibevoice.py#L365)

**المعاملات:**

config ([VibeVoiceConfig](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج VibeVoice، الذي يتكون من نموذج لغوي، ومُرمِّزات صوتية، ومُوصِّلات، ورأس انتشار.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.VibeVoiceForConditionalGeneration.forward]]

```python
forward(input_ids: LongTensor = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, logits_to_keep: int | slice = 0, input_values: typing.Optional[torch.Tensor] = None, padding_mask: typing.Optional[torch.BoolTensor] = None, acoustic_loss_mask: typing.Optional[torch.BoolTensor] = None, noise_scheduler: object | None = None, ddpm_batch_multiplier: int = 4, num_diffusion_steps: int = 10, sample: bool = True, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/modeling_vibevoice.py#L420)

**المعاملات:**

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

labels (`torch.LongTensor` من الشكل `(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) لآخر `logits_to_keep` رموز. إذا كانت `0`، يتم حساب القيم اللوجستية لجميع `input_ids` (حالة خاصة). لا تُحتاج قيم اللوجستيات إلا للرمز الأخير في عملية التوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة، وهو أمر ذو أهمية كبيرة للترتيبات الطويلة أو لحجم المفردات الكبير. إذا كان `torch.Tensor`، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول الترتيب. وهذا مفيد عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول الترتيب).

input_values (`torch.Tensor`، *اختياري*) : موجة صوتية مُعالَجة مسبقًا لاستنساخ الصوت.

padding_mask (`torch.BoolTensor`، *اختياري*) : أقنعة تُظهر الإطارات المدخلة الصالحة.

acoustic_loss_mask (`torch.BoolTensor`، *اختياري*) : قناع لحساب خسارة الانتشار على الرموز الصوتية المحددة فقط.

noise_scheduler (`object`، *اختياري*) : مطلوب للتدريب لحساب أهداف الضوضاء لخسارة الانتشار. افتراضيًا، يستخدم إعدادات مجدول الضوضاء المحددة في `generation_config` الخاص بالنموذج.

ddpm_batch_multiplier (`int`، *اختياري*، القيمة الافتراضية 4) : في التدريب، عدد عينات الضوضاء التي يجب توليدها لكل رمز صوتي لحساب خسارة الانتشار (diffusion loss)، مما قد يساعد في استقرار التدريب.

num_diffusion_steps (`int`، *اختياري*، القيمة الافتراضية 10) : في التدريب، عدد خطوات الانتشار المستخدمة. تكون القيمة الافتراضية 10 إذا لم تُقدَّم.

sample (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إضافة ضوضاء غاوسية إلى الكمّات الصوتية، كما في النموذج الأصلي (σ-VAE: يتم سحب مقياس الضوضاء لكل عنصر في الدفعة من N(0، `vae_std`)). إذا كانت القيمة False، يُستخدم مخرج المُشفِّر كما هو، وبالتالي يكون المخرج حتمياً.

**يعيد:** `VibeVoiceCausalLMOutputWithPast` أو `tuple(torch.Tensor)`

`VibeVoiceCausalLMOutputWithPast` أو مجموعة مرتبة من `torch.Tensor` (في حال تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعدادات ([VibeVoiceConfig](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceConfig)) والمدخلات.

تتجاوز طريقة [VibeVoiceForConditionalGeneration](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceForConditionalGeneration) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **last_hidden_state** (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`) -- تسلسل من حالات الإخفاء (hidden-states) عند مخرج الطبقة الأخيرة من النموذج.

  إذا تم استخدام `past_key_values`، فإن الحالة المخفية الأخيرة فقط من التسلسلات ذات الشكل `(batch_size, 1, hidden_size)` هي التي تُخرج.
- **past_key_values** (`Cache`، *اختياري*، يُعاد عند تمرير `use_cache=True` أو عند تعيين `config.use_cache=True`) -- هو كائن من نوع [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache). لمزيد من التفاصيل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache).

  تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي، وفي كتل الانتباه المتقاطع اختياريًا إذا كان `config.is_encoder_decoder=True`) يمكن استخدامها (انظر مدخل `past_key_values`) لتسريع فك الترميز التسلسلي.
- **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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
- **loss** (`torch.Tensor` من الشكل `(1,)`، *اختياري*، يُعاد عند توفير `labels`) -- خسارة نمذجة اللغة (لتوقع الرمز التالي).
- **logits** (`torch.Tensor` من الشكل `(batch_size, sequence_length, config.vocab_size)`) -- درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).
- **audio_features** (`torch.Tensor` من الشكل `(batch_size, sequence_length, feature_size)`، *اختياري*) -- ميزات صوتية مستخرجة يمكن استخدامها لتكييف نموذج اللغة.

مثال:

```python
>>> 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[[transformers.VibeVoiceForConditionalGeneration.generate]]

```python
generate(inputs: typing.Optional[torch.Tensor] = None, generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, logits_processor: transformers.generation.logits_process.LogitsProcessorList | None = None, stopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = None, prefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = None, synced_gpus: bool | None = None, assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None, streamer: typing.Optional[ForwardRef('BaseStreamer')] = None, negative_prompt_ids: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, custom_generate: str | collections.abc.Callable | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L2581)

**المعاملات:**

inputs (`torch.Tensor` ذو شكل متغير حسب النمط، *اختياري*) : التسلسل المستخدم كموجّه للتوليد أو كمدخلات للنموذج إلى المُشفِّر. إذا كانت `None`، يهيّئ该方法 `bos_token_id` وحجم دفعة يساوي 1. بالنسبة لنماذج المُفكِّك فقط، يجب أن تكون `inputs` بصيغة `input_ids`. أما بالنسبة لنماذج المُشفِّر-المُفكِّك، فيمكن أن تمثل *inputs* أيّاً من `input_ids` أو `input_values` أو `input_features` أو `pixel_values`.

generation_config ([GenerationConfig](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationConfig)، *اختياري*) : إعدادات التوليد التي سيتم استخدامها كإعدادات أساسية لاستدعاء التوليد. أي `**kwargs` تُمرَّر إلى generate وتطابق سمات `generation_config` ستُلغي قيمها. إذا لم يتم تقديم `generation_config`، فسيتم استخدام الإعداد الافتراضي، الذي له أولوية تحميل كالتالي: 1) من ملف النموذج `generation_config.json`، إذا كان موجودًا؛ 2) من إعدادات النموذج. يُرجى ملاحظة أن المعاملات غير المحددة ستورث القيم الافتراضية لـ [GenerationConfig](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationConfig)، والتي يجب الرجوع إلى توثيقها لضبط توليد المعاملات.

logits_processor (`LogitsProcessorList`، *اختياري*) : معالجات logits مخصصة تكمل معالجات logits الافتراضية المبنية من الحُجج وإعدادات التوليد. إذا تم تمرير معالج logits تم إنشاؤه مسبقًا باستخدام الحُجج أو إعدادات التوليد، فسيتم طرح خطأ. هذه الميزة مخصصة للمستخدمين المتقدمين.

stopping_criteria (`StoppingCriteriaList`، *اختياري*) : معايير إيقاف مخصصة تكمل معايير الإيقاف الافتراضية المبنية من الحجج وإعدادات التوليد. إذا تم تمرير معيار إيقاف تم إنشاؤه مسبقًا باستخدام الحجج أو إعدادات التوليد، فسيتم طرح خطأ. إذا كان معيار الإيقاف الخاص بك يعتمد على مدخل `scores`، فتأكد من تمرير `return_dict_in_generate=True, output_scores=True` إلى `generate`. هذه الميزة مخصصة للمستخدمين المتقدمين.

prefix_allowed_tokens_fn (`Callable[[int, torch.Tensor], list[int]]`، *اختياري*) : إذا تم توفيره، فإن هذه الدالة تُقيّد بحث الحزمة (beam search) على الرموز المسموح بها فقط في كل خطوة. وإذا لم يُوفَّر، فلا يُطبَّق أي قيد. تتلقى هذه الدالة حجتين: معطّف الدفعة `batch_id` و`input_ids`. ويجب أن تُرجع قائمة بالرموز المسموح بها لخطوة التوليد التالية، مشروطةً بمعطّف الدفعة `batch_id` والرموز المولَّدة سابقًا `inputs_ids`. يُعدّ هذا الحُجّة مفيدًا للتوليد المقيد المشروط على البادئة، كما هو موصوف في [Autoregressive Entity Retrieval](https://huggingface.co/papers/2010.00904).

synced_gpus (`bool`، *اختياري*) : ما إذا كان يجب مواصلة تشغيل حلقة while حتى max_length. ما لم يتم تجاوز ذلك، سيُضبط هذا العلم على `True` عند استخدام `FullyShardedDataParallel` أو DeepSpeed ZeRO Stage 3 مع عدة وحدات معالجة رسومية (GPU) لتجنب حدوث تعطل (deadlock) إذا انتهت وحدة معالجة رسومية من التوليد قبل وحدات أخرى. وإلا، يكون الافتراضي `False`.

assistant_model (`PreTrainedModel`، *اختياري*) : نموذج مساعد يمكن استخدامه لتسريع عملية التوليد. يجب أن يكون لدى النموذج المساعد مُجزِّئ (tokenizer) مطابق تمامًا. يتحقق التسريع عندما يكون التنبؤ بالرموز المرشحة باستخدام النموذج المساعد أسرع بكثير من تشغيل عملية التوليد بالنموذج الذي تستدعي منه generate. وعليه، يجب أن يكون النموذج المساعد أصغر بكثير.

streamer (`BaseStreamer`، *اختياري*) : كائن Streamer الذي سيُستخدم لبثّ التسلسلات المولّدة. تُمرَّر الرموز المولّدة عبر `streamer.put(token_ids)`، ويتحمّل مُبثّ البيانات مسؤولية أي معالجة إضافية.

negative_prompt_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : النص التوضيحي السلبي المطلوب لبعض المعالجات مثل CFG. يجب أن يتطابق حجم الدفعة مع حجم دفعة الإدخال. هذه ميزة تجريبية، وقد تخضع لتغييرات كاسرة في واجهة برمجة التطبيقات في الإصدارات المستقبلية.

negative_prompt_attention_mask (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : Attention_mask الخاص بـ `negative_prompt_ids`.

custom_generate (`str` أو `Callable`، *اختياري*) : أحد الخيارات التالية: - `str` (اسم مستودع في Hugging Face Hub): يشغّل دالة `generate` المخصصة المعرّفة في `custom_generate/generate.py` داخل ذلك المستودع بدلاً من طريقة `generate` القياسية. يستبدل المستودع منطق التوليد بالكامل، وقد يختلف نوع الإرجاع. - `str` (مسار مستودع محلي): نفس ما سبق لكن من مسار محلي. تتطلب المجلدات المحلية أيضاً `trust_remote_code=True` لأن `custom_generate/generate.py` المحلي يُنفَّذ. - `Callable`: ستقوم `generate` بتنفيذ خطوات تجهيز المدخلات المعتادة، ثم تستدعي الدالة القابلة للاستدعاء المُقدَّمة لتشغيل حلقة فك الترميز. لمزيد من المعلومات، راجع [التوثيق](../../generation_strategies#custom-generation-methods).

kwargs (`dict[str, Any]`، *اختياري*) : تخصيص مؤقت لـ `generation_config` و/أو معاملات إضافية خاصة بالنموذج (kwargs) سيتم تمريرها إلى دالة `forward` في النموذج. إذا كان النموذج من نوع المُشفِّر-المُفكِّك (encoder-decoder)، فيجب ألا تُضاف بادئة للمعاملات الخاصة بالمُشفِّر، بينما يجب أن تُضاف بادئة *decoder_* للمعاملات الخاصة بالمُفكِّك.

**يعيد:** [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) أو `torch.LongTensor`

[ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) (إذا كان `return_dict_in_generate=True` أو عندما يكون `config.return_dict_in_generate=True`) أو `torch.LongTensor`.

إذا لم يكن النموذج *نموذجاً* من نوع المُشفِّر-المُفكِّك (`model.config.is_encoder_decoder=False`)، فإن أنواع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) الممكنة هي:

- [GenerateDecoderOnlyOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateDecoderOnlyOutput)،
- [GenerateBeamDecoderOnlyOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateBeamDecoderOnlyOutput)

إذا كان النموذج من نوع مُشفِّر-مُفكِّك (`model.config.is_encoder_decoder=True`)، فإن أنواع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) الممكنة هي:

- [GenerateEncoderDecoderOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateEncoderDecoderOutput)،
- [GenerateBeamEncoderDecoderOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateBeamEncoderDecoderOutput)

يولّد تسلسلات من معرّفات الرموز (token ids) للنماذج التي تحتوي على رأس لنمذجة اللغة.

تُضبط معظم المعلمات التي تتحكم في التوليد في `generation_config`، والتي إذا لم تُمرَّر، فسيتم ضبطها على إعدادات التوليد الافتراضية للنموذج. يمكنك تجاوز أي `generation_config` عن طريق تمرير المعلمات المقابلة إلى generate()، على سبيل المثال `.generate(inputs, num_beams=4, do_sample=True)`.

لمراجعة عامة لاستراتيجيات التوليد وأمثلة الأكواد، راجع [الدليل التالي](../generation_strategies).

## VibeVoiceModel[[transformers.VibeVoiceModel]]

#### transformers.VibeVoiceModel[[transformers.VibeVoiceModel]]

```python
transformers.VibeVoiceModel(config: VibeVoiceConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/modeling_vibevoice.py#L241)

**المعاملات:**

config ([VibeVoiceConfig](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج VibeVoice الذي يتكون من مُرمّزات صوتية وهيكل أساسي لنموذج لغة كبير (LLM)، دون رأس لنمذجة اللغة.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.VibeVoiceModel.forward]]

```python
forward(input_ids: LongTensor = None, inputs_embeds: typing.Optional[torch.Tensor] = None, input_values: typing.Optional[torch.Tensor] = None, padding_mask: typing.Optional[torch.BoolTensor] = None, sample: bool = True, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/modeling_vibevoice.py#L322)

**المعاملات:**

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

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](/docs/transformers/main/ar/model_doc/auto#transformers.AutoProcessor) لإضافة الحشو والتحويل إلى متجه من النوع `torch.Tensor`. راجع [VibeVoiceProcessor.__call__()](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceProcessor.__call__) للتفاصيل.

padding_mask (`torch.Tensor` من الشكل `(batch_size, padded_audio_length)`) : قناع الحشو لإزالة الأجزاء المحشوة من الصوت.

sample (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إضافة ضوضاء غاوسية إلى الكمّات الصوتية، كما في النموذج الأصلي (σ-VAE: يتم سحب مقياس الضوضاء لكل عنصر في الدفعة من N(0, `vae_std`)). إذا كانت القيمة False، يُستخدم مخرج المُشفِّر كما هو، وبالتالي يكون المخرج حتميًا.

**يعيد:** [BaseModelOutputWithPast](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) أو `tuple(torch.Tensor)`

[BaseModelOutputWithPast](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) أو مجموعة مرتبة من `torch.Tensor` (في حال تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([VibeVoiceConfig](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceConfig)) والمدخلات.

تُعيد طريقة [VibeVoiceModel](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceModel) الخاصة بالتقديم (forward) تعريف الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **last_hidden_state** (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`) -- تسلسل من حالات الإخفاء (hidden-states) عند مخرج الطبقة الأخيرة من النموذج.

  إذا تم استخدام `past_key_values`، فإن الحالة المخفية الأخيرة فقط من التسلسلات ذات الشكل `(batch_size, 1, hidden_size)` هي التي تُخرج.
- **past_key_values** (`Cache`، *اختياري*، يُعاد عند تمرير `use_cache=True` أو عند تعيين `config.use_cache=True`) -- هو كائن من نوع [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache). لمزيد من التفاصيل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache).

  تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي، وفي كتل الانتباه المتقاطع اختياريًا إذا كان `config.is_encoder_decoder=True`) يمكن استخدامها (انظر مدخل `past_key_values`) لتسريع فك الترميز التسلسلي.
- **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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

#### get_audio_features[[transformers.VibeVoiceModel.get_audio_features]]

```python
get_audio_features(input_values: Tensor, padding_mask: Tensor, sample: bool = True, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/modeling_vibevoice.py#L258)

**المعاملات:**

input_values (`torch.Tensor`) : قيم من نوع Float لموجة الصوت (المُعايَرة).

padding_mask (`torch.Tensor` من الشكل `(batch_size, padded_audio_length)`) : قناع الحشو لإزالة الأجزاء المحشوة من الصوت.

sample (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إضافة ضوضاء غاوسية إلى الكمّات الصوتية، كما في النموذج الأصلي (σ-VAE: يتم سحب مقياس الضوضاء لكل عنصر في الدفعة من N(0, `vae_std`)). إذا كانت القيمة False، يُستخدم مخرج المُشفِّر كما هو، وبالتالي يكون المخرج حتمياً.

**يعيد:** [BaseModelOutputWithPooling](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPooling) أو `tuple(torch.Tensor)`

[BaseModelOutputWithPooling](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPooling) أو مجموعة مرتبة من `torch.Tensor` (في حال تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([VibeVoiceConfig](/docs/transformers/main/ar/model_doc/vibevoice#transformers.VibeVoiceConfig)) والمدخلات.

تُستخدم هذه الطريقة للحصول على تمثيلات الصوت (التي تحل محل رموز الصوت الوهمية في تسلسل الإدخال) والميزات الصوتية (المستخدمة كهدف للانتشار) من موجة الصوت المدخلة.

- **last_hidden_state** (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`) -- تسلسل من حالات الإخفاء (hidden-states) عند مخرج الطبقة الأخيرة من النموذج.
- **pooler_output** (`torch.Tensor` من الشكل `(batch_size, hidden_size)`) -- حالة الطبقة المخفية الأخيرة للرمز الأول في التسلسل (رمز التصنيف) بعد المعالجة الإضافية عبر الطبقات المستخدمة في مهمة ما قبل التدريب المساعدة. على سبيل المثال، بالنسبة لعائلة نماذج BERT، تُرجع هذه الخاصية رمز التصنيف بعد معالجته عبر طبقة خطية ودالة تفعيل tanh. يتم تدريب أوزان الطبقة الخطية من هدف التنبؤ بالجملة التالية (التصنيف) أثناء ما قبل التدريب.
- **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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

#### get_placeholder_mask[[transformers.VibeVoiceModel.get_placeholder_mask]]

```python
get_placeholder_mask(input_ids: LongTensor, inputs_embeds: Tensor, audio_features: Tensor)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vibevoice/modeling_vibevoice.py#L298)

يحصل على قناع العلامات الوهمية متعددة الوسائط من `input_ids` أو `inputs_embeds`، ويتحقق من أن عدد رموز العلامات الوهمية يساوي طول الميزات متعددة الوسائط. إذا اختلفت الأطوال، يتم رفع خطأ.

