JSON Output は CoT の効果を低下させる?
(あるいは単に出力性能が下がる話)
ような気がするがどうだろう?
"step by step で" や、手順を書いてプロンプトを実行させると、出力にも段階的な手順が現れ decoder がその手順も再帰的に見るので出力が改善しているのでは、そして JSON Output を指定すると途中経過が出ず Answer Only Prompting ぽくなるのでは
試験
経験知としてはおおいにありそう & 生成と整形で 2 回実行せよというのはよく言う
JSON に思考過程出すフィールド追加すればあまり性能落とさずいけないか?
2回実行するの嫌だから、JSON 化に特化したローカルモデルってないのかな?
仮説
以下の順で性能が悪い
CoT なし JSON 出力
CoT と JSON 出力
CoT と JSON に推論過程を含めさせる ← 1回の実行で CoT の効果を得られる?
CoT で出力 → それの JSON 化の2回実行 ← これがいちばんよさそうなイメージ
調べる
Google の評価用プロンプトでも、スコアだけじゃなくて説明も出力させてるよね
ドンピシャ感あるな
code:quote
JSON出力がChain-of-Thought (CoT)の効果を低下させるという点で一致しています。
構造化フォーマットの制約が厳しいほど、パフォーマンスが低下する傾向があるという点も一致しています。
自由形式の回答が最も良いパフォーマンスを示す傾向があるという点も一致しています。
分類タスクでは、構造化フォーマットが有益な場合があることを示しています。これはあなたの仮説には含まれていない新しい知見です。
パフォーマンスの低下を軽減するための方法(例:スキーマ制約の緩和)を提案しています。
JSONに推論過程を含めることの効果についても、詳細な分析はされていないようです。
Gemini 1.5 Flash は構造化フォーマットの制約下でも比較的パフォーマンスが下がらない
実験する
なんかいいベンチマークないか
(J)CommonSenseQA
GSM8K
あたり
世の中
感覚的にはまあ起きるだろうなと思う
元まで読んでみると、JSON 中にコードを入れて出力させる話やね
各ステップで文法に違反するトークンの確率をゼロにする話
こういう内部状態を特定のルールに従わせるテクがほしいが...
コーディング以外がどうなのか気になる
結果をコードから読む場合は初手で JSON Output にさせるから、比較したりはしていない...
制約が増えるという面では下がりそう
とはいえ通常の文書応答に JSON を指示したとて文脈混ざったりせんだろうし気にするほどでもないように思える
渡す JSON Schema の description どのぐらい意味あるのか?