【要約】書籍のOCRにLLMを組み合わせることで精度を上げるだけでなく文書構造や図も表現した記録 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
著者が、縦書き和文の書籍120ページをデジタル化しようとした際、既存手法の限界に直面した。
- ・VLM単独では、高密度な縦書きページで生成ループが発生し、精度も89.82%に留まる。
- ・専用OCR単独では、精度は95.84%と高いが、見出しや段落、図表の構造が保持できない。
- ・これらにより、検索や引用に適した高品質なMarkdown形式での出力が困難であった。
- ・文字精度と文書構造の維持を両立させる手法が求められていた。
- ・特に、図表の構造化や、縦書き特有の誤認への対応が課題であった。
// Approach
著者は、専用OCRの出力をLLMの「文字判定ヒント」として与えるハイブリッド手法を採用した。
- ・NDL OCR Liteでまずテキストを抽出する。
- ・抽出テキストと画像をQwenに同時入力し、画像から構造を判断させる。
- ・図表はMermaid形式へ、イラストは説明文へ変換するプロンプトを適用した。
- ・5段階のパイプラインを構築し、並列処理とリトライ機能を実装した。
- ・GutenOCRの知見を応用し、VLMのスコア向上を図っている。
- ・asyncioを用いた並列リクエストにより、処理効率の最適化も図った。
- ・Python 3.13とOllamaを用い、ローカル環境での実行を実現した。
// Result
この手法により、文字精度と文書構造の高度な両立を実現した。
- ・文字精度は96.23%に達し、NDL単独時より誤字を大幅に削減した。
- ・見出し、表、Mermaid形式の図解など、豊富なMarkdown要素を生成した。
- ・図表をコード化することで、Obsidian等のツールでの再利用性を向上させた。
- ・処理時間は142分を要するが、構造化された知識ベース構築に有効である。
- ・100文字につき約1文字の誤りを減らすことに成功した。
- ・図解の自動生成により、技術書のデジタル化コストを大幅に下げた。
Senior Engineer Insight
> RAG用のデータ前処理として極めて実戦的な構成だ。
- ・専用OCRで「文字」を、VLMで「構造」を担わせる役割分担が合理的である。
- ・計算資源を投じて精度を稼ぐ設計は、バッチ処理用途として妥当だ。
- ・ただし、LLMの要約癖による内容脱落のリスクがある。
- ・NDL版をバックアップとして残す運用は、データの完全性を守る上で必須と言える。