合成データを用いて高速な多言語OCRモデルを構築する
合成データ生成は、これらのトレードオフから抜け出す方法を提供します。プログラム的にテキストを画像へレンダリングすることで、Webスクレイピングのスケールと手作業注釈のラベル純度の両方を得られます。私たちがそこに配置したからこそ、すべてのバウンディングボックス、転写、読取順の関係が正確に分かっており、学習セットにどのレイアウト、フォントスタイル、エッジケースが含まれるかを完全に制御できます。課題は「現実味」です。多様なレイアウトや現実的な文書シナリオをシミュレートするのは難しいのですが、適切なレンダリングエンジンと、フォント、色、背景、拡張(augmentation)、レイアウト構造にわたる強力なランダム化を用いることで、合成データで学習したモデルが実世界の文書にうまく汎化できるだけの不変性を構築することは可能です。
このアプローチを用いて、Nemotron OCR v2 を構築しました。これは、正確で高速な多言語OCRモデルです。精度はデータによって実現されています。6つの言語に対して1,200万枚の合成学習画像を用いたことで、非英語言語におけるNEDスコアが 0.56–0.92 から 0.035–0.069 へと低下しました。速度はアーキテクチャによって実現されています。認識器とリレーショナルモデルの両方で特徴を再利用する共通の検出バックボーンを採用することで、冗長な計算を排除し、単一のA100 GPUで34.7ページ/秒を可能にしました。合成データのパイプラインは汎用的であり、フォントと元テキストが存在する任意の言語へ拡張できます。
データセットは nvidia/OCR-Synthetic-Multilingual-v1 で公開されており、モデルは nvidia/nemotron-ocr-v2 で利用できます。ブラウザ上で直接モデルを試すには、Nemotron OCR v2 デモ をご利用ください。
問題:アーキテクチャではなくデータ
Nemotron OCR v1は強力な英語OCRモデルでしたが、多言語用途のために学習されていなかったため、別の言語にさらされるとドキュメントを正確に読み取れませんでした。私たちのSynthDoGベンチマークでは、v1のNED(Normalized Edit Distance)スコアは日本語・韓国語・ロシア語・中国語で0.56〜0.92でした。これらの誤り率では、モデルの出力は正解データとほとんど似ていません。
| 言語 | Nemotron OCR v1 NED |
|---|---|
| 日本語 | 0.723 |
| 韓国語 | 0.923 |
| ロシア語 | 0.564 |
| 中国語(簡体) | 0.784 |
| 中国語(繁体) | 0.700 |
問題の一部は文字セットでした。v1モデルが対応していたのはわずか855文字であり、CJK(中国語・日本語・韓国語)やキリル文字の表記体系を単に網羅できていませんでした。そこで、対象言語すべてをカバーするために文字セットを14,244文字へ拡張する実験を行いました。これはわずかに改善しましたが、それらの文字を実際に含む十分な学習データがなければ、その改善はわずかなものでした。モデルは理論上は正しい文字を出力できる可能性がありましたが、そもそもそれらがどのように見えるのかを学習したことがありませんでした。ボトルネックはアーキテクチャではなくデータでした。
6言語にわたって、単語・行・段落レベルの境界ボックスに加えて読み順グラフまで付けた、現実世界の画像を何百万枚も収集・アノテーションするのは、費用があまりにも大きくなってしまいます。そこで、別のアプローチが必要でした。
汎用的な合成データ・パイプライン
私たちの重要な洞察は、多言語OCR学習データのレシピが本質的に言語非依存であるということです。必要なものは次の2つです:
- 対象言語のソーステキスト(現実的な分布から取得する)
- その言語の文字体系を描画できるフォント
これらがあれば、合成レンダラーは、あらゆる粒度でピクセル単位の正解(グラウンドトゥルース)を、無料で、無限に生成できる注釈付きの学習画像を作成できます。
テキスト:mOSCAR
ソーステキストにはmOSCARを使用します。これは、ラテン文字、CJK、キリル文字、アラビア文字、デーヴァナーガリー文字、タイ文字など、数十種類の文字体系にわたって163の言語サブセットをカバーする大規模な多言語Webコーパスです。mOSCARからサンプリングすることで、各言語について語彙、文の長さ、文字頻度の現実的な分布に従うテキストを得られます。これは、辞書の単語リストや機械生成テキストよりもはるかに代表的です。
レンダリング: Modified SynthDoG
私たちは、DonutプロジェクトのSynthDoG(Synthetic Document Generator)を大幅に改造したものをベースにパイプラインを構築しました。元のSynthDoGは、ページ単位のテキストラベルを持つ、ドキュメントらしい画像を生成します。私たちは重要な点でいくつか拡張しました。
マルチレベルのバウンディングボックス。標準のSynthDoGはページ単位のテキストしか提供しません。私たちのパイプラインでは、3つのレベル(単語・行・段落)に対して同時にピクセル精度の注釈を生成します。それぞれのレベルは、軸に平行なバウンディングボックスと4点クアッドの両方を含み、インデックスによって単語をその親となる行および段落にリンクします。
読み順のためのリレーショングラフ。公開されているほとんどのOCRデータセットには読み順の注釈が含まれていません。これにより、単にテキストを検出するだけでなく、ドキュメント構造を理解できるモデルを学習しにくくなっています。私たちは、階層(単語・行・段落)の注釈と構造的な関係を先駆けて示したHierTextデータセットから着想を得ました。私たちの合成パイプラインは、各サンプルに対してリレーショングラフを生成し、各行を構成する単語、各段落を構成する行、そしてそれらをどの順序で読み取るべきかを符号化します。これは、単純な「上から下へ、左から右へ」のマージでは崩れた出力になり得る、Nemotron OCR v2のリレーショナルモデル構成要素を支えています。具体的には、複数カラム、テーブル、その他の構造が対象です。
多様なレイアウトモード。私たちは、現実のドキュメントに見られる幅広い状況をカバーする一連のレイアウトテンプレートを作成しました。具体的には、流れるような複数カラムのテキスト、散らばったシーンテキストのような単語、縦書きのテキストカラム(日本語や中国語にとって重要)、ヘッダと罫線を持つテーブル、ドットリーダ付きの目次ページ、PowerPointスタイルのスライド、見出しと本文テキストを備えたWordドキュメントスタイルのページです。各生成実行ではレイアウトモードをランダムに選択するため、学習中にモデルは多種多様な構造を目にします。
CJK向けの行レベル認識。多言語版における重要な設計判断は、単語レベルから行レベルのテキスト認識へ移行したことです。中国語や日本語のような言語では単語間にスペースが使われないため、分割のための自然な単語境界が存在しません。韓国語はスペースを一貫して使いません。認識を行レベルで行うことで、別途単語分割の手順を必要とせず、これらの言語を自然に扱えるようになります。英語版は、その必要がある場合は引き続き単語レベルの認識を使います。
オープンソースのフォントプール。私たちは、Google FontsやNotoファミリーを含むオープンソースのコレクションから、言語ごとに165〜1,258種類のユニークなフォントを集めました。これにより、セリフ体・サンセリフ体、手書き、装飾的、可変ウェイトのスタイルをカバーしています。
拡張(Augmentations)。生成した各ページは、汎化性能を高めるために一連のランダム化された拡張を通します。テキストレベルでは、罫線/アウトライン効果、ドロップシャドウ、押し出し、グリフのエッジへのスプリンクルノイズなどを含みます。カスタム効果では、ランダムフィールドを用いてテキスト全体のストローク不透明度やストローク幅のばらつきを調整します。画像レベルでは、形態学的操作(膨張、収縮)、メディアンブラー、弾性歪みを適用しますが、小さなテキストを破壊しないために最小テキスト高さによってゲートします。ページ全体レベルでは、コントラストと明るさのジッタ、ガウスブラーとモーションブラー、色のシフト、シャドウオーバーレイ、加法的ガウスノイズを適用します。背景は画像テクスチャまたは単色で、さらに、各単語または行の背後に任意で半透明の色付き矩形を配置できます。
データがどのように見えるか
以下に、6つのすべての言語にわたる生の合成画像のサンプルを示します。各画像は、ランダムなレイアウトモード、フォント選択、背景、拡張スタックを用いて生成されます:
下では、階層構造を示す注釈付きの例を紹介します。破線の輪郭は段落境界を示し、陰影のある領域は行レベルのまとまり(段落ごとに色分け)を示します。そして、矢印は各段落内の行同士の読み順をたどったものです。
以下に、パイプラインが生成するレイアウト、文字体系、拡張スタイルの範囲を示す、言語をまたいださらに多くの注釈付き例を示します。それぞれのサブタイトルは、その例が何を強調しているかを説明しています:
概要(データセット)
完全なデータセットには、6つの言語にまたがって1,220万サンプルが含まれています:
| 言語 | 総サンプル数 | 学習 | テスト | 検証 |
|---|---|---|---|---|
| 英語 | 1,825,089 | 1,460,304 | 183,629 | 181,156 |
| 日本語 | 1,889,137 | 1,502,712 | 193,779 | 192,646 |
| 韓国語 | 2,269,540 | 1,814,994 | 227,091 | 227,455 |
| ロシア語 | 1,724,733 | 1,380,404 | 171,678 | 172,651 |
| 中国語(簡体字) | 2,335,343 | 1,914,948 | 210,143 | 210,252 |
| 中国語(繁体字) | 2,214,304 | 1,772,280 | 221,867 | 220,157 |
| 合計 | 12,258,146 | 9,845,642 | 1,208,187 | 1,204,317 |
ダウンロード:nvidia/OCR-Synthetic-Multilingual-v1
拡張性
ここで説明したパイプラインは、意図的に汎用的に設計されています。このリリースでは6つの言語を選びましたが、新しい言語の追加には、その文字体系をカバーするソーステキストとフォントを用意するだけで済みます。モデルのアーキテクチャを変更したり、手作業による注釈を追加したりする必要はありません。レンダリング・パイプラインは、単一のマシンで1日に何百万枚もの注釈付きページを生成できるため、新しい言語向けの大規模な学習データセットを迅速に作成することが現実的になります。mOSCARが163の言語サブセットをカバーし、さらにNotoフォントファミリーが現在使用されている事実上すべてのUnicode文字体系をサポートしていることを考えると、このアプローチを広くスケールさせる明確な道筋があります。
モデル:Nemotron OCR v2
Nemotron OCR v2 は、この合成データで訓練され、さらに約680K枚の実環境画像を加えて学習した、商用利用可能な実運用向けOCRモデルです。3つのコンポーネントからなるエンドツーエンドのアーキテクチャを使用します:
- テキスト検出器(RegNetX-8GFバックボーン):画像内でテキスト領域を特定します
- テキスト認識器(pre-norm Transformer):検出された領域を転記します
- リレーショナルモデル:論理的なまとまり、読み順、レイアウトの関係性を予測します
2つのバリアントが用意されています:
| v2_english | v2_multilingual | |
|---|---|---|
| 言語 | 英語 | EN, ZH, JA, KO, RU |
| 領域レベル | 単語 | 行 |
| 認識器の層 | 3 | 6 |
| 文字セット | 855 | 14,244 |
| パラメータ | 54M | 84M |
他のOCRパイプラインとの重要な違い:Nemotron OCR v2 の多言語版は、5つの言語すべてを同時に扱う単一の統合モデルです。事前に文書の言語を知ったり、言語別のバリアントを選択したりする必要はありません。これに対して、PP-OCR v5(PaddleOCR)やOpenOCRのようなパイプラインツールは、対象言語に対して高い性能を発揮する言語別の専用モデルを提供しますが、その場合は、最初に言語を検出するか、全体として能力が低いベースバリアントへフォールバックする必要があります。
モデルが高速な理由
このアーキテクチャは、FOTS(Fast Oriented Text Spotting)設計に基づいています。共有された畳み込みバックボーンを持つ単一のネットワークとして、検出と認識を統合します。検出バックボーン(RegNetX-8GF)は入力画像を1度だけ処理し、3つのコンポーネントすべてで再利用される特徴マップを生成します。テキスト認識器は検出された領域から補正済みの特徴クロップを受け取り、小型Transformerでそれらをデコードします。関係モデルは、同じ特徴マップから得られた領域ごとの埋め込みに対して、コンパクトなTransformerエンコーダを用いて推論します。高コストな畳み込みの処理は1度しか行われないため、後段のコンポーネントが追加するオーバーヘッドは最小限です。この特徴再利用こそが、モデルの効率性を支えており、単一のA100 GPUで34.7ページ/秒を可能にしています。
結果:合成データがもたらすもの
多言語ベンチマーク(SynthDoG)
SynthDoGで生成したページにおける正規化編集距離(Normalized Edit Distance)。値が低いほど良い。私たちの合成データで学習したv2多言語モデルは、あらゆる対象言語において、NEDスコアを使用不能な水準からほぼゼロまで引き下げます:
| 言語 | PaddleOCR(base) | PaddleOCR(specialized) | OpenOCR(server) | Nemotron OCR v1 | Nemotron OCR v2(multi) |
|---|---|---|---|---|---|
| English | 0.117 | 0.096 | 0.105 | 0.078 | 0.069 |
| Japanese | 0.201 | 0.201 | 0.586 | 0.723 | 0.046 |
| Korean | 0.943 | 0.133 | 0.837 | 0.923 | 0.047 |
| Russian | 0.959 | 0.163 | 0.950 | 0.564 | 0.043 |
| Chinese (Simplified) | 0.054 | 0.054 | 0.061 | 0.784 | 0.035 |
| Chinese (Traditional) | 0.094 | 0.094 | 0.127 | 0.700 | 0.065 |
なお、「PaddleOCR(specialized)」列は言語固有のモデル(例:韓国語用の韓国モデルが韓国語に用いられる)を使っており、言語をすでに知っている場合の最良シナリオです。Nemotron OCR v2 の多言語は、この合成データにおいて、既にこれらの専用バリアントを上回る結果を、単一モデルで実現しています。
実世界ベンチマーク(OmniDocBench)
OmniDocBenchでは、英語、中国語、そして混在言語コンテンツを含む実世界のドキュメントOCRベンチマークで、Nemotron OCR v2 の多言語は 34.7 pages/second の競争力のある精度を達成しており、PaddleOCR v5 より28倍以上高速です:
| Model | pages/s | EN | ZH | Mixed |
|---|---|---|---|---|
| PaddleOCR v5 (server) | 1.2 | 0.027 | 0.037 | 0.041 |
| OpenOCR (server) | 1.5 | 0.024 | 0.033 | 0.049 |
| Nemotron OCR v2 (multi) | 34.7 | 0.048 | 0.072 | 0.142 |
| Nemotron OCR v2 (EN) | 40.7 | 0.038 | 0.830 | 0.437 |
| EasyOCR | 0.4 | 0.095 | 0.117 | 0.326 |
| Nemotron OCR v1 | 39.3 | 0.038 | 0.876 | 0.436 |
NEDスコア(小さいほど良い)。速度は、v2のバッチ処理パイプラインで、単一のA100 GPUにより測定しました。比較対象の全モデルは、追加オプションを無効にしたうえで、デフォルトの検出器 + 認識器パイプラインを用いてベンチマークしました。
バリアント間の速度差に関する補足:v1およびv2の英語は、認識器が多言語版の方が大きいため(14,244トークンの語彙に対してTransformer層6層 vs 855トークンの3層)、v2多言語より高速です。認識器は検出された各テキスト領域を処理するため、より重い認識器は、テキスト密度の高いページでスループットに直接影響します。v2英語モデルは、バックボーンがRegNetYからRegNetXに置き換えられたため、v1よりわずかに高速です。
リンク
- Model: nvidia/nemotron-ocr-v2
- Demo: nvidia/nemotron-ocr-v2 のスペース
- Dataset: nvidia/OCR-Synthetic-Multilingual-v1
- License: NVIDIA Open Model License(モデル)、 CC-BY-4.0(データセット) 返却形式: {"translated": "翻訳されたHTML"}
謝辞
この取り組みに対してコード、戦略、追加の検証を提供してくださった Bo Liu、Théo Viel、Mike Ranzinger に感謝します。







