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
)