確率は安定していた。揺れていたのは自分のタグの選び方だった

by ZeroZawa

揺れていたのはモデルではなく、私が書いた10行ほどの「タグの選び方」(確率から、実際に付けるタグを選ぶ自作の処理)のほうでした。同じ23件を Jev に3回送ると、確率は1問あたり最大 0.07、平均 0.005 しか動かなかったのに、記事ごとに最終的に選ばれるタグ(3〜5個)は、1回送り直すごとに、13〜22% の記事で1つ以上入れ替わりました。

この記事は、それが分かるまでの測り方と、分かったあとの設計の話です。

この記事は、Jev を3回に分けて測る連載の Part 3 で、最後の回です。Jev は、文章ではなく「はい」の確率や選択肢で答える判断モデルで、何を返すモデルかは Part 1 に書きました。比べる相手として Claude Haiku 4.5 にも同じ問いを送っていますが、Haiku の数字はすべて1回ずつの測定で、送り直したときの揺れは測っていません。出てくるたびにそう書きます。

ここまでの2つの Part

題材は、自分のブログのタグ付けです。記事の題名と概要文を渡し、登録済みの56語それぞれについて「このタグを付けるべきか」を聞いています。

Part 1 では実際の記事で試しましたが、答えが割れたところを人が見ても、ほとんどが「どちらでも間違いではない」になりました。そこで Part 2 からは、正解が作り方で決まる記事を自分で書いて送っています。名前は出てくるのに中身は違う、といった記事です。何を見て、どこで線を引くかも、送る前に書き留めています。

Part 2 では、質問文の書き方で結果が大きく動くことが分かりました。ただ、名前だけ同じ記事に付けるべきでないタグが実際に選ばれるかどうかを最後に決めていたのは、確率から上位のタグを選ぶ自作の処理でした。この Part では、質問文を固定したうえで、このタグの選び方の側で何が起きていたかを扱います。

タグの選び方は、10行ほどの自作の処理

タグが付くかどうかを最後に決めていたのは、確率の比率の線ではなく「最大5個」の枠でした。

モデルが返すのは、56語それぞれの確率です。実際に付けるタグは、モデルの確率を受け取った私の処理が、次の手順で決めます。これが「タグの選び方」です。

  1. 56語を確率の高い順に並べる
  2. 最上位の確率の 0.59 倍以上のものを数える
  3. その数を 3〜5 の範囲に収め、上から取る

2つの数字の出どころは、次のとおりです。

数字出どころこの題材に合わせて調整したか
3〜5個ブログの運用ルール(1記事に3〜5タグ)しない(運用ルールそのもの)
0.59 倍別の作業で決めた値。AI エージェントの会話履歴を縮めるときに、どの出力を残すかを決めるのに使った。そのときは、必要な出力を1件も落とさない比率のうち、いちばん多く削れる値を選んだしない

0.59 をタグ付けに合わせて調整しなかったのは、わざとです。結果を見てから値を選ぶと、その値で出た結果を「測った」とは言えなくなるからです。そのかわり、この値がタグ付けで極端な振る舞いをしていないかは確かめました。Part 1 の57記事では、比率の線を超えたタグが3個に届かず、枠を埋めるために下位のタグを足した記事は1件だけでした。

とはいえ、0.59 という値に、タグ付けにとっての根拠はありません。この記事の結論がこの値に頼っていないかは、最後の「この結論が崩れる条件」で扱います。

実装は11行です。書いたときは、2 の比率の線がタグを選んでいると思っていました。確率が最上位の6割に届けば付く、という読み方です。

実際はそうなっていませんでした。タグの確率は、最上位の近くにいくつも並びます。そのため比率の線は、たいてい5個以上を通してしまい、実際にどのタグが付くかは「上位5個に入るか」という順位で決まっていました。比率の線が効くのは、線を超えるタグが5個に届かない記事で、付ける個数(3〜5個)を決めるときだけです。

