0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Structured Outputs

Posted at

Structured Outputsって凄いらしい

概要

昨今話題のOpenAIのStructured Outputsについて、備忘録としてまとめる

何が凄い?

モデルがJSON Schema(JSON形式のルール)に従った出力をより信頼性高く生成できるらしい
よく見るグラフはこちら!
image.png

モデルの性能UPに伴い、単純なプロンプト指定だけでもかなり信頼性高く出力されるが、Structured Outputsを使用するとほぼ100%で指定したJSON Schemaで出力される(たまにrefusalされるらしい。見たことない)

利用方法

私が説明するより公式ドキュメントや野良記事を参考ください!どれも同じ(公式ドキュメントの転用)

仕組み

2つのアプローチを採用している(ぽい)

  • モデル訓練によるアプローチ
    • 最新モデル「gpt-4o-2024-08-06」を訓練し、複雑なJSON Schemaを理解して、それに合った出力を生成。このモデルのパフォーマンスは高く、ベンチマークでは93%の成功率を記録。しかし、生成AIは本質的に非決定的(ランダム性がある)なため、完全な信頼性(100%)には達成できず。。。
  • 制約アプローチ(特に重要)
    • SON Schemaに完全に合った出力を生成するため、モデルの出力に「制約」を加える工学的な方法を導入し、信頼性を限りなく100%に引き上げた

仕組み詳細

制約を加えるとは何ぞや?

  • 制約付きサンプリング(またはデコード)」と呼ばれる技術に基づく。通常、AIモデルが次の単語(トークン)を生成するときは、辞書の中からどの単語でも自由に選択する。この自由度がミスの原因となり、例えば、JSONでは不適切な場所で {(波括弧)を選んでしまうことがある。そこで、モデルが選択できるトークンを「現在のJSON Schemaに基づいて有効なもののみに制限」する。これにより、不適切なトークンを選ぶ可能性をゼロにします
  • 具体例として、出力の最初では { や {" といったトークンが有効。しかし、すでに {"val と出力された後では、{ は無効になる。このように「動的制約付きデコード」を採用し、各トークン生成のたびに「次に有効なトークン」を判断する。

その他

  • プロンプトに出力形式を指定する必要はあるか?
    • 必要なし(と思われる)
      • 公式ドキュメントのサンプルスクリプトを見ると、プロンプト内では厳格に指定していない
      • ただ、フューショットで出力構造例を与えることはしたほうが良いかも(私はする)
  • JSON Schemaのdescriptionについて意味あるか?
    • 意味なし(と思われる)
      • ここの内容は出力に影響は与えない
      • 同様に、JSONのキー名も影響を与えない
0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?