Blog

2025.06.10

Engineering

Research

PLaMo翻訳CLI: ローカル環境での多言語翻訳を実現するコマンドラインツール

Shunta Saito

Researcher

先日(2025年5月27日)、Preferred Networksは「PLaMo翻訳」を発表しました。このモデルは、翻訳タスクに特化した大規模言語モデルであり、PLaMo Community License(ライセンス文解説記事)のもとで一般公開(Hugging Face)されています。この度、このモデルをより手軽にローカル環境で利用できるようにするためのコマンドラインツール「PLaMo翻訳CLI」をOSSとして公開*1しました。
plamo-translate-cli: https://github.com/pfnet/plamo-translate-cli
*1: プログラムコード・ツール自体はOSSライセンスですが、内部で利用するPLaMo翻訳モデルがPLaMo Community Licenseであるため、合わせて利用する際にはモデルライセンスの制約が加わることにご注意ください。

PLaMo翻訳CLIは、PLaMo翻訳モデルを用いて、高速かつ高精度な翻訳をオンプレミスにて提供するコマンドラインインターフェースツールです。 本記事では、このツールの概要について紹介します。

以下は、PLaMo翻訳CLIが持つ4つの動作モード「MCPサーバモード」、「インタラクティブモード」、「パイプモード」「コマンドライン引数モード」のデモです。

背景

PLaMo翻訳は日英に加えて多言語間の翻訳が可能ですが、特筆すべきは、これは特化型大規模言語モデルであり、入出力の言語だけでなく、LLMの汎用性を活かした多様な機能を提供することができるという点にあります。また、ベースとなっているモデルがPLaMo2-8Bモデルであるため、量子化などの工夫によって日常的に利用されるノートパソコンなどのローカル環境での実行も可能な軽量さを兼ね備えているのも魅力です。

PLaMo翻訳の発表後、これを受けて、

  • 外部へ送信したくない機密情報を含むテキストの翻訳を行いたい
  • オフライン環境でも翻訳を行いたい
  • 翻訳機能を自分のアプリケーションに組み込みたい

といった声が寄せられました。PLaMo翻訳モデルの特徴と、これらの要望を鑑み、より簡単にローカル環境で翻訳モデルを利用できる方法を提供するため、PLaMo翻訳CLIを開発しました。

今回、PLaMo翻訳CLIの初期バージョンとしては、Apple Silicon搭載マシン上のmacOS環境を対象として開発しました。これは、Appleが提供するmlxフレームワークにより、PLaMo2-8Bモデルの高速な推論がローカル環境へ比較的低い導入コストで行えるためです。将来的にはOllamaやvLLMなどもバックエンドとしてサポートすることで、macOS以外のプラットフォームでも利用可能にする予定です。

主な特徴

  • 日英に加え多言語間での双方向翻訳
  • シンプルなコマンドラインインターフェース
  • インタラクティブモード、パイプモード、コマンドライン引数モード、MCPサーバーモードをサポート
  • 内部的にMCP(Model Context Protocol)を使用したサーバ・クライアント構成
  • MLXによるApple Silicon搭載mac上での高速な動作

インストール方法

PLaMo翻訳CLIはOSSとして https://github.com/pfnet/plamo-translate-cli で公開されており、macOS環境向けにパッケージングされたwheelがPyPIにて公開されています。mlx-lmが依存関係の中にビルドが必要なsentencepieceを持っているため、インストールのためにはCMakeが入っている必要があります。homebrewがインストールされた環境であれば、次のようなコマンドで導入することができます。

brew install cmake

# Python 3.13環境の場合は「先に」sentencepieceを入れる必要があります
pip install git+https://github.com/google/sentencepiece.git@2734490#subdirectory=python

pip install plamo-translate

注意しなければならないのは、現在PyPIにて配布されているsentencepieceパッケージ(最新バージョン: 0.2.0)はPython 3.13 + CMake 4以上の環境に対応していないため、本CLIツールのパッケージの依存関係として同時にsentencepieceのインストールが行われてしまうとビルドエラーが発生してしまう点です。

