4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成AIAdvent Calendar 2024

Day 15

DSPyの極意:LLMモデル性能のモジュール型最適化

Posted at

DSPyとは?

DSPyは、LLMをモジュール型の自己改善パイプラインとして扱うフレームワークです。主な構成要素は以下の3つです:

  • Signatures(署名): 入出力関係を定義するブループリント。
  • Modules(モジュール): タスクを効率的に処理するためのコンポーネント。
  • Teleprompters(最適化ツール): モジュールの性能を向上させるための最適化エンジン。

DSPyの主な特徴

他のフレームワークと比較したDSPyの利点を見てみましょう。

  1. 制御された生成
    他フレームワーク(例: Guidance, LMQL): テンプレートベースの生成を提供するが、手動設定が必要。
    DSPy: テレプロンプターによる自動最適化で、一貫した結果を提供
  2. スキーマ駆動型生成
    他フレームワーク(例: Marvin, Instructor): 定義済みスキーマを使用するが、柔軟性が低い。
    DSPy: 自然言語署名で幅広いタスクをサポート
  3. モジュール型プログラミング
    他フレームワーク(例: LangChain): プロトタイピングには便利だが、カスタマイズ性に欠ける。
    DSPy: 高度な最適化戦略を提供し、複雑なパイプラインを構築可能
  4. オープンエージェント
    他フレームワーク(例: AutoGPT, MetaGPT): 固定されたプロンプトに依存。
    DSPy: 継続的な自己改善が可能なカスタマイズパイプラインを構築

DSPyの主要コンポーネント

1. 署名

署名はタスクの入出力関係を自然言語で定義するブループリントです。

例:

sig_1 = dspy.Signature("質問 -> 答え")
sig_2 = dspy.Signature("ドキュメント -> 要約")
sig_3 = dspy.Signature("質問, 文脈 -> 答え")

2. モジュール

モジュールは特定のタスクを処理するための組み込み機能を提供します。

モジュールの種類

  • Predictモジュール: シンプルな入力と出力のマッピングを提供。
  • ChainOfThought(CoT)モジュール: 複雑なタスクを段階的に処理。
  • ProgramOfThought(PoT)モジュール: 抽象度の高いタスクを処理。

例: アクションアイテムの抽出

class ExtractActionItems(dspy.Signature):
    """
    テキストからアクションアイテムを抽出し、Pythonリストとして返します。
    """
    Text = dspy.InputField(desc="テキスト")
    Extracted_action_items = dspy.OutputField(desc="アクションアイテムのリスト")
 
action_items_extractor = dspy.Predict(ExtractActionItems)
response = action_items_extractor(Text=Text)

3. 最適化ツール

DSPyのテレプロンプターは、モジュールの性能を継続的に改善する最適化エンジンです。

種類

  • Few-Shot学習: ラベル付きデータから最適なプロンプトを生成。
  • 指示最適化: 効率的な指示を生成し、最適化。
  • ファインチューニング最適化: 小規模モデル向けに重みを調整。

例: Few-Shot最適化

optimizer = dspy.teleprompt.BootstrapFewShot()
optimized_model = optimizer.compile(module, trainset=get_examples())

DSPyを使ったユースケース:フィードバック要約の最適化

シナリオ
アプリのフィードバックを要約し、感情分析やアクションアイテムを抽出するタスクを想定。

タスクの定義

class FeedbackSummary(dspy.Signature):
    feedback_text = dspy.InputField()
    sentiment = dspy.OutputField()
    topics = dspy.OutputField()
    action_items = dspy.OutputField()

モジュールの作成

class SummarizeFeedback(dspy.Module):
    def __init__(self):
        super().__init__()
        self.summary = dspy.ChainOfThought(FeedbackSummary)

    def forward(self, feedback_text):
        return self.summary(feedback_text=feedback_text)

トレーニングデータの追加

def get_examples():
    return [
        dspy.Example(
            feedback_text="新機能は素晴らしいが、ドキュメントが不足している。",
            sentiment="ポジティブ",
            topics="新機能, ドキュメント",
            action_items="ドキュメントの改善"
        )
    ]

最適化の実施

optimizer = dspy.teleprompt.BootstrapFewShot()
optimized_summarizer = optimizer.compile(SummarizeFeedback(), trainset=get_examples())

参考

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?