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があれば、追加の人手アノテーションなしにデータ生成を進められる
欠点
比較
関連用語
よくある質問
Self-Instructとknowledge distillationの違いは?
知識蒸留は既存モデルの出力そのものを教師データとして使うのに対し、Self-Instructは既存モデルに新しい指示文と応答のペアを生成させ、指示チューニング用のデータセットを合成する点に重点がある。
Self-Instructで生成したデータの質はどう担保する?
生成された指示・応答ペアに対し、既存データとの類似度によるフィルタリングや簡易的なルールベースの品質チェックを行い、質の低いものや重複したものを除外する工程が組み込まれる。