Transformers documentation

Pocket TTS

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

تمت مساهمة هذا النموذج في Hugging Face Transformers في 2026-10-20.

Pocket TTS

نظرة عامة

نموذج Pocket TTS هو نموذج تحويل النص إلى كلام من تطوير Kyutai يحتوي على 100 مليون معامل، وهو Continuous Audio Language Model يعمل بسرعة تتجاوز الزمن الحقيقي على المعالج المركزي. يقوم محول سببي (causal transformer) بإخراج كامن صوتي مستمر واحد لكل إطار (12.5 هرتز) عبر رأس تدفق من خطوة واحدة، بينما يقرر رأس نهاية الكلام متى يتوقف.

يحتوي المعالج على مُرمِّز الصوت الخاص بـ Pocket TTS، وهو مُرمِّز مبني على Mimi يقوم بتشفير أوامر الصوت وفك تشفير الكمّات المولَّدة إلى صوت بتردد 24 كيلوهرتز. وتُشحن الأصوات المُعرَّفة مسبقًا كذاكرة KV (voices/).

تم إصدار رأسَي تدفّق: التلقائي الذاتي لانغرانج (flow_type="lsd"، الافتراضي) والمنجرف (flow_type="drifting"، english_drifting_26-09). يتم دعم الضبط الدقيق، راجع التدريب.

تمت مساهمة هذا النموذج من قِبل Eustache Le Bihan. الكود الأصلي هو kyutai-labs/pocket-tts.

نصائح للاستخدام

  • جهّز المدخلات باستخدام apply_chat_template() (رسالة user واحدة لكل نص، مع add_generation_prompt=True). يقوم المُطبِّع (normalizer) الخاص بمُجزِّئ الرموز (tokenizer) بتجهيز النص على غرار النص الأصلي، مع اعتماد إعدادات لغة نقطة التفتيش (checkpoint).
  • يعيد generate القيم audio_latents وaudio_latents_mask؛ قم بفك ترميزها باستخدام PocketTTSProcessor.decode().
  • يُعيَّن max_new_tokens افتراضيًا بميزانية تعتمد على طول النص، ويتوقف التوليد بعد تجاوز eos_threshold مباشرةً.
  • do_sample=False يطابق الأصل عند درجة حرارة 0. عند استخدام العينة، تكون temperature (الافتراضي 0.3) هي تباين الضوضاء الأولية للتدفق.
  • قسّم النص الطويل باستخدام PocketTTSProcessor.split_text()، بحيث يحتوي كل جزء على محادثة واحدة.

الاستخدام

الصوت

يمكن منح الصوت بثلاث طرق.

1. استنساخ تسجيل: عنصر audio في المحادثة.

from transformers import AutoModelForTextToWaveform, AutoProcessor

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

url = "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/en-Alice_woman.wav"
conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "url": url},
            {"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."},
        ],
    }
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "cloned.wav")

2. الكمونيات المحسوبة مسبقًا: عنصر audio فارغ، مع تمرير الكمونيات إلى المعالج.

from transformers import AutoModelForTextToWaveform, AutoProcessor
from transformers.audio_utils import load_audio

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

# e.g. a recording encoded once by the processor's audio tokenizer,
# to reuse without re-encoding it
url = "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/en-Alice_woman.wav"
features = processor.feature_extractor(
    load_audio(url, sampling_rate=24000), sampling_rate=24000
).to(processor.audio_tokenizer.device)
# (num_frames, latent_dim)
voice = processor.audio_tokenizer.encode(**features).latents[0]

conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio"},
            {"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."},
        ],
    }
]
inputs = processor.apply_chat_template(
    conversation,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "latents.wav")

3. السياق المخبأ: مخزن KV الخاص بمرجع الصوت، ويُمرَّر على شكل past_key_values. تستخدم الأصوات المرفقة (voices/) هذا الشكل.

from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForTextToWaveform, AutoProcessor, DynamicCache

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

voice = load_file(hf_hub_download(model_id, "voices/alba.safetensors"))
layers = []
for i, layer in enumerate(model.model.layers):
    # each layer's cache on that layer's device
    device = layer.self_attn.k_proj.weight.device
    layers.append(
        (voice[f"layers.{i}.keys"].to(device), voice[f"layers.{i}.values"].to(device))
    )
voice_cache = DynamicCache(layers, config=model.config)

conversation = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."}],
    }
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

outputs = model.generate(**inputs, past_key_values=voice_cache)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "cached.wav")

الدفعات والنص الطويل

معالجة عدة نصوص وأصوات دفعة واحدة، مع تقسيم النص الطويل إلى مقاطع:

import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForTextToWaveform, AutoProcessor, DynamicCache

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")


def load_voices(names):
    """The shipped voices, one per conversation, as one cache, left-padded to the
    longest voice, and the mask of their positions.

    `generate` extends the cache: load it for every call.
    """
    voices = [
        load_file(hf_hub_download(model_id, f"voices/{name}.safetensors"))
        for name in names
    ]
    lengths = [voice["layers.0.keys"].shape[2] for voice in voices]
    length = max(lengths)
    layers = []
    for i, layer in enumerate(model.model.layers):
        device = layer.self_attn.k_proj.weight.device
        keys, values = (
            torch.cat(
                [
                    torch.nn.functional.pad(voice[f"layers.{i}.{kind}"], (0, 0, length - n, 0))
                    for voice, n in zip(voices, lengths)
                ]
            ).to(device)
            for kind in ("keys", "values")
        )
        layers.append((keys, values))
    mask = torch.tensor([[0] * (length - n) + [1] * n for n in lengths])
    return DynamicCache(layers, config=model.config), mask


