5 ポイント 投稿者 GN⁺ 2024-08-10 | 1件のコメント | WhatsAppで共有
  • 光学文字認識(OCR)出力の品質を大幅に向上させるために設計
  • 最新の自然言語処理技術と大規模言語モデル(LLM)を活用し、生のOCRテキストを非常に高精度で整形された読みやすい文書へ変換

機能

  • PDFを画像に変換
  • Tesseractを使用したOCR
  • LLM(ローカルまたはAPIベース)を使用した高度なエラー修正
  • 効率的な処理のためのスマートなテキスト分割
  • Markdown形式オプション
  • ヘッダーとページ番号の抑制(任意)
  • 最終出力の品質評価
  • ローカルLLMおよびクラウドベースのAPIプロバイダー(OpenAI、Anthropic)をサポート
  • パフォーマンス向上のための非同期処理
  • プロセス追跡とデバッグのための詳細なロギング
  • ローカルLLM推論のためのGPUアクセラレーション

要件

  • Python 3.12+
  • Tesseract OCRエンジン
  • PDF2Imageライブラリ
  • PyTesseract
  • OpenAI API(任意)
  • Anthropic API(任意)
  • ローカルLLMサポート(任意、互換性のあるGGUFモデルが必要)

使い方

  1. プロジェクトディレクトリにPDFファイルを配置
  2. main() 関数の input_pdf_file_path 変数をPDFファイル名に更新
  3. スクリプトを実行:
    python llm_aided_ocr.py  
    
  4. スクリプトは最終的な後処理済みテキストを含む複数の出力ファイルを生成

動作の仕組み

LLM-Aided OCRプロジェクトは、生のOCR出力を高品質で読みやすいテキストへ変換するために多段階プロセスを使用:

  1. PDF変換: pdf2image を使用して入力PDFを画像に変換
  2. OCR: Tesseract OCRを適用して画像からテキストを抽出
  3. テキスト分割: 生のOCR出力を扱いやすいチャンクに分割
  4. エラー修正: 各チャンクをLLMベースの処理でOCRエラーを修正し、可読性を向上
  5. Markdown整形(任意): 修正済みテキストをクリーンで一貫性のあるMarkdownに再整形
  6. 品質評価: LLMベースの評価により、最終出力品質を元のOCRテキストと比較

GN⁺の要約

  • LLM-Aided OCRプロジェクトは、最新の自然言語処理技術と大規模言語モデルを活用してOCR出力の品質を大幅に向上させるシステム
  • PDFを画像に変換し、Tesseractでテキストを抽出した後、LLMでエラーを修正し、Markdown形式に再構成
  • ローカルおよびクラウドベースのLLMの両方をサポートし、非同期処理によって性能を最適化
  • このプロジェクトは、OCR出力の精度と可読性を高める多様な高度機能を提供し、特に大規模文書の処理に有用
  • 類似の機能を提供するプロジェクトとして、ABBYY FineReader、Adobe Acrobat OCRなどがある

1件のコメント

 
GN⁺ 2024-08-10
Hacker Newsの意見
  • 新しい schnell モデルの登場により、SOTA のビジョンモデルを生み出せるデータセットを確保できる可能性がある

    • 現在、ほとんどのビジョンモデルは古い CLIP/BLIP キャプションに基づいている
    • LLAVA や phi-llava のようなモデルも、依然として事前学習済みのビジョンコンポーネントによって制約を受けている
    • Tessy と LLM のパイプラインは効果的であり、多言語モデルがデジタル化された作業物を読み取り翻訳できる可能性を開く
    • LLAVA-PHI3 はヘブライ語を一貫して転写できるが、ハルシネーションの問題がある
    • 新しい SOTA ビジョンモデルが出れば、品質は大幅に向上すると期待される
  • 科学論文では Meta の nougat モデルが最も適している

    • 請求書や記録では donut モデルの方が優れている
    • どちらのモデルも一部のケースでは失敗する可能性があり、問題解決のために LLM を使う必要がある
    • OCR の過程で細部が失われるため、表やグラフを正確に処理するのは難しい
    • Google Gemini は画像に対するファインチューニング機能を提供しているが、試したことはない
    • few-shot プロンプトは、LLM のハルシネーションを防ぎ、要求された形式に合わせるのに役立つ
  • 過去に試した結果、90% のケースではうまく動作した

    • 賃貸契約書のような文書では、数字や名前(人名や地名、住所)に難しさがある
    • LLM は正確な家賃や特定の人物名を知ることはできない
  • PDF ページを PNG に変換し、gpt4 に画像の転写を依頼すると非常に正確だった

    • Tesseract や古典的な OCR よりも正確だった
  • 10 年前に Tesseract を使って中国語の OCR を試したことがある

    • 英語のテキストは認識後に整理しやすい
    • 中国語は 1 文字でも誤認識されると、エラーの検出が難しい
    • ImageMagick を使って画像を変形し、Tesseract に送って、認識された文の統計的頻度に基づいて勝者を投票で選んだ
    • 精度が大きく向上した
  • PaddlePaddle を使ってより良い結果を得た

    • PPOCRv3 を使って、書籍を単語レベルで切り分ける Python 実装を書いた
    • PPOCRv4 にはピクセルサイズ制限がないため、「そのまま使える」
    • PPOCRv3 の検出モデルの方がうまく動作した
  • 他の OCR パッケージを使ってみたかと質問している

    • Tesseract が "77" を "7" と読んでしまう問題を経験した
  • プロンプトを調整して、モデルがより明確に理解できるようにすることが重要だ

    • LLM と文書について多くのことを考えている
    • OCR はまもなく完全に解決される問題だと考えている
    • 複雑な文書の曖昧さや細部を AI モデルに効果的に説明することが課題だ
  • rubrics と学生の提出物をパースする類似の作業をしている

    • GPT-4V との統合に関心がある
    • メールでの連絡を望んでいる
  • OCR エラーを修正するために "fix this text" プロンプトを使うアプローチについて質問している

    • チャットモデルの代わりに補完モデルを使い、トークンごとに入力して次のトークン確率を得る方法を提案している
    • この方法でハルシネーションを大幅に減らせるのではないかと考えている