Skip to content
← Blog

合成レイアウト、より良い縦書き日本語OCR:Synth-JDocの内部

Based on: Synth-JDoc: Synthesizing a Japanese Document Image Dataset for OCR with Diverse Layouts and Embedded Images — Keito Sasagawa, Shuhei Kurita, Daisuke Kawahara

縦書き日本語OCRの課題とSynth-JDocによる解決策

マルチカラムの日本政府公文書をLarge Vision Language Model (LVLM) に投入し、ページを文字起こしするように指示すると、非常に特有の形で失敗することがあります。Synth-JDoc論文の例では、あるモデルがセクション「A1」を読み込んだ後、次の縦カラムのテキストをスキップし、直接「Q2」にジャンプするという現象が報告されています。

日本語の文書では、横書き(yokogaki)と縦書き(tategaki)が混在することがあります。縦書きの日本語では、文字は上から下へ、行は右から左へと流れます。同論文では、縦書きの日本語がOCRのトレーニングデータにおいて依然として不足しており、現在のLVLMが横書きの日本語と比較して縦書きで著しく低いパフォーマンスを示すことが指摘されています。

このギャップを埋めるため、笹川圭人、久田秀平、川原大介はSynth-JDocを開発しました。彼らの論文「Synth-JDoc: Synthesizing a Japanese Document Image Dataset for OCR with Diverse Layouts and Embedded Images」では、HTML/CSSレンダリング、埋め込み図のテキストから画像への変換、および画像劣化を中核とした合成データパイプラインが記述されています。

最終的なデータセットには、17,970の厳選されたドキュメント画像が含まれています。実世界の縦書き日本語文書に対する評価において、Synth-JDocでファインチューニングされたモデルは、テストされた5つのモデルファミリーのうち4つで、両方の評価設定において最高のスコアを達成しました。プロジェクトのコードはGitHub(llm-jp/synth-jdoc)でオープンソース化されており、データセットはHugging Face(llm-jp/Synth-JDoc)でホストされています。

以下は、縦書き日本語OCRの問題、Synth-JDocが合成ページを構築する方法、およびその実験結果に関する技術的な解説です。


japanese newspaper print column

縦書き日本語がLVLMにとって難しい理由

文書文字起こしには、個々の文字を認識するだけでなく、ページの読み順に従う能力も必要です。

縦書きの日本語文書は特に以下の課題をもたらします:

  • 縦書きの方向性: 縦の列内の文字は上から下へ読み、列自体は右から左へ進みます。
  • 複数カラムのレイアウト: 論文では、複数カラムの読み順は最上位のカラムから最下位のカラムへと順次進むと説明されています。
  • 混在する書式: 日本語の文書では、同じページに縦書きと横書きが混在することがあります。

論文の動機付けとなる例は、元のQwen3-VLモデルが上から2番目のカラムを省略してしまった実際の文書ページです。ファインチューニングされたモデルはそのテキストをスキップしませんでした。著者らは、この種の文書読み取りを改善するには、縦書きテキスト、複数カラムのレイアウト、挿入画像を含む日本語OCRデータセットが必要であると主張しています。

実際の文書からそのようなデータセットを構築するのはコストがかかります。手動注釈は簡単にスケールせず、OCRシステムでトレーニングテキストを抽出すると認識エラーが生じる上、ソース文書画像の収集が必要です。既存の合成アプローチにも限界があります:SynthDoGは日本語の文書画像を生成できますが、レイアウトのリアリティが低く、JSSODaは1〜4カラムのレイアウトで縦書きと横書きのテキストをサポートしますが、白背景に黒文字で、挿入画像が含まれていません。


Synth-JDocアーキテクチャ:コード駆動型合成

Synth-JDocは、ドキュメント要素の準備、ドキュメント画像の合成、ノイズ適用という3段階のパイプラインを使用します。

