LINUX.ORG.RU

Argos Translate: офлайн-переводчик для Linux

 , ,


0

2

Понадобилось переводить офлайн. Устанавливать программу для Windows через wine желания не было. Решением стала программа Argos Transllate. Она написана на Python, работает в терминале, и есть графический интерфейс пользователя. Об опыте установки и использования этой программы и будет написано ниже.

Установка: ничто не предвещало беды

Автор предлагает устанавливать программу так: $ pip install argostranslate. Доверимся автору и попробуем:

$ pip install argostranslate

Команда «pip» не найдена, но может быть установлена с помощью:
sudo apt install python3-pip

Обычное дело, не хватает нужной программы, установим её:

$ sudo apt install python3-pip

Следующие НОВЫЕ пакеты будут установлены:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential bzip2 dpkg-dev
  fakeroot g++ g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13
  gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu javascript-common
  libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8
  libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev
  libctf-nobfd0 libctf0 libdpkg-perl libexpat1-dev libfakeroot
  libfile-fcntllock-perl libgcc-13-dev libgprofng0 libhwasan0 libitm1 libjs-jquery
  libjs-sphinxdoc libjs-underscore liblsan0 libpython3-dev libpython3.12-dev
  libquadmath0 libsframe1 libstdc++-13-dev libtsan2 libubsan1 linux-libc-dev
  lto-disabled-list make manpages-dev patch python3-dev python3-pip
  python3-setuptools python3-wheel python3.12-dev rpcsvc-proto zlib1g-dev

Чёт многовато всего устанавливается, добавим опцию --no-install-recommends:

$ sudo apt install python3-pip --no-install-recommends

Следующие НОВЫЕ пакеты будут установлены:
  python3-pip python3-setuptools python3-wheel

Отлично, установили pip, теперь можно вернутся к $ pip install argos-translate, пробуем и получаем ошибку:

error: externally-managed-environment

If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

Ну ооокей, установим pipx который which will manage a virtual environment for you, делаем:

$ sudo apt install pipx

Следующие НОВЫЕ пакеты будут установлены:
  pipx python3-argcomplete python3-packaging python3-pip-whl python3-platformdirs
  python3-psutil python3-setuptools-whl python3-userpath python3-venv
  python3.12-venv

Готово. Теперь пробуем установить argos-translate. Это который раз? Третий, кажется ;-)

$ pipx install argos-translate

installed package argostranslate 1.9.6, installed using Python 3.12.3
  These apps are now globally available
    - argos-translate
    - argospm
⚠️  Note: '/home/ivanov/.local/bin' is not on your PATH environment variable.
    These apps will not be globally accessible until your PATH is updated. Run
    `pipx ensurepath` to automatically add it, or manually modify your PATH in your
    shell's config file (i.e. ~/.bashrc).
done! ✨ 🌟 ✨

Ничего не предвещало беды, но что то оно долго устанавливалось… Ну прям долго. Это на нормальном ПК и скорости подключения 100 Мбит/с. Что же оно такое качало? Что же оно устанавливало? И сколько это все занимает места на диске? Давайте посмотрим:

du -sh .cache/pip ./.local/share/pipx/venvs/argostranslate

2,9G	.cache/pip
5,3G	./.local/share/pipx/venvs/argostranslate

АААА! Ух тыыы! Какая красотааа! Удивлению моему не было предела. И это при том, что корень без /home использует диск на 8,2Gib. То есть один переводчик использует столько же места на диске, как и сама система, прикольно :-)

Ради интереса проверим, работает ли оно:

$ pipx ensurepath #Добавим путь .local/bin в переменную $PATH. Закрываем окно терминала и открываем новое. 

Запускаем:

$ argos-translate --from-lang en --to-lang ru "hello"
usage: argos-translate [-h] [--from-lang FROM_LANG] [--to-lang TO_LANG] [TEXT]
argos-translate: error: 'en' is not an installed language.

