PEFT 文件

P-tuning

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

P-tuning

P-tuning 將可訓練的提示嵌入新增到輸入中,透過提示編碼器進行最佳化以找到更好的提示,從而無需手動設計提示。提示令牌可以新增到輸入序列的任何位置,P-tuning 還引入了錨定令牌以提高效能。

論文摘要如下:

雖然採用傳統微調方法的 GPT 在自然語言理解(NLU)任務上未能取得很好的效果,但我們展示了透過一種新穎的方法 P-tuning——它採用可訓練的連續提示嵌入——GPT 在 NLU 任務上可以優於或媲美同等規模的 BERT。在知識探測(LAMA)基準測試中,最好的 GPT 在測試期間沒有任何額外文字提供的情況下,恢復了 64% (P@1) 的世界知識,這比之前的最佳結果提高了 20 多個百分點。在 SuperGlue 基準測試中,GPT 在監督學習中取得了與同等規模 BERT 相當甚至更好的效能。重要的是,我們發現 P-tuning 在少樣本和監督學習設定中也提高了 BERT 的效能,同時大大減少了對提示工程的需求。因此,P-tuning 在少樣本 SuperGlue 基準測試中優於最先進的方法。.

PromptEncoderConfig

class peft.PromptEncoderConfig

< >

( task_type: typing.Union[str, peft.utils.peft_types.TaskType, NoneType] = None peft_type: typing.Union[str, peft.utils.peft_types.PeftType, NoneType] = None auto_mapping: typing.Optional[dict] = None base_model_name_or_path: typing.Optional[str] = None revision: typing.Optional[str] = None inference_mode: bool = False num_virtual_tokens: int = None token_dim: int = None num_transformer_submodules: typing.Optional[int] = None num_attention_heads: typing.Optional[int] = None num_layers: typing.Optional[int] = None modules_to_save: typing.Optional[list[str]] = None encoder_reparameterization_type: typing.Union[str, peft.tuners.p_tuning.config.PromptEncoderReparameterizationType] = <PromptEncoderReparameterizationType.MLP: 'MLP'> encoder_hidden_size: int = None encoder_num_layers: int = 2 encoder_dropout: float = 0.0 )

引數

  • encoder_reparameterization_type (Union[PromptEncoderReparameterizationType, str]) — 要使用的重引數化型別。
  • encoder_hidden_size (int) — 提示編碼器的隱藏層大小。
  • encoder_num_layers (int) — 提示編碼器的層數。
  • encoder_dropout (float) — 提示編碼器的丟棄率(dropout probability)。

這是用於儲存 `PromptEncoder` 配置的配置類。

PromptEncoder

class 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) — 當 `inference_mode=False` 時,提示編碼器的 MLP 頭。
  • lstm_head (torch.nn.LSTM) — 當 `inference_mode=False` 且 `encoder_reparameterization_type="LSTM"` 時,提示編碼器的 LSTM 頭。
  • token_dim (int) — 基礎 transformer 模型的隱藏嵌入維度。
  • input_size (int) — 提示編碼器的輸入大小。
  • output_size (int) — 提示編碼器的輸出大小。
  • hidden_size (int) — 提示編碼器的隱藏層大小。
  • total_virtual_tokens (int): 提示編碼器的虛擬令牌總數。
  • encoder_type (Union[PromptEncoderReparameterizationType, str]): 提示編碼器的編碼器型別。

輸入形狀:(batch_size, total_virtual_tokens)

輸出形狀:(batch_size, total_virtual_tokens, token_dim)

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.