この違いは、書いた本人でも見落とします。次の節は、それが実際に起きた2つの例です。

確率が高くても付かない

確率が比率の線を超えていても、56語の中で6位以下ならタグは付きません。実際に起きた例を2つ出します。

0.63 で11位

1つ目は、タグの名前は本文に出さず、中身だけを扱った記事の実験です(2026年9月21日)。名前は出てこなくても話題はそのものなので、本来は付いてほしいタグです。

Jev は、ある記事の codex に 0.63 を付けました。その記事の比率の線は 0.56 なので、線は超えています。それでもタグは付きませんでした。56語の中で11位だったからです。上位5個に入りません。付いてほしいタグが、確率ではなく順位で落ちています。

Haiku でも同じことが起きています。別の記事で claude に 0.70 を付けましたが、8位で落ちました(1回ずつの測定です)。

同じ名前で、3位と6位

2つ目は、Part 1 で Haiku が誤って claude タグを付けた、ClawdBot の記事です。

これを確かめ直すために、記事を2本用意しました。1本は公開している記事そのもの、もう1本は同じ題材を別の書き方で書き直した合成記事です。Haiku の結果はこうでした。

claude の確率56語中の順位上位5個の枠
公開している記事0.903位入った
書き直した合成記事0.756位1つ外れた

どちらも比率の線は超えています。分かれたのは順位です。合成記事のほうでは ai-agent 0.90、ai 0.85、production 0.82、review 0.80、cost-analysis 0.78 が上にいて、claude はその次でした。

公開記事は煽りの強い書き方で、合成記事は落ち着いた書き方です。その差が順位を分けた可能性はありますが、この実験では測っていません。これも Haiku の1回ずつの測定です。

この1件には、もう1つ切り分けられないことがあります。綴りが似た製品名と似ていない製品名の記事を10組並べたところ、ClawdBot の組だけ Haiku の反応の差が +0.67 あり、他の9組(最大 +0.13)から大きく離れていました。ところが実在の ClawdBot は Claude の上に作られた製品です。Haiku が反応したのが「綴りが似ているから」なのか「その製品が Claude を使っていると知っているから」なのかは、この設計では決まりません。

付くかどうかは、他の55語との競争で決まる

2つの例から言えるのは、確率が高いことと、タグが付くことは別の話だということです。付くかどうかは、その記事の中で他の55語とどれだけ競り合うかで決まります。同じ 0.75 でも、上に強い語が5個いれば落ち、いなければ付きます。

ついでに、名前と中身の有り無しを組み合わせた4通りで、対象タグの確率の平均を出しました。

中身あり中身なし
名前が本文にあるJev 0.96 / Haiku 0.96Jev 0.48 / Haiku 0.03
名前が本文にないJev 0.61 / Haiku 0.72Jev 0.15 / Haiku 0.13

各10件の平均です。行ごとに別々の実験の別々の記事なので、記事の書きやすさの違いが混ざっています。Haiku は1回ずつです。

2つのモデルの差は「名前はあるが中身がない」1セルに集中していて(0.48 と 0.03)、残り3セルはほぼ同じです。ただ、この記事で言いたいのはモデルの差ではありません。0.48 という平均は、タグの選び方を通すと「付く記事」と「付かない記事」に分かれてしまう、ということです。平均の確率だけを見ていても、実際に何件にタグが付くかは分かりません。

同じものを3回送る

同じ23件を3回送ると、先に決めた判定は3回とも動かず、記事ごとに選ばれるタグだけが、13〜22% の記事で入れ替わりました。

ここまでの数字は、すべて1回ずつの送信から出したものでした。送り直したときにどれだけ動くかを知らないまま、件数を数えていたことになります。

最後の実験で、まったく同じ23件を jev-1.13.0 へ3回送りました。1回目と2回目は 2026年9月21日、3回目は翌22日です。送る中身が23件とも同じであることは、送る前に機械で確かめています。

