# Ajuste de prompts

    

Entrena y almacena solo un conjunto significativamente menor de parámetros de prompt específicos de la tarea (fuente de la imagen).

[Prompt tuning](https://hf.co/papers/2104.08691) añade un prompt virtual específico de la tarea a la entrada, que consiste en vectores entrenables en el espacio de embeddings. Los parámetros de los tokens virtuales se actualizan de forma independiente a los parámetros del modelo preentrenado, que permanecen congelados.

El resumen del artículo es:

*En este trabajo, exploramos el "prompt tuning", un mecanismo simple pero efectivo para aprender "soft prompts" que condicionan modelos de lenguaje congelados para realizar tareas específicas de bajo nivel. A diferencia de los prompts de texto discreto utilizados por GPT-3, los soft prompts se aprenden mediante retropropagación y pueden ajustarse para incorporar señales de cualquier número de ejemplos etiquetados. Nuestro enfoque de aprendizaje de extremo a extremo supera con un amplio margen el aprendizaje "few-shot" de GPT-3. Aún más notablemente, mediante abstracciones sobre el tamaño del modelo utilizando T5, demostramos que el prompt tuning se vuelve más competitivo a medida que aumenta la escala: a medida que los modelos superan los miles de millones de parámetros, nuestro método "cierra la brecha" y iguala el fuerte rendimiento del ajuste del modelo (donde se ajustan todos los pesos del modelo). Este hallazgo es especialmente relevante dado que los modelos grandes son costosos de compartir y servir, y la capacidad de reutilizar un modelo congelado para múltiples tareas de bajo nivel puede aliviar esta carga. Nuestro método puede verse como una simplificación del "prefix tuning" propuesto recientemente por Li y Liang (2021), y proporcionamos una comparación con este y otros enfoques similares. Finalmente, demostramos que condicionar un modelo congelado con soft prompts confiere beneficios en la robustez ante la transferencia de dominio, en comparación con el ajuste completo del modelo*.

A diferencia de [prefix tuning](../package_reference/prefix_tuning), solo la entrada de la primera capa recibe los tokens virtuales.

## Uso

Hay dos decisiones que tomar: cuántos tokens virtuales se añaden a la entrada del modelo (`num_virtual_tokens`) —esto definirá cuántos parámetros entrenables habrá— y cómo se inicializan estos tokens.

Cree una [PromptTuningConfig](/docs/peft/main/es/package_reference/prompt_tuning#peft.PromptTuningConfig) con el tipo de tarea, el texto de prompt tuning inicial para entrenar el modelo, el número de tokens virtuales a añadir y aprender, y un tokenizer.

```py
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()
```

## Resumen de las pruebas de rendimiento

<iframe src="https://peft-internal-testing-peft-method-comparison-embed.hf.space/?highlight[type]=PROMPT_TUNING" frameborder="0" width="850" height="1000"
>

# API

## PromptTuningConfig[[peft.PromptTuningConfig]]

#### peft.PromptTuningConfig[[peft.PromptTuningConfig]]

```python
peft.PromptTuningConfig(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.prompt_tuning.config.PromptTuningInit | str = <PromptTuningInit.RANDOM: 'RANDOM'>, prompt_tuning_init_text: str | None = None, tokenizer_name_or_path: str | None = None, tokenizer_kwargs: dict | None = None)
```

[Fuente](https://github.com/huggingface/peft/blob/main/src/peft/tuners/prompt_tuning/config.py#L30)

**Parámetros:**

prompt_tuning_init (Union[`PromptTuningInit`, `str`]) : La inicialización del embedding de prompt. `TEXT` lo inicializará con su texto. `SAMPLE_VOCAB` lo inicializará con tokens muestreados aleatoriamente del vocabulario del modelo. `RANDOM` lo inicializará con tokens continuos y suaves muestreados aleatoriamente (advertencia: los tokens suaves muestreados pueden caer fuera de la variedad de embeddings)

prompt_tuning_init_text (`str`, *opcional*) : El texto para inicializar el embedding del prompt. Solo se utiliza si `prompt_tuning_init` es `TEXT`.

tokenizer_name_or_path (`str`, *opcional*) : El nombre o la ruta del tokenizador. Solo se utiliza si `prompt_tuning_init` es `TEXT`.

tokenizer_kwargs (`dict`, *opcional*) : Los argumentos de palabra clave para pasar a `AutoTokenizer.from_pretrained`. Solo se usa si `prompt_tuning_init` es `TEXT`.

Esta es la clase de configuración para almacenar la configuración de un [PromptEmbedding](/docs/peft/main/es/package_reference/prompt_tuning#peft.PromptEmbedding).

## PromptEmbedding[[peft.PromptEmbedding]]

#### peft.PromptEmbedding[[peft.PromptEmbedding]]

```python
peft.PromptEmbedding(config, word_embeddings)
```

[Fuente](https://github.com/huggingface/peft/blob/main/src/peft/tuners/prompt_tuning/model.py#L25)

**Parámetros:**

config ([PromptTuningConfig](/docs/peft/main/es/package_reference/prompt_tuning#peft.PromptTuningConfig)) : La configuración del incrustado del prompt.

word_embeddings (`torch.nn.Module`) : Los embeddings de palabras del modelo transformer base.

El modelo para codificar tokens virtuales en embeddings de prompt.

**Atributos**:
- **embedding** (`torch.nn.Embedding`) -- La capa de embedding del embedding del prompt.

Ejemplo:

```py
>>> 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)
```

Forma de entrada: (`batch_size`, `total_virtual_tokens`)

Forma de salida: (`batch_size`, `total_virtual_tokens`, `token_dim`)

