OpenBMBは2026年10月27日、既存のOCR結果を判定する2BモデルMiniCPM-OCR Jevを公開した。テキスト・数式・表の領域ごとに候補の認識結果が正しいかを0~1で採点する。人が確認する領域を絞り込んだり、複数候補から一つを選んだりするために使う。

結果

OpenBMBのモデルガイドによると、MiniCPM-OCR JevはJevOCRBenchで正誤を区別する能力を示すAUROCの100倍値で93.6を記録した。小型の2Bモデルを既存OCRの後段に加え、確認と候補再選択を支援する方式だ。以下の二つの表は、公式PNGの発表値をJev系と一般モデルに分けて転記した。

別の公式SVGでは、Jev系は「Noul」設定(詳細説明なし)、一般モデルは判定基準の指示文を使用すると区別している。そのため、系列間のスコア差には評価設定も考慮すべきだ。SVGのMiniCPM行は93.5・94.5・93.1・91.0とPNGとは異なり、以下の表にはPNGの数値のみを転記した。

パラメーター表記では、Bは10億単位、Aは実際に有効化されるパラメーター数を意味する。

表:JevOCRBenchの全体・カテゴリー別判定性能 — Jev系

条件:JevOCRBench 2,267件、OpenBMB公式PNGの発表値

単位:AUROCの100倍値

結果
モデルパラメーター全体テキスト数式表
JEV 35B·A3B35B·A3B90.191.688.989.6
MiniCPM-OCR Jev2B93.694.693.191.1
JEV-VL 27B27B94.096.390.791.6

表:JevOCRBenchの全体・カテゴリー別判定性能 — 一般モデル

条件:JevOCRBench 2,267件、OpenBMB公式PNGの発表値

単位:AUROCの100倍値

カテゴリー別判定AUROC (AUROCの100倍値)Qwen3.5 2B: テキスト 50.7, 数式 50.2, 表 50.6; Qwen3.5 4B: テキスト 73.3, 数式 65.3, 表 73.9; Qwen3.5 9B: テキスト 75.9, 数式 67.7, 表 73.4; Qwen3.5 35B·A3B: テキスト 91.1, 数式 87.0, 表 88.3; Gemma 4 31B: テキスト 91.0, 数式 90.8, 表 87.7; Qwen3.5 397B·A17B: テキスト 95.4, 数式 91.8, 表 91.4; Qwen3.7-Plus: テキスト 95.8, 数式 91.7, 表 93.0; Kimi K3: テキスト 97.1, 数式 96.0, 表 97.0; Gemini 3.8 Flash: テキスト 97.2, 数式 98.0, 表 95.7テキスト数式表Qwen3.5 2B50.750.250.6Qwen3.5 4B73.365.373.9Qwen3.5 9B75.967.773.4Qwen3.5 35B·A3B91.187.088.3Gemma 4 31B91.090.887.7Qwen3.5 397B·A17B95.491.891.4Qwen3.7-Plus95.891.793.0Kimi K397.196.097.0Gemini 3.8 Flash97.298.095.7
カテゴリー別判定AUROC (AUROCの100倍値)
結果
モデルパラメーター全体テキスト数式表
Qwen3.5 2B2B50.650.750.250.6
Qwen3.5 4B4B69.973.365.373.9
Qwen3.5 9B9B72.075.967.773.4
Qwen3.5 35B·A3B35B·A3B89.891.187.088.3
Gemma 4 31B31B90.591.090.887.7
Qwen3.5 397B·A17B397B·A17B93.895.491.891.4
Qwen3.7-Plus非公開94.395.891.793.0
Kimi K32.8T·A104B96.997.196.097.0
Gemini 3.8 Flash非公開97.197.298.095.7

発表値ではMiniCPM-OCR JevはJEV-35B-A3Bの90.1を上回り、Qwen3.5-397B-A17Bの93.8には0.2点及ばなかった。追加学習前のベースモデルQwen3.5-2Bは50.6だった。カテゴリー別では、MiniCPM-OCR Jevはテキストで最も高く、表で最も低かった。

測定方法

評価はOpenBMBが作成したJevOCRBenchデータセットで行われた。中国語と英語の2,267件は、テキスト47.7%、数式24.7%、表27.6%で構成される。各レコードには元の領域画像、候補テキスト、候補を描画した画像、人手による正誤ラベルが含まれる。誤答候補は最上位クラスのOCRモデルの実際の誤出力から抽出し、人手でラベルを付けた。採点入力は、元の領域画像 → 候補テキスト → 候補テキストを描画した画像の三つに固定され、指標は正答と誤答を区別する能力であるAUROCだ。

OpenBMBのパーサー横断評価では、OCR結果を構造化するツールであるパーサーを変えても判定性能は大きく変動しなかった。JevOCRBenchから無作為に抽出した同じ200サンプルに四つのパーサーをそれぞれ適用し、人手で正誤ラベルを付けた実験だ。

表:パーサー別判定性能

条件:JevOCRBenchから無作為に抽出した同じ200サンプル、四つのパーサーを独立実行、OpenBMBによる自社評価

単位:AUROCの100倍値

測定方法
候補パーサーMiniCPM-OCR 1.0GLM-OCRPaddleOCR-VL-1.6Xiaomi-OCR-0
AUROCの100倍値92.791.993.493.1

四つのパーサーの結果の差は1.5点の幅に収まった。

なぜこのような差が生じるのか

MiniCPM-OCR JevはQwen3.5-2Bを基に学習した。画像を特徴量に変換するビジョンエンコーダーと、言語処理を担う中核のニューラルネットワークである言語バックボーンは残し、lm_headを正答と誤答だけを区別する二値分類ヘッドに置き換えた。

採点手順は事前検査 → 候補テキストのレンダリング → モデル計算の3段階で、事前検査では数式ブロックのLaTeX構文を検証する。候補を画像として描き、元の領域画像と並べて比較する方式だ。OpenBMBのデプロイ文書は、レンダリング段階で候補テキストを画像化し、モデルがレイアウトを見られるようにすると説明している。

OpenBMBの発表では、同じ方法で文書領域を分割して候補を選び直すと、各パーサーの単独処理結果より解析品質が向上した。MiniCPM-OCR Jevによる改善幅は、MiniCPM-OCR 1.0で0.18点、Xiaomi OCRで0.02点、PaddleOCR-VL 1.6で0.25点と異なった。この+0.02~+0.25点は判定AUROCではなく、文書解析の総合スコアの改善量だ。同じ判定モデルを追加しても、パーサーごとの効果は一様ではなかった。

表:Jevによる候補再選択での解析品質の改善

条件:三つのパーサーでOmniDocBench v1.6のPaddleOCR-VL SDKのブロック分割・組み立て規則を共有。各パーサーの単独処理をベースラインとし、他の二つのモデルの候補から低信頼ブロックを再選択した結果。OpenBMB公式図。

単位:改善点数

候補再選択による解析品質の改善 (点)MiniCPM-OCR 1.0: JEV-27B 0.13, JEV-35B-A3B 0.16, MiniCPM-OCR Jev 0.18; Xiaomi OCR: JEV-27B 0.08, JEV-35B-A3B 0.03, MiniCPM-OCR Jev 0.02; PaddleOCR-VL 1.6: JEV-27B 0.38, JEV-35B-A3B 0.25, MiniCPM-OCR Jev 0.25JEV-27BJEV-35B-A3BMiniCPM-OCR JevMiniCPM-OCR 1.00.130.160.18Xiaomi OCR0.080.030.02PaddleOCR-VL 1.60.380.250.25
候補再選択による解析品質の改善 (点)
なぜこのような差が生じるのか
パーサーグループJEV-27BJEV-35B-A3BMiniCPM-OCR Jev
MiniCPM-OCR 1.00.130.160.18
Xiaomi OCR0.080.030.02
PaddleOCR-VL 1.60.380.250.25

選ぶ際の基準

自動通過の基準となるしきい値は、自社データの人手ラベルに基づき、通過率と精度を併せて確認して決める。公式の例示図では、社内文書から抽出した900枚のブロック画像に人手でラベルを付け、確認なしで通過させる割合ごとの精度を計算した。図に示された確認なしの通過率は、法律契約書がしきい値0.984で85.0%、財務諸表が0.995で56.2%、複合文書が0.994で35.1%だった。

自分で起動するには、公式Docker/SDKローカルデプロイガイドに従い、VRAM 12GB以上のNVIDIA GPUと535以上のドライバーが必要だ。ディスク容量はモデル計算環境に約5~9GB、レンダリング環境に約1.5GB、重みに約2.5GBが必要となる。

スコアの絶対値を公開値と直接比較する予定なら、Dockerイメージを使う。OpenBMBのデプロイ文書によれば、DockerイメージのレンダリングはクラウドAPIと同じだ。独自にインストールしたSDKのレンダラーでは、スコア順位は維持されるが絶対値は少し異なる可能性がある。

レスポンスでは、まずverdict、つまり判定状態がscoredかを確認し、0.0と-1.0は採点失敗時の固定値として扱う。

categoryは実際のブロックの種類に合わせる必要がある。

以下はデプロイ文書の単一採点リクエストをPythonに置き換えた例だ。ローカルサービスが稼働しており、block.pngが対象テキスト領域の画像である場合に使う。

import base64
from pathlib import Path
import requests

response = requests.post("http://127.0.0.1:8030/v1/rm/score", json={
    "input_form": "ternary",
    "items": [{"case_id": "blk-001", "category": "text",
               "image": base64.b64encode(Path("block.png").read_bytes()).decode(),
               "ocr_text": "the OCR text to be scored"}]
})
response.raise_for_status()
result = response.json()["results"][0]
if result["verdict"] == "scored":
    print(result["prob_yes"])
else:
    print("Scoring failed:", result["verdict"])

デプロイ後は、例の3件のスコアを基準スコアと比較し、差が0.02以内かを確認すればよい。

候補再選択の最終的な品質は、すでに生成された候補の範囲と精度に左右される。

重みとコードはApache License 2.0で公開されており、元の重みと量子化済みの重みが提供される。デプロイはクラウドAPIとDocker・SDKに対応する。

小型の判定モデルはOCRをやり直す代わりに、既存候補の確認と再選択を支援する段階になり得る。