PEFT documentation
Prompt tuning
Prompt tuning

Prompt tuning adiciona um prompt virtual específico da tarefa à entrada, composto por vetores treináveis no espaço de incorporação. Os parâmetros dos tokens virtuais são atualizados de forma independente dos parâmetros do modelo pré-treinado, que permanecem congelados.
O resumo do artigo é:
Neste trabalho, exploramos o “prompt tuning”, um mecanismo simples, porém eficaz, para aprender “soft prompts” que condicionam modelos de linguagem congelados a executar tarefas específicas de baixo nível. Diferentemente dos prompts de texto discretos usados pelo GPT-3, os soft prompts são aprendidos por retropropagação e podem ser ajustados para incorporar sinal de qualquer número de exemplos rotulados. Nossa abordagem de aprendizado de ponta a ponta supera o aprendizado “few-shot” do GPT-3 por uma grande margem. Mais notavelmente, por meio de ablações no tamanho do modelo usando T5, mostramos que o prompt tuning se torna mais competitivo com a escala: à medida que os modelos excedem bilhões de parâmetros, nosso método “fecha a lacuna” e iguala o forte desempenho do ajuste do modelo (em que todos os pesos do modelo são ajustados). Essa descoberta é especialmente relevante, pois modelos grandes são custosos de compartilhar e servir, e a capacidade de reutilizar um modelo congelado para múltiplas tarefas de baixo nível pode aliviar esse fardo. Nosso método pode ser visto como uma simplificação do “prefix tuning” recentemente proposto por Li e Liang (2021), e fornecemos uma comparação com essa e outras abordagens semelhantes. Por fim, mostramos que condicionar um modelo congelado com soft prompts confere benefícios em robustez à transferência de domínio, em comparação com o ajuste completo do modelo.
Em contraste com o prefix tuning, apenas a entrada da primeira camada recebe os tokens virtuais.
Uso
Há duas decisões a tomar: quantos tokens virtuais são adicionados à
entrada do modelo (num_virtual_tokens) - isso definirá quantos
parâmetros treináveis haverá - e como esses tokens são inicializados.
Crie um PromptTuningConfig com o tipo de tarefa, o texto inicial de prompt tuning para treinar o modelo, o número de tokens virtuais a serem adicionados e aprendidos e um tokenizer.
from peft import PromptTuningConfig, PromptTuningInit, get_peft_model
prompt_tuning_init_text = "Classify if the tweet is a complaint or no complaint.\n"
peft_config = PromptTuningConfig(
task_type="CAUSAL_LM",
prompt_tuning_init=PromptTuningInit.TEXT,
num_virtual_tokens=len(tokenizer(prompt_tuning_init_text)["input_ids"]),
prompt_tuning_init_text=prompt_tuning_init_text,
tokenizer_name_or_path="bigscience/bloomz-560m",
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()Visão geral do benchmark
API
PromptTuningConfig
classe peft.PromptTuningConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsenum_virtual_tokens: int = Nonetoken_dim: int = Nonenum_transformer_submodules: Optional[int] = Nonenum_attention_heads: Optional[int] = Nonenum_layers: Optional[int] = Nonemodules_to_save: Optional[list[str]] = Noneprompt_tuning_init: peft.tuners.prompt_tuning.config.PromptTuningInit | str = <PromptTuningInit.RANDOM: 'RANDOM'>prompt_tuning_init_text: str | None = Nonetokenizer_name_or_path: str | None = Nonetokenizer_kwargs: dict | None = None )
Parâmetros
- prompt_tuning_init (Union[
PromptTuningInit,str]) — A inicialização do embedding do prompt.TEXTinicializará com o seu texto.SAMPLE_VOCABinicializará com tokens amostrados aleatoriamente do vocabulário do modelo.RANDOMinicializará com tokens contínuos e suaves amostrados aleatoriamente (aviso: tokens suaves amostrados podem ficar fora da variedade de embeddings) - prompt_tuning_init_text (
str, opcional) — O texto para inicializar o embedding do prompt. Usado apenas seprompt_tuning_initforTEXT. - tokenizer_name_or_path (
str, opcional) — O nome ou caminho do tokenizer. Usado apenas seprompt_tuning_initforTEXT. - tokenizer_kwargs (
dict, opcional) — Os argumentos de palavra-chave a serem passados paraAutoTokenizer.from_pretrained. Usado apenas seprompt_tuning_initforTEXT.
Esta é a classe de configuração para armazenar a configuração de um PromptEmbedding.
PromptEmbedding
classe peft.PromptEmbedding
< source >( configword_embeddings )
Parâmetros
- config (PromptTuningConfig) — A configuração do prompt embedding.
- word_embeddings (
torch.nn.Module) — Os embeddings de palavras do modelo transformer base.
O modelo para codificar tokens virtuais em embeddings de prompt.
Atributos:
- embedding (
torch.nn.Embedding) — A camada de embedding do embedding do prompt.
Exemplo:
>>> 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)Formato de Entrada: (batch_size, total_virtual_tokens)
Formato da Saída: (batch_size, total_virtual_tokens, token_dim)