先に決めた読みは、3回とも動かなかった

この実験では、送る前に見るものを絞っていました。必ず付くはずの2件にタグが付くか、条件ごとの10件のうち対象タグが付いた件数、その件数から決まる判定です。条件Aはタグ名に綴りが似た別の製品名を本文に入れた記事、条件Bは綴りの似ていない製品名に差し替えた記事で、どちらもタグは付けるべきでない記事です。

必ず付くはずの2件条件A条件B公開記事の確率判定
1回目2/20/100/100.13同じ
2回目2/20/100/100.13同じ
3回目2/20/100/100.12同じ

判定に関わる数字は1つも変わりませんでした。動いたのは公開記事の確率の 0.01 だけです。

広く取った出力は、13〜22% の記事で変わった

同じ3回ぶんの回答を、今度は56語すべての確率と、タグの選び方が記事ごとに選んだタグ(3〜5個)まで広げて比べ直しました。追加の送信はしていません。

比べた回値が動いた回答差の最大選ばれたタグが1つ以上入れ替わった記事
1回目と2回目560 / 1495(37.5%)0.074 / 23(17%)
1回目と3回目591 / 1495(39.5%)0.073 / 23(13%)
2回目と3回目537 / 1495(35.9%)0.065 / 23(22%)

回答の4割近くで値が動きましたが、動き方は小さく、平均すると 0.005 です。それでも記事ごとに選ばれたタグは、1回送り直すごとに 13〜22% の記事で変わりました。

1回目と2回目のあいだで変わった4件は、こういうものです。

記事落ちたタグ入ったタグタグの数
記事Acost-analysisreview5 → 5
記事Bnvidiaなし5 → 4
記事Cci-cdreview5 → 5
記事Dなしopen-source4 → 5

どれも5個の境目にいたタグです。0.01 や 0.02 の差でも、境目をまたげば「付く」と「付かない」に分かれます。前の節で見た枠が、小さな揺れを大きな違いにしていました。

3回とも同じタグが選ばれたのは、23件中17件(74%)でした。残り6件は、3回のどこかで変わっています。この 6/23 は送る回数を増やすほど増えていく数なので、1回の再実行で起きる割合としては、上の表の 13〜22% のほうが実態に近い数字です。

違いは、測り方だけ

先に決めた狭い読みは、3回とも動かない。広く取った出力は、1回の再実行で 13〜22% の記事が変わる。

モデルも入力も同じです。違うのは、どこまでを「結果」として見たかだけでした。

ここから、Jev の出力が毎回同じだとは言えません。確率は実際に動いています。言えるのは、確率は小さな幅で安定していて、上位5個の境目にいるタグだけが入れ替わる、というところまでです。

境目をどう扱うか

運用に載せるなら、境目の扱いはタグの選び方の側で決める必要があります。思いつくのは3つです。

何が減りそうか代わりに起きそうなこと
最下位の枠を埋めず、空けておく境目のタグの入れ替わり付けたいタグも落ちるかもしれない
順位で切らず、確率の値そのもので切る他の語との競り合いで落ちること付くタグの数が記事ごとにばらつく
同じものを複数回送り、多数決を取る1回ごとの揺れ送る回数だけ費用と時間が増える

どれが良いかは測っていません。表の右2列も見込みです。どれを選ぶにしても、選んだあとで同じものを2回送り、選ばれたタグが入れ替わる記事の割合がどれだけ減ったかを数えれば確かめられます。

もう1つ、測る前に決めておくことがあります。使うモデルのバージョンです。

An alias moves when a new release ships, so the answers behind it can change without a change on your side.

(訳)別名は新しいバージョンが出ると指す先が変わるので、こちらが何も変えていなくても、返ってくる答えが変わりえます。

— TypeSafe Docs「Models」1

