生成AIのゆらぎを業務プロセスに組み込む ── 信頼性工学から見たゲート設計

生成AIを業務に組み込もうとすると、従来のソフトウェアとの決定的な違いに突き当たる。私が長く書いてきたFORTRANやC++のプログラムは決定論的だった。同じ入力を与えれば、必ず同じ出力が返る。テストとは「入力Aに対して出力がBと一致するか」を確かめることであり、一致しなければバグである。ところが生成AIは、同じ入力でも毎回まったく同じ答えにはならない。出力に「ゆらぎ」がある。

この一点が、多くの人がつまずくところだと思う。ゆらぎがあるということは、毎回同じ結果を期待できないということだ。それでは、どうやって業務プロセスに組み込むのか。品質をどう担保するのか。本稿では、この問いに対する私なりの整理を、信頼性工学と信号処理という、私が現場で使ってきた道具立てで書いてみたい。

ゆらぎは消すのではなく、囲う

まず発想を転換する必要がある。ゆらぎを消そうとするのではなく、その周りを決定論的な仕組みで囲って設計する、という考え方だ。

私は東京電力の研究所時代、放射線をモニタリングする自動車のシステムを作っていた。NaIシンチレータで空間線量率を測るのだが、放射線の計数は物理的に1回ごとにゆらぐ。同じ場所で同じ時間だけ測っても、カウント数は毎回ばらつく。ポアソン分布に従う、確率的な現象だからだ。それでも、あのシステムは実用的な線量マップを描けた。なぜか。平均化し、積算時間を設計し、閾値を決め、機器を校正する──ゆらぐセンサーを実用に耐えさせるための工学を、周りに組んだからである。

生成AIも、これと同じ構図で捉えられる。LLMを「賢いが、出力がゆらぐ、ノイズのあるセンサー」とみなす。そして、ノイズのある測定系を実用システムに仕立てるのと同じ規律で、周りを囲う。ゆらぐ部品そのものを何とかしようとするのではなく、ゆらぎを前提に、それを扱える構造を外側に作る。これが出発点になる。

細分化は必要条件であって、十分条件ではない

よく言われるのは「タスクを小さく割れば精度が上がる」という話だ。これは正しい。ゆらぎは自由度に比例する。「議事録を要約して、ついでに施策も考えて」のような広いタスクは毎回違う出力になるが、「この文章から日付・金額・取引先名を抜き出せ」まで狭めれば、ばらつきは激減する。だから、大きな業務をまず小さなステップへ分解する。ここまでは、おそらく多くの人の直感どおりだ。

問題はその次である。「小さなブロックを何箇所も入れれば、全体の精度が確保される」と考えたくなる。だが、ここに落とし穴がある。細分化は必要条件ではあるが、十分条件ではない。

直列につなぐと、誤差は積で積み上がる

これは、変電所の運用や系統運用に携わった人間にはおなじみの、信頼性工学の話だ。小さなブロックを直列につなぐと、全体の信頼度は各段の信頼度の積になる。

$$ R_{\text{全体}} = \prod_i R_i $$

たとえば、1段あたりの精度が95%だとしよう。優秀に思える。だが、これを10段直列につなぐと、

$$ 0.95^{10} \approx 0.60 $$

全体では約60%まで落ちる。各段を個別に見れば「95%も出ている」のに、入口から出口まで通して見ると、4割が間違っている計算になる。しかも、ブロックを増やすほどこの積は小さくなる。つまり「たくさん入れたから安心」ではなく、放っておけば、増やすほど全体は危うくなる。

系統運用で、直列につながった機器の信頼度が積で効いてくるのと、まったく同じことが起きる。だから、細分化しただけで満足してはいけない。誤差の積み上がりを、どこかで断ち切る仕組みが要る。

ゲートは「量子化」と「検証」の二段構え

そこで、段と段の間に「ゲート(関所)」を置く。系統でいえば、保護リレーやインターロックに相当する。誤りを次段へ流さず、その場で止める仕掛けだ。このゲートには、実は性質の違う二つの働きが重なっている。ここを分けて考えると、設計がぐっと明快になる。

量子化 ── ゆらぎを断つ

一つ目は「量子化」だ。AIの出力を、自由文ではなく、選択肢や構造(JSON、決められた区分、辞書の語彙)に丸める。これは信号処理でいうA/D変換そのものである。連続的でゆらぐアナログ信号を、離散的なデジタル値に丸める操作だ。