Нет, не работает. Не установлена поддержка языка. И это при скачанных восьми гигабайтах… Хорошо, установим поддержку языка:

$ ./.local/bin/argospm install translate-en_ru

Скачалось и установилось быстро. Проверяем работу:

$ argos-translate --from-lang en --to-lang ru "hello"

/home/ivanov/.local/share/pipx/venvs/argostranslate/lib/python3.12/site-packages/stanza/models/tokenize/trainer.py:85: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  checkpoint = torch.load(filename, lambda storage, loc: storage)
привет

Предупреждение больше, чем перевод… На этом моменте хочется удалить программу, всё что она скачала, и пойти искать другое решение. Однако я решил попробовать другой способ установки, также описанный автором программы.

Установка, способ второй: 8Gib дискового пространства снова на воле

Удалим всё то, что пришло и «скромно» заняло место на диске:

$ rm -rf  ./.cache/pip ./.cache/pipx ./.local/share/pipx ./.local/bin/argos* ./.local/share/argos-translate/ ./.local/cache/argos-translate

$ sudo apt purge pip pipx -y && sudo apt autopurge -y

# Не забудьте удалить .local/bin путь из переменной $PATH, отредактировав для этого ваши .profile .bashrc .bash_profile

Устанавливаем другим способом. Нам понадобится git, чтобы клонировать репозиторий программы:

$ sudo apt install git

Клонируем репозиторий:

$ git clone https://github.com/argosopentech/argos-translate.git
Получение объектов: 100% (3862/3862), 3.75 МиБ

Теперь, перейдем в скачанный репозиторий и создадим в нем виртуальное окружение:

$ cd argos-translate

$ sudo apt install python3-virtualenv --no-install-recommends

$ virtualenv env

Отлично, активируем созданное окружение и установим всё необходимое:

$ source ~/argos-translate/env/bin/activate

$ pip install -e .

Установилось быстро, места на диске употребило 600Mib. Многовато, но не 8Gib как было.

Теперь установим поддержку нужного перевода и сделаем тест:

$ argospm install translate-en_ru

$ argos-translate -f en -t ru "Argos Translate uses OpenNMT for translations and can be used as either a Python library, command-line, or GUI application. "

Argos Translate использует OpenNMT для переводов и может использоваться как библиотека Python, командная строка или приложение GUI.

It’s finally over! Мог бы подумать пользователь, но нет. Оказалось, что программа медленно переводит текст, не важно какой он величины. Программа каждый раз загружает себя в ОЗУ, выполняет работу, и? И выгружается из ОЗУ. Оно и понятно, зачем ей быть постоянно загруженной? Однако когда переводы один за другим, хочется скорости, чтобы программа не выгружалась.

Для этого есть скрипт. Создадим его $ touch ~/argos-translate/env/bin/argos-fast && chmod u+x ~/argos-translate/env/bin/argos-fast и укажем содержимое:

#!/usr/bin/env python3

# argos repl
# reduce translation time
# from (13 + 8 + 2) = 23 seconds to 2 seconds
# https://github.com/argosopentech/argos-translate

src_lang = "en"
dst_lang = "ru"

import time

# If the readline module was loaded, then input() will use it
# to provide elaborate line editing and history features.
import readline

# 13 seconds
print("importing argostranslate... ", end="")
t1 = time.time()
import argostranslate.translate
t2 = time.time()
print(f"done in {(t2 - t1):.1f} seconds")

# hide warnings: "Language %s package %s expects mwt, which has been added"
import logging
logging.getLogger("stanza").disabled = True

prompt_format = "{}: "
src_prompt = prompt_format.format(src_lang)
dst_prompt = prompt_format.format(dst_lang)

# load the language model
# 8 seconds
print("loading the language model... ", end="")
t1 = time.time()
argostranslate.translate.translate("hello", src_lang, dst_lang)
t2 = time.time()
print(f"done in {(t2 - t1):.1f} seconds")