+-------------------------------------------------------------------------+
| ステージ1: ドキュメント要素の準備                                       |
|   - テキストの取得: JSSODaコーパス (JUMAN辞書の名詞 -> llm-jp-3.1)       |
|   - 段落の分割とタイトルの生成                                          |
|   - 段落と画像プレースホルダーの線形割当問題によるマッチング              |
|   - 画像プロンプトの生成 (Qwen3-30B) -> Z-Image-Turbo                   |
|   - キャプションの生成 (Qwen3-VL-30B) 短文:長文 = 9:1                   |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
| ステージ2: HTML/CSSドキュメントのレンダリング                           |
|   - 8種類のレイアウト組み合わせ: 横書き/縦書き x 1, 2, 3, 4カラム        |
|   - 49種類の日本語Google Fonts                                          |
|   - タイトル存在確率25%;単一カラムまたは跨ぎ画像                        |
|   - ウェブブラウザによるレンダリング                                    |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
| ステージ3: ノイズパイプライン (17,970枚のキュレーション済み画像)         |
|   - 40% クリーンなプログラム生成レンダリング                            |
|   - 30% スキャン風のノイズ                                              |
|   - 30% Augraphyによる劣化                                              |
+-------------------------------------------------------------------------+

1. ドキュメント要素の準備

パイプラインはJSSODaのテキストから始まります。このデータセットのテキストは、JUMAN辞書から名詞を抽出し、llm-jp-3.1-13b-instruct4に各名詞に関連する文を生成させることで作成されました。Synth-JDocは、各テキストに対してタイトルを生成するために同じモデルを使用します。

次に、テキストは二重改行(\n\n)で段落に分割されます。図入りドキュメントを作成するために、パイプラインは画像プレースホルダーを挿入します:

  • ドキュメントあたりの画像数は、0から段落数の半分までランダムに選択されます。
  • プレースホルダーは段落の前後にランダムに挿入されます。
  • システムは、線形割当問題を通じてプレースホルダーと段落間の距離の二乗和を最小化することで、それらをペアリングします。

各ペアリングされたプレースホルダーに対して、Qwen3-30B-A3B-Instruct-2507は関連する段落に基づいて画像生成プロンプトを生成します。その後、Z-Image-Turboが画像を生成します。最後に、Qwen3-VL-30B-A3B-Instructが画像キャプションを生成します。簡潔なキャプションと長い複数文のキャプションは、9:1の比率で使用されます。

2. ブラウザベースのレイアウト合成

テキスト、タイトル、画像、キャプションが準備されると、Synth-JDocはHTML/CSSページを構築し、ウェブブラウザでそれらを画像としてレンダリングします。

  • レイアウトの組み合わせ: データセットは、横書きまたは縦書き、それぞれ1〜4カラムの8種類の組み合わせに均一に分布しています。
  • タイポグラフィの多様性: フォントは、Google Fontsで利用可能な49種類の日本語オプションからランダムに選択されます。
  • レイアウトのバリエーション: タイトルは25%の確率で表示されます。2カラム以上のレイアウトでは、画像は1つのカラム内に留まるか、すべてのカラムにまたがる場合があります。「Figure N:」や「Fig. N:」を含む図キャプションのスタイルもランダム化されます。

テキストが合成ドキュメントに直接レンダリングされるため、パイプラインは既存のドキュメント画像からラベルを抽出する際に生じるOCR認識エラーを回避できます。

3. ノイズとスキャナのシミュレーション

最終的なトレーニングセットは、クリーンな合成画像、スキャン風の画像、Augraphy処理済みの画像を組み合わせたものです。

  • クリーンレンダリング (40%): ノイズ適用前の合成ドキュメント。
  • スキャン風のノイズ (30%): ガウスノイズ、回転、透視変換、垂直および水平の影、ビネット効果、および偶発的な全体ぼかし。
  • Augraphy処理 (30%): 3段階のドキュメント劣化パイプライン:
    • インクフェーズ: InkBleed(インク滲み)とInkMottling(インクムラ)。
    • ペーパーフェーズ: 色とテクスチャパターンの追加。
    • ポストフェーズ: しみ、落書き、影、シミュレーションされた折り目などのさらなる劣化。

