PEFT documentation
ضبط الموجه
ضبط الموجه

يضيف Prompt tuning موجهًا افتراضيًا خاصًا بالمهمة إلى المدخل، يتكون من متجهات قابلة للتدريب في فضاء التضمين. يتم تحديث معاملات الرموز الافتراضية بشكل مستقل عن معاملات النموذج المُدرَّب مسبقًا، والتي تبقى مجمّدة.
ملخص الورقة البحثية هو:
في هذا العمل، نستكشف «ضبط الموجهات» (prompt tuning)، وهو آلية بسيطة وفعّالة لتعلّم «موجّهات ناعمة» (soft prompts) لغرض تكييف نماذج اللغة المجمّدة (frozen) لأداء مهام لاحقة محددة. على عكس الموجهات النصية المنفصلة المستخدمة في GPT-3، تُتعلَّم الموجّهات الناعمة عبر الانتشار العكسي (backpropagation) ويمكن ضبطها لدمج الإشارة من أي عدد من الأمثلة الموسومة. يتفوق نهجنا المتعلَّم من الطرف إلى الطرف على تعلّم «القليل من الأمثلة» (few-shot) الخاص بـ GPT-3 بفارق كبير. والأكثر إثارة للدهشة، من خلال تجارب الاستبعاد (ablations) على حجم النموذج باستخدام T5، نُظهر أن ضبط الموجهات يصبح أكثر تنافسية مع زيادة الحجم: فمع تجاوز النماذج مليارات المعاملات، «يُغلق منهجنا الفجوة» ويتطابق مع الأداء القوي لضبط النموذج (حيث تُضبط جميع أوزان النموذج). هذا الاكتشاف ذو صلة خاصة بالنظر إلى أن النماذج الكبيرة مكلفة للمشاركة والتشغيل، وأن القدرة على إعادة استخدام نموذج مجمّد واحد لمهام لاحقة متعددة يمكن أن تُخفّف هذا العبء. يمكن النظر إلى منهجنا على أنه تبسيط لـ «ضبط البادئة» (prefix tuning) الذي اقترحه Li و Liang (2021) مؤخراً، ونوفّر مقارنةً به وبأساليب أخرى مشابهة. أخيراً، نُظهر أن تكييف نموذج مجمّد بموجّهات ناعمة يمنح فوائد في المتانة تجاه نقل المجال (domain transfer)، مقارنةً بضبط النموذج الكامل.
على عكس ضبط البادئة، فإن مدخلات الطبقة الأولى فقط هي التي تستقبل الرموز الافتراضية.
الاستخدام
هناك قراران يجب اتخاذهما: عدد الرموز الافتراضية المضافة إلى مدخلات النموذج (num_virtual_tokens) - وهذا سيحدد عدد المعاملات القابلة للتدريب - وكيفية تهيئة هذه الرموز.
أنشئ PromptTuningConfig يتضمن نوع المهمة، ونص ضبط الموجه الأولي لتدريب النموذج، وعدد الرموز الافتراضية المضافة للتعلم، ومُجزِّئ (tokenizer).
from peft import PromptTuningConfig, PromptTuningInit, get_peft_model
prompt_tuning_init_text = "Classify if the tweet is a complaint or no complaint.\n"
peft_config = PromptTuningConfig(
task_type="CAUSAL_LM",
prompt_tuning_init=PromptTuningInit.TEXT,
num_virtual_tokens=len(tokenizer(prompt_tuning_init_text)["input_ids"]),
prompt_tuning_init_text=prompt_tuning_init_text,
tokenizer_name_or_path="bigscience/bloomz-560m",
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()نظرة عامة على الاختبارات
واجهة برمجة التطبيقات
PromptTuningConfig
فئة peft.PromptTuningConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsenum_virtual_tokens: int = Nonetoken_dim: int = Nonenum_transformer_submodules: Optional[int] = Nonenum_attention_heads: Optional[int] = Nonenum_layers: Optional[int] = Nonemodules_to_save: Optional[list[str]] = Noneprompt_tuning_init: peft.tuners.prompt_tuning.config.PromptTuningInit | str = <PromptTuningInit.RANDOM: 'RANDOM'>prompt_tuning_init_text: str | None = Nonetokenizer_name_or_path: str | None = Nonetokenizer_kwargs: dict | None = None )
المعاملات
- prompt_tuning_init (Union[
PromptTuningInit,str]) — تهيئة تضمين الموجه. سيُهيّئTEXTباستخدام النص الخاص بك. سيُهيّئSAMPLE_VOCABباستخدام رموز مُسحبة عشوائياً من قاموس النموذج. سيُهيّئRANDOMباستخدام رموز مستمرة ناعمة مُسحبة عشوائياً (تحذير: قد تقع الرموز الناعمة المُسحبة خارج متعدد الأبعاد التضميني) - prompt_tuning_init_text (
str, اختياري) — النص المستخدم لتبطين التضمين الأولي. يُستخدم فقط إذا كانprompt_tuning_initهوTEXT. - tokenizer_name_or_path (
str، اختياري) — اسم أو مسار المُرمِّز. يُستخدم فقط إذا كانprompt_tuning_initهوTEXT. - tokenizer_kwargs (
dict، اختياري) — الحجج ذاتية الاسم المراد تمريرها إلىAutoTokenizer.from_pretrained. يُستخدم فقط إذا كانprompt_tuning_initهوTEXT.
هذه هي فئة الإعدادات لتخزين إعدادات PromptEmbedding.
PromptEmbedding
فئة peft.PromptEmbedding
< source >( configword_embeddings )
المعاملات
- config (PromptTuningConfig) — إعدادات تضمين الموجه.
- word_embeddings (
torch.nn.Module) — تمثيلات الكلمات لنموذج التحوّل الأساسي.
النموذج لتشفير الرموز الافتراضية إلى تضمينات الموجه.
الخصائص:
- embedding (
torch.nn.Embedding) — طبقة التضمين الخاصة بتضمين الاستعلام.
مثال:
>>> from peft import PromptEmbedding, PromptTuningConfig
>>> config = PromptTuningConfig(
... peft_type="PROMPT_TUNING",
... task_type="SEQ_2_SEQ_LM",
... num_virtual_tokens=20,
... token_dim=768,
... num_transformer_submodules=1,
... num_attention_heads=12,
... num_layers=12,
... prompt_tuning_init="TEXT",
... prompt_tuning_init_text="Predict if sentiment of this review is positive, negative or neutral",
... tokenizer_name_or_path="t5-base",
... )
>>> # t5_model.shared is the word embeddings of the base model
>>> prompt_embedding = PromptEmbedding(config, t5_model.shared)شكل الإدخال: (batch_size, total_virtual_tokens)
شكل الإخراج: (batch_size, total_virtual_tokens, token_dim)