PEFT 文档

提示词调优(Prompt tuning)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

提示词调优(Prompt tuning)

提示词调优在输入中添加了特定任务的提示词,并且这些提示词的参数独立于预训练模型参数进行更新,预训练模型的参数则保持冻结。

论文摘要如下:

在这项工作中,我们探索了“提示词调优”(prompt tuning),这是一种简单而有效的机制,用于学习“软提示词”(soft prompts)来调整冻结的语言模型以执行特定的下游任务。与 GPT-3 使用的离散文本提示词不同,软提示词是通过反向传播学习的,并且可以进行调整以吸收来自任意数量的标记样本的信号。我们的端到端学习方法在很大程度上优于 GPT-3 的“少样本”学习。更值得注意的是,通过在 T5 上进行模型大小的消融实验,我们表明提示词调优随着模型规模的扩大而更具竞争力:当模型参数超过十亿时,我们的方法“缩小了差距”,并达到了模型调优(其中所有模型权重都被调整)的强大性能。这一发现尤其重要,因为大型模型的共享和部署成本高昂,而为一个模型重用多个下游任务的能力可以减轻这种负担。我们的方法可以看作是 Li 和 Liang(2021)最近提出的“前缀调优”(prefix tuning)的简化版,并且我们将其与其他类似方法进行了比较。最后,我们表明,与全模型调优相比,用软提示词调整冻结模型在领域迁移的鲁棒性方面具有优势。.

PromptTuningConfig

class peft.PromptTuningConfig

< >

( 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 prompt_tuning_init: typing.Union[peft.tuners.prompt_tuning.config.PromptTuningInit, str] = <PromptTuningInit.RANDOM: 'RANDOM'> prompt_tuning_init_text: typing.Optional[str] = None tokenizer_name_or_path: typing.Optional[str] = None tokenizer_kwargs: typing.Optional[dict] = None )

参数

  • prompt_tuning_init (Union[PromptTuningInit, str]) — 提示词嵌入的初始化方法。
  • 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

class peft.PromptEmbedding

< >

( config word_embeddings )

参数

  • config (PromptTuningConfig) — 提示词嵌入的配置。
  • word_embeddings (torch.nn.Module) — 基础 Transformer 模型的词嵌入层。

将虚拟词元编码为提示词嵌入的模型。

属性:

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

< > 在 GitHub 上更新