Re Reference AI

技術

Self-Instructとは

LLM自身に指示・応答のペアを生成させ、指示チューニング用データセットを合成する手法

合成データファインチューニング

ひとことで言うと

AI自身に練習問題と模範解答を作らせて、そのデータで別のAIを指示に従いやすく育てる方法。

概要

Self-Instructは、少数の人手で作成した指示・応答の例をシード(種)として、既存のLLMにそれらを参考にした新しい指示文と対応する応答を大量に生成させ、生成された指示・応答ペアを指示チューニング用の学習データとして利用する手法。 生成された指示の中には質が低いものや重複したものも含まれるため、類似度によるフィルタリングや簡易的な品質チェックを経て、実際に学習へ使うデータを絞り込む工程が組み込まれる。 人手による指示・応答データの収集は時間とコストがかかるため、Self-Instructはこの工程を既存のLLMを使って自動化し、少ないシードデータから大規模な指示チューニング用データセットを合成できるようにする。 Alpacaなど、この手法を使って合成したデータセットで既存モデルを指示チューニングした派生モデルが数多く登場し、合成データによる指示チューニングの実用性を広めるきっかけになった。

背景

指示チューニングには多様な指示・応答ペアのデータセットが必要だが、人手だけで大量かつ多様なデータを作成するにはコストと時間がかかっていた。 Self-Instructは、既存のLLM自身にデータ生成を担わせることで、この人手によるデータ収集のボトルネックを解消する目的で考案された。

歴史

2022年: Wangらが論文「Self-Instruct: Aligning Language Models with Self-Generated Instructions」を発表。 2023年: Alpacaが、この手法を応用して生成したデータセットでLlama指示チューニングし、公開されたことで手法の実用性が広く知られるようになる。

ワークフロー

人手で作成した少数の指示・応答の例をシードデータとして用意する。 シードデータを参考にしつつ、既存のLLMへ新しい指示文とそれに対応する応答を大量に生成させる。 生成された指示・応答ペアを、類似度チェックや簡易的な品質フィルタで絞り込み、指示チューニング用の学習データセットとして整備する。

コード例

シードデータからの指示生成ループ(概念的な実装例)

seed_tasks = load_seed_tasks()
generated = []
for _ in range(num_iterations):
    prompt = build_generation_prompt(seed_tasks + generated)
    new_instruction = llm(prompt)
    if passes_quality_filter(new_instruction, generated):
        generated.append(new_instruction)

利点

  • 少数の人手データから、大規模な指示チューニング用データセットを低コストで合成できる
  • 生成する指示のカテゴリや分布を、シードデータの設計によってある程度制御できる
  • 既存の強力なLLMがあれば、追加の人手アノテーションなしにデータ生成を進められる

欠点

  • 生成に使ったLLM自身の誤りやバイアスが、合成データを通じて後続モデルに引き継がれる
  • 生成された指示・応答の質にばらつきがあり、フィルタリング工程の設計が結果を左右する
  • 合成データに偏りすぎると、実世界の指示の多様性を十分にカバーできないことがある

比較

  • 合成データSelf-Instructは、指示チューニング用の合成データを生成する代表的な具体的手法の1つ
  • 指示チューニングSelf-Instructで生成したデータセットは、後続モデルの指示チューニングにそのまま利用される
  • 知識蒸留強力なモデルの出力を別モデルの学習に使う点で、Self-Instructは知識蒸留と似た構造を持つ

関連用語

合成データ指示チューニング知識蒸留Few-shot

よくある質問

Self-Instructとknowledge distillationの違いは?

知識蒸留は既存モデルの出力そのものを教師データとして使うのに対し、Self-Instructは既存モデルに新しい指示文と応答のペアを生成させ、指示チューニング用のデータセットを合成する点に重点がある。

Self-Instructで生成したデータの質はどう担保する?

生成された指示・応答ペアに対し、既存データとの類似度によるフィルタリングや簡易的なルールベースの品質チェックを行い、質の低いものや重複したものを除外する工程が組み込まれる。

参考文献

関連Zenn記事