メインコンテンツへスキップ
見出し画像

Jevはサイコロを振るのか?

    Jevとは

    先日, TypeSafe AIからJevという新しいAIサービスが公開され, 界隈が賑わっています.

    Jevについて簡単に説明すると, Jevはテキストを生成せず, 数値を予測することに特化したLLMです. 公式ドキュメントにも

    System One models do not write replies, produce code, or generate explanations

    とあり, 文章生成能力を捨てる代わりに数値予測に特化することで, 応答速度やAPI料金の安さを実現しているようです.

    すでに複数のTech系ブログで取り上げられており, SNSにもたくさん情報が出ているので, 詳しいことはそちらをあたってみてください.

    Jevの出力と確率

    JevへのAPIリクエストでは3つの型が用意されています.

    • choice型: 複数の選択肢のうち, どれに当てはまるかを選ぶ. 例えば映画のレビュー文を渡して「肯定的 / 中立 / 否定的 のどれか」を聞くと, 選んだ選択肢と各選択肢の確率 (肯定的: 0.85, 中立: 0.10, 否定的: 0.05) といった出力が返ってくる.

    • score型: 0〜2のスケール上の値を返す. 例えば「この文章はどのくらい丁寧か」を数値で評価するのに使える.

    • noul型: ある命題が真である確率を返す. 例えば「このメールはスパムか?」と聞くと, 0.92 のような出力が得られる.

    このうちchoice型とnoul型は, 出力が「確率」であるのがポイントです.

    Jevの出力する確率は「校正されている (calibrated)」とされています. 校正されているとは, 予測確率と実際の発生確率が一致している状態のことです. つまり, 「Jevが80%と予測した事象は, 実際にもおよそ80%で起こるだろう」ということです.

    当たり前のように聞こえるかもしれませんが, 普通のAIの予測する確率は往々にして校正されていません. 多くの場合AIの予測確率の値の大小には意味がありますが, その比率には意味がありません. 順序尺度ではあるが, 比例尺度ではないということです.
    例えばAIがある2つの事象A, Bの発生確率をそれぞれ90%, 10%と予測した場合, 「Aの方がBより起こりやすい」という解釈には意味があります. しかし, 「Aの方がBより9倍起こりやすい」とは言えません.

    これに対してTypeSafe AIは, Jevに関して公式ドキュメントで次のように説明しています.

    their probabilities are optimized against outcomes to reflect uncertainty

    つまり, Jevが出す確率は実際の結果に照らして最適化されており, 不確実性をそのまま反映した値になっている, ということです. 出てくる数字をそのまま確率として使えること, これがJevの大きな売りの一つになっています.

    Jevはサイコロを振らない

    ところが, Jevの出力確率には問題があるのではないか, という報告があがりました.

    KantaHayashiAI氏は, 非常にシンプルな実験でJevの確率が破綻する事例を報告しています.

    実験の内容は, 「公平な6面サイコロを1回振って, まだ誰も結果を見ていない」という状況において, どの目が出たかchoice型で1〜6から選ばせるというものです.

    正解は明らかで, どの目も1/6 ≒ 16.7%です. ところがJevは毎回「1」を選び, しかもその確率を平均82.9%と答えました (400回試行). 公平なサイコロであることを明示しているのに, 1の目が8割以上の確率で出ると言っているわけです.
    この結果は, 校正された確率としては明らかにおかしいです.

    KantaHayashiAI氏の実験内容と結果は, jev-does-not-play-dice で公開されています.
    リポジトリ名は, アインシュタインの「神はサイコロを振らない」のもじりで, Jevがサイコロで毎回1を出してしまうことから取ったようです. おしゃれですね.

    Jevはサイコロを振るかも

    ここからが本題です.
    この報告を受けて, 私も同じサイコロ問題について, 様々な条件で実験してみました. その結果, 面白いことがわかりました. まずは結果の表をご覧ください.

    出目真の確率choice型noul型10.1670.7690.16720.1670.0200.15730.1670.0370.15940.1670.0510.17750.1670.0100.16760.1670.0750.17070.00.0380.010\begin{array}{c|c|c|c} \text{出目} & \text{真の確率} & \text{choice型} & \text{noul型} \\ \hline 1 & 0.167 & 0.769 & 0.167 \\ 2 & 0.167 & 0.020 & 0.157 \\ 3 & 0.167 & 0.037 & 0.159 \\ 4 & 0.167 & 0.051 & 0.177 \\ 5 & 0.167 & 0.010 & 0.167 \\ 6 & 0.167 & 0.075 & 0.170 \\ 7 & 0.0 & 0.038 & 0.010 \end{array}

    この実験では, サイコロの出目を2通りの方法で質問しています.

    ・choice型: 「どの目が出た?」を1つの7択で聞く (1〜6の目 + 7の目)
    ・noul型: 「1の目か?」「2の目か?」…「7の目か?」を7つの独立した質問として聞く

    7の目は, 6面サイコロでは絶対に出ない「ありえない選択肢」として加えています. 正しく校正されていれば, 確率はほぼ0になるはずです. それぞれ50回ずつ試行し, 各目に対する確率の平均をとりました.

    まずchoice型では, 報告された現象が再現しました. 確率の77%を1の目に集中させ, 他の目を0.010〜0.075まで押しつぶしています. さらに, ありえない7の目に0.038を与えており, 実在する2の目 (0.020) や5の目 (0.010) よりも起こりやすいと評価しています. choice型の確率は, 適切に校正できていないようです.

    一方noul型では, 1〜6のすべての目で真の値1/6に近い値を返し, 7の目にも0に近い確率 (0.010) を返しました. 少なくともchoice型のときのような明らかな破綻はありません.

    なお, 選択肢の並び順を入れ替える, 選択肢のラベルを A〜F や意味のないランダムな文字列に変える, noul型にも選択肢の一覧を見せる, などの条件も試しましたが, 「choice型はダメでnoul型はOK」という傾向は変わりませんでした. プロンプトの書き方を工夫すれば簡単に直る, という類のものではなさそうです.

    今回の実験の詳細は jev-noul-vs-choice にまとめています. ぜひ触ってみてください. 

    確率が大事ならnoul型を使おう

    今回の結果から言えるのは, Jevのchoice型の確率は, 選択肢の間での確率分布としてはそのまま信用しないほうがよさそうだ, ということです.

    なので確率そのものを使いたい場合は, 選択肢ごとに「Aか?」「Bか?」とnoul型の質問に分けて聞き, その確率を使うほうが無難でしょう.

    ただし, 今回試したのはサイコロという限定的な条件だけで, 試行回数も各50回です. 一般のタスク全般で同じことが言えるかはわかりません. それでも, 確率が重要な用途ではnoul型を使うのがよさそうです.

    参考

    TypeSafe AI. System One. https://docs.typesafe.ai/concepts/system-one

    KantaHayashiAI. jev-does-not-play-dice. https://github.com/KantaHayashiAI/jev-does-not-play-dice

    TakumiNoguchi2004. jev-noul-vs-choice. https://github.com/TakumiNoguchi2004/jev-noul-vs-choice

     
     
    慶應義塾大学 理工学部 情報工学科4年 応用情報, ITストラテジスト, 情報処理安全確保支援士に合格 AI, LLMが好きで, LLM-as-a-JudgeやSpeculative Decodingを研究中 MyPage: https://takumi-noguchi.dev

    あなたへのおすすめ