PEFT documentation
P-tuning
P-tuning

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
< 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]] = 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
< source >( config )
المعاملات
- config (PromptEncoderConfig) — إعدادات مُشفِّر المُوجِّه.
شبكة ترميز الموجه المستخدمة لتوليد تضمينات الرموز الافتراضية لتقنية 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)