デジタル信号が、長い伝送路でもアナログより雑音に強いのはなぜか。各段で離散レベルにスナップし直すので、ノイズが下流に積み上がらないからだ。AIの出力を離散化するのも、これと同じ意味を持つ。ゆらぎをそこで断ち切り、下流を普通の決定論的なプログラム処理に戻せる。ゆらぐのはAIの内側だけに閉じ込め、外側は従来どおりのコードにする、という切り分けである。

ただし注意がいる。量子化だけでは「正しさ」は確定しない。離散値になっても、AIが誤った選択肢を選ぶことはある。デジタル通信でも、量子化で耐雑音性は上がるが、それでも反転してしまうビットは、パリティやチェックサム、誤り訂正符号で別途拾う。同じことが、ここでも必要になる。

検証 ── 正しさを確かめる

そこで二つ目の働きが「検証」だ。離散化された値を、業務ルールや値域、他のデータとの突き合わせで確かめる。そして、通ったものだけを次段へ送り、弾かれたものは再実行するか、人に回す。ここで初めて「この段の出力は確認済みだ」という状態が確定し、次段はその確実な土台の上に積み上がれる。

どこまで確定できるかは、ゲートがどこまで正しさを検証できるかで決まる。値域やルールで完全に検証できる段なら、出力はほぼ確定する。一方、形式は正しいが意味の正しさまでは機械的に確認しきれない段──たとえば要約が妥当かどうか──では、ゲートを通っても残留誤差が残る。そういう段こそ、後述する人の確認や冗長化を重点的に配置すべき場所になる。

冗長化は「独立性」が命

同じ処理を複数のAIに解かせ、多数決をとる。これも精度を上げる正攻法で、並列冗長にほかならない。ランダムな誤りは各ブロックでばらけるので、多数決で打ち消し合い、正解が残りやすくなる。数で見ると効く。1段あたり80%でも、独立な3つで多数決すれば、

$$ 0.8^3 + 3 \times 0.8^2 \times 0.2 \approx 0.90 $$

80%が約90%に上がる。並列にすると系の信頼度が上がるのは、系統の冗長構成と同じ理屈だ。

ただし、決定的な条件が一つある。これが効くのは、各ブロックの誤りが独立しているときだけだ。同じモデルに、同じプロンプトで、同じ設定で3回解かせても、同じ思い込みで同じ間違いを3回出すだけで、多数決しても精度は上がらない。これは信頼性工学でいう共通原因故障と同型の話である。何重に備えても、共通の要因で一斉に倒れるなら、冗長化した意味がない。

だから「精度を上げる冗長化」にするには、誤りの独立性、すなわち多様性を意図的に作り込む必要がある。別のモデルを使う、プロンプトの切り口を変える、参照させるデータ源を変える、分解の仕方を変える。同じ石を並べるのではなく、あえて素性の違うものを並べる。ここがコツだ。コストとレイテンシは頭数のぶんだけ増えるので、決定論的な検証ゲートが書けない重要な段に絞って使うのがよい。

人の確認は、リスクの大きい合流点に集中させる

すべてのブロックに人の確認を挟めば、コストで破綻する。誤りの影響が大きい合流点や、ゆらぎが特に大きい段だけに、関所を集中させる。系統運用でいうN-1のような、リスクベースの重点配置の発想だ。

業務を自律度で三階層に分けると整理しやすい。第一に、AIは下書きに徹し、人が必ず承認する「補助」レベル。提案書やメールのように、間違っても取り返せるものが向く。第二に、検証ゲート付きで自動化し、例外だけを人に回す「半自律」レベル。文書からのデータ抽出や分類、一次対応がここに入る。第三に、社内検索やラベル付けのように、低リスクで可逆な処理だけを任せる「全自律」レベル。ゆらぎの許容度に応じて、業務をこの三つに振り分けていく。

凍結点で、誤差の積み上がりをゼロに戻す

もう一つ、パイプライン設計で効く考え方が「凍結点」だ。人やゲートで確認した結果を、その地点で凍結し、以降はそれを唯一の正解データとして扱う。デジタル信号が各段で離散レベルに戻して雑音の蓄積を断つのと同じで、凍結点で、そこまでの誤差の積み上がりをゼロに戻す。校正でセンサーのドリフトをゼロに戻すのと同じ操作だと考えればよい。そして、凍結点より後段のゆらぎを、前段へ逆流させない。この境界をはっきり切ることが、長いパイプラインを安定させる鍵になる。

通しで設計してみる ── 手書き文字認識から要約まで

ここまでの原則を、一つの具体例で通しで組んでみる。「手書きの文字を読み取り、文章として成立しているかを確認し、テキストとして出力し、その要約をつくる」という処理だ。