text = (
    "A first sentence that is long enough to be worth splitting. "
    "Then a second one, and a third one for good measure."
)
chunks = processor.split_text(text)
conversations = [
    [{"role": "user", "content": [{"type": "text", "text": chunk}]}]
    for chunk in chunks + ["Hello world"]
]
inputs = processor.apply_chat_template(
    conversations, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

voice_cache, voice_mask = load_voices(["alba"] * len(chunks) + ["jean"])
# the mask covers the cached voices too
inputs["attention_mask"] = torch.cat(
    [voice_mask.to(inputs["attention_mask"]), inputs["attention_mask"]], dim=-1
)
outputs = model.generate(**inputs, past_key_values=voice_cache)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(
    [torch.cat(audio[: len(chunks)]), audio[-1]], ["long.wav", "hello.wav"]
)

نقطة تفتيش منجرفة

نفس الاستخدام، مع أصوات نقطة التفتيش الخاصة بها:

from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForTextToWaveform, AutoProcessor, DynamicCache

model_id = "eustlb/pocket-tts-english-drifting"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")

voice = load_file(hf_hub_download(model_id, "voices/alba.safetensors"))
layers = []
for i, layer in enumerate(model.model.layers):
    device = layer.self_attn.k_proj.weight.device
    layers.append(
        (voice[f"layers.{i}.keys"].to(device), voice[f"layers.{i}.values"].to(device))
    )

conversation = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Hello world. I am Kyutai's Pocket TTS."}],
    }
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True, add_generation_prompt=True
).to(model.device)

outputs = model.generate(
    **inputs, past_key_values=DynamicCache(layers, config=model.config)
)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "drifting.wav")

التدريب

ضع الصوت المستهدف في دور assistant. يعيد المعالج كامناته (latents) على شكل labels، ويعيد النموذج خسارة الأصل (خسارة تدفق LSD بالإضافة إلى config.eos_loss_weight مضروبة في خسارة نهاية الكلام). وعادةً ما تكون تلميح الصوت هو بداية نفس العبارة.

import torch
from transformers import AutoModelForTextToWaveform, AutoProcessor

model_id = "eustlb/pocket-tts"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = AutoModelForTextToWaveform.from_pretrained(model_id, device_map="auto")
model.train()

conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": voice_prompt},
            {"type": "text", "text": target_text},
        ],
    },
    {"role": "assistant", "content": [{"type": "audio", "audio": target_audio}]},
]
inputs = processor.apply_chat_template(
    conversation, tokenize=True, return_dict=True
).to(model.device)
loss = model(**inputs).loss
loss.backward()
  • قدّم الصوت كتسجيل أو كمخزّنات كامنة (latents)، وليس كذاكرة مؤقتة.
  • لإرشاد التصنيف الحر، احذف عنصر audio أو text الخاص بجولة user (حيث يُحذف الأصل كل منهما باحتمال 0.2).
  • تُوضع الكامنات المحسوبة مسبقًا في processor_kwargs={"audio_prompt_latents": [...], "labels": [...]}، مع عناصر {"type": "audio"} فارغة كعناصر نائبة.
  • الوصفة الأصلية: AdamW، learning_rate=2e-5 (2e-4 للغة جديدة)، adam_beta2=0.95، weight_decay=0.1، max_grad_norm=1.0، 1000 خطوات إحماء ثم ثابتة، ومتوسط أسي (EMA) للأوزان (معامل اضمحلال 0.999).

PocketTTSConfig

فئة transformers.PocketTTSConfig

< >

( 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 = Noneflow_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevocab_size: int = 4004hidden_size: int = 1024num_hidden_layers: int = 6num_attention_heads: int = 16num_key_value_heads: int | None = Nonehead_dim: int | None = Noneintermediate_size: int = 4096hidden_act: str = 'gelu_pytorch_tanh'layer_norm_eps: float = 1e-05attention_bias: bool = Falseattention_dropout: float = 0.0max_position_embeddings: int = 8192rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonelatent_dim: int = 32pad_token_id: int = 3bos_token_id: int | None = Noneeos_token_id: int | None = Noneaudio_prompt_token_id: int = 4000audio_latent_token_id: int = 4001audio_prompt_bos_token_id: int = 4002audio_bos_token_id: int = 4003frame_rate: float = 12.5initializer_range: float = 0.02use_cache: bool = Trueeos_loss_weight: float = 0.1flow_loss_num_samples: int = 4lsd_distill_probability: float = 0.25lsd_diagonal_weight: float = 0.75lsd_time_logit_mean: float = 0.4lsd_time_logit_std: float = 1.0latent_stats_ema_steps: int = 1000latent_stats_ema_decay: float = 0.999 )