この記事の数字はすべて jev-1.13.0 で出したものです。上位5個の境目にいるタグは 0.01 の差で入れ替わるので、バージョンが変わって確率の並びが少し動くだけでも、記事ごとに選ばれるタグは入れ替わるはずです。境目の扱いを決めるときは、バージョンの ID も一緒に固定しておきます。

この結論が崩れる条件

この記事の結論は、次の観測が出たら崩れます。確かめ方と、今回の結果を並べます。

結論崩れる観測今回の結果
確率は、送り直しても小さな幅でしか動かない同じ入力を送り直して、1問の差が 0.1 を超える動きがたびたび出る3回で最大 0.07、平均 0.005
入れ替わるのは、上位5個の境目にいるタグ入れ替わったタグが、1〜3位のような上のほうで起きる1回目と2回目で入れ替わった4件は、すべて5位前後のタグ
付くかどうかを決めているのは「最大5個」の枠で、0.59 という比率ではない比率を 0.5 や 0.7 に変えて同じ回答に当て直すと、入れ替わる記事の割合が大きく変わる未確認。追加の送信なしで確かめられるが、まだやっていない

3つ目は、この記事でいちばん弱いところです。0.59 はタグ付けのために選んだ値ではないので、別の値でも同じことが言えるかは、当て直してみるまで分かりません。

測っていないこと

ここまでの数字には、それぞれ届かない範囲があります。

対象届かないこと
送った回数3回だけ。13〜22% に、どのくらいの幅で信じてよいかの目安(信頼区間)は無い。3通りの比べ方は独立ではない(どの回も2通りの比較に出てくる)
広く取った比較送る前に決めた読みではなく、結果を見たあとで広げたもの。「最低3個」の枠で押し込まれたタグも区別していない
Haikuすべて1回ずつ。Jev だけ揺れを測ってあるので、並べた箇所は釣り合っていない
合成記事23件中22件は Claude Opus 5 が書いた。Haiku は同系列。中身を扱っていないかは書き手の判断で、機械では確かめていない
ClawdBot綴りの近さと、その製品についての知識を切り分けられない

独立した観測が3回ぶんしかないので、13〜22% は「このくらい起きる」という目安です。広く取った比較は、この記事では結論の根拠ではなく、次の設計を考える材料として使っています。ClawdBot の件を切り分けるには、綴りが似ていて実在しない製品名で同じことをする必要があります。

Jev と Haiku のどちらが優れているかは測っていません。確率が当たる割合(0.8 と出たものが8割当たるか)も測っていません。測ったのは、この題材とこの条件での振る舞いだけです。

自分の題材で確かめる4手

自分の題材で試すなら、この順番を勧めます。

1. 正解が作り方で決まる問いを10件つくる

人の好みで割れる問いでは測れません。名前だけ借りて中身は違う記事のように、書いた時点で「付けるべきでない」が決まる題材を自分で書くのが早いです。

2. 読み方を送る前に書き留める

見るものを1つ、線を1本。結果を見たあとで動かさないと書いておきます。

3. 必ず当たるはずの件を2件混ぜる

名前も中身も揃った記事です。これが落ちたら、結果を読まずに配線を疑います。全部が低く出ることを期待する実験では、配線の誤りと本物の結果が同じ見た目になるからです。

4. 同じものを2回送る

確率だけでなく、最終的な出力(記事ごとに実際に選ばれたタグ)を比べます。私の場合、動いていたのはそちらでした。

この4手にも限界があります。1手目の問いは自分で書くので、書き手の癖が混ざります。2回送るだけでは揺れの幅までは分からず、率を出すには3回以上が要ります。それでも、モデルを取り替えるより先に試せて、費用も手間も小さい手です。

モデルを取り替える前に、自分の書いたタグの選び方を2回走らせてみてください。疑う場所が、思っていたのと違うことがあります。

参考文献

Footnotes

  1. Models - TypeSafe Docs - 別名(alias)は新しいバージョンで指す先が変わること(2026-09-23 取得)