5.8K Views
March 15, 24
スライド概要
DL輪読会資料
複合的なAIシステムと DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines 岡田 領 / Ryo Okada
書誌情報 LLMに関わる2つの文書から抜粋して紹介 https://bair.berkeley.edu/blog/2024/02/18/compound-ai-systems/ 2024/2/18 blog post arXiv, Oct 2023 ※関連でアサーション周りの論文もある DSPy Assertions: Computational Constraints for Self-Refining Language Model Pipelines, arXiv Dec 2023 • • LLMのシステム化全般の話を見る中で,DSPyについて言及されており,興味を持った. LLMを実活用する際に大きな課題となるプロンプティングなどの課題に対する,1つ考え方として答えを出してい る 2
背景 複合的なAIシステムの必要性 • 最先端のAIシステムは単一のAIではなく,複合 的なAIのコンポーネントによって構成されてい る • ChatGPT Plus ‒ LLM,ウェブ検索,コードインタプリ ター,DALL-E • RAGシステム ‒ • なぜ複合的なAIシステムが必要なのか? 1. 2. モデルは静的なデータで訓練されているため,動的なシステ ムの場合は組み合わせが必要 LLMのサンプリング・スコアリング, コード実行,クラスタリング 目的によってはモデルを単一のモデルをスケールするよりも 組み合わせの方がコスパが良い LLM,Retrieval AlphaCode2 ‒ • 3. モデルはコントロールしづらい(特定の挙動をしないように するのは難しい)ので,外部でフィルタリングなど必要 4. など 3
複合的なAIシステムの課題 単純なAIモデルと比較した新たな課題 • 設計面 ‒ 探索範囲が膨大.単純なRAGの場合でも:①多様なretrieval, 言語モデルの選択肢,②多 様なretrievalの改善手法(クエリ改善,reranking..),③LLMの生成結果の改善手法(他 のLLMにチェックさせたり),… • 最適化 ‒ 各コンポーネントがうまく協業するような最適化が必要.単純なRAGの場合:retriever へのクエリの生成や回答の生成など • 運用面 ‒ LLMエージェントの性能をどのように追跡し,デバッグするか? ‒ ロギング,データ管理,セキュリティなど 4
新たなパラダイム 前述の課題に関わる昨今の技術潮流 • AIシステムデザイン(組み合わせや戦略) ‒ • 言語モデルプログラミングフレームワーク:LangChain, LlamaIndex, AutoGPT, Guardrails, … 品質の自動最適化 ‒ 任意のメトリクスを最大化するためにLLMなどで構成されるシステムを最適化をするフレームワ ーク: DSPy • コストの最適化 ‒ • LLMの推論コストを大幅に削減: FrugalGPT 運用面(LLMOpsとDataOps) ‒ モデルのアウトプットとデータパイプラインのモニタリング (追跡,可視化,評価) : LangSmith, Phoenix Traces, Databricks Inference Tablesなど 5
DSPyとは? DSPy: Programming—not prompting—Foundation Models (プロンプトエンジニアリングではなく,基盤モデルをプログラミングする) • LLMはプロンプト調整が大変.更にそれをシステム化すると,最適な結果を出すためにはモ デルやパイプライン,データを変更する度にプロンプトを調整しなければいけない. • メトリクスを設定し,良い感じのプロンプト調整を自動で調整できないか? • DSPy:言語モデルのプロンプトや重みをアルゴリズムで最適化するフレームワーク ‒ OSSとして公開 ‒ Pytorchに影響受けており,pytorchのモデル構築ライクのdefine-by-runに扱える 6
DSPyの主要要素 3つの要素でプロンプトエンジニアリングから脱却,より全体的な戦略に焦点を当てることが可能に • • • シグネチャー ‒ プロンプトを抽象化 ‒ Ex. “question -> answer”, “long_document -> summary”, … モジュール ‒ プロンプトテクニックを一般化 ‒ Ex. dspy.ChainOfThought, dspy.ReAct, … DSPyオプティマイザー(旧名称テレプロンプター) ‒ プログラム,データ,メトリクスを受け取り,メトリクスに対する最適化を行う ‒ Ex. LabeledFewShot, BootstrapFewShot, …
DSPyの主要要素 3つの要素でプロンプトエンジニアリングから脱却,より全体的な戦略に焦点を当てることが可能に • • • シグネチャー ‒ プロンプトを抽象化 ‒ Ex. “question -> answer”, “long_document -> summary”, … Pytorchで言うと… モジュールの 入出力定義・次元数など モジュール ‒ プロンプトテクニックを一般化 ‒ Ex. dspy.ChainOfThought, dspy.ReAct, … 学習可能なNNの層 (ex. 畳み込み層) DSPyオプティマイザー(旧名称テレプロンプター) ‒ 最適化アルゴリズム プログラム,データ,メトリクスを受け取り,メトリクスに対する最適化を行う Ex. SGD, Adam ‒ Ex. LabeledFewShot, BootstrapFewShot, …
DSPyを使ったプログラム例 シグネチャ: 入力の意図(質問→回答)として利用するこ とを指定 モジュール: Chain of Thoughtのプロンプト手法を利用 DSPy オプティマイザ: FewShot例をブーストするように指定 メトリクスを指定 コンパイルにて最適化を実施(プログラムと ラベル付きのデモデータを渡す)
DSPyコンパイラ DSPyによって書かれたプログラムをメトリクスに基づき最適化する • DSPyオプティマイザーを使って,プログラムのパラメータ(プロンプトなど)をチューニ ングし,指定されたメトリクスを最大化する ‒ ①候補の生成:内部のモジュールを探索し,モジュールのパラメータ(入出力のペアのデモなど)を生成 ✔ コンパイル対象のプログラムのゼロショット版(もしくは与えた教師プログラム)でシミュレートし,良い例をデモと して採用 • ‒ ②パラメータ最適化:メトリクスを最大化する候補を選択する ‒ ③パイプライン最適化:アンサンブルなどより高次の処理を行う ‒ ※メトリクスは例えばexact matchやF1スコアなどが用いられる DSPyオプティマイザーの例: ‒ LabeledFewShot: 与えられたラベル付きペアからfewshotの例を構築 ‒ BootstrapFewShot: プログラムに沿ってfewshotのデモを生成 ‒ BootstrapFinetune: ファインチューン用も ‒ ...
ケーススタディ1(数学問題) GSM8Kデータセット(数学問題)で比較(全てDSPyの実装) • 1ステップの推論(Predictモジュール) • ChainOfThought • Reflection(ChainOfThought からの複数の出力を比較して、最終的な予測を生成 ) • で比較(※数学の知識に特化させるような工夫はなし
ケーススタディ1(数学の問題) 結果 • Noneに対し,モジュールの組み合わせで改善(4~20%→49~88%) • ※プロンプトエンジニアリングなどはなしで,モジュールを組み合わせるだけで改善幅大きいとのこと
ケーススタディ2 HotPotQAデータセット(複雑なQA問題)での場合 • モジュールを組み合わせることで改善
LangChainやLlama-Indexとの違い • LangChainやLlama-indexはパッケージ化されたコンポーネント,チェーン,パイプ ライン,ツールを提供しており,内部には手作業で作った固定のプロンプトが用い られている.(DSPyが解決しようとしているプロンプトの問題を内部的に包括し ている) • DSPyはプロンプトエンジニアリングの課題を解決しようとしているものであり, 上記とは焦点が異なる
まとめ • LLMにおける大きな課題であるプロンプトの問題を解消する考え方 • (LLMを使っているのにプロンプトを書かない感覚は使ってみても新しい) • 一発LLMで生成させたいモチベーションよりも,継続的にデモを蓄積して改善させていきた いようなシステム化の文脈で効果が大きいと感じた ‒ モデルのバージョンアップや変更にも柔軟に対応できそう
Thank you.