المعاملات

  • flow_head_config (Union[PocketTTSFlowHeadConfig, dict]، اختياري) — إعدادات رأس التدفق الذي يستخرج كل حالة كامنة من حالة الخلفية المخفية.
  • vocab_size (int، اختياري، القيمة الافتراضية 4004) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطة input_ids.
  • hidden_size (int، اختياري، القيمة الافتراضية 1024) — أبعاد التمثيلات المخفية.
  • num_hidden_layers (int، اختياري، القيمة الافتراضية 6) — عدد الطبقات المخفية في مُفكِّك Transformer.
  • num_attention_heads (int، اختياري، القيمة الافتراضية 16) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer.
  • num_key_value_heads (int, اختياري) — هذا هو عدد رؤوس key_value التي يجب استخدامها لتنفيذ Grouped Query Attention. إذا كان num_key_value_heads=num_attention_heads، فسيستخدم النموذج Multi Head Attention (MHA)، وإذا كان num_key_value_heads=1 فسيستخدم النموذج Multi Query Attention (MQA)، وإلا فسيتم استخدام GQA. عند تحويل نقطة تفتيش متعددة الرؤوس إلى نقطة تفتيش GQA، يجب بناء كل مجموعة من رؤوس key و value عن طريق meanpooling جميع الرؤوس الأصلية داخل تلك المجموعة. لمزيد من التفاصيل، راجع هذا الورقة. إذا لم يتم تحديد القيمة، فسيتم افتراض num_attention_heads.
  • head_dim (int، اختياري) — بعد بُعد رأس الانتباه. إذا كان None، فسيتم افتراضه على hidden_size // num_attention_heads
  • intermediate_size (int، اختياري، القيمة الافتراضية 4096) — أبعاد تمثيلات MLP.
  • hidden_act (str، اختياري، القيمة الافتراضية gelu_pytorch_tanh) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وغيرها.
  • layer_norm_eps (float, اختياري، القيمة الافتراضية 1e-05) — قيمة إيبسلون (Epsilon) لتطبيع الطبقات (Layer Normalizations) في الهيكل الأساسي (backbone).
  • attention_bias (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام انحياز في طبقات الإسقاط للاستعلام والمفتاح والقيمة والمخرجات أثناء الانتباه الذاتي.
  • attention_dropout (float، اختياري، القيمة الافتراضية 0.0) — نسبة الإسقاط (dropout) لاحتمالات الانتباه.
  • max_position_embeddings (int، اختياري، القيمة الافتراضية 8192) — أقصى طول تسلسل قد يُستخدم معه هذا النموذج على الإطلاق.
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], اختياري) — قائمة تحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن تحتوي القائمة على قيمة لـ rope_theta، ومعاملات اختيارية تُستخدم للتوسيع في حال رغبتَ في استخدام RoPE مع max_position_embeddings أطول.
  • latent_dim (int, اختياري، القيمة الافتراضية 32) — بُعد الكامنات الصوتية التي يستقبلها الهيكل العظمي كمدخلات (audio_prompt_latents، audio_latents)؛ وهو يساوي latent_dim الخاص برأس التدفق (flow head) ومشفّر الصوت (audio tokenizer).
  • pad_token_id (int, اختياري، القيمة الافتراضية 3) — معرّف الرمز المستخدم للتعبئة في المفردات.
  • bos_token_id (int, اختياري) — معرّف الرمز المستخدم لبدء البث في المفردات.
  • eos_token_id (int, اختياري) — معرّف الرمز المستخدم لنهاية التدفق في المفردات.
  • audio_prompt_token_id (int، اختياري، القيمة الافتراضية 4000) — معرّف الرمز الوهمي لإطارات موجه الصوت في input_ids.
  • audio_latent_token_id (int، اختياري، القيمة الافتراضية 4001) — معرّف الرمز الوهمي لمواقع الكمون الصوتي في input_ids.
  • audio_prompt_bos_token_id (int، اختياري، القيمة الافتراضية 4002) — معرّف الرمز الذي يُوضع قبل موجه الصوت؛ حيث إن تضمين هذا الرمز هو المتجه المُتعلَّم الذي تُلحقه النسخة الأصلية في بداية الصوت.
  • audio_bos_token_id (int, اختياري، القيمة الافتراضية 4003) — معرّف الرمز (Token id) للموضع الصوتي الأول، الذي يُغلق الأمر (prompt): يحتوي على الكامن (latent) الخاص بـ BOS المُتعلَّم، والذي تُنشأ منه الإطار الأول.
  • frame_rate (float، اختياري، القيمة الافتراضية 12.5) — عدد كامنات الصوت لكل ثانية من الصوت: يستمد generate ميزانية الإطارات الافتراضية منه.
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
  • use_cache (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كان config.is_decoder=True أو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط.
  • eos_loss_weight (float، اختياري، القيمة الافتراضية 0.1) — وزن خسارة نهاية الكلام في خسارة التدريب.
  • flow_loss_num_samples (int، اختياري، القيمة الافتراضية 4) — عدد مرات سحب الضوضاء لكل إطار مستهدف في خسارة التدفق.
  • lsd_distill_probability (float، اختياري، القيمة الافتراضية 0.25) — احتمال، في كل خطوة تدريب، لحساب حد التلقائي-التقطير (self-distillation) من دالة فقد LSD (مع إعادة الوزن للحفاظ على الفقد المتوقع)؛ القيمة 1 تعني حسابه في كل خطوة.
  • lsd_diagonal_weight (float, اختياري، القيمة الافتراضية 0.75) — وزن الحد القطري (التدفق اللحظي) في دالة فقد LSD؛ بينما يوزن حد التلقائي-التعليم (self-distillation) الجزء المتبقي.
  • lsd_time_logit_mean (float، اختياري، القيمة الافتراضية 0.4) — متوسط التوزيع اللوجستي الطبيعي لأزمنة التدفق التي يسحبها خسارة LSD.
  • lsd_time_logit_std (float، اختياري، القيمة الافتراضية 1.0) — الانحراف المعياري لتوزيع اللوجيت-الطبيعي لأزمنة التدفق التي يسحبها خسارة LSD.
  • latent_stats_ema_steps (int، اختياري، القيمة الافتراضية 1000) — عدد خطوات التدريب الأولى التي يتبع فيها latent_mean وlatent_std متوسطًا متحركًا أُسّيًا للاتّجاهات المستهدفة؛ القيمة 0 تُبقيهما مجمّدين.
  • latent_stats_ema_decay (float، اختياري، القيمة الافتراضية 0.999) — معدل التلاشي للمتوسط المتحرك.

هذه فئة الإعدادات المخزنة لإعدادات نموذج PocketTTSModel. تُستخدم لاستحداث نموذج Pocket Tts وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ eustlb/pocket-tts

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

PocketTTSFlowHeadConfig

فئة transformers.PocketTTSFlowHeadConfig

< >

( 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 = 512num_hidden_layers: int = 6latent_dim: int = 32condition_dim: int = 1024frequency_embedding_size: int = 256hidden_act: str = 'silu'layer_norm_eps: float = 1e-06rms_norm_eps: float = 1e-05max_period: float = 10000.0flow_type: typing.Literal['lsd', 'drifting'] = 'lsd'loss_weighting_hidden_size: int = 32loss_weighting_num_layers: int = 3 )

المعاملات

  • hidden_size (int، اختياري، القيمة الافتراضية 512) — أبعاد التمثيلات المخفية.
  • num_hidden_layers (int، اختياري، القيمة الافتراضية 6) — عدد الطبقات المخفية في مُفكِّك Transformer.
  • latent_dim (int، اختياري، القيمة الافتراضية 32) — أبعاد الكامنات الصوتية المستمرة التي يتنبأ بها الرأس (بعد الكامن لمُرمِّز الصوت).
  • condition_dim (int، اختياري، القيمة الافتراضية 1024) — بعد حالة الخفاء الأساسية التي يُشترط عليها الرأس (الـhidden_size الخاص بالهيكل الأساسي).
  • frequency_embedding_size (int، اختياري، القيمة الافتراضية 256) — حجم التضمين الجيبية لأزمنة التدفق.
  • hidden_act (str، اختياري، القيمة الافتراضية silu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وغيرها.
  • layer_norm_eps (float, اختياري، القيمة الافتراضية 1e-06) — قيمة إيبسلون (Epsilon) في عمليات تطبيع الطبقات داخل الكتل المتبقية والطبقة النهائية.
  • rms_norm_eps (float, اختياري، القيمة الافتراضية 1e-05) — قيمة إيبسلون للتطبيع الذي يغلق التضمينات الزمنية.
  • max_period (float، اختياري، القيمة الافتراضية 10000.0) — الفترة القصوى للتضمين الزمني الجيبية، والتي يخزّنها نقطة الحفظ على شكل freqs.
  • flow_type (str، اختياري، القيمة الافتراضية "lsd") — الهدف الذي تم تدريب الرأس عليه، وهو ما يحدد طريقة تكييفه وعيّنته. "lsd" (التباعد الذاتي لاغرانجي): مُكيَّف على وقتي بداية وانتهاء خطوة التدفق، ويُعَيَّن عبر خطوات أويلر من ضوضاء غاوسية. "drifting": لا يوجد تكييف زمني، حيث يُحوِّل الرأس الضوضاء إلى الكمون في استدعاء واحد.
  • loss_weighting_hidden_size (int، اختياري، القيمة الافتراضية 32) — عرض شبكة MLP التي تتعلم وزن عدم اليقين لمصطلحات خسارة LSD من أزمنة التدفق (للتدريب فقط).
  • loss_weighting_num_layers (int، اختياري، القيمة الافتراضية 3) — عدد الطبقات المخفية لذلك MLP.

هذه فئة الإعدادات المخزنة لإعدادات نموذج PocketTTSModel. تُستخدم لاستحداث نموذج Pocket Tts وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ eustlb/pocket-tts

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

PocketTTSFeatureExtractor

فئة transformers.PocketTTSFeatureExtractor

< >

( feature_size = 1sampling_rate = 24000padding_value = 0.0frame_size = 1920pad_to_multiple_of = 1920end_on_pause = Truepause_duration = 0.08fade_out_duration = 0.02silence_floor_db = 35.0analysis_frame_duration = 0.02**kwargs )

المعاملات

  • feature_size (int، اختياري، القيمة الافتراضية 1) — عدد القنوات.
  • sampling_rate (int, اختياري، القيمة الافتراضية 24000) — معدل أخذ العينات الذي يجب أن تُرقَم به الموجة الصوتية، ويُعبَّر عنه بالهرتز (Hz).
  • padding_value (float، اختياري، القيمة الافتراضية 0.0) — القيمة المستخدمة للتعبئة.
  • frame_size (int، اختياري، القيمة الافتراضية 1920) — عدد عينات الصوت لكل إطار كامن في مُرمِّز الصوت (أي frame_size الخاص به).
  • pad_to_multiple_of (int، اختياري، القيمة الافتراضية 1920) — حشو الصوت إلى مضاعف لهذا القيمة؛ مضاعف frame_size يحافظ على سلامة كل إطار كامن.
  • end_on_pause (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إنهاء كل موجة صوتية عند pause_duration ثانية من الصمت بالضبط: يتم قص الصمت المتبقي (الإطارات التي تزيد مدتها عن analysis_frame_duration ثانية وتكون أقل من silence_floor_db من أعلى مستوى صوتي)، ثم يُخفَّض مستوى الصوت في آخر fade_out_duration ثانية مما تبقى، وتُضاف pause_duration ثانية من الأصفار.
  • pause_duration (float، اختياري، القيمة الافتراضية 0.08) — مدة الصمت المضاف بواسطة end_on_pause، بالثواني.
  • fade_out_duration (float، اختياري، القيمة الافتراضية 0.02) — مدة التلاشي التي يطبّقها end_on_pause قبل الإيقاف المؤقت، بالثواني.
  • silence_floor_db (float، اختياري، القيمة الافتراضية 35.0) — المستوى الذي يقع تحت إطار التحليل الأعلى صوتًا، بوحدة الديسيبل، حيث تُعامل end_on_pause الإطارات اللاحقة على أنها صمت.
  • analysis_frame_duration (float، اختياري، القيمة الافتراضية 0.02) — مدة الإطارات التي تقيس end_on_pause مستواها، بالثواني.

ينشئ مستخرج ميزات Pocket TTS، الذي يعدّ موجات الموجات الصوتية الموجهة لمُرمِّز الصوت (audio tokenizer) الخاص بالمُشفِّر (encoder).

تنتهي كل موجة صوتية اختياريًا بوقفة قصيرة (وهي خاصية end_on_pause الأصلية: حيث تنتهي محفزات التدريب داخل الوقفة بين كلمتين، والمحفز الذي يتوقف عند الكلام يجعل النموذج يستمر فيه، بينما المحفز الذي ينتهي بصمت طويل يؤخر بدء الكلام)، ثم يُملأ الدفعة من اليمين حتى يصبح طولها مضاعفًا لحجم إطار مُجزّئ الرموز.

__call__

< >

( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]sampling_rate: int | None = Noneend_on_pause: bool | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy | None = Truepad_to_multiple_of: int | None = Nonemax_length: int | None = Nonereturn_attention_mask: bool | None = Truereturn_tensors: str | None = 'pt'**kwargs )

المعاملات

  • audio (np.ndarray، torch.Tensor، list[np.ndarray]، list[torch.Tensor]) — الموجة الصوتية أحادية القناة أو دفعة من الموجات الصوتية أحادية القناة الخاصة بأوامر الصوت.
  • sampling_rate (int, اختياري) — معدل أخذ العينات الذي تم به أخذ عينات مدخل audio. يُوصى بشدة بتمرير sampling_rate عند استدعاء الأمامي لمنع الأخطاء الصامتة.
  • end_on_pause (bool، اختياري) — ما إذا كان يجب إنهاء كل موجة صوتية عند توقف قصير، راجع وصف الفئة. القيمة الافتراضية هي self.end_on_pause.
  • padding (bool أو str أو PaddingStrategy، اختياري، القيمة الافتراضية True) — استراتيجية الحشو للدفعة، راجع pad().
  • pad_to_multiple_of (int، اختياري) — حشو الدفعة إلى مضاعف لهذا القيمة. القيمة الافتراضية هي self.pad_to_multiple_of.

PocketTTSProcessor

فئة transformers.PocketTTSProcessor

< >

( feature_extractortokenizeraudio_tokenizer = Nonechat_template = Noneshort_text_max_words: int = 4frames_after_eos_short_text: int = 4frames_after_eos: int = 2fade_in_duration: float = 0.005 )

المعاملات

  • feature_extractor (PocketTTSFeatureExtractor) — مستخرج الميزات هو مدخل إلزامي.
  • tokenizer (TokenizersBackend) — المُجزِّئ (tokenizer) هو مدخل إلزامي.
  • audio_tokenizer (PocketTTSAudioTokenizerModel، اختياري) — ترميز الصوت: يقوم بتحويل الصوت إلى متغيرات كامنة (latents)، ويفكّك المتغيرات الكامنة المولّدة إلى صوت.
  • chat_template (str) — قالب Jinja لتحويل قوائم الرسائل في المحادثة إلى نص قابل للتجزئة.
  • short_text_max_words (int، اختياري، القيمة الافتراضية 4) — النصوص التي لا تتجاوز هذا العدد من الكلمات تحصل على frames_after_eos_short_text إطارًا بعد إطار نهاية الكلام.
  • frames_after_eos_short_text (int، اختياري، القيمة الافتراضية 4) — عدد الإطارات المولّدة بعد إطار نهاية الكلام للنصوص القصيرة.
  • frames_after_eos (int، اختياري، القيمة الافتراضية 2) — عدد الإطارات المولّدة بعد إطار نهاية الكلام للنصوص الأطول.
  • fade_in_duration (float، اختياري، القيمة الافتراضية 0.005) — المدة بالثواني للتلاشي الخطي المطبَّق على بداية كل موجة صوتية مُفكَّكة: يبدأ حالة المُفكِّك الجديدة بخطوة صغيرة، تُسمَع كنقرة.

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

يوفر PocketTTSProcessor جميع وظائف PocketTTSFeatureExtractor وTokenizersBackend. راجع ~PocketTTSFeatureExtractor و~TokenizersBackend لمزيد من المعلومات.

__call__

< >

( text: str | list[str] | None = Noneaudio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = Noneaudio_prompt_latents: list[torch.Tensor] | None = Nonelabels: list[torch.Tensor] | None = None**kwargs: *<class 'transformers.models.pocket_tts.processing_pocket_tts.PocketTTSProcessorKwargs'> )

المعاملات

  • text (str أو list[str]) — الموجّهات التي تُنشئها apply_chat_template().
  • audio (np.ndarray أو torch.Tensor أو قائمة منهما، اختياري) — الموجات الصوتية للمحادثات، أحادية القناة بمعدل 24 كيلوهرتز، بترتيب المحادثة: كل صوت، وفي التدريب كل هدف.
  • audio_prompt_latents (list[torch.Tensor]، اختياري) — أصوات محسوبة مسبقاً، حيث يكون لكل موضع محجوز للصوت متجه واحد بأبعاد (num_frames, latent_dim) بدلاً من الموجات الصوتية.
  • labels (list[torch.Tensor]، اختياري) — أهداف محسوبة مسبقًا (للتدريب)، حيث يكون لكل موضع نائب للهدف (target placeholder) متجه واحد بأبعاد (num_frames, latent_dim)، بدلاً من الموجات الصوتية.
  • end_on_pause (bool، kwargs، اختياري) — ما إذا كان يجب إنهاء موجة صوتية لكل موجه صوتي بوقفة قصيرة، كما يفعل الأصل قبل استنساخ الصوت. الافتراضي هو end_on_pause لاستخراج الميزات.
  • return_tensors (str أو TensorType, اختياري) — إذا تم تعيينه، فسيُعاد تينسورات من إطار عمل محدد. القيم المقبولة هي:
    • 'pt': إرجاع كائنات torch.Tensor من PyTorch.
    • 'np': إرجاع كائنات np.ndarray من NumPy.
  • **kwargs (ProcessingKwargs، اختياري) — خيارات معالجة إضافية لكل نمط (نص، صور، مقاطع فيديو، صوت). تُدرج المعلمات الخاصة بالنموذج أعلاه؛ راجع فئة TypedDict للحصول على القائمة الكاملة للحجج المدعومة.

split_text

< >

( text: strmax_tokens: int = 50 )

المعاملات

  • text (str) — النص المراد تقسيمه.
  • max_tokens (int، اختياري، القيمة الافتراضية 50) — الحد الأقصى لعدد الرموز في كل جزء.

يقسم text إلى مقاطع محاذاة مع الجمل، بحيث لا يتجاوز طول كل مقطع max_tokens توكن، على غرار split_into_best_sentences في النسخة الأصلية: يتم قطع النص المُعدّ بعد نهاية الجملة (وليس عند النقاط العشرية)، وبعد نهاية العبارة إذا كانت الجملة أطول من max_tokens، ثم تُجمَّع القطع بشكل طمّاع. يُقصد بكل مقطع أن يكون محادثة واحدة ضمن دفعة.

decode

< >

( audio_latents: torch.Tensoraudio_latents_mask: torch.Tensor | None = None )

المعاملات

  • audio_latents (torch.Tensor من الشكل (batch_size, num_frames, latent_dim) أو (num_frames, latent_dim)) — المتغيرات الكامنة التي تُرجعها generate (PocketTTSGenerateOutput.audio_latents)، مُفككة الترميز كدفعة واحدة، أو متغيرات الكامنة لعينة واحدة.
  • audio_latents_mask (torch.Tensor of shape (batch_size, num_frames), اختياري) — قناع لإطارات كل عينة (PocketTTSGenerateOutput.audio_latents_mask). في حال عدم وجوده، يتم فك ترميز كل صف بطول كامل.

يفكّك الكامنات المولّدة إلى موجات صوتية باستخدام مُرمّز الصوت، ويُخفّف أول fade_in_duration ثوانٍ من كل مقطع، تماماً كما يفعل الأصل.

save_audio

< >

( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]saving_path: str | pathlib.Path | list[str | pathlib.Path]sampling_rate: int | None = None )

يكتب الموجات المولّدة في ملفات WAV.

audio (torch.Tensor أو np.ndarray أو قائمة منهما): الموجات الصوتية، كما تُعاد بواسطة decode(). saving_path (str أو Path أو قائمة منهما): مسار واحد لكل موجة صوتية. sampling_rate (int، اختياري): معدل أخذ العينات للموجات الصوتية، وهو افتراضياً معدل مستخرج الميزات (مجزّئ الصوت).

PocketTTSModel

فئة transformers.PocketTTSModel

< >

( config: PocketTTSConfig )

المعاملات

  • config (PocketTTSConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

الهيكل الأساسي لـ Pocket TTS: محوّل سببي (causal transformer) يعمل على تدفق واحد يتكوّن من موجه الصوت (voice prompt) ورموز النص (text tokens) والكمّانات الصوتية (audio latents)، ويعيد الحالات المخفية المعيارية (normalised hidden states). موجه الصوت والكمّانات الصوتية هما كمّانات (latents) لمُرمِّز الصوت (audio tokenizer)، الذي يحتفظ به المعالج (processor).

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.Tensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.Tensor] = Noneaudio_latents_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • audio_prompt_latents (torch.Tensor من الشكل (batch_size, num_prompt_frames, latent_dim)، اختياري) — كائنات (latents) موجهات الصوت لمُرمِّز الصوت (المُرمَّزة بواسطة المُعالِج، أو من voices/ في نقطة الحفظ)، مُكمَّلة على اليمين حتى أطول صوت في الدفعة، وموزَّعة في مواضع audio_prompt_token_id.
  • audio_prompt_latents_mask (torch.Tensor من الشكل (batch_size, num_prompt_frames)، اختياري) — قناع لإطارات الصوت (1) مقابل الحشو (0) في audio_prompt_latents.
  • audio_latents (torch.Tensor من الشكل (batch_size, num_latents, latent_dim)، اختياري) — كعوب صوتية مُطبَّعة، موزَّعة في مواضع audio_latent_token_id. أما موضع audio_bos_token_id الواقع قبلها، والذي يُغلق الأمر (prompt) وتُولَّد منه الإطار الأول، فيحصل دائمًا على كعب BOS المُتعلَّم.
  • audio_latents_mask (torch.Tensor من الشكل (batch_size, num_latents)، اختياري) — قناع لكل صف من الكامنات (1) مقابل الحشو (0) في audio_latents، عندما تحتوي الصفوف على أعداد مختلفة من مواضع الكامنة (التدريب).
  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • position_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • 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 إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • use_cache (bool، اختياري) — إذا تم تعيينه إلى True، تُعاد حالات المفاتيح والقيم past_key_values ويمكن استخدامها لتسريع فك الترميز (انظر past_key_values).

يعيد

BaseModelOutputWithPast أو tuple(torch.Tensor)

BaseModelOutputWithPast أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعدادات (PocketTTSConfig) والمدخلات.

تتجاوز طريقة PocketTTSModel الخاصة بالتقديم (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. لمزيد من التفاصيل، راجع دليل ذاكرة kv.

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

PocketTTSForConditionalGeneration

فئة transformers.PocketTTSForConditionalGeneration

< >

( config: PocketTTSConfig )

المعاملات

  • config (PocketTTSConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج تحويل النص إلى كلام Pocket TTS: العمود الفقري، ورأس التدفق الذي يستخرج كامنًا صوتيًا واحدًا في كل خطوة، ورأس نهاية الكلام. يقوم بتوليد كامنات مُرمِّز الصوت، والتي يقوم المُعالج بفك ترميزها إلى صوت بتردد 24 كيلوهرتز.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.Tensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Nonelabels_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → PocketTTSOutputWithPast or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • audio_prompt_latents (torch.Tensor من الشكل (batch_size, num_prompt_frames, latent_dim)، اختياري) — قيم latents الخاصة بموجّه الصوت من مُرمّز الصوت، مع حشو يميني، وموزّعة في مواضع audio_prompt_token_id.
  • audio_prompt_latents_mask (torch.Tensor من الشكل (batch_size, num_prompt_frames)، اختياري) — قناع لإطارات الصوت (1) مقابل الحشو (0) في audio_prompt_latents.
  • audio_latents (torch.Tensor من الشكل (batch_size, num_latents, latent_dim)، اختياري) — كائنات صوتية مُطبَّعة، موزَّعة في مواضع audio_latent_token_id.
  • labels (torch.Tensor من الشكل (batch_size, num_frames, latent_dim)، اختياري) — الكهانات المستهدفة لمُرمِّز الصوت (التدريب)، مع حشو يميني. ينتهي موجه كل صف بموضع audio_bos_token_id يليه موضع واحد من audio_latent_token_id لكل إطار: يغذّي النموذج الاستهدافات المُطبَّعة (إجبار المعلم)، ويطبّق خسارة التدفق على مخرجات BOS وجميع الإطارات باستثناء الإطار الأخير، والتي تتنبأ بالإطارات، ويطبّق خسارة نهاية الكلام على جميعها، حيث يكون الأخير هو نهاية الكلام.
  • labels_mask (torch.Tensor من الشكل (batch_size, num_frames)، اختياري) — قناع للإطارات المستهدفة في كل صف (1) مقابل الحشو (0) في labels.
  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • position_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • 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 إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • use_cache (bool، اختياري) — إذا تم تعيينه إلى True، تُعاد حالات المفاتيح والقيم past_key_values ويمكن استخدامها لتسريع فك الترميز (انظر past_key_values).

يعيد

PocketTTSOutputWithPast أو tuple(torch.Tensor)

PocketTTSOutputWithPast أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة حسب الإعداد (PocketTTSConfig) والمدخلات.

تُعيد طريقة PocketTTSForConditionalGeneration الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.

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

  • loss (torch.Tensor of shape (), اختياري, يُعاد عند تمرير labels) — خسارة التدريب: خسارة تدفق LSD لللاتنتات المستهدفة بالإضافة إلى config.eos_loss_weight مضروبة في خسارة نهاية الكلام.

  • logits (torch.Tensor من الشكل (batch_size, sequence_length, 1)) — قيم logits لنهاية الكلام، قيمة واحدة لكل موضع.

  • past_key_values (Cache، اختياري، يُعاد عند تمرير use_cache=True أو عند تعيين config.use_cache=True) — إنه كائن من نوع Cache. لمزيد من التفاصيل، راجع دليل ذاكرة kv.

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

  • last_hidden_state (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)) — حالات مخفية مُعايرة للنواة، وهي التي تُشترط رأس التدفق.

مثال:

>>> from transformers import AutoProcessor, PocketTTSForConditionalGeneration

>>> model = PocketTTSForConditionalGeneration.from_pretrained("eustlb/pocket-tts")

>>> processor = AutoProcessor.from_pretrained("eustlb/pocket-tts")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")

>>> # generate speech
>>> speech = model(inputs["input_ids"])

generate

< >

( inputs: typing.Optional[torch.Tensor] = None**kwargs )

المعاملات

  • inputs (torch.LongTensor من الشكل (batch_size, sequence_length)، اختياري) — input_ids المُعدّة بواسطة PocketTTSProcessor. يمكن أيضًا تمريرها على شكل input_ids=.
  • kwargs (dict[str, Any], اختياري) — attention_mask، وموجّه الصوت (audio_prompt_latents وaudio_prompt_latents_mask، أو ذاكرة مؤقتة لبداية صوتية على شكل past_key_values، مع الأصوات المرفقة، وبموجّهات نصية فقط)، وframes_after_eos من المعالج، ومعاملات التوليد (do_sample، temperature، max_new_tokens، …)، ومعاملات Pocket TTS الخاصة num_flow_steps وeos_threshold و min_frames_before_eos، والتي تُعيَّن افتراضيًا من إعدادات التوليد.

يولّد الكلام. تتجاوز هذه الطريقة generate() لجعل القيمة الافتراضية لـmax_new_tokens تساوي ميزانية الإطارات الخاصة بوقت التشغيل الأصلي، وهي ceil((num_text_tokens / 3 + 2) * frame_rate) لأطول نص في الدفعة. أما كل ما عدا ذلك فيمر عبر خطافات التوليد المعتادة.

sample_latent

< >

( condition: Tensornoise: Tensornum_flow_steps: int ) → torch.Tensor of shape (batch_size, latent_dim)

المعاملات

  • condition (torch.Tensor من الشكل (batch_size, hidden_size)) — حالة الخفية للعمود الفقري عند الموضع الذي يتم توليده.
  • noise (torch.Tensor من الشكل (batch_size, latent_dim)) — ضوضاء غاوسية مُقيّمة بواسطة sqrt(temperature)، أو أصفار.
  • num_flow_steps (int) — عدد خطوات أويلر لمُعيّن LSD (تُتجاهل من قِبَل الرأس المنجرف، الذي يستدعي مرة واحدة).

يعيد

torch.Tensor من الشكل (batch_size, latent_dim)

الكامنة المُستخرجة، في الفضاء المُعايَر.

يُجري عيّنةً على الحالة الكامنة التالية من noise باستخدام رأس التدفق.

denormalize_latents

< >

( audio_latents: Tensor )

تُحوّل الكامنات من الفضاء المُعايَر لرأس التدفق إلى فضاء مُرمّز الصوت.

PocketTTSGenerateOutput

class transformers.models.pocket_tts.generation_pocket_tts.PocketTTSGenerateOutput

< >

( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneaudio_latents: typing.Optional[torch.Tensor] = Noneaudio_latents_mask: typing.Optional[torch.LongTensor] = None )

المعاملات

  • sequences (torch.LongTensor من الشكل (batch_size, sequence_length)) — معرّفات رموز المحفّز تليها رمز audio_latent_token_id واحد لكل إطار مُولَّد. أما الصوت نفسه فيوجد في audio_latents.
  • scores (tuple(torch.Tensor) اختياري، يُعاد عند output_scores=True) — قيمة اللوجيت الخاصة بنهاية الكلام لكل إطار مُولَّد، مع وجود متجه واحد من الشكل (batch_size,) لكل إطار.
  • logits (tuple(torch.Tensor) اختياري، يُعاد عند output_logits=True) — نفس scores: لا يحتوي Pocket TTS على مفردات، لذا لا يوجد شيء لمعالجته بين الاثنين.
  • attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل إطار مُولَّد) من المجموعات (عنصر واحد لكل طبقة) من torch.Tensor بشكل (batch_size, num_heads, generated_length, sequence_length).
  • hidden_states (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_hidden_states=True) — مجموعة (عنصر واحد لكل إطار مُولَّد) من المجموعات (عنصر واحد لكل طبقة) من torch.Tensor بشكل (batch_size, generated_length, hidden_size).
  • past_key_values (Cache، اختياري، يُعاد عند use_cache=True) — ذاكرة المؤشر/القيمة (key/value cache) الخاصة بالهيكل الأساسي (backbone) في نهاية عملية التوليد.
  • audio_latents (torch.Tensor من الشكل (batch_size, num_frames, latent_dim)) — المتغيرات الكامنة المولّدة، في الفضاء الكامن لمُرمِّز الصوت، مع ملء صفر على اليمين بعد عدد الإطارات الخاص بكل عيّنة. يحوّل PocketTTSProcessor.decode() هذه المتغيرات إلى موجات صوتية.
  • audio_latents_mask (torch.LongTensor من الشكل (batch_size, num_frames)) — قناع لإطارات كل عينة (1)، بما في ذلك إطار نهاية الكلام والإطارات التي تليه، على عكس الحشو (0).

المخرجات لـPocketTTSForConditionalGeneration.generate.

Update on GitHub