設計の勘所を先に一つ挙げておく。「正しい」の意味が、段ごとに違うということだ。文字認識の正しさは「紙のインクと一致していること」であり、これは画像と照合できる。文章成立の正しさは「書き手が意図した文と一致していること」で、部分的にしか検証できない。要約の正しさは「確定したテキストを忠実に表していること」に加えて「役に立つこと」という主観も混じる。この違いを踏まえないと、どこにどのゲートを置くべきかが決まらない。

手書き文字認識から要約までのパイプライン設計。前半で真のテキストを復元し、凍結点を経て、後半で要約する。各段の間にゲートを置き、低確信度・大幅な書換・高リスクは人の確認や冗長化に分岐する。

図のように、全体を凍結点で前半と後半に割るのが肝になる。

前半は「紙に書かれた真のテキストを復元する」フェーズだ。まず文字認識(OCR/HTR)。ここが最もゆらぐ源なので、認識結果とあわせて確信度を必ず出させる。自由文をゼロから読む部分は決定論的なチェックが書けないので、ここでこそ、素性の違うOCRエンジンを複数走らせて多数決をとる。独立性のある冗長化の出番だ。一致した箇所は高信頼として確定し、食い違った箇所だけ弾く。続くゲートでは、確信度が閾値以上のものは通し、閾値以下のスパンだけを人に回す。日付・金額・既知の氏名のように取り得る値が決まっている欄は、辞書や語彙に丸める。これが量子化にあたる。

次に、文章として成立しているかの確認と補正。ここには落とし穴がある。補正は新たなゆらぎを持ち込むので、放っておくと、正しく読めていた語まで「もっともらしい別の語」に書き換えてしまう。過剰補正であり、幻覚だ。だから鉄則は、前段で低確信度と印がついたスパンだけを補正の対象にし、すでに確定した箇所には触らせないこと。凍結した値を、後段のゆらぎで上書きさせない、ということである。そのうえで、補正した箇所は画像のインクと照合し直す。流暢な文が、必ずしも真の文とは限らない。大きく書き換わった箇所は、人が確認する。

そして凍結点。確認済みのテキストをここで凍結し、以降はこれを唯一の正解として扱う。前半(真のテキストの復元)と後半(要約)の境界を、ここではっきり切る。

後半は、その確定テキストを要約するフェーズだ。ここではグラウンディングを徹底する。要約は、凍結した確定テキストの中身だけを根拠につくらせ、外部知識で補わせない。そうすることで幻覚を抑える。最後のゲートは、要約の忠実性の検証だ。要約の良し悪しは意味的なもので、決定論的なゲートが書きにくい。そこで、生成役とは別のAIに「この要約の各記述は、元テキストで裏付けられるか」を検証させる。あるいは複数の要約をとって自己整合を見る。高リスクな用途なら、人が最終承認する。

こうして並べてみると、一本のパイプラインの中に、これまで述べた原則がすべて乗っていることがわかる。細分化、量子化のゲート、検証のゲート、独立性のある冗長化、リスクベースの人の配置、そして凍結点による誤差の非伝播である。

評価もまた、決定論から統計へ

最後に、評価の話をしておきたい。決定論的なシステムなら「入力Aなら出力はBと一致」で単体テストできる。だがAIは、文字列の一致では検証できない。代わりに、統計的に評価する。正解つきの入力群、いわゆるゴールデンセットを用意し、それに対して走らせ、入口から出口までの通しの成功率で判定する。「常に同一」ではなく「許容できる誤り率に収める」──ここが、従来の品質保証との一番の発想の違いだと思う。通しで測れば、どの段が全体のボトルネックかが見える。そこにゲートを足し、冗長化し、人を置く。この地味な改善サイクルを回せる組織が、生成AIを競争力に変えていくのだろう。


生成AIの業務プロセス導入とは、要するに「ゆらぐAIコア」を「決定論的な足場」で包む設計作業である。足場とは、細分化であり、量子化と検証の二段ゲートであり、独立性のある冗長化であり、リスクベースの人の配置であり、凍結点による誤差の非伝播であり、通しでの統計評価だ。ノイズのある測定系を実用システムに仕立てる工学と、ほとんど同じ構図で捉えられる。目新しいモデルの名前を覚えることよりも、この足場をどう組むかのほうが、実務では効いてくる。

なお、生成AIを従来の業務情報化の延長線上に位置づける視点については、BPMの歴史が教える生成AIの境界線でも別の角度から論じている。あわせて読んでいただければと思う。

← ITQ Lab トップに戻る