合成エラーや潜在的な著作権上の懸念がある画像を手動でフィルタリングした後、最終的なSynth-JDocトレーニングセットには17,970枚の画像が含まれています。


実験結果:VJRODa ベンチマーク

研究者たちは、100枚の実際の縦書き日本語ドキュメント画像と対応するテキストからなるデータセットであるVJRODaを用いてモデルを評価した。論文では、VJRODaは実際のPDFページから構築されたものであり、その限界セクションでは、これらのPDFが政府機関によって発行されたもので比較的クリーンであることが記載されている。

5つのオープンソースLVLM(大規模ビジョン言語モデル)が、すべてのモジュールパラメータを更新する形でフルファインチューニングされた:

  • Qwen2.5-VL-7B-Instruct
  • Qwen3-VL-8B-Instruct
  • InternVL3-8B-hf
  • InternVL3.5-VL-8B-hf
  • Gemma 3 12B IT

トレーニングにはバッチサイズ32、AdamWオプティマイザ、学習率2e-05を使用。プロンプトでは、各モデルに画像内のすべてのテキストを標準的な日本語の読み順で出力するよう指示した。論文では、ファインチューニング設定間でトレーニング構成とトレーニングデータ量を一定に保った。

評価指標と反復の罠

著者らは2つの指標を報告している:

  • 文字誤り率(CER $\downarrow$): モデルの出力と正解テキスト間の編集距離を、正解テキストの文字数で割って100を乗じた値。低いほど良い。
  • SacreBLEU(BLEU $\uparrow$): 文字レベルのトークン化後の文字レベルBLEU。高いほど良い。
  • テキスト前処理: スコア算出前にUnicode NFKC正規化と空白の削除を行う。

結果は以下の2つの出力設定で報告されている:

  • Raw Output(生出力): モデルが生成した出力のまま計算したスコア。
  • Remove Repetition(反復除去): 末尾の反復文字列を除去した後で計算したスコア。

2番目の設定は重要である。なぜなら、LVLMは同じ文字列を繰り返す可能性があるからである。論文では、反復生成の変化と核心的な文字認識性能の変化を分離するために、両方の設定を使用している。

性能の分解

Model Training Dataset Raw CER ($\downarrow$) Raw BLEU ($\uparrow$) Rep-Removed CER ($\downarrow$) Rep-Removed BLEU ($\uparrow$)
Qwen2.5-VL-7B Zero-Shot Base 154.0 20.1 88.5 22.0
+ JSSODa 65.1 51.5 40.5 61.1
+ Nano Banana Pro 161.0 20.9 135.0 24.4
+ Synth-JDoc (Ours) 34.5 66.8 32.0 69.5
Qwen3-VL-8B Zero-Shot Base 116.0 32.6 45.6 52.5
+ JSSODa 130.0 29.9 65.5 49.4
+ Nano Banana Pro 177.0 16.1 138.0 17.3
+ Synth-JDoc (Ours) 43.9 57.4 25.0 70.8
InternVL3-8B Zero-Shot Base 121.0 26.0 66.5 40.8
+ JSSODa 251.0 26.1 73.5 54.9
+ Nano Banana Pro 173.0 15.3 140.0 19.3
+ Synth-JDoc (Ours) 70.9 47.8 38.9 68.1
InternVL3.5-VL-8B Zero-Shot Base 121.0 29.2 56.1 41.0
+ JSSODa 57.9 62.3 37.2 71.9
+ Nano Banana Pro 173.0 15.6 117.0 18.8
+ Synth-JDoc (Ours) 36.8 66.7 25.9 78.3
Gemma 3 12B IT Zero-Shot Base 125.0 17.5 67.9 23.3
+ JSSODa 77.6 27.9 67.4 27.2
+ Nano Banana Pro 196.0 8.5 145.0 9.3
+ Synth-JDoc (Ours) 128.0 18.7 96.3 26.5

