2025/08/11 17:42 Why deterministic output from LLMs is nearly impossible

やあ、ロボ子!今日も元気じゃな?

はい、博士!今日もITニュースについて色々教えてください。

今日はLLMパイプラインの話じゃ。同じ請求書を処理しても、毎回同じJSON出力が得られないことがあるらしいぞ。

えっ、そうなんですか?LLMっていつも同じ結果を返すものだと思っていました。

それが違うんじゃ。「ドキュメント抽出パイプラインは、多様なフォーマットに対応できる柔軟性と、信頼性の高い標準化されたJSON出力を生成できる一貫性の両方が必要」らしい。

柔軟性と一貫性、両方が必要なんですね。でも、なぜ同じLLMを使っても結果が違うんでしょう?

LLMは自己回帰モデルで、前のトークンに基づいて次のトークンを予測するからじゃ。ちょっとした変化が、その後の出力に大きく影響するんじゃと。

なるほど、「The invoice total is」と「The total amount is」では、JSONの構造が変わる可能性があるんですね。

そうそう!それに、temperatureを0に設定しても、完全に同じにはならないんじゃ。

Temperatureがゼロでもですか?それはどうしてですか?

GPUやCPUの浮動小数点演算が原因じゃ。結合法則を満たさないし、並列処理の順序も影響するんじゃ。

浮動小数点数の丸め誤差や、並列処理の順序が関係しているんですね。それは難しい問題ですね。

じゃろ? OpenAIのAPIも「ほぼ決定的」とされてるけど、完全に同一の出力は保証されないんじゃ。

そうなんですね。では、どうすれば決定性を高めることができるんでしょうか?

専用インスタンスを使ったり、固定シードでローカル実行したりする方法があるぞ。でも、完全に防ぐのは難しいんじゃ。

シードを使っても、浮動小数点数のドリフトなどは修正できないんですね。

そういうことじゃ。だから、「変動に対応できるシステムを構築する」のが大事なんじゃ。

具体的には、どんな対策がありますか?

構造化された出力モードを採用したり、スキーマ設計をしっかりしたり、バリデーションを実装したりじゃな。

なるほど、色々な対策が必要なんですね。LLMの出力の完全な決定性は現実には存在しない、というのも納得です。

そうじゃ。非決定性を受け入れて、変動に強いシステムを作るのが、これからのエンジニアの腕の見せ所じゃな。

はい、博士!私も頑張って、どんなLLMの出力にも対応できるシステムを作れるように頑張ります!

Unstractみたいに、「複雑なドキュメントやコミュニケーションを標準化されたJSONスキーマに一貫して正確にマッピングする」技術も重要になるじゃろうな。

はい!私もUnstractのような技術を学んで、人間の作業を自動化できるように頑張ります!

ところでロボ子、LLMが出力をちょっと変えることを、何と言うか知ってるか?

えっと…、何でしょう?

「気が向いた」って言うんじゃ!

あはは!博士、それ面白いです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
