Transformers documentation
Pocket TTS
تمت مساهمة هذا النموذج في 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
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = 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
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 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
< source >( 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__
< source >( 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
< source >( 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__
< source >( 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
< source >( text: strmax_tokens: int = 50 )
يقسم text إلى مقاطع محاذاة مع الجمل، بحيث لا يتجاوز طول كل مقطع max_tokens توكن، على غرار split_into_best_sentences في النسخة الأصلية: يتم قطع النص المُعدّ بعد نهاية الجملة (وليس عند النقاط العشرية)، وبعد نهاية العبارة إذا كانت الجملة أطول من max_tokens، ثم تُجمَّع القطع بشكل طمّاع. يُقصد بكل مقطع أن يكون محادثة واحدة ضمن دفعة.
decode
< source >( 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.Tensorof shape(batch_size, num_frames), اختياري) — قناع لإطارات كل عينة (PocketTTSGenerateOutput.audio_latents_mask). في حال عدم وجوده، يتم فك ترميز كل صف بطول كامل.
يفكّك الكامنات المولّدة إلى موجات صوتية باستخدام مُرمّز الصوت، ويُخفّف أول fade_in_duration ثوانٍ من كل مقطع، تماماً كما يفعل الأصل.
save_audio
< source >( 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
< source >( 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
< source >( 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
< source >( config: PocketTTSConfig )
المعاملات
- config (PocketTTSConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج تحويل النص إلى كلام Pocket TTS: العمود الفقري، ورأس التدفق الذي يستخرج كامنًا صوتيًا واحدًا في كل خطوة، ورأس نهاية الكلام. يقوم بتوليد كامنات مُرمِّز الصوت، والتي يقوم المُعالج بفك ترميزها إلى صوت بتردد 24 كيلوهرتز.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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.Tensorof 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
< source >( 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
< source >( 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 باستخدام رأس التدفق.
تُحوّل الكامنات من الفضاء المُعايَر لرأس التدفق إلى فضاء مُرمّز الصوت.
PocketTTSGenerateOutput
class transformers.models.pocket_tts.generation_pocket_tts.PocketTTSGenerateOutput
< source >( 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.