PEFT documentation
マルチタスクプロンプトチューニング
マルチタスクプロンプトチューニング
Multitask prompt tuningでは、各タスクのソフトプロンプトを個別のプロンプトではなく、単一の学習可能な転移可能なプロンプトに分解します。この単一の学習プロンプトは、乗法的な低ランク更新によって各タスクに適応させることができます。
論文の抄録は以下の通りです:
ベースとなる事前学習済みモデルを、学習されたプロンプトベクトルによる条件付けを通じて各タスクに適応させるプロンプトチューニングは、大規模言語モデルを複数の下流タスクに効率的に適応させる有望なアプローチとして台頭しています。しかし、既存の手法は通常、ゼロからソフトプロンプトベクトルを学習しており、マルチタスク学習の環境において、プロンプトベクトルを用いて豊富なタスク間知識をどのように活用すべきかが明確ではありませんでした。本稿では、マルチタスクプロンプトチューニング(MPT)を提案します。MPTはまず、複数のタスク固有のソースプロンプトから知識を蒸留することで、単一の転移可能なプロンプトを学習します。次に、この共有プロンプトに対する乗法的低ランク更新を学習することで、各下流ターゲットタスクに効率的に適応させます。23のNLPデータセットでの広範な実験により、本手法は、タスク固有のパラメータをわずか0.035%しかチューニングしないにもかかわらず、フルファインチューニングベースラインを含む最先端の手法を上回ることを示しました。

MPTは2つの段階で構成されています:
- source training - 各タスクについて、そのソフトプロンプトをタスク固有のベクトルに分解します。タスク固有のベクトル同士を掛け合わせて別の行列 W を形成し、W と共有プロンプト行列 P の間で Hadamard 積を用いてタスク固有のプロンプト行列を生成します。タスク固有のプロンプトは、すべてのタスクで共有される単一のプロンプト行列に蒸留されます。このプロンプトはマルチタスク学習によって学習されます。
- target adaptation - タスク固有のプロンプトを初期化し、共有プロンプト行列とタスク固有の低ランクプロンプト行列のHadamard積として表現することで、ターゲットタスクに単一のプロンプトを適応させます。

ベンチマーク概要
この手法のベンチマークはまだありません。実験設定の貢献は歓迎しますが、まずこちらでイシューを作成してください。
API
MultitaskPromptTuningConfig
クラス peft.MultitaskPromptTuningConfig
< 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.multitask_prompt_tuning.config.MultitaskPromptTuningInit | str = <MultitaskPromptTuningInit.RANDOM: 'RANDOM'>prompt_tuning_init_text: str | None = Nonetokenizer_name_or_path: str | None = Nonetokenizer_kwargs: dict | None = Noneprompt_tuning_init_state_dict_path: str | None = Noneprompt_tuning_init_task: int | None = 0num_ranks: int | None = 1num_tasks: int | None = 1 )
MultitaskPromptEmbedding
クラス peft.tuners.MultitaskPromptEmbedding
< source >( config: MultitaskPromptTuningConfigword_embeddings )