PEFT documentation

Điều chỉnh prompt

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Điều chỉnh prompt

Only train and store a significantly smaller set of task-specific prompt parameters (image source).

Prompt tuning thêm một prompt ảo đặc thù cho tác vụ vào đầu vào, bao gồm các vector có thể huấn luyện trong không gian nhúng. Tham số của các token ảo được cập nhật độc lập với các tham số của mô hình được huấn luyện trước, vốn được đóng băng.

Tóm tắt từ bài báo là:

Trong công trình này, chúng tôi khám phá “prompt tuning”, một cơ chế đơn giản nhưng hiệu quả để học các “soft prompts” nhằm điều kiện hóa các mô hình ngôn ngữ đóng băng (frozen) thực hiện các tác vụ downstream cụ thể. Khác với các text prompts rời rạc được sử dụng bởi GPT-3, soft prompts được học thông qua backpropagation và có thể được tinh chỉnh để tích hợp tín hiệu từ bất kỳ số lượng ví dụ nào có nhãn. Phương pháp học end-to-end của chúng tôi vượt trội hơn đáng kể so với học “few-shot” của GPT-3. Đáng chú ý hơn, thông qua các ablation về kích thước mô hình sử dụng T5, chúng tôi chỉ ra rằng prompt tuning trở nên cạnh tranh hơn khi quy mô tăng: khi các mô hình vượt quá hàng tỷ tham số, phương pháp của chúng tôi “thu hẹp khoảng cách” và đạt được hiệu suất mạnh mẽ tương đương với model tuning (nơi tất cả trọng số mô hình được tinh chỉnh). Phát hiện này đặc biệt liên quan vì các mô hình lớn tốn kém để chia sẻ và triển khai, và khả năng tái sử dụng một mô hình đóng băng cho nhiều tác vụ downstream có thể giảm bớt gánh nặng này. Phương pháp của chúng tôi có thể được xem là một sự đơn giản hóa của “prefix tuning” gần đây do Li và Liang (2021) đề xuất, và chúng tôi cung cấp một so sánh với cách tiếp cận này cùng các phương pháp tương tự khác. Cuối cùng, chúng tôi chỉ ra rằng việc điều kiện hóa một mô hình đóng băng bằng soft prompts mang lại lợi ích về độ bền vững (robustness) đối với domain transfer, so với việc tinh chỉnh toàn bộ mô hình.

Khác với prefix tuning, chỉ đầu vào của lớp đầu tiên nhận các token ảo.

Cách sử dụng

Có hai quyết định cần đưa ra: số lượng token ảo được thêm vào đầu vào của mô hình (num_virtual_tokens) - điều này sẽ xác định số lượng tham số có thể huấn luyện - và cách các token này được khởi tạo.

Tạo một PromptTuningConfig với loại tác vụ, văn bản prompt tuning ban đầu để huấn luyện mô hình, số lượng token ảo cần thêm và học, cùng một 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()

Tổng quan về benchmark

API

PromptTuningConfig

lớp peft.PromptTuningConfig

< >

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

Tham số

  • prompt_tuning_init (Union[PromptTuningInit, str]) — Khởi tạo của prompt embedding. TEXT sẽ khởi tạo bằng văn bản của bạn. SAMPLE_VOCAB sẽ khởi tạo bằng các token được lấy mẫu ngẫu nhiên từ bảng từ vựng của mô hình. RANDOM sẽ khởi tạo bằng các token liên tục, mềm được lấy mẫu ngẫu nhiên (cảnh báo: các token mềm được lấy mẫu có thể nằm ngoài đa tạp nhúng)
  • prompt_tuning_init_text (str, tùy chọn) — Văn bản để khởi tạo prompt embedding. Chỉ được sử dụng nếu prompt_tuning_init là TEXT.
  • tokenizer_name_or_path (str, tùy chọn) — Tên hoặc đường dẫn của tokenizer. Chỉ được sử dụng nếu prompt_tuning_init là TEXT.
  • tokenizer_kwargs (dict, tùy chọn) — Các đối số từ khóa để truyền cho AutoTokenizer.from_pretrained. Chỉ được sử dụng nếu prompt_tuning_init là TEXT.

Đây là lớp cấu hình để lưu trữ cấu hình của một PromptEmbedding.

PromptEmbedding

lớp peft.PromptEmbedding

< >

( configword_embeddings )

Tham số

  • config (PromptTuningConfig) — Cấu hình của prompt embedding.
  • word_embeddings (torch.nn.Module) — Các embedding từ của mô hình transformer cơ sở.

Mô hình để mã hóa các token ảo thành các embedding của prompt.

Thuộc tính:

  • embedding (torch.nn.Embedding) — Lớp embedding của embedding prompt.

Ví dụ:

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

Hình dạng đầu vào: (batch_size, total_virtual_tokens)

Hình dạng đầu ra: (batch_size, total_virtual_tokens, token_dim)

Update on GitHub