Qwen2.5-VL、Qwen3-VL、InternVL3、およびInternVL3.5において、Synth-JDocファインチューニング行は、Raw OutputおよびRemove Repetitionの両方で最良のCERおよびBLEUスコアを示した。

  • Qwen3-VL-8Bでは、反復除去後のCERが45.6から25.0に低下し、BLEUは52.5から70.8に上昇した。
  • InternVL3.5-8Bでは、反復除去後のCERが56.1から25.9に低下し、BLEUは78.3に上昇した。
  • JSSODaでのファインチューニングは一部のモデルを改善したが、すべての設定で改善されたわけではない。例えば、Qwen3-VLのRaw CERは116.0から130.0に上昇した。

実世界ケーススタディ

論文の定性評価の例では、国民年金特別便に関する文書が使用されている。

ベースモデルであるQwen3-VL-8Bは、最初のセクションで「A1」を出力した後、上から2列目のテキストをスキップし、3列目の「Q2」から続けた。そのCERは47.4であった。一方、Synth-JDocでファインチューニングされたモデルは、その列をスキップせず、CERは3.84となった。


2つの示唆に富む実験結果

本論文では、このアプローチの重要な限界についても2つのテストを行っています。

1. Nano Banana Pro ベースライン

研究者たちは、Nano Banana Progemini-3-pro-image-preview)を用いてベースラインデータセットを生成しました。プロンプトには、Synth-JDocで使用されたのと同じテキスト、タイトル、図のキャプション、書き順、および列数が指定されました。キャプションが存在する場合は、対応する図の生成もプロンプトに含めていました。

生成された画像は、木製の机やページの折り目などのディテールを含み、リアルな外観を持つことができました。しかし、論文ではドキュメント生成におけるいくつかの失敗が報告されています。

  • 文字の歪み: 生成された日本語の文字が変形している場合がありました。
  • テキストの不一致: 画像内のテキストがプロンプトと異なる場合がありました。
  • 縦書きレイアウトの失敗: モデルは、縦書きテキストを含む多段組ドキュメントを信頼性高く作成できませんでした。ある例では、縦書きの2段組レイアウトを要求するプロンプトに対し、2つの独立した縦書きページが生成されました。

Nano Banana Proのファインチューニング設定は、一般的に元のモデルと比較して結果を劣化させました。論文では1つの例外として、Qwen2.5-VLのBLEUスコアがわずかに向上したものの、CER(文字誤り率)が大幅に悪化したことが指摘されています。

2. Gemma 3 の解像度制約

Synth-JDocはGemma 3の性能向上には寄与しませんでした。著者たちは、この結果をGemma 3が入力画像を処理する方法に起因すると説明しています。

Qwen2.5-VLとQwen3-VLはネイティブダイナミック解像度(Native Dynamic Resolution)を採用しており、InternVL3とInternVL3.5はダイナミックタイル戦略(Dynamic Tiling Strategy)を採用しています。これらのアプローチは、異なるアスペクト比や解像度の画像を処理することができます。一方、論文によると、Gemma 3は入力画像を固定の1:1解像度にリサイズします。

Synth-JDocには、様々な解像度のドキュメント画像が含まれています。したがって、著者たちは、Gemma 3の固定リサイズ処理が、データセットから効果的に学習することを妨げたという仮説を立てています。これは、OCRの性能がデータセットの設計とモデルアーキテクチャの両方に依存することを示す証拠として提示されています。


scanned paper document archive

画像とキャプションのアブレーション研究

著者らは、埋め込まれた画像とそのキャプションの影響も検証した。ノイズを適用する前に、画像、キャプション、またはその両方を背景色でマスクし、それらのバリエーションを用いて Qwen3-VL-8B と InternVL3.5-VL-8B を学習させた。

