このプロジェクトについて
# 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チームによって開発されています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.