PEFT documentation
Ajuste de prompts
Ajuste de prompts

Prompt tuning 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 que realicen 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 model tuning (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 model tuning completo.
A diferencia de 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 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.
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
API
PromptTuningConfig
clase 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]) — La inicialización del embedding del prompt.TEXTlo inicializará con tu texto.SAMPLE_VOCABlo inicializará con tokens muestreados aleatoriamente del vocabulario del modelo.RANDOMlo inicializará con tokens continuos y suaves muestreados aleatoriamente (advertencia: los tokens suaves muestreados pueden quedar fuera de la variedad del embedding) - prompt_tuning_init_text (
str, opcional) — El texto para inicializar la incrustación del prompt. Solo se utiliza siprompt_tuning_initesTEXT. - tokenizer_name_or_path (
str, opcional) — El nombre o la ruta del tokenizer. Solo se utiliza siprompt_tuning_initesTEXT. - tokenizer_kwargs (
dict, opcional) — Los argumentos de palabra clave para pasar aAutoTokenizer.from_pretrained. Solo se usa siprompt_tuning_initesTEXT.
Esta es la clase de configuración para almacenar la configuración de un PromptEmbedding.
PromptEmbedding
clase peft.PromptEmbedding
< source >( configword_embeddings )
Parámetros
- config (PromptTuningConfig) — La configuración del embedding de prompt.
- word_embeddings (
torch.nn.Module) — Las incrustaciones 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:
>>> 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)