PEFT 文档
提示词调优(Prompt tuning)
并获得增强的文档体验
开始使用
提示词调优(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
)