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 上更新