アブレーション設定 (Qwen3-VL-8B) 生 CER ($\downarrow$) 生 BLEU ($\uparrow$) 反復除去 CER ($\downarrow$) 反復除去 BLEU ($\uparrow$)
完全な Synth-JDoc 43.9 57.4 25.0 70.8
画像をマスク (w/o image) 60.5 48.1 36.8 67.4
キャプションをマスク (w/o caption) 120.0 30.2 51.2 54.5
両方をマスク (w/o image + caption) 55.7 48.9 39.3 64.8
アブレーション設定 (InternVL3.5-8B) 生 CER ($\downarrow$) 生 BLEU ($\uparrow$) 反復除去 CER ($\downarrow$) 反復除去 BLEU ($\uparrow$)
完全な Synth-JDoc 36.8 66.7 25.9 78.3
画像をマスク (w/o image) 45.5 58.8 38.6 65.2
キャプションをマスク (w/o caption) 54.3 57.9 39.9 72.7
両方をマスク (w/o image + caption) 59.3 57.6 47.1 66.4

画像とキャプションの両方を除去すると、Qwen3-VL の反復除去 CER は 25.0 から 39.3 に上昇した。InternVL3.5 では 25.9 から 47.1 に上昇した。

両モデルとも、完全な Synth-JDoc データセットが、画像またはキャプションをマスクしたバリエーションを上回った。著者らは、この結果を、両方の要素を含む合成ページが、より視覚的に多様で現実的な文書を表しているためだと説明している。

限界と今後の課題

本論文では、いくつかの未解決の制約が指摘されている:

  • レイアウトの多様性: Synth-JDoc は1〜4カラムの横書きおよび縦書きレイアウトをカバーしているが、新聞などの実際の文書ではより複雑な読み順が存在する可能性がある。
  • 構造化要素: 著者らは、グラフや表を合成パイプラインの今後の対象として特定している。
  • デコーダの反復: グリーディデコーディングでは、一部のケースで依然として反復的な出力が生成された。著者らは、デコーディングのハイパーパラメータがこのような振る舞いを抑制する可能性があると示唆している。
  • テストセットの多様性: VJRODa は比較的クリーンな政府のPDF画像で構成されているため、パイプラインのノイズ増強の価値を完全に測定することはできない。
  • NSFWフィルタリング: 構築パイプラインには NSFW コンテンツのフィルタリングが含まれていない。著者らは、テキスト準備、プロンプト生成、画像生成、または画像キャプション生成の段階でこれを導入できると指摘しており、各段階でテキストと画像の両方をフィルタリングすべきだと述べている。

ドキュメントAIチームにとっての重要性

日本語ドキュメントOCRに取り組むチームにとって、本論文は実証に基づくいくつかの教訓を提供しています。

1. プログラムによるレイアウト制御が意図されたテキストを保持する

Synth-JDocは、準備されたテキストをHTMLとCSSを介して直接レンダリングします。これにより、OCR由来のラベル誤りを回避でき、著者は書き込み方向、カラム、タイトル、フォント、図の配置、キャプションのスタイルなどを明示的に制御できます。

Nano Banana Proとの比較は、すべてのテキスト生成画像方法がOCRデータ生成に適さないことを示すものではありません。この実験では、高性能なテキスト生成画像ベースラインが、正確な文字と縦書きの多カラムレイアウトで苦労したことが示されています。

2. 画像とキャプションがトレーニング結果を変えた

アブレーション研究では、埋め込み画像やキャプションをマスクすると、Qwen3-VL-8BとInternVL3.5-VL-8Bの両方でパフォーマンスが低下することがわかりました。このデータセットでは、これらの要素は対応するマスクされた変種と比較して結果を改善しました。

3. データセット設計とモデルアーキテクチャが相互作用する

本論文のGemma 3の結果は有用な注意喚起です。著者は、固定の1:1画像リサイズが、そのモデルがSynth-JDocの多様なドキュメント解像度から利益を得ることを難しくしたと仮定しています。一方、Native Dynamic ResolutionまたはDynamic Tilingを備えたモデルは大幅に改善しました。

コードとデータを公開することで、Sasagawa、Kurita、Kawaharaは、縦書きの日本語ドキュメント画像でのOCRのトレーニングと研究のための公開リソースを提供しています。これは、漢字と縦書きレイアウトをカバーしない英語中心のモデルでは、日本語読者にとって重要な情報が欠落することを意味します。