PEFT documentation

P-tuning

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

P-tuning

Prompt tokens can be inserted anywhere in the input sequence, and they are optimized by a prompt encoder (image source).

P-tuning مصمّم لمهام فهم اللغة الطبيعية (NLU) وجميع نماذج اللغة.

ملخص الورقة البحثية هو:

في حين أن نماذج GPT التي تخضع لضبط دقيق تقليدي تفشل في تحقيق نتائج قوية في مهام فهم اللغة الطبيعية (NLU)، نُظهر في هذه الورقة أن نماذج GPT يمكن أن تتفوق على نماذج BERT ذات الحجم المماثل أو تكون على قدم المساواة معها في مهام NLU باستخدام طريقة جديدة تُسمى P-tuning — والتي تعتمد على تضمينات موجهات مستمرة قابلة للتدريب. في معيار الاستكشاف المعرفي (LAMA)، تستعيد أفضل نسخة من GPT نسبة 64\% (P@1) من المعرفة العالمية دون تقديم أي نص إضافي أثناء وقت الاختبار، مما يُحسّن الرقم القياسي السابق بأكثر من 20 نقطة مئوية. في معيار SuperGlue، تحقق نماذج GPT أداءً مماثلاً وأحيانًا أفضل من نماذج BERT ذات الحجم المماثل في التعلم المُشرف. والأهم من ذلك، نجد أن P-tuning يُحسّن أيضًا أداء نماذج BERT في كل من الإعدادات ذات القليل من الأمثلة والإعدادات المُشرفة، مع تقليل الحاجة إلى هندسة الموجهات بشكل كبير. ونتيجةً لذلك، تتفوق P-tuning على أحدث الأساليب في معيار SuperGlue ذي القليل من الأمثلة..

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

  • يمكن إدراج رموز الاستدعاء في أي مكان ضمن تسلسل الإدخال، وليس الأمر مقصوراً على البداية فقط
  • تُضاف رموز الاستعلام إلى المدخل فقط بدلاً من إضافتها إلى كل طبقة من طبقات النموذج
  • يمكن أن يؤدي إدخال رموز anchor إلى تحسين الأداء لأنها تشير إلى خصائص مكوّن في تسلسل الإدخال

تُشير نتائج الورقة البحثية إلى أن P-tuning أكثر كفاءة من صياغة الموجهات يدويًا، كما أنه يمكّن النماذج المشابهة لـ GPT من منافسة النماذج المشابهة لـ BERT في مهام فهم اللغة الطبيعية.

الاستخدام

أنشئ PromptEncoderConfig يتضمن نوع المهمة، وعدد الرموز الافتراضية التي يجب إضافتها والتعلم منها، وحجم الطبقة المخفية للمُشفِّر (encoder) المستخدم لتعلم معلمات المُوجِّه (prompt).

from peft import PromptEncoderConfig, get_peft_model

peft_config = PromptEncoderConfig(task_type="CAUSAL_LM", num_virtual_tokens=20, encoder_hidden_size=128)
model = get_peft_model(model, peft_config)
model.print_healthcheck()

نظرة عامة على الاختبارات

واجهة برمجة التطبيقات

PromptEncoderConfig

فئة peft.PromptEncoderConfig

< >

( 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]] = Noneencoder_reparameterization_type: str | peft.tuners.p_tuning.config.PromptEncoderReparameterizationType = <PromptEncoderReparameterizationType.MLP: 'MLP'>encoder_hidden_size: int = Noneencoder_num_layers: int = 2encoder_dropout: float = 0.0 )

المعاملات

  • encoder_reparameterization_type (Union[PromptEncoderReparameterizationType, str]) — نوع إعادة التمثيل (reparameterization) الذي سيتم استخدامه.
  • encoder_hidden_size (int) — حجم الطبقة المخفية لمشفّر الموجه.
  • encoder_num_layers (int) — عدد طبقات مُشفِّر المُوجِّه.
  • encoder_dropout (float) — احتمال إسقاط (dropout) في مُشفِّر المُوجِّه (prompt encoder).

هذه هي فئة الإعدادات لتخزين إعدادات PromptEncoder.

PromptEncoder

فئة peft.PromptEncoder

< >

( config )

المعاملات

شبكة ترميز الموجه المستخدمة لتوليد تضمينات الرموز الافتراضية لتقنية p-tuning.

مثال:

>>> from peft import PromptEncoder, PromptEncoderConfig

>>> config = PromptEncoderConfig(
...     peft_type="P_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,
...     encoder_reparameterization_type="MLP",
...     encoder_hidden_size=768,
... )

>>> prompt_encoder = PromptEncoder(config)

الخصائص:

  • embedding (torch.nn.Embedding) — طبقة التضمين في مُشفِّر المُوجِّه.
  • mlp_head (torch.nn.Sequential) — رأس MLP لمشفّر الاستعلام إذا كان inference_mode=False.
  • lstm_head (torch.nn.LSTM) — رأس LSTM لمشفّر الاستدعاء إذا كان inference_mode=False وencoder_reparameterization_type="LSTM".
  • token_dim (int) — بُعد التضمين المخفي لنموذج الترانسفورمر الأساسي.
  • input_size (int) — حجم المدخلات لمشفّر الاستدعاء.
  • output_size (int) — حجم المخرجات لمشفّر الاستدعاء.
  • hidden_size (int) — حجم الطبقة المخفية لمشفّر الاستدعاء.
  • total_virtual_tokens (int): العدد الإجمالي للرموز الافتراضية لمشفّر الاستعلام.
  • encoder_type (Union[PromptEncoderReparameterizationType, str]): نوع المُشفِّر (encoder) لمُشفِّر المُوجِّه (prompt encoder).

شكل الإدخال: (batch_size, total_virtual_tokens)

شكل الإخراج: (batch_size, total_virtual_tokens, token_dim)

Update on GitHub