しかし、sentencepieceのgithubリポジトリのmainブランチの最新コミットではPython 3.13 + CMake 4以上にも対応できているため(ただしリリースが未だ行われていません)、Python 3.13環境に導入される場合は、先にGithubリポジトリから直接sentencepieceをインストールしておく必要があります。(これは、sentencepieceの次バージョンがリリースされれば必要なくなる可能性が高いです)

一方、Python 3.12以下の環境に導入する場合は、以下の1行でインストールが完了します。

pip install plamo-translate

使い方

多様な実行モード

PLaMo翻訳CLIでは、以下の4つの実行モードをサポートしています。

  1. インタラクティブモード
    : ユーザーが入力したテキストを対話的に逐次翻訳していきます。

    $ plamo-translate
    Interactive mode enabled. Type your input below (Ctrl+D to exit).
    > 家計は火の車だ
    Our household is in financial trouble.
    > 家が燃えているわけじゃないよ。
    It's not that our house is on fire.
    
  2. パイプモード: 標準出力をパイプしてテキストを渡し、翻訳結果を標準出力に出力します。スクリプトへの組み込みに便利です。
    $ echo '先生、トイレ' | plamo-translate
    Excuse me, I need to use the restroom.
    
  3. コマンドライン引数モード: コマンドライン引数として入力テキストを指定し、翻訳結果を出力します。
    $ plamo-translate --input 'お昼何食べる?私はうなぎ!'
    What should we have for lunch? I'm having eel!
    
  4. サーバーモード: まず以下コマンドでサーバーを起動します。
    $ plamo-translate server
    

    その後、別のターミナルウインドウでクライアントからリクエストを送信します。

    $ plamo-translate --input 'こんにゃくは太らない。'
    Konjac doesn't make you gain weight.
    

    このモードでは、モデルはサーバ起動時にロードされているため、すぐに結果が返ってきます。サーバがすでに立ち上がっている場合、 plamo-translate コマンドは自動的にそれを検知してそのサーバへのリクエスト送信を行うだけの動作になるため、上記に説明した3つのモード(インタラクティブモード、パイプモード、コマンドライン引数モード)のどのモードで利用する場合でも、サーバが立ち上がっている場合は再度別のサーバを立ち上げることはせず、自動的にそのサーバが利用されるようになっています。つまり、バックグラウンドでサーバを立ち上げておけば、サーバモード以外の3つの全てのモードでモデル読み込みを省略することができます。

言語指定

PLaMo翻訳CLIは、PLaMo翻訳と同様に複数の言語間の翻訳を実行することが可能です。入力の言語と出力の言語を指定するには、 --from--to オプションを使います。これらのオプションは上記のすべての実行モードにおいて有効です。

$ plamo-translate --from Japanese --to French --input 'よいワインに宣伝はいらない。'
Un bon vin n'a pas besoin de publicité.

入力言語のみ、出力言語のみを指定することも可能です。また、 --from に何も指定しない場合はデフォルトで English|Japanese が指定されるようになっており、これは英語か日本語のいずれかを自動判定するモードとなっています。

技術的特徴

Model Context Protocol (MCP) の活用

今回、PLaMo翻訳CLIでは、内部的に翻訳を実行するサーバと、ユーザ入力を翻訳リクエストに変換するクライアントを分ける構成としました。これにより、異なるバックエンド実装 (Ollama, vLLMなど) を今後追加していく場合でも、同じインターフェースを持ったサーバを追加していくだけで済み、クライアント側の実装は一度で済みます。

PLaMo翻訳CLIは、内部でまずMCPサーバを起動してPLaMo翻訳モデルを読み込み、これをメモリ上に保持したまま、MCPクライアントから翻訳のリクエストを受け取って結果を返す形になっています。 PLaMo翻訳CLIの内部にはMCPクライアントも実装されており、こちらはユーザからの入力をMCPのリクエストに変換して内部に立てているPLaMo翻訳MCPサーバに送信し、結果を受け取って標準出力に渡します。

このため、このCLIで起動することができるMCPサーバが提供する翻訳ツールを、ほかのMCPクライアントから利用することも可能となっています。

以下は、plamo-translateコマンドにて起動したMCPクライアントとMCPサーバをユーザからの入力を受け取ってユーザへ結果を返すような標準の方法で利用する場合と、MCPサーバの部分をmcp-remoteを介してplamo-translateの外にある別のMCPクライアント(図ではClaude Desktop)から利用する場合、の2つの使い方における各要素の関係を図示したものです。

