総合スコアで順位をつけるのではなく、そのモデルが何を得意とし、何を苦手とし、どう失敗するかの輪郭を描きます。対象は Ollama で動くモデルだけ。
課金もレート制限も無いからこそ、同じ問題を seed を変えて何度も回し、ばらつきそのものを癖として測れます。
name / age / occupation をキーに持つ JSON を日本語で頼んだとき、6 モデル中 5 モデルがキー名を日本語に訳しました。値は正しく、訳してはいけない識別子まで訳しています。
qwen2.5:1.5b だけ。いちばん大きい qwen2.5:7b は 5 本すべてで訳しました。これは「日本語が苦手」ではありません。qwen2.5:7b を例に取ると、同じ課題の英語版は 5 本すべて正解で、コード生成の日英差はありませんでした。壊れているのは日本語そのものではなく、日本語 × 形式制約の組み合わせです。
そして量子化を替えても動きませんでした。llama3.2:1b を Q8_0 から Q4_K_M に差し替えて測り直しても、6 モデルの内訳は同じままでした。
先に書きます。ここを誤解したまま数字を読まれるのが一番まずいからです。
ideate 次元が出すのは制約内多様性です。指定件数を守ったか、お題から外れていないか、案同士がどれだけ重複していないか。良いアイデアかどうかは測れません。生の出力を全件保存してあるので、質の判断は人が読んで行います。
手元で動く最大級のモデルでも、被験モデルと同程度かそれ以下の能力しかありません。同じモデルファミリなら誤差が相関し、自分に似た出力を高く評価します。
量子化・num_ctx・マシンの負荷で数字は動きます。出るのはあなたの手元でのプロファイルであって、モデルの絶対的な性能ではありません。
スコアは「ケースごとに全モデルの平均を引いた残差」で出します。次元をまたいで足せる量ではないので、合計欄も総合順位もありません。
| 次元 | 問い方 | 採点 |
|---|---|---|
| instruct | 形式制約つきの依頼(schema・列挙値・件数) | schema 検証 × 期待値の一致 |
| code-gen | 関数を書かせる | サンドボックスで実行する |
| code-fix | 壊れた関数を直させる | サンドボックスで実行する |
| code-read | バグのある行番号を答えさせる | 正規化してから完全一致 |
| extract | 文章から JSON を作らせる | キー単位の一致(構造の門は置かない) |
| reason | 答えが一意な数値問題 | 最後の数値を採り、許容差で比較 |
| longctx | 長文に事実を埋めて問う(針の位置は 3 通り) | 答えを含むか |
| ideate | k 個の案を出させる | 制約内多様性(上記) |
reason が「最後の数値」を採るのは、素の数値だけを正解にすると測るのが算数ではなく指示追従になるからです。指示追従は instruct が測る次元なので、両方に入れると同じものを二重に数えてしまいます。
全次元を複数モデルで回すと数時間かかります。そのため生成・採点・集計を別のコマンドに分け、採点は生成を書き換えません。
qb score をもう一度回すだけで済み、数時間かけた生成はそのまま残ります。設計上の限界を先に書きます。直っていないものも、測って出しています。
ideate のスコアを動かし、あるモデルの順位を 2 つ変えています(推定の下限)。直っていませんが、どれだけ効いているかは qb gate-audit が測ります。qb lint-cases が静的に、qb run が実測値で二重に止めます。スコアは全モデルの平均を引いた残差で出すので、比較対象が少ないほど推定が甘くなります。同じファミリのモデルばかりだと誤差も相関します。モデルを足すほど安定します。
macOS では RLIMIT_AS / RLIMIT_DATA / RLIMIT_STACK のいずれも設定できません。CPU 時間と実時間の二重で止める設計ですが、メモリ暴走に対する上限はありません。
観測が少ないほど、その中の 1 件で結論が決まります。実測では、問題を 1 種類から 2 種類に増やしただけで同じ 2 モデルの勝敗が入れ替わりました。このぶれは qb stability が数値で出しますが、測れるようになるだけで直るわけではありません。
特にモデルのロード時間に効きます。仮名の無い短い日本語(全漢字の店名など)は言語判定できず、言語別の集計から外れます。
# 埋め込みモデルを入れる(ideate 次元の採点で使う) ollama pull bge-m3 uv sync # 生成を実行する uv run qb run --models qwen2.5:0.5b,qwen2.5:1.5b --repeats 5 # 採点して、輪郭を出す uv run qb score --run main uv run qb report --run main
中断してかまいません。Ctrl-C で止めても、同じ --run 名で再実行すれば続きから再開します。