# Ajuste de prompt multitarefa

[Multitask prompt tuning](https://huggingface.co/papers/2303.02861) decompõe os soft prompts de cada tarefa em um único prompt transferível aprendido, em vez de um prompt separado para cada tarefa. O prompt único aprendido pode ser adaptado para cada tarefa por meio de atualizações multiplicativas de baixo rank.

O resumo do artigo é:

*O prompt tuning, no qual um modelo pré-treinado base é adaptado a cada tarefa por meio de condicionamento em vetores de prompt aprendidos, emergiu como uma abordagem promissora para adaptar eficientemente grandes modelos de linguagem a múltiplas tarefas de baixo nível. No entanto, os métodos existentes tipicamente aprendem vetores de prompt suaves do zero, e não ficou claro como explorar o rico conhecimento entre tarefas com vetores de prompt em um cenário de aprendizado multitarefa. Propomos o multitask prompt tuning (MPT), que primeiro aprende um único prompt transferível destilando conhecimento de múltiplos prompts de origem específicos de tarefa. Em seguida, aprendemos atualizações multiplicativas de baixo rank para esse prompt compartilhado para adaptá-lo eficientemente a cada tarefa de destino de baixo nível. Experimentos extensivos em 23 conjuntos de dados de NLP demonstram que nossa abordagem proposta supera os métodos state-of-the-art, incluindo a linha de base de finetuning completo em alguns casos, apesar de ajustar apenas 0,035% dos parâmetros específicos de tarefa*.

    

O multitask prompt tuning permite aprendizado de transferência eficiente em parâmetros.

O MPT consiste em duas etapas:

1. treinamento de origem - para cada tarefa, seu prompt suave é decomposto em vetores específicos da tarefa. Os vetores específicos da tarefa são multiplicados entre si para formar outra matriz W, e o produto de Hadamard é usado entre W e uma matriz de prompt compartilhada P para gerar uma matriz de prompt específica da tarefa. Os prompts específicos da tarefa são destilados em uma única matriz de prompt que é compartilhada entre todas as tarefas. Este prompt é treinado com treinamento multitarefa.
2. adaptação do alvo - para adaptar o prompt único a uma tarefa de destino, um prompt de destino é inicializado e expresso como o produto de Hadamard da matriz de prompt compartilhada e da matriz de prompt de baixo posto específica da tarefa.

    

Decomposição de prompt.

## Visão geral do benchmark

Ainda não existe um benchmark para este método. Sinta-se à vontade para contribuir com uma configuração de experimento, mas certifique-se de primeiro criar uma issue [aqui](https://github.com/huggingface/peft/issues).

# API

## MultitaskPromptTuningConfig[[peft.MultitaskPromptTuningConfig]]

#### peft.MultitaskPromptTuningConfig[[peft.MultitaskPromptTuningConfig]]

```python
peft.MultitaskPromptTuningConfig(task_type: Optional[Union[str, TaskType]] = None, peft_type: Optional[Union[str, PeftType]] = None, auto_mapping: Optional[dict] = None, peft_version: Optional[str] = None, base_model_name_or_path: Optional[str] = None, revision: Optional[str] = None, inference_mode: bool = False, num_virtual_tokens: int = None, token_dim: int = None, num_transformer_submodules: Optional[int] = None, num_attention_heads: Optional[int] = None, num_layers: Optional[int] = None, modules_to_save: Optional[list[str]] = None, prompt_tuning_init: peft.tuners.multitask_prompt_tuning.config.MultitaskPromptTuningInit | str = <MultitaskPromptTuningInit.RANDOM: 'RANDOM'>, prompt_tuning_init_text: str | None = None, tokenizer_name_or_path: str | None = None, tokenizer_kwargs: dict | None = None, prompt_tuning_init_state_dict_path: str | None = None, prompt_tuning_init_task: int | None = 0, num_ranks: int | None = 1, num_tasks: int | None = 1)
```

[Fonte](https://github.com/huggingface/peft/blob/main/src/peft/tuners/multitask_prompt_tuning/config.py#L37)

## MultitaskPromptEmbedding[[peft.tuners.MultitaskPromptEmbedding]]

#### peft.tuners.MultitaskPromptEmbedding[[peft.tuners.MultitaskPromptEmbedding]]

```python
peft.tuners.MultitaskPromptEmbedding(config: MultitaskPromptTuningConfig, word_embeddings)
```

[Fonte](https://github.com/huggingface/peft/blob/main/src/peft/tuners/multitask_prompt_tuning/model.py#L28)

