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

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

導入
$ 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
  1. インデックスを更新
  2. リモートのモデル数を確認
  3. 日本語への変換モデルを確認
  4. 日本語からの変換モデルを確認
  5. 英語→日本語のモデルをインストール
  6. 日本語→英語のモデルをインストール
  7. モデルの容量確認
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
  1. 英語から日本語に翻訳
  2. 標準入力を翻訳
  3. コマンドの結果を翻訳
Note

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

GUI
$ pip install argostranslategui
$ argos-translate-gui
翻訳画面

argos translate gui01

モデルの確認,削除

argos translate gui02

モデルのインストール

argos translate gui03

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
Release:        n/a
$ arch
x86_64

One thought to “Argos Translate でオフライン機械翻訳”

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)