9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PDFMathTranslate と Ollama による PDF のローカル翻訳

Last updated at Posted at 2024-12-20

PDFMathTranslate は、数式や図表を含む論文 PDF の翻訳において、レイアウトの維持に強みを持つツールとして注目を集めています。本記事ではローカル LLM である Ollama を用いた利用方法に焦点を当てて解説します。

PDFMathTranslate

PDFMathTranslateは、学術論文の翻訳における課題を解決するために開発されたツールです。主な特徴は以下のとおりです。

  1. 数式・図表の完全保持: 論文中の数式、グラフ、図表を元のレイアウトのまま保持します。目次や注釈も維持されるため、原文の構造を損なうことなく翻訳が可能
  2. 多言語対応: 複数の言語間の翻訳をサポート
  3. 各種 API 対応: OpenAI, Claude, Gemini, Ollama など、様々な LLM に対応

例:Transformer が発表された論文より

image.png

Ollama との連携

Ollamaは、ローカル環境で LLM を実行するためのツールです。あらかじめインストールしておいてください。

PDFMathTranslate で Ollama を使用することには、以下のメリットがあります。

  1. プライバシーの保護: 翻訳処理がローカル環境で完結するため、論文の内容が外部に送信されることはありません。
  2. コスト削減: クラウドベースの翻訳サービスと異なり、API利用料などを気にすることなく、何度でも翻訳を行うことができます。(ただし、電気代を考慮すると割高になる可能性もあります)
  3. オフライン環境での利用: インターネット接続がない環境でも翻訳が可能です。(事前にモデルがインストールされていることが前提です)

ローカル LLM のチャット以外の実用例としても注目に値します。開発者視点では LLM をツールに組み込む上でも参考になります。

インストール

本記事では Python 環境の管理ツールである uv を使った方法を説明します。

パッケージなどで uv をインストールしてください。Windows の場合は winget が利用できます。

winget install --id=astral-sh.uv -e

PDFMathTranslate の最新版を利用するため、GitHub リポジトリからの直接インストールを推奨します。

uv tool install --python 3.10 git+https://github.com/Byaidu/PDFMathTranslate.git

インストール後にアップデートするときは -U を付けます。

uv tool install -U --python 3.10 git+https://github.com/Byaidu/PDFMathTranslate.git

実行方法

コマンド例を示します。

uvx --python 3.10 pdf2zh -li en -lo ja -t 1 -s "ollama:gemma2:2b-instruct-q4_K_M;aya-expanse" PDFファイル

ホームディレクトリの .local/bin に実行可能ファイルがインストールされるため、そこにパスを通して利用する方法もあります。その場合 uvx --python 3.10 は不要です。

主なオプション:

  • -li: 翻訳元言語(例:en - 英語)
  • -lo: 翻訳先言語(例:ja - 日本語)
  • -t 1: 使用するスレッド数(通常、ローカル LLM の並列実行は困難)
  • -s: 翻訳エンジンとモデルの指定

モデルは環境変数 OLLAMA_MODEL でも指定可能です。その場合のオプションは -s ollama だけとなります。

環境変数を設定することで、別マシンの Ollama にアクセスすることも可能です。詳細は以下の記事を参照してください。

モデル指定

-s ollama: に続くモデル名はセミコロンで区切って複数指定できます。Ollama での処理が無限ループに陥ることが一定確率で発生するため、自動的に次のモデルを試すフォールバック機能としての役割を果たします。動作を安定させるため、複数指定を推奨します。

推奨する組み合わせは gemma2:2b-instruct-q4_K_M;aya-expanse です。ただし、aya-expanse は商用利用不可ライセンスのため、商用利用の場合は gemma2:2b-instruct-q4_K_M;gemma2:9b-instruct-q4_K_M の使用を推奨します。

利用するモデルはあらかじめ ollama に pull しておいてください。

ollama pull gemma2:2b-instruct-q4_K_M
ollama pull gemma2:9b-instruct-q4_K_M
ollama pull aya-expanse

3 つ指定することも可能です。その場合、指定した順にフォールバックされます。

無限ループを検出すると Response too long と表示して次の LLM にフォールバックします。

万一、それが無限に続く場合、PDFMathTranslate を [Ctrl]+[C] で強制終了させてください。Windows の場合はショートカットキーが利かないため、タスクトレイから Ollama の常駐プロセスを終了させて、タスクマネージャーで Python のプロセスを強制終了させてください。

処理時間

処理時間はハードウェアに大きく依存します。GPU(例:Radeon RX 7600 XT)使用時は、gemma2:2b-instruct-q4_K_M で 1 ページあたり約 5〜10 秒、CPU 処理時はその 5〜20 倍程度かかります。

処理可能なページ数に制限はありませんが(400 ページでの正常動作を確認)、実用的には処理時間との兼ね合いとなります。CPU 処理では 20 ページ程度が実用限界と思われます。

GPU と CPU の実行速度については、以下の記事を参照してください。

キャッシュ

翻訳結果はキャッシュされます。仮に翻訳途中で落ちたとしても、続きから再開できます。

キャッシュは溜まる一方のため、定期的に削除することをお勧めします。

場所の確認方法(Python)
>>> import os, tempfile
>>> os.path.join(tempfile.gettempdir(), "cache")
'C:\\Users\\USERNAME\\AppData\\Local\\Temp\\cache'

実装箇所

cache_dir = os.path.join(tempfile.gettempdir(), "cache")

参考

複数モデルサポートのプルリクエストでは、作者様に柔軟に対応していただきました。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?