はじめに
- AI駆動開発における品質評価は差し迫った課題になっている。
- AI駆動開発でとりあえず、何でも成果物は出力できるようになったが、ほんとうにそれらが、正しいのか誰にもわからない場面が増えている。生成AIがゴミを大量に吐き出している可能性も大いにある。
- また、従来の品質評価も、AI駆動開発において、本当に品質を評価できているのか疑問に覆われている。
- では、どうするのか、一つのアイディアを考えた。
情報量を使用する。
- AIなどが利用した情報量を計測する。
- 生成に与える情報量と、段階的な成果物の情報量で割れば、定量的な品質評価ができるのではないか?
- ある情報量から、ある情報量が生成された場合、その情報量が等しい場合、十分な論理性が保証できるのではないか?逆に小さい場合、曖昧なところが大きいのではないか?と考えられる。それを品質評価として活用していく
情報量とは?
「情報量」とは、情報理論における概念で、ある事象がどれだけ「驚き」や「不確かさ」を持つかを数値化したものです。1948年にクロード・シャノンが提唱した理論に基づきます。
端的に言えば、珍しい(予測しにくい)情報ほど情報量が大きい、という直感に対応しています。
シャノン情報量
ある事象 $x$ が確率 $p(x)$ で起こるとき、その情報量 $I(x)$ は次のように定義されます。
$$I(x) = -\log_2 p(x) \quad \text{[ビット]}$$
例えば、コインの表裏のように確率が $1/2$ ならば:
$$I = -\log_2 \frac{1}{2} = 1 \text{ ビット}$$
エントロピー
情報源が取りうる全事象の情報量の期待値をエントロピー(Shannon entropy) $H$ と呼びます。
$$H = -\sum_{x} p(x) \log_2 p(x)$$
エントロピーが高いほど、その情報源は「不確かさが大きい=情報が豊富」といえます。
ソフトウェア成果物における情報量
プログラムコードや設計書を文字・単語の系列として捉えると、その出現確率からエントロピーを算出できます。
具体例:2種類の仕様書の比較
次の2つの仕様書の断片を比べてみます。
(A)AIが生成した「薄い」仕様書 ← 低エントロピー
ユーザーはログインできる。
ユーザーはログアウトできる。
ユーザーはパスワードを変更できる。
ユーザーはプロフィールを更新できる。
ユーザーはデータを参照できる。
ユーザーはデータを登録できる。
ユーザーはデータを更新できる。
ユーザーはデータを削除できる。
(B)内容が凝縮された仕様書 ← 高エントロピー
ログイン機能:メールアドレスとパスワードで認証する。
連続5回失敗でアカウントを30分ロック。JWT有効期限は1時間。
リフレッシュトークンは7日間有効。ログアウト時にトークンを無効化する。
パスワードはbcryptでハッシュ化(cost=12)して保存する。
- (A) は「ユーザーは〜できる」という同じパターンが繰り返されており、文字の出現確率が偏るためエントロピーは低くなります
- (B) は具体的な数値・制約・技術的な語彙が多様に登場するためエントロピーは高くなります
AIが(A)のようなパターンの繰り返しばかりを生成している場合、情報量の観点から「中身のない仕様書」として定量的に検出できる可能性があります。
- 低エントロピー:ボイラープレートや冗長なコードが多い(情報密度が低い)
- 高エントロピー:ロジックが凝縮されている、または無秩序なランダムコード(情報密度が高い)
この性質をAI駆動開発の品質評価に応用します。
情報量を使った品質評価
基本的な考え方
AI駆動開発では、以下のような入力と出力が存在します。
| フェーズ | 入力(プロンプト) | 出力(成果物) |
|---|---|---|
| 要件定義 | ユーザーヒアリング内容、課題記述 | 要件定義書 |
| 基本設計 | 要件定義書 | 設計書 |
| 実装 | 設計書、仕様書 | ソースコード |
それぞれのフェーズで、入力の情報量と出力の情報量を比較することにより、情報の増減を評価できます。
情報量比(Information Ratio)
次の指標を定義します。
$$R = \frac{H_{\text{output}}}{H_{\text{input}}}$$
- $R \approx 1$:入力の情報量が出力に適切に変換されている(健全な変換)
- $R \gg 1$:入力に対して出力の情報量が異常に大きい → AIが「でたらめな情報」を大量に生成している可能性
- $R \ll 1$:出力が入力を大幅に圧縮している → 重要な情報が欠落している可能性
品質スコアへの変換
情報量比に加えて、フェーズ間の情報の連続性も評価します。例えば、要件定義書に記載されたキーワードが設計書に引き継がれているかを、相互情報量(Mutual Information)で評価する方法が考えられます。
$$MI(X; Y) = \sum_{x,y} p(x,y) \log_2 \frac{p(x,y)}{p(x)p(y)}$$
$MI$ が低い場合、前フェーズの情報が次フェーズに伝わっておらず、品質の断絶が起きている可能性を示します。
情報量を求める手法
情報量(エントロピー)を実際の成果物評価に適用するにあたり、いくつかの概念的なアプローチが考えられます。
アプローチ①:文字・単語レベルのエントロピー
最もシンプルな手法です。成果物のテキストを文字や単語の系列として扱い、各要素の出現頻度からエントロピーを算出します。
- 実装コストが低く、ツール化しやすい
- ただし「意味」は考慮しないため、内容の正しさとは無関係
仕様書の前後フェーズを比較するだけでも、AIが情報を膨らませているか圧縮しているかを大まかに把握できます。
アプローチ②:トークンレベルのエントロピー
LLMが実際にテキストを処理する単位である「トークン」ベースでエントロピーを計測する方法です。
- 文字単位よりも意味的な粒度に近い
- 同じ内容でも言語や書き方によって差が出にくい
- LLMの出力の「多様性」をより忠実に反映できる
アプローチ③:埋め込みベクトルを用いた意味的エントロピー
テキストを意味ベクトル(Embedding)に変換し、ベクトル空間での分散や密度からエントロピーに相当する指標を算出する考え方です。
- 統計的なエントロピーでは捉えられない「意味的な新規性」を評価できる
- 「同じことを別の言い回しで書いているだけ」という状況を検出しやすい
- 算出コストは高く、ベースライン設定の難易度も上がる
アプローチ④:フェーズ間の相互情報量
単一フェーズの成果物を評価するだけでなく、前後フェーズ間でどれだけ情報が引き継がれているかを相互情報量で評価する方法です。
- 要件定義書に書かれた内容が設計書に反映されているかを定量的に確認できる
- 「ゼロから書き直した」のか「前フェーズを踏まえた」のかを区別できる可能性がある
課題
- 品質評価としてはどの用に計算し、どんな数値をだすとかまだです。
- そもそも実際の計算方法もまだです。
まとめ
AI駆動開発における品質評価は、従来の「レビューアーが読んで判断する」アプローチだけでは追いつかなくなっています。情報量という定量的な指標を導入することで、以下が実現できる可能性があります。
- フェーズをまたいだ情報の流れの可視化
- AIが「ゴミ」を生成しているかどうかの早期検知
- 品質評価の自動化・継続的モニタリング
まだアイディアの段階ですが、実際にデータを取りながら検証していくことが次のステップです。皆さんのご意見やフィードバックをぜひお聞かせください。
最後に
- エントロピーについては、プロンプト時代から、考えていることがあった。小さなエントロピーから大きなエントロピーを生成できたいた。でもそれでいいのか?複雑なものを生成するには大きな情報量が必要であると。大きな情報量が必要だと、そもそも出力に意味があるのか?
- 品質評価を考えていて、この情報量を活用するアイディアが浮かびました。AIではなく自分のアイディアです。
- 実際にあれこれは、これからです。
- トークンを用いるのは生成AIと相性がいいのではと考えられる。