# DeepSeek-OCR: 実行とファインチューニングの方法

**DeepSeek-OCR** はOCRと文書理解のための30億パラメータのビジョンモデルです。これは *コンテキスト光学圧縮* を使用して2Dレイアウトをビジョントークンに変換し、効率的な長文コンテキスト処理を可能にします。

表、論文、手書きに対応可能なDeepSeek-OCRは、テキストトークンより10倍少ないビジョントークンを使用しながら97%の精度を達成し、テキストベースのLLMより10倍効率的です。

DeepSeek-OCRは視覚や言語の性能を向上させるためにファインチューニングできます。我々のUnslothでは [**無料のファインチューニングノートブック**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\).ipynb)、我々は [88.26%の改善](#fine-tuning-deepseek-ocr) を言語理解で実証しました。

<a href="#running-deepseek-ocr" class="button primary">DeepSeek-OCRの実行</a><a href="#fine-tuning-deepseek-ocr" class="button primary">DeepSeek-OCRのファインチューニング</a>

> **ファインチューニングとより多くの推論サポートを可能にするモデルアップロード：** [**DeepSeek-OCR**](https://huggingface.co/unsloth/DeepSeek-OCR)

## 🖥️ **DeepSeek-OCRの実行**

モデルを [vLLM](#vllm-run-deepseek-ocr-tutorial) または [Unsloth](#unsloth-run-deepseek-ocr-tutorial)で実行するには、推奨設定は次の通りです：

### :gear: 推奨設定

DeepSeekが推奨する設定：

* <mark style="background-color:blue;">**Temperature = 0.0**</mark>
* `max_tokens = 8192`
* `ngram_size = 30`
* `window_size = 90`

### 📖 vLLM: DeepSeek-OCRチュートリアルの実行

1. 最新の `vLLM` 経由：

```bash
uv venv
source .venv/bin/activate
# v0.11.1リリースまで、nightlyビルドからvLLMをインストールする必要があります
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly
```

2. その後、次のコードを実行します：

{% code overflow="wrap" %}

```python
from vllm import LLM, SamplingParams
from vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessor
from PIL import Image

# モデルインスタンスを作成
llm = LLM(
    model="unsloth/DeepSeek-OCR",
    enable_prefix_caching=False,
    mm_processor_cache_gb=0,
    logits_processors=[NGramPerReqLogitsProcessor]
)

# 画像ファイルを使ってバッチ入力を準備
image_1 = Image.open("path/to/your/image_1.png").convert("RGB")
image_2 = Image.open("path/to/your/image_2.png").convert("RGB")
prompt = "<image>\nFree OCR."

model_input = [
    {
        "prompt": prompt,
        "multi_modal_data": {"image": image_1}
    },
    {
        "prompt": prompt,
        "multi_modal_data": {"image": image_2}
    }
]

sampling_param = SamplingParams(
    temperature=0.0,
    max_tokens=8192,
    # ngram ロジットプロセッサ引数
    extra_args=dict(
        ngram_size=30,
        window_size=90,
        whitelist_token_ids={128821, 128822},  # ホワイトリスト: <td>, </td>
    ),
    skip_special_tokens=False,
)
# 出力を生成
model_outputs = llm.generate(model_input, sampling_param)

# 出力を表示
for output in model_outputs:
    print(output.outputs[0].text)
```

{% endcode %}

### 🦥 Unsloth: DeepSeek-OCRチュートリアルの実行

1. 最新の `unsloth` 経由 `pip install --upgrade unsloth` 。既にUnslothをお持ちの場合は、以下で更新してください `pip install --upgrade --force-reinstall --no-deps --no-cache-dir unsloth unsloth_zoo`
2. 次に以下のコードを使用してDeepSeek-OCRを実行します：

{% code overflow="wrap" %}

```python
from unsloth import FastVisionModel
import torch
from transformers import AutoModel
import os
os.environ["UNSLOTH_WARN_UNINITIALIZED"] = '0'

from huggingface_hub import snapshot_download
snapshot_download("unsloth/DeepSeek-OCR", local_dir = "deepseek_ocr")
model, tokenizer = FastVisionModel.from_pretrained(
    "./deepseek_ocr",
    load_in_4bit = False, # メモリ使用量を減らすために4bitを使用可能。16bit LoRAの場合はFalse。
    auto_model = AutoModel,
    trust_remote_code = True,
    unsloth_force_compile = True,
    use_gradient_checkpointing = "unsloth", # 長コンテキスト用はTrueまたは"unsloth"
)

prompt = "<image>\nFree OCR. "
image_file = 'your_image.jpg'
output_path = 'your/output/dir'
res = model.infer(tokenizer, prompt=prompt, image_file=image_file, output_path = output_path, base_size = 1024, image_size = 640, crop_mode=True, save_results = True, test_compress = False)
```

{% endcode %}

## 🦥 **DeepSeek-OCRのファインチューニング**

UnslothはDeepSeek-OCRのファインチューニングをサポートします。デフォルトモデルは最新の `transformers` バージョンでは実行できないため、推論を可能にするために [Stranger Vision HF](https://huggingface.co/strangervisionhf) チームからの変更を追加しました。いつものように、UnslothはDeepSeek-OCRを40%少ないVRAMで1.4倍速く、かつコンテキスト長を5倍に拡張して訓練しますが、精度の劣化はありません。\
\
我々はDeepSeek-OCRの無料Colabノートブックを2つ作成しました（評価あり/なし）：

* DeepSeek-OCR： [ファインチューニング専用ノートブック](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\).ipynb)
* DeepSeek-OCR： [ファインチューニング + 評価ノートブック](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\)-Eval.ipynb) (A100)

200Kサンプルのペルシア語データセットでDeepSeek-OCRをファインチューニングしたところ、ペルシア語テキストの検出と理解に大幅な改善が見られました。我々はベースモデルとファインチューニング済みバージョンを200のペルシア語書き起こしサンプルで評価し、 **88.26%の絶対改善** を観測しました。わずか60ステップの訓練（バッチサイズ = 8）後、平均CERは **149.07%** から平均 **60.81%**&#x306B;なりました。これは、ファインチューニングされたモデルが **57%** ペルシア語の理解においてより正確であることを意味します。

ペルシア語データセットを他のデータに置き換えて、DeepSeek-OCRを他のユースケース向けに改善することができます。\
\
replica-tableの評価結果については上記の評価ノートブックを使用してください。詳細な評価結果は以下をご覧ください：

### ファインチューニング済み評価結果：

{% columns fullWidth="true" %}
{% column %}
**DeepSeek-OCR ベースライン**

この評価セットにおける平均ベースラインモデル性能：149.07% CER！

```
============================================================
ベースラインモデル性能
============================================================
サンプル数：200
平均CER：149.07%
中央値CER：80.00%
標準偏差：310.39%
最小CER：0.00%
最大CER：3500.00%
============================================================

 ベスト予測（最小CER）：

サンプル5024（CER：0.00%）
参照：  چون هستی خیلی زیاد...
予測： چون هستی خیلی زیاد...

サンプル3517（CER：0.00%）
参照：  تو ایران هیچوقت از اینها وجود نخواهد داشت...
予測： تو ایران هیچوقت از اینها وجود نخواهد داشت...

サンプル9949（CER：0.00%）
参照：  کاش میدونستم هیچی بیخیال...
予測： کاش میدونستم هیچی بیخیال...

 ワースト予測（最大CER）：

サンプル11155（CER：3500.00%）
参照：  خسو...
予測： \[ \text{CH}_3\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}...

サンプル13366（CER：1900.00%）
参照：  مشو...
予測： \[\begin{align*}\underline{\mathfrak{su}}_0\end{align*}\]...

サンプル10552（CER：1014.29%）
参照：  هیییییچ...
予測： e
```

{% endcolumn %}

{% column %}
**DeepSeek-OCR ファインチューニング済み**

60ステップでCERを149.07%から60.43%に低減しました（CER改善率89%）

<pre><code><strong>============================================================
</strong>ファインチューニング済みモデル性能
============================================================
サンプル数：200
平均CER：60.43%
中央値CER：50.00%
標準偏差：80.63%
最小CER：0.00%
最大CER：916.67%
============================================================

 ベスト予測（最小CER）：

サンプル301（CER：0.00%）
参照：  باشه بابا تو لاکچری، تو خاص、 تو خفن...
予測： باشه بابا تو لاکچری、 تو خاص、 تو خفن...

サンプル2512（CER：0.00%）
参照：  از شخص حاج عبدالله زنجبیلی میگیرنش...
予測： از شخص حاج عبدالله زنجبیلی میگیرنش...

サンプル2713（CER：0.00%）
参照：  نمی دونم والا تحمل نقد ندارن ظاهرا...
予測： نمی دونم والا تحمل نقد ندارن ظاهرا...

 ワースト予測（最大CER）：

サンプル14270（CER：916.67%）
参照：  ۴۳۵۹۴۷۴۷۳۸۹۰...
予測： پروپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپیپریپریپریپریپریپریپریپریپریپریپریپریپریپر...

サンプル3919（CER：380.00%）
参照：  ۷۵۵۰۷۱۰۶۵۹...
予測： وادووووووووووووووووووووووووووووووووووو...

サンプル3718（CER：333.33%）
参照：  ۳۲۶۷۲۲۶۵۵۸۴۶...
予測： پُپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُ...
</code></pre>

{% endcolumn %}
{% endcolumns %}

我々が使用した200Kのペルシア語データセットの例（任意のデータを使用できます）。左に画像、右に対応するテキストを示しています。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-2afa75f90055db094d5cae1c635b200c05e97aac%2FScreenshot%202025-11-04%20at%206.10.16%E2%80%AFAM.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/jp/moderu/tutorials/deepseek-ocr-how-to-run-and-fine-tune.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
