このプロジェクトについて

# olmOCR **olmOCR** は、PDFやその他の画像ベースの文書形式(PNG、JPEG)を、クリーンで読みやすいプレーンテキストまたはMarkdownに変換するツールキットです。複雑なレイアウトでも文書を自然な読書順序に線形化し、大規模なLLMトレーニングデータセットを構築するために設計されています。このプロジェクトは、Allen Institute for Artificial Intelligence (AI2) のAllenNLPチームによって開発されています。 ## 主な特徴 - **PDF/画像からMarkdownへ**: PDF、PNG、JPEG文書をクリーンなMarkdown形式に変換します。 - **自然な読書順序**: 複数列や複雑な文書でも、論理的な読み順を保持します。 - **コスト効率**: 100万ページあたり200米ドル未満(7BパラメータのVLMに基づく。GPUが必要)。 - **ベンチマークスイート**: 1,400文書にわたる7,000件以上のテストケースを含むolmOCR-Benchを同梱し、OCR性能を測定します。 - **柔軟な推論**: GPUによるローカル実行、外部vLLMサーバーへの接続、クラウドプロバイダー(Cirrascale、DeepInfra、Parasailなど)の利用が可能です。 - **並列処理**: 数百万のPDFを処理するマルチノード・マルチワーカー処理に対応しています。 - **Dockerサポート**: モデル込み(約30GB)とモデルなしの両方のプリビルドイメージを提供します。 - **フィルタリング**: 英語PDF向けの基本フィルタリング(フォーム除外、SEOスパム除外)。 ## インストール pipでインストールします。GPUサポート(ローカル推論に推奨)の場合: ``` pip install olmocr[gpu] --extra-index-url https://download.pytorch.org/whl/cu128 ``` 外部サーバー利用の場合(GPU依存なし): ``` pip install olmocr ``` オプションの追加機能: `beaker`(AI2 Beaker連携)、`bench`(ベンチマークスイート)。 ## クイックスタート ### PDFをMarkdownに変換 ``` # サンプルPDFをダウンロード wget https://arxiv.org/pdf/2502.18443 # Markdownに変換 olmocr ./localworkspace --markdown --pdfs olmocr-sample.pdf ``` ### 画像ファイルを変換 ``` olmocr ./localworkspace --markdown --pdfs random_page.png ``` ### リモート推論サーバーを使用 ``` olmocr ./localworkspace --server http://remote-server:8000/v1 --model allenai/olmOCR-2-7B-1025-FP8 --markdown --pdfs *.pdf ``` 結果は `./localworkspace/markdown/` にMarkdownファイルとして保存されます。`olmocr` コマンドの代わりに `python -m olmocr.pipeline` も使用できます。 ## コマンドラインオプション 主な引数は以下のとおりです。 - `--pdfs`: PDFへのパス(ローカル、S3、またはグロブパターン)。 - `--model`: モデル識別子(デフォルト: `allenai/olmOCR-7B-0725-FP8`)。 - `--server`: 外部vLLMまたはOpenAI互換サーバーのURL。 - `--api_key`: 外部プロバイダー用のAPIキー。 - `--workers`: 並列ワーカー数。 - `--markdown`: 出力をMarkdownとして書き出します。 - `--apply_filter`: 英語PDFに基本フィルタリングを適用します。 - `--beaker`: AI2 Beakerにジョブを送信します。 - `--guided_decoding`: 構造化YAML出力のためのガイド付きデコードを有効にします。 - `--max_concurrent_requests`: 推論プロバイダーへの最大同時リクエスト数。 ## 外部プロバイダー olmOCRは複数のプロバイダーでテストされており、100万トークンあたりのコストは以下のとおりです。 | プロバイダー | 入力 $/1M | 出力 $/1M | コマンド例 | |----------|-----------|-------------|-----------------| | Cirrascale | $0.07 | $0.15 | `olmocr ./workspace --server https://ai2endpoints.cirrascale.ai/api --api_key sk-XXXX --model olmOCR-2-7B-1025 --pdfs *.pdf` | | DeepInfra | $0.09 | $0.19 | `olmocr ./workspace --server https://api.deepinfra.com/v1/openai --api_key DfXXXX --model allenai/olmOCR-2-7B-1025 --pdfs *.pdf` | | Parasail | $0.10 | $0.20 | `olmocr ./workspace --server https://api.parasail.io/v1 --api_key psk-XXXX --model allenai/olmOCR-2-7B-1025 --pdfs *.pdf` | ## Dockerの使用法 モデル込みのイメージをプルします(約30GB): ``` docker pull alleninstituteforai/olmocr:latest-with-model ``` 単一PDFの変換を実行: ``` docker run --gpus all alleninstituteforai/olmocr:latest-with-model -c "olmocr /workspace/output --markdown --pdfs /workspace/sample.pdf" ``` バッチ処理の場合: ``` docker run --gpus all -v /input:/input -v /output:/output alleninstituteforai/olmocr:latest-with-model -c "olmocr /output --markdown --pdfs /input/*.pdf" ``` ## コード概要 再利用可能なコンポーネントは以下のとおりです。 - **プロンプト戦略**: 自然なテキスト解析のため(buildsilver.py) - **フィルタリング**: 言語とSEOスパム除去(filter.py) - **SFTファインチューニング**: Qwen2.5-VL用コード(train.py) - **合成データ生成**: (mine_html_templates.py) - **パイプライン**: VLLMで数百万のPDFを処理(pipeline.py) ## 最近の更新 - **v0.4.0(2025年10月21日)**: 新モデルリリース(olmOCR-2-7B-1025-FP8)、olmOCR-benchで+4ポイント、RLトレーニングを導入。 - **v0.3.0(2025年8月13日)**: 新モデルリリース(olmOCR-7B-0825-FP8)、自動回転と空白文書の幻覚を修正。 - **v0.2.1(2025年7月24日)**: 新モデルリリース(olmOCR-7B-0725-FP8)、olmOCR-Benchで+3ポイント、推論が高速化。 - **v0.2.0(2025年7月23日)**: カスタムトレーニングを容易にするためトレーナーコードを整理。 - **v0.1.75(2025年6月17日)**: sglangからvllm推論に切り替え、DockerをCUDA 12.8に更新。 - **v0.1.68(2025年5月19日)**: olmOCR-Bench公開(77.4スコア)、パイプラインのバグ修正。 ## ライセンス Apache 2.0。詳細はLICENSEファイルを参照してください。 ## チーム 非営利研究機関であるAI2のAllenNLPチームによって開発されています。