例えば、MCPクライアントの一つであるClaude DesktopからPLaMo翻訳を利用するには、以下のようにします。

# PLaMo翻訳CLIのMCPサーバを起動
$ plamo-translate server

次に、mcp-remoteのインストールを行ったら、別のターミナルで以下のコマンドを実行し、Claude Desktop用の設定情報を表示させます。

$ plamo-translate show-claude-config
{
  "mcpServers": {
    "plamo-translate": {
      "command": "[npxコマンドへのパス]",
      "args": [
        "-y",
        "mcp-remote",
        "http://localhost:30000/mcp",
        "--allow-http",
        "--transport",
        "http-only"
      ],
      "env": {
        "PATH": "[THE CONTENT OF PATH ENVIRONMENT VARIABLE]",
      }
    }
  }
}


この設定情報をコピーし、macOS環境の場合、大抵は ~/Library/Application Support/Claude/claude_desktop_config.json にあるClaude DesktopのMCPサーバの設定ファイルに("plamo-translate": {...}の部分を)追記します。

これで、Claude DesktopからPLaMo翻訳CLIが提供する翻訳ツールを直接呼び出すことができるようになります。

以下は、PLaMo翻訳のMCPサーバと接続されたClaude Desktopアプリから、対話的にPLaMo翻訳の機能を利用する例です。Claude Desktopが自動的にPLaMo翻訳MCPサーバが提供する plamo-translate というツールの情報を取得し、必要なリクエストの形式にユーザの入力を整えた上で翻訳機能を実行しています。この翻訳の処理そのものは、macのローカル環境で実行されています。

ローカル環境での実行のための最適化

今回は手始めにmacOS環境を対象とし、ローカルにモデルがなければ自動的にダウンロードが走るように、あらかじめMLX LMライブラリを用いてMLXでの実行がスムーズにできるよう変換されたモデルをmlx-community/plamo-2-translateにて公開しています。

こちらのモデルは、MLX-LMが提供しているDWQ (Distillation Weight Quantization) という手法による量子化が施されたものになっています。 この際用いたキャリブレーションデータにはPLaMo2-8Bのベースモデルから翻訳特化モデルを学習するために使われた学習データの一部が利用されています。

また、より高精度な翻訳をmacOSローカル環境で実行したい方のために、8bit量子化版およびオリジナルのbfloat16から量子化を行なっていないものも同様にHugging Face上で公開しています。 まとめると、このCLIで利用可能なモデルは現在、以下の通りとなります。

PLaMo翻訳CLIでのこれらのモデルの切り替えは、コマンドラインオプション --precision もしくは -p を指定することで行えます。 (デフォルトでは4bitモデルが選択されます)

$ plamo-translate --precision 8bit  # モデルは自動的にダウンロードされます (bfloat16モデルが必要な場合は `--precision bf16` を指定します)
Interactive mode enabled. Type your input below (Ctrl+D to exit).
> あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
That clear wind from Ihatovo, the blue sky that retains a chill even in summer, the beautiful Morio City adorned with lush forests, and the glittering waves of grass in the outskirts.

まとめ

PLaMo翻訳CLIは、PLaMo翻訳モデルの強力な翻訳能力をコマンドラインツールとして提供します。 ローカル環境で実行可能な最適化されたバックエンドを持ち、ノートパソコン上でも高速に動作します。 また、MCPサーバを内部的に起動することで他のMCPクライアントと組みわせて使うことが可能となっています。 そしてシンプルなインターフェースと多様な実行モードにより、様々なユースケースに対応可能です。 以上より、開発者や一般ユーザーにとって非常に便利なツールとなっています。

今後はOllamaやvLLMといったバックエンドへの対応を進め、Apple Silicon搭載mac以外のローカル環境でも利用できるようにしていく予定です。 また、PLaMo翻訳モデルの持つ柔軟性を活用したさまざまなユニークな機能も同様に追加していく予定です。

コマンドラインでの翻訳を手軽に、そして高精度に行いたい方は、ぜひPLaMo翻訳CLIを試してみてはいかがでしょうか。

  • Twitter
  • Facebook