TL;DR
- 完全なネイティブマルチモーダル設計: 独立したVisionエンコーダ(SigLIP等)やCausal LLMを完全に排除し、単一の双方向Transformerで画像パッチとテキストトークンを直接処理する軽量アーキテクチャ(260M / 800Mパラメータ)。最大16,384トークンのコンテキストに対応。
- 255倍のインデックス圧縮: 階層的トークンプール(Hierarchical Token Pooling)と非対称量子化(Asymmetric Quantization)を組み合わせ、Late-Interactionのインデックス容量を従来の約1.5MB/pageから6kB/pageへと劇的に削減。
- 高スループットと実用性: 1回の順伝播でDense埋め込みとLate-Interaction埋め込みを同時生成。NVIDIA L40S環境において260Mモデルで51 pages/sec(ColModernVBERTの約2倍)の推論スループットを達成し、ViDoRe v3のパレートフロンティアを更新(Apache 2.0ライセンス)。
背景と技術課題
エンタープライズ領域において、PDFやスライド、帳票など視覚的レイアウトを含むドキュメントを直接検索対象とする「Visual RAG(Document Retrieval)」の需要が急速に高まっています。この分野において大きな転換点となったのが、ドキュメントのページ画像を直接埋め込み空間にマッピングするColPaliなどのアーキテクチャでした。しかし、これらの既存手法は高精度な検索性能を実現する一方で、システム構成と運用インフラの双方において重大な技術的課題を抱えていました。
第一の課題は、モデルアーキテクチャの構造的冗長性です。既存手法の多くは、事前学習済みのVisionエンコーダ(SigLIPやCLIPなど)の出力を、アダプタ層を介して大規模なCausal LLM(自己回帰型言語モデル)へ接続する構成を採用しています。しかし、検索タスク(エンコーディング)においては自己回帰的なテキスト生成機能は不要です。それにもかかわらず数十億パラメータ規模のデコーダブロックを通過させる計算コストが発生するため、GPUメモリ消費が増大し、推論スループットの大きなボトルネックとなっていました。
第二の課題は、Late-Interaction手法(ColBERTスタイル)におけるインデックスサイズの肥大化です。Late-Interactionでは、1ページの画像から得られる数千個のパッチトークンベクトルをそのまま保持し、クエリトークンとの間で総当たり的に類似度(MaxSim)を計算します。この手法は極めて高い検索精度を誇る反面、1ページあたりのインデックス容量が約1.5MBに達します。例えば100万ページの文書をインデックス化する場合、約1.5TBものベクトルストレージが必要となり、低レイテンシ検索のためにRAMやVRAM上へ常駐展開することは、コストの観点から極めて困難でした。
コアアーキテクチャ・仕組みの解説
H Companyが開発・公開した「NeoMME」は、これらの課題をアーキテクチャレベルで根本から解決するために設計されたマルチモーダル・ネイティブエンコーダです。既存モデルのコンポーネントを継ぎ接ぎするのではなく、ゼロからスクラッチで事前学習を行うことで、検索タスクに特化した無駄のない設計を実現しています。
単一双方向TransformerによるNative Multimodal設計
NeoMMEの最大の特徴は、画像処理に特化した独立したVisionタワーを持たない点です。入力画像は32×32のパッチに分割(Patchify)されて線形射影層を通過した後、テキストトークンと同一の単一Bidirectional Transformer(双方向Transformer)へと直接投入されます。自己回帰モデルのような因果マスク(Causal Mask)を用いず、すべての画像パッチとテキストトークンが全層で双方向アテンションを計算するため、クロスモーダルな文脈理解が浅い層から密に行われます。これにより、260Mまたは800Mという軽量なパラメータサイズでありながら、巨大なモデルに匹敵する高度な表現力を獲得しています。
事前学習には「Masked Discrete-Diffusion」と呼ばれる目的関数が採用されています。これは、可視状態の画像パッチを条件として入力し、マスクされたテキストトークンを離散空間上で復元・ノイズ除去(デノイジング)するアプローチです。連続ベクトル空間での再構成や対照学習(Contrastive Learning)のみに依存せず、離散トークン空間での拡散過程を解かせることで、モーダル間の深いセマンティック・アライメントを単一モデル内で効率的に獲得させています。
Dual-head機構による効率的な埋め込み生成
情報検索システムでは、全体的な大枠の意味を捉えるDense検索と、詳細な局所情報を捉えるLate-Interactionを組み合わせるハイブリッドアプローチが有効です。NeoMMEは1回の順伝播(Forward pass)に対して2つの独立したプロジェクションヘッドを備えており、Dense埋め込み(ページ全体の表現)とLate-Interaction埋め込み(トークン単位の表現)を同時に出力します。これにより、パイプライン側で複数モデルを走らせる必要がなくなり、推論インフラの大幅な簡素化が図れます。
1/255の圧縮を実現する階層的トークンプールと非対称量子化
インデックス容量を1.5MBから6kBへと劇的に削減するブレイクスルーは、Transformer後段に組み込まれた2段階の最適化パイプラインによって実現されています。
- 階層的トークンプール(Hierarchical Token Pooling: HTP): 画像から得られた全パッチトークンを一律に保持するのではなく、空間的隣接性と意味的な重要度に基づきトークンを動的にクラスタリング・平均化(マージ)します。例えば、余白や無地の背景領域に相当する冗長なトークンは集約され、テキストやグラフなどの情報密度の高い領域は高解像度(多数のトークン)を維持します。これにより、検索精度を損なわずに保持トークン数を大幅に削減します。
- 非対称量子化(Asymmetric Quantization: AQ): Late-InteractionのMaxSim計算において、リアルタイムに入力されるクエリ側ベクトルは高精度(FP16等)を維持する一方、ストレージに永続化されるドキュメント側ベクトルを極低ビット(INT8や1ビットのバイナリ表現)へ量子化します。
この2つの圧縮技術を組み合わせることで、検索品質(nDCG@10)の低下を5%未満に抑えながら、約255倍という極めて高いインデックス圧縮比を達成しています。
ハンズオン・実装/コード例
NeoMMEはHugging Faceエコシステムと統合されており、transformersライブラリ経由で直感的に利用できます。以下は、NeoMMEを用いて画像とテキストをエンコードし、Dense表現および圧縮済みLate-Interaction表現を取得するPythonコード例です。
import torch
from PIL import Image
from transformers import AutoModel, AutoProcessor
# デバイスとモデルの初期化
device = "cuda" if torch.cuda.is_available() else "cpu"
model_id = "hcompany/NeoMME-800M"
# trust_remote_code=Trueでカスタムアーキテクチャをロード
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModel.from_pretrained(model_id, trust_remote_code=True).to(device).eval()
# 入力データの準備
query_text = "What is the detailed mechanism of Hierarchical Token Pooling?"
doc_image = Image.open("architecture_diagram_page.jpg").convert("RGB")
# プロセッサによるテンソル変換(画像パッチ化およびテキストトークナイズ)
inputs = processor(
text=[query_text],
images=[doc_image],
return_tensors="pt",
padding=True,
truncation=True
).to(device)
with torch.no_grad():
# 1パスでの推論実行
outputs = model(**inputs)
# 1. Dense埋め込み (Shape: [batch_size, hidden_dim])
# 全体検索やファーストステージのフィルタリングに使用
dense_embeddings = outputs.dense_embeds
# 2. Late-Interaction埋め込み (Shape: [batch_size, num_pooled_tokens, hidden_dim])
# 階層的トークンプール(HTP)が適用され、トークン数が最適化されている
late_interaction_embeds = outputs.late_interaction_embeds
# 3. ドキュメントベクトルの非対称量子化(ストレージ圧縮)
# クエリ側は高精度を保ち、ドキュメント側のみ低ビット化する
quantized_doc_embeds = model.quantize(
late_interaction_embeds,
method="binary" # または "int8"
)
print(f"Dense Embedding Shape: {dense_embeddings.shape}")
print(f"Late-Interaction Shape (Pooled): {late_interaction_embeds.shape}")
print(f"Quantized Document Shape: {quantized_doc_embeds.shape}")
# 1ページあたりの概算インデックスサイズの算出
bytes_per_page = quantized_doc_embeds.element_size() * quantized_doc_embeds.nelement()
print(f"Index Size per Page: {bytes_per_page / 1024:.2f} kB")
# 期待出力: 約 6.00 kB
このように、プーリング処理がモデル内部で完結しているため、複雑な後処理パイプラインを組むことなく、軽量化されたベクトルをQdrantやMilvus、Vespaといったベクトルデータベースへ即座に格納できます。
ベンチマークと実務でのトレードオフ
ViDoRe v3 ベンチマークと推論スループット
視覚的ドキュメント検索の標準ベンチマーク「ViDoRe v3」において、NeoMMEはパレートフロンティアを大幅に更新しました。NVIDIA L40S GPU単基環境において、既存の軽量モデルであるColModernVBERTが約25 pages/secであるのに対し、NeoMME-260Mはその約2倍となる51 pages/secの推論スループットを達成しています。自己回帰デコーダや独立したVisionタワーを排除したことで、推論時のメモリアクセス負荷(Memory-bound)が劇的に低減されたことが大きな要因です。
実務におけるトレードオフとアーキテクチャ設計
圧倒的な処理速度と255倍の圧縮率を誇る一方で、システム導入時に考慮すべきトレードオフも存在します。
- 最大精度との差分: 極限までの圧縮と軽量化を図っているため、ColPali(8B規模)のような非圧縮・フルサイズのSOTAモデルと比較すると、検索精度(nDCG@10等)の絶対値で数%(5%未満)の低下が見られます。検索の取りこぼしが許されない高精度要求システムでは、NeoMMEをファーストステージの高速Retrieverとして利用し、上位候補に対してのみ重厚なCross-Encoderを適用する2段構成(Cascade Retrieval)が現実的なベストプラクティスとなります。
- 生成機能の非搭載: NeoMMEは表現学習に特化したエンコーダであるため、検索されたドキュメント画像を読み取って回答文を生成するタスク(Visual Question Answering等)は単体で実行できません。End-to-EndのRAGパイプラインを構築する際は、検索されたページ画像を後段のVLM(Qwen2-VLやLlama-3-Visionなど)へ受け渡す連携設計が必要です。
まとめと実務への示唆
NeoMMEは、既存の大規模生成モデルやVisionモデルを単に流用・接続する従来のアプローチに対して一石を投じ、検索タスクに特化したネイティブ設計の優位性を見事に実証しました。1ページあたり6kBという極小インデックスは、これまで莫大なストレージおよびメモリコストからVisual RAGの導入を躊躇していた企業にとって、強力な後押しとなります。
まずは数百〜数千ページ規模の社内ドキュメントを用い、非対称量子化に対応したベクトルDBと組み合わせて、自社データにおける検索精度とレイテンシの検証から着手することをお勧めします。