AIへのお願いを増やすほど、なぜ答えがちぐはぐになるの?

AIへのお願いを増やすほど、なぜ答えがちぐはぐになるの?

AIに文章を頼んで、最初の結果を見ながら条件を足していくことがあります。

「もっと短く」「初心者向けに」「専門性は落とさず」「具体例を三つ」「親しみやすいけれど軽すぎない文体で」と追加していくと、改善する部分もあります。

ところが、あるところから妙な崩れ方を始めます。 短くなった代わりに説明が飛び、具体例を増やした代わりに全体が長くなり、親しみやすさを求めたら専門用語の扱いまで軽くなる、といった具合です。

自分はこうなると、さらに細かい注意を書き足していました。 しかし、注意を増やすほど直す場所も増え、最後には最初より読みにくい文章が返ってくることさえあります。

目次

詳しく頼めば伝わるはずなのに

普通に考えれば、依頼は詳しいほうが親切です。 「記事を書いて」だけでは、長さも読者も文体も決まりません。 条件を示せば、AIが勝手に判断する範囲を減らせます。

でも、すべての条件が同じ方向を向いているとは限りません。

「短くする」と「背景まで丁寧に説明する」は、両立できる範囲が限られます。 「初心者向け」と「専門家にも新しい内容」は、読者の前提をどこに置くかでぶつかります。 「例を増やす」と「結論を早く出す」も、使える文字数を取り合います。

一つずつなら無理のない希望でも、同時に満たそうとすると選択肢が急に減ります。 問題は、条件の数そのものより、条件を全部満たす候補がどれだけ残っているかにありそうです。

条件を重ねたあとに残る場所

まず、AIが返しうる文章の候補全体を Ω とします。 ここでの Ω は、AIが内部で候補を実際に列挙しているという意味ではなく、「論理的に考えられる回答の空間」をイメージしたものです。

「1000字以内」という条件を満たす候補の集まりを C₁、「初心者向け」を C₂、「具体例を三つ含む」を C₃ とします。 三つを同時に満たす文章は、三つの集まりが重なる部分にしかありません。

$$ F_3 = Ω ∩ C_1 ∩ C_2 ∩ C_3 $$

この F₃ が、三条件のもとで選べる実行可能領域です。 条件を一つ追加するたびに、領域は次のように狭くなるか、同じ大きさにとどまります。

$$ F_0 ⊇ F_1 ⊇ F_2 ⊇ F_3 $$

新しい条件によって候補が増えることはありません。 既存の候補から、その条件に合わないものが除かれるからです。

条件を追加すると、すべての条件を同時に満たす実行可能領域は内側へ狭まります。
条件を追加すると、すべての条件を同時に満たす実行可能領域は内側へ狭まります。

実行可能領域が十分に残っていれば、条件の追加は狙いを絞る助けになります。 例えば、「生成AIを仕事で使い始めた社会人向け」と読者を具体化し、「AIの専門用語は初出で短く説明する」と決めれば、説明の深さと語彙が揃い、出力が安定することがあります。 条件は悪者ではなく、互いに整合しているかが問題です。 一方、領域がごく小さくなると、わずかな解釈の違いで条件から外れます。 重なりが空なら、すべてを完全に満たす答えは、この抽象モデル上では存在しません。

ここで使っている集合は、実際のLLM(大規模言語モデル)内部の処理を記述したものではありません。 LLMが候補集合を作り、明示的に制約最適化していると断定することもできません。 これは、複数の指示が両立する範囲を点検するための、指示設計の抽象モデルです。

旅行計画でも起きる窮屈さ

同じ構造は文章生成以外にも現れます。

旅行先を「予算は3万円以内」「移動は2時間以内」「温泉がある」「混雑が少ない」「子どもが楽しめる」「雨でも困らない」と絞る場面を考えます。 どの条件にも候補はありますが、すべての共通部分には一件も残らないかもしれません。

このとき、検索が下手だから見つからないとは限りません。 希望同士の重なりが小さいため、完全一致する案が少ない可能性があります。 条件を追加する前に「絶対に必要」「できれば満たしたい」「他の条件と交換できる」と分けると、どこを緩めるか判断しやすくなります。

画像生成で複数の希望がぶつかる場面は、こちらの記事でも別の角度から扱っています。

記号を依頼文に戻してみる

n 個の条件を C₁, C₂, …, Cₙ と書けば、実行可能領域は次の形になります。

$$ F_n = Ω ∩ C_1 ∩ C_2 ∩ ⋯ ∩ C_n $$

記号を日常語に直すと、Ω は「考えられる回答の候補全体」、Cᵢ は「i 番目の条件を満たす候補」、Fₙ は「すべての条件を同時に満たす候補」です。

条件を一つ増やした結果は、次の式で表せます。

$$ F_{n+1} = F_n ∩ C_{n+1} $$

これは「今まで残っていた候補のうち、新しい条件にも合うものだけを残す」という意味です。 もし Fₙ がすでに小さければ、軽い注文を一つ足しただけでも Fₙ₊₁ が空になることがあります。

そこで自分は、指示を追加する前に、新しい条件が既存のどの条件と場所を取り合うかを書き出すようになりました。 「短く」と頼むなら、例の数を減らすのか、背景説明を削るのかも決めます。 条件だけでなく、衝突したときの優先順位まで渡すわけです。

順番だけで答えが変わるなら?

集合の計算では、条件を重ねる順番を変えても共通部分は変わりません。

$$ C_1 ∩ C_2 = C_2 ∩ C_1 $$

それなのに、実際のプロンプトでは条件の順番を変えただけで回答が変わることがあります。 この差は、集合モデルだけでは表せません。 指示の位置による目立ちやすさ、曖昧な語の解釈、文脈との結び付き方などが変わりうるからです。 例えば、A「初心者向けに、専門用語をできるだけ避けて、○○を詳しく説明して」と、B「○○を詳しく説明して。 専門用語はできるだけ避け、初心者向けにして」を比べれば、同じ条件でも先に置く焦点を変えたときの影響を試せます。

ならば、試したいのは条件の追加だけではありません。 同じ条件を並べ替え、AIに優先順位を言い直させ、それから生成させる実験もできます。

条件を増やしたのに結果が崩れたとき、足りなかったのは、もう一つの注意書きでしょうか。 それとも、すでに狭くなった共通部分を広げ直す判断でしょうか。

あわせて読みたい関連記事。

よかったらシェアしてね!
  • URLをコピーしました!
目次