PEFT documentation

ضبط الموجه

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

and get access to the augmented documentation experience

to get started

ضبط الموجه

Only train and store a significantly smaller set of task-specific prompt parameters (image source).

يضيف 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

< >

( 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

< >

( 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)

Update on GitHub