print()

while True:
    try:
        src = input(src_prompt)
    except (EOFError, KeyboardInterrupt):
        break
    # translate
    # 2 seconds
    t1 = time.time()
    dst = argostranslate.translate.translate(src, src_lang, dst_lang)
    dt = time.time() - t1
    print(dst_prompt + dst + "\n")
    #print(dst_prompt + dst + "\n" + f"dt = {dt}\n") # debug: print time

Запускаем скрипт и видим приглашение к переводам:

$ argos-fast 
importing argostranslate... done in 9.6 seconds
loading the language model... done in 8.1 seconds

en: Hello my wife
ru: Привет моей жене

en:

Установка графического пользовательского интерфейса

Если вам нужен графический пользовательский интерфейс, установите его:

$ pip install argostranslategui #Замечание! ГПИ устанавливать ТОЛЬКО после установки консольного argostranslate, иначе он скачает 8Gib ;-)

Выглядит ГПИ так. Шрифт мелкий, на системные настройки не реагирует. Его можно увеличить из gnome-tweaks увеличением scaling-factor, что не приемлемо для меня. Но возможно, кому то подойдет.

Как запускать?

Чтобы запустить программу нужно активировать окружение: $ source argos-translate/env/bin/activate, тогда будут доступны argos-translate, argos-translate-gui, argos-fast.

Деактивируется окружение командой $ deactivate.

Опыт использования

Переводит программа хорошо и быстро. Но не любит переносов строки, например если скопировать абзац за раз из PDF, то переведет плохо. Если скопировать тот же абзац но по одной строке, переведет отлично.

Если использовать скрипт argos-fast или ГПИ, то оперативной памяти программа употребит 700-800Mib. Если использовать просто программу, то потребление озу будет пиком, то есть употребит 800Mib,перевод выполнит, и сбросит.

Надеюсь эта краткая заметка будет полезна тем, кому нужен нативный офлайн-переводчик для Linux :-). Спасибо за внимание и чтение.



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 4)

If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz

Ага, я так wlc в третий раз поставил, который иначе не хотел повторно устанавливаться, хотя раньше ставился как раз через pip3. :)

Питоняши (c) наверняка объяснят ТСу, что он делал не так, а я считаю материал интересным и полезным. Но конечно, интересно, что за алгоритмы у этой программы под капотом. Нейросети?..

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

хотя раньше ставился как раз через pip3

Что нужно создавать виртуальное окружение для программ на пайтон, я знал. Но другой пользователь может и не знать. Поэтому так и писал, с позиции пользователя нулевого опыта.

Питоняши (c) наверняка объяснят ТСу, что он делал не так

Тут больше вопрос к автору программы. Можно было описать только один метод установки вместо двух. Где клонируется репозиторий гита. Но автор почему то описал именно два (sic!) метода установки, и при первом копируется 8Gib пакетов.

Но конечно, интересно, что за алгоритмы у этой программы под капотом. Нейросети?..

Не вникал в техническую часть, нужны были оффлайн переводы и я удовлетворился что нашел этот священный грааль ;-) но сам автор пишет что это: OpenNMT is an open source ecosystem for neural machine translation and neural sequence learning.

bloody_enterprise
() автор топика
Ответ на: комментарий от bloody_enterprise

Можно было описать только один метод установки вместо двух. Где клонируется репозиторий гита. Но автор почему то описал именно два (sic!) метода установки

Ну всё-таки клонирование репозитория – достаточно сложный метод, для разработчиков. Другое дело, что в случае питонософта «пользовательские» методы установки, бывает, оказываются ненамного проще, а и то и совсем не проще, как, видимо, и случилось в описанном примере (см. также прошлогодний опрос с неоднозначными результатами, там комментарии не менее интересны, чем распределение голосов).

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

pipx

Потому что нужно было venv использовать.

IIIypuk ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.