Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LLMで構造化出力の成功率をグンと上げる方法

 LLMで構造化出力の成功率をグンと上げる方法

DeNA x AI Talks #1 登壇資料

Avatar for Keisuke Takiguchi

Keisuke Takiguchi

August 05, 2025
Tweet

Other Decks in Technology

Transcript

  1. © DeNA Co., Ltd. 2 自己紹介 2020:DeNA 新卒入社 → 音声チームで研究開発

    • 音声合成 / 音声変換の研究開発 • 七声ニーナPJ 2022:エアフレンド株式会社 • LINEのチャットアプリ → iOS / Android向けアプリへ移行 • 音声AI開発エンジニアとして、 TTS / 音声認識モデルの学習、 データ収集、インフラ(AWS)運用、バックエンド保守など 2024/2:DeNA 中途 • アニメ×AI PJ 、エンタメ系 PJに参画 • 現在はイノベーション事業本部にて新規プロダクト開発中 大学 • 学士:慶應義塾大学 理工学部 情報工学科 ◦ 粒子系リアルタイムシミュレーション / CGとか色々 • 修士:慶應義塾大学院 理工学研究科 開放環境科学科 ◦ 深層(階層)強化学習 / HAI 趣味 • ギター / シーシャ / VR / VTuber 滝口 啓介 IT本部AI・データ戦略統括部 AI技術開発部 AIイノベーショングループ
  2. © DeNA Co., Ltd. 4 構造化出力、使ってますか...? LLM(大規模言語モデル)を活用したプロダクト開発の需要が高まっていますね!! LLMをプロダクトへ組み込む際、その出力を「構造化出力」として扱うことが多いかと思います なぜ構造化出力が重要か? •

    出力の一貫性 : 出力要素を定義することで、生成される値の一貫性を担保 • 型安全性 : 期待するデータ型(数値、文字列、ブーリアンなど)を保証 • データ処理のしやすさ : 抽出した情報を容易に解析・処理が行いやすい 構造化出力で直面しがちな課題 一方で構造化出力は生成に失敗することも多く、以下のような課題も存在します。 • 複雑な構造 : データモデルが入れ子構造だったりで複雑化すると、出力が崩れやすくなる • 温度設定 : 出力の多様性を高めるため温度パラメータを高く設定する場合、同様に崩れやすい
  3. © DeNA Co., Ltd. 5 失敗しやすい構造化出力、成功率をあげるには? 1. 明確で具体的なプロンプト設計 2. 少数例(

    Few-shot prompting)の提供 3. モデルの選択と設定 4. 構造化出力に特化した LLM推論ライブラリを使用( 今日一番伝えたいところ! )
  4. © DeNA Co., Ltd. 6 明確で具体的なプロンプト設計 LLMはプロンプトの内容に厳密に従おうとするため、これが最も重要。 • 出力形式を明示 ◦

    JSON、XML、YAML、CSVなど、どのような形式で出力してほしいかを明確に指定 ◦ 可能であれば、具体的なスキーマや例も記載 • データ型の指定 ◦ 数値、文字列、booleanなど、各フィールドのデータ型を明確に指定 • 列挙型の指定 ◦ 特定の値のセットから選択させる場合は、そのセットを明示 ◦ 例: "status"は'pending', 'approved', 'rejected'のいずれかにしてください。 • 禁止事項を明記 ◦ 余計な説明や前置き、後書きを含めないよう指示します。 ◦ 例: JSONオブジェクトのみを出力し、それ以外のテキストは一切含めないでください。
  5. © DeNA Co., Ltd. 8 モデルの選択と設定 構造化出力に強いモデルの利用 • モデルごとに構造化出力に対して強い /

    弱いモデルがあり、適切なモデルを選択すると良い • 例: gemini-2.0-flash は比較的構造化出力に強いが、 gemini-flash-2.5-lite は成功率が落ちる、など 温度(Temperature)の設定 : • 低い温度(例 : 0.0〜0.3): 出力の多様性を抑え、より決定論的で予測可能な出力を生成させる際には温 度を低く設定、構造化出力時は温度を低く設定する方が良い • 高い温度 : 出力の多様性が上がるため、よりランダムな生成結果が欲しい場合に向いていますが、構造 化出力には不向きです max_tokensの設定 • 想定する構造定義のサイズに対して、適切な max_tokensを設定 構造化出力を途中で切れないように、十分な長さを確保
  6. © DeNA Co., Ltd. 9 構造化出力に特化したLLM推論ライブラリ とはいえ、 ・温度パラメータ高い状態でも構造化出力使いたい! ・軽量なモデル(gemini-2.5-flash-liteやOllamaで動かす軽量ローカルモデル)でも構造化出力したい! と思うこともあると思います(僕は思いました

    😌) そこで、Outlines [https://github.com/dottxt-ai/outlines] の出番です! 構造化出力の「確実性」を追求するライブラリ • LLMからの出力を、特定のフォーマット( JSON, XML, YAMLなど)やスキーマに厳密に従わせるための Pythonライブラリ • LLMで普通に構造化出力を行う場合、前述の通り、指定したフォーマットから逸脱したり、無関係なテキス トが混入したりするという課題があったが • Outlinesは、「構造化出力の失敗」という共通の課題 を解決するために設計された
  7. © DeNA Co., Ltd. 10 Outlinesの仕組み 文法誘導型生成 (Grammar-Guided Generation): LLMがトークンを生成する際に、事前に定義された文法(正規表現、

    JSON Schemaなど)に合致するトークン のみを選択肢として提示することで、 LLMが常に指定された形式に沿った出力を生成 主要な特徴 : • 高精度: 期待通りの構造化出力を(ほぼ) 100%の精度で実現 • シンプルさ : 非常にシンプルな実装で、既存の LLMコードに容易に統合可能 • 多様なモデル対応 : OpenAI、Hugging Face、Local LLMなど、様々なLLMバックエンドをサポート • 文法定義 : ◦ 正規表現 (Regex): 特定のパターンにマッチする文字列を生成 ◦ JSON Schema: JSON構造、データ型、制約を厳密に定義、それに従った JSONを生成 ◦ Pydanticモデルによる型定義 : PythonのPydanticモデルを直接スキーマとして利用可能
  8. © DeNA Co., Ltd. 13 概要 タスク例:天気情報集約 ・入力プロンプト "東京の明日の詳細な天気分析を作成してください。気温は 25度、湿度は60%、風速は3m/s、曇りのち晴れの予想で、

    大気圧1013hPa、紫外線指数中程度、花粉情報も含めてく ださい。" ・出力の失敗例 中身が空のjsonが吐き出される ・期待する出力の成功例
  9. © DeNA Co., Ltd. 14 全体の結果 出力が None になったり、 定義した構造化出力に

    合わない出力が生成される エラーが発生 構造化出力は成功するが、 中身のデータが空になる ようなエラーが発生(↓)
  10. © DeNA Co., Ltd. 15 個々のタスクの結果 ・入力プロンプト "ユーザー田中太郎( 30歳、エンジニア)の詳細プロフィールを作成してください。好みはプ ログラミング、読書、旅行で、設定はダークモード有効、通知

    ON、言語設定は日本語、メ タデータにはアカウント作成日 2023-01-15、最終ログイン2024-01-20、アクティビティス コア85.5、タグは['技術者', '読書家', '旅行者']を含めてください。", ・出力の成功例 ・出力の失敗例 中身が空のjsonが吐き出される