Argos Translate でオフライン機械翻訳

OSSの機械翻訳ソフトウェアのArgos Translate というものがあります．なんとなく重そうだなと思って触ったことがなかったのですが，Argos Translate ベースのLibre Translate がRaspberry Pi 4 でも動くということで，それなら手元のマシンでも大丈夫だろうと試してみました．

Argos Open Tech

GitHub – argosopentech/argos-translate: Open-source offline translation library written in Python

導入

$ mkdir ./argostranslate
$ cd ./argostranslate/
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install argostranslate
$ du -Hs .
3449892 .

venv で環境切ってpip で導入しました．

argospm コマンドで翻訳モデルデータ入手

$ argospm --help
usage: argospm [-h] {update,search,install,list,remove} ...

positional arguments:
{update,search,install,list,remove}
Available commands.
update Downloads remote package index.
search Search package from remote index.
install Install package.
list List installed packages.
remove Remove installed package.

options:
-h, --help show this help message and exit
$ argospm update (1)
$ argospm search | wc -l (2)
58
$ argospm search --to-lang ja (3)
translate-en_ja: en -> ja
$ argospm search --from-lang ja (4)
translate-ja_en: ja -> en
$ argospm install translate-en_ja (5)
$ argospm install translate-ja_en (6)
$ du -Hs ~/.local/share/argos-translate/packages/*ja* (7)
131380 /home/matoken/.local/share/argos-translate/packages/en_ja
131780 /home/matoken/.local/share/argos-translate/packages/ja_en

インデックスを更新

リモートのモデル数を確認

日本語への変換モデルを確認

日本語からの変換モデルを確認

英語→日本語のモデルをインストール

日本語→英語のモデルをインストール

モデルの容量確認

Note

日本語は英語とのモデルしかありませんが，例えばフランス語→日本語の変換をしたい場合にfr→enの言語モデルもある場合Argos Translateは自動的に中間言語を介して仏→英→日のように翻訳してくれるそうです．ただし精度は落ちます．

Note

後述のGUI版でもモデルデータ入手可能です．

Pythonで試す

$ cat ./sample.py
import argostranslate.package
import argostranslate.translate

from_code = "en"
to_code = "ja"

translatedText = argostranslate.translate.translate("hello world.", from_code, to_code)
print(translatedText)
$ python3 ./sample.py
こんにちは世界。

コマンドラインで試す

$ argos-translate --help
usage: argos-translate [-h] [--from-lang FROM_LANG] [--to-lang TO_LANG] [TEXT]

Open-source offline translation.

positional arguments:
TEXT The text to translate. Read from standard input if missing.

options:
-h, --help show this help message and exit
--from-lang FROM_LANG, -f FROM_LANG
The code for the language to translate from (ISO 639-1)
--to-lang TO_LANG, -t TO_LANG
The code for the language to translate to (ISO 639-1)
$ time argos-translate --from-lang en --to-lang ja 'hello world.' (1)
こんにちは世界。

real 0m2.124s
user 0m1.731s
sys 0m0.484s
$ echo 'cat is awesome.' | argos-translate --from-lang en --to-lang ja (2)
猫は素晴らしいです。
$ LC_ALL=en_US.UTF-8 man man | wc
478 4698 33208
$ time LC_ALL=en_US.UTF-8 man man | argos-translate --from-lang en --to-lang ja (3)
:
:

real 2m56.132s
user 4m48.187s
sys 0m57.290s

英語から日本語に翻訳

標準入力を翻訳

コマンドの結果を翻訳

Note

translate shell などと違いローカルで実行できるのがいい感じだがマシンスペックにより低速．

GUI

$ pip install argostranslategui
$ argos-translate-gui

翻訳画面

モデルの確認，削除

モデルのインストール

Note

画面サイズを広げることでテキストエリアも広がり長文にも対応しやすく．

少し試したところ短文ならサクサクと動きますが，man の結果をまとめて渡すなどするとしばらく待つことに．人間の読む速度よりは速いので分けて渡すようにすると良さそうです．(若しくは対応GPUを追加するなどマシンスペックを上げる．)
翻訳精度も思っていたより良い感じで，Google翻訳以前の翻訳ソフトウェアよりずっと良さそうです．

無料翻訳サイトは翻訳データが保存，利用されることが多いのでセンシティブなものには使えないのですが，Argos Translate ならローカルで完結するのでそのようなデータの翻訳にも良さそうです．

Note

鹿児島Linux勉強会 2022.12 で紹介しました．

環境

$ dpkg-query -W python3
python3 3.10.6-1
$ lsb_release -dr
Description: Debian GNU/Linux bookworm/sid