記事のサマリー(TL;DR)
- H Company が Apache 2.0 ライセンスで NeoMME(260M・800M)をリリース。単一 Transformer でテキスト+画像を処理
- NVIDIA L40S GPU で 2048×2048 画像を毎秒 51 ページエンコード(ColModernVBERT の約 2 倍)
- 階層型トークンプーリング+非対称量子化により遅延インタラクションインデックスを 255 分の 1(6 kB/ページ)に圧縮
視覚 RAG・文書検索システムを構築する開発者が注目すべき点
PDF や画像の文書検索は、日本企業でも社内規程・契約書・仕様書のナレッジベース化に需要が高まっています。従来型の OCR+テキスト RAG では、表・グラフ・レイアウトの情報が失われる課題がありました。NeoMME-Retriever はページ画像をそのまま埋め込む ColPali 方式を採用し、OCR 前処理を不要にします。
Hugging Face Transformers に day-zero 実装が統合されており、NeoMMEForRetrieval クラスから即座に利用できます。Qdrant・Weaviate・Milvus など既存のベクターストアとの接続は標準的な dense 埋め込みで行い、精度が必要な場合は同一フォワードパスで得られる遅延インタラクション埋め込みで再ランク付けする 2 段構成が現実的です。Sentence Transformers v6 でのファインチューニングにも対応しているため、日本語文書に特化した追加学習も既存の訓練パイプラインを流用できます。
詳細
なぜまたマルチモーダルエンコーダーなのか?
近年の視覚文書検索モデルの多くは、生成型の視覚言語モデル(VLM)を転用して構築されています。具体的には「別途事前学習した Vision Encoder」→「プロジェクター」→「因果デコーダー」という構成です。しかし、検索・分類・トークンラベリングはテキストを自己回帰的に生成しないため、因果デコーダーもその計算コストも本来不要です。
ModernBERT が双方向エンコーダーにアーキテクチャ改善をもたらし、ModernVBERT はその手法を視覚文書検索に応用しつつ、別途事前学習済みの SigLIP2 Vision Tower を組み合わせました。NeoMME はこれをさらに進め、VLM のパラメータ・計算オーバーヘッドを一切持たないマルチモーダルエンコーダーとして設計・学習されています。
NeoMME エンコーダーバックボーン:画像とテキストを 1 つの Transformer で処理
NeoMME は 260M と 800M の 2 サイズで提供され、両モデルが以下のアーキテクチャを共有します。
- ネイティブマルチモーダル入力:テキストは因数分解されたトークン埋め込みを使用。画像は非重複 32×32 パッチに分割され、小規模 MLP で投影。両者が同一の Transformer エンコーダーに入力される
- 動的画像解像度:アスペクト比と実サイズを保持し、情報密度に応じてトークン数を自動調整
- 長い双方向コンテキスト:コンテキスト長 16,384 トークン(3840×2160 の 4K UHD 画像 2 枚分に相当)。大半のレイヤーはスライディングウィンドウアテンションを使用し、6 層ごとと最終層でグローバルアテンションを適用
- モダンなエンコーダー構成:グループクエリアテンション、クエリキー正規化、ゲートアテンション、2D ロータリー位置埋め込み、squared-ReLU MLP などを採用
- 多言語対応:多言語テキスト・コード・数学・機械生成画像トランスクリプトから 131k トークンの BPE 語彙をスクラッチで学習
マスクテキスト復元によるビジョン学習(事前学習)
NeoMME は離散マスク拡散テキストデノイザーとしてスクラッチから事前学習されています。テキストのみのサンプルでは腐敗率を 0〜1 の一様分布でサンプリングし、各トークンをその確率でマスクします。マルチモーダルサンプルでは腐敗率を 0.3〜1 に設定し、画像パッチは可視のまま NeoMME がマスクされたテキストを復元します。
マスク率が高いほど言語のみで解ける抜け道を排除し、モデルが画像の視覚的証拠を活用することを強制します。
事前学習データは多言語テキスト・コード・数学・自然画像・文書画像を混合し、各モデルが約 5,240 億のパックド入力トークンを処理(うちテキストのみで 2,900 億トークン)。ModernBERT の 2 兆トークン予算と比べるとデータ効率の観点から相対的に小さく、学習に NorMuon オプティマイザーを採用することでデータ効率を高めています。
NeoMME-Retriever:視覚文書検索への応用
NeoMME を ColPali が提案したページ画像方式でビジュアル文書検索向けにファインチューニングしたモデルです。PDF からテキストを抽出する OCR 前処理をバイパスし、ドキュメントページのスクリーンショットをそのままランキングします。ページをそのまま画像として扱うことで、レイアウト・グラフ・表・フォントサイズなど、OCR では失われる視覚的手がかりを保持します。
Dense ヘッドと遅延インタラクションヘッドの 2 ヘッド設計
NeoMME-Retriever は NeoMME バックボーンの上に 2 つの検索ヘッドを同時学習します。
- Dense ヘッド:バックボーンの隠れ状態ベクトルを mean pooling して正規化。ANN(近似最近傍)索引と自然に組み合わせられる
- 遅延インタラクション(Late-interaction)ヘッド:各テキストトークン・画像パッチを 128 次元の正規化ベクトルに投影。クエリトークンと画像領域の局所一致をより細粒度に保持
1 回のフォワードパスで両表現を返すため、用途とインフラに合わせて柔軟に使い分けられます。NextPlaid などのオープンソースライブラリで遅延インタラクションを活用するのが一般推奨ですが、コーパスが非常に大規模な場合は Dense で候補を絞ってから遅延インタラクションで再ランクする 2 段構成も有効です。
検索精度:コンパクトなモデルサイズでの競争力
ViDoRe v3 の nDCG@10 での結果は以下の通りです。
| モデル | パラメータ数 | ViDoRe v3 (nDCG@10) | ViDoRe v2 (nDCG@5) | ViDoRe v1 (nDCG@5) |
|---|---|---|---|---|
| ColModernVBERT | 250M | 0.261 | 0.407 | 0.806 |
| ColSmol-256M | 256M | 0.207 | 0.348 | 0.797 |
| NeoMME-260M | 260M | 0.523 | 0.522 | 0.860 |
| ColSmol-500M | 500M | 0.340 | 0.455 | 0.825 |
| Vultron Flash | 850M | 0.565 | 0.604 | 0.882 |
| NeoMME-800M | 800M | 0.556 | 0.559 | 0.874 |
| ColQwen2.5-v0.2 | 3.75B | 0.524 | 0.601 | 0.895 |
| ColPali v1.3 | 2.92B | 0.430 | 0.547 | 0.848 |
NeoMME-Retriever-260M は 800M 未満のモデルで最高スコア 0.523 を達成し、パラメータ数が約 14 倍の ColQwen2.5 とわずか 0.002 差です。NeoMME-Retriever-800M は 0.556 で、同規模の Vultron Retriever Flash(0.8B)の 0.565 に 0.009 差まで迫ります。
高解像度検索をストレージ効率的に実現するインデックス圧縮
2048×2048 の正方形ページは NeoMME-Retriever で 4,200 ベクトルを含む埋め込みを生成し、float32 では約 2.1 MB になります。ViDoRe v3 全体での平均は約 1.5 MB/ページです。これを削減するため以下の 2 つの圧縮手法を組み合わせています。
- 階層型トークンプーリング:マルチベクトル埋め込み内の類似ベクトルをクラスタリングし、クラスター平均で置換してベクトル数を削減
- 非対称量子化:文書埋め込みを int8 またはバイナリに量子化。クエリ埋め込みは保存不要でオンザフライ生成のため高精度を維持
ViDoRe v3 での実験結果:
- プーリング係数 10 + int8 クエリ/ドキュメント:1.5 MB → 39 kB(39 分の 1)、nDCG@10 の 99% 以上を保持
- プーリング係数 8 + int8 クエリ+バイナリドキュメント:6 kB/ページ(255 分の 1)、nDCG@10 の 95% 以上を保持
推論スループット:コーパスインデックス構築コストの削減
NVIDIA L40S 1 枚での 2048×2048 入力でのエンコード速度:
- NeoMME-Retriever-260M:毎秒約 51 ページ(ColModernVBERT の 26 ページ/秒の約 2 倍)
- NeoMME-Retriever-800M は小サイズ入力でも他モデルを上回る
文書を埋め込みに変換してから Qdrant・Weaviate・Milvus などのベクターストアに格納するインデックス構築フェーズのコストを直接削減します。
視覚 RAG(Visual RAG)への応用
視覚 RAG のワークフローは以下の 3 ステップです。
- インデックス作成:PDF の各ページを画像に変換 → 検索モデルで埋め込み生成 → ベクターストアに保存
- 検索:ユーザークエリを同モデルで埋め込み化 → 上位 k ページを取得
- 生成:クエリ+画像を VLM に送信してアンサーを生成(
{query}{img_1}{img_2}...{img_k})
HF Space(tonywu71/neomme-retriever-demo)でデモを試せます。
利用方法(コード例)
Hugging Face Transformers(現在 mainブランチ必要)と sentence-transformers 6.0 以上で利用できます。
pip install -U accelerate "transformers @ git+https://github.com/huggingface/transformers.git@main" "sentence-transformers>=6.0.0"
NeoMMEProcessor と NeoMMEForRetrieval クラスを使い、1 回のフォワードパスで遅延インタラクション埋め込みと Dense 埋め込みの両方を取得できます。Sentence Transformers v6 でのファインチューニングは Dense ヘッドと遅延インタラクションヘッドを個別のチェックポイントで対応しており、両方を同時に学習したい場合は NeoMMEForRetrieval にカスタム Trainer を組み合わせます。
まとめ
NeoMME は別々の事前学習済み画像・テキストエンコーダーを、長コンテキスト双方向 Transformer 1 つに統合しました。スクラッチ学習により多言語テキストトークンと 32×32 画像パッチを同一パスで処理します。
- 260M モデルは 800M 未満の全評価モデルを上回る
- 2048×2048 入力で ColModernVBERT の約 2 倍のスループット
- 遅延インタラクションインデックスを 1.5 MB から 6 kB(255 分の 1)に圧縮しつつ nDCG@10 の 95% 以上を維持
- 全チェックポイントを Apache 2.0 ライセンスで公開