PythonのTxtaiを用いて英語テキストを日本語に翻訳する

スポンサーリンク

PythonのTxtaiを用いて英語テキストを日本語に翻訳してみます。

今回はTxtaiを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。なお、今回はpipelineエクストラパッケージをインストールする必要があるので、「pip install txtai[pipeline]」のコマンドを用いた方が良い。

■Python

今回のPythonのバージョンは、「3.6.8」を使用しています。(Windows10)(pythonランチャーでの確認)

※途中から「Python 3.8.5」に変更。

■Txtaiを用いて英語テキストを日本語に翻訳する

早速ですが、Txtaiを用いて英語テキストを日本語に翻訳するスクリプトを書いていきます。

■コード

from txtai.pipeline import Translation

translate = Translation()
text = translate("It is a fine day today. The sky is blue.","ja")
print(text)

「from import」でtxtai.pipelineのTranslationを呼び出します。その後、translateという変数を定義し、その中でTranslation()を用います。これでTranslationインスタンスが作成されました。翻訳するための主要なポイントです。

その後、textという変数を定義し、その中でtranslate()を用います。括弧内には第1の引数,パラメータとして、英語のテキストを渡します。次に第2の引数,パラメータとして翻訳する言語を渡します。今回は「”ja”(日本語)」を渡します。これで英語のテキストが日本語に翻訳されtest変数内に格納されます。

最後にtext変数内の情報をprint()で出力させます。

■実行・検証

このスクリプトを「translator_ja.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

2022-07-18 07:12:21.448301: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2022-07-18 07:12:21.448503: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
Traceback (most recent call last):
  File "translator_ja.py", line 4, in 
    text = translate("It is a fine day today. The sky is blue.","ja")
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\txtai\pipeline\text\translation.py", line 71, in __call__
    languages = self.detect(values) if not source else [source] * len(values)
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\txtai\pipeline\text\translation.py", line 117, in detect
    raise ImportError('Language detection is not available - install "pipeline" extra to enable')
ImportError: Language detection is not available - install "pipeline" extra to enable

実行してみると「ImportError」というエラーが出力され翻訳されませんでした。エラー内容を確認するとどうやらpipelineというライブラリのインストールが必要なことが判明。判明したので、pipを経由してインストールを行ってみます。

>py -3.6 -m pip install pipeline
Defaulting to user installation because normal site-packages is not writeable
Collecting pipeline
  Downloading pipeline-0.1.0-py3-none-any.whl (2.6 kB)
Installing collected packages: pipeline
Successfully installed pipeline-0.1.0

インストール後、再度実行してみるも、同じエラーが出力され、実行できませんでした。原因を調べてみると、今回Pythonのバージョン3.6.8にtxtaiをインストールしていましたが、Python 3.7以降が必要であることが判明。そこで「Python 3.7.9」にtxtaiをインストールしてみることにしました。インストールしてみたが、これが悪夢の始まりだった。3.7.9でインストールしようとエラーの発生が多発する。心が折れそうになったので、他の解決策を考え、「Python 3.8.5」にtxtaiをインストールしてみる。

>pip install txtai[pipeline]
Collecting txtai[pipeline]
  Using cached txtai-4.5.0-py3-none-any.whl (134 kB)
Collecting torch>=1.6.0
  Using cached torch-1.12.0-cp38-cp38-win_amd64.whl (161.9 MB)
Collecting numpy>=1.18.4
  Using cached numpy-1.23.1-cp38-cp38-win_amd64.whl (14.7 MB)
Collecting pyyaml>=5.3
  Using cached PyYAML-6.0-cp38-cp38-win_amd64.whl (155 kB)
Collecting transformers>=4.12.3
  Using cached transformers-4.20.1-py3-none-any.whl (4.4 MB)
Collecting tokenizers>=0.10.3
  Using cached tokenizers-0.12.1-cp38-cp38-win_amd64.whl (3.3 MB)
Collecting faiss-cpu>=1.7.1.post2
  Using cached faiss_cpu-1.7.2-cp38-cp38-win_amd64.whl (9.9 MB)
Collecting beautifulsoup4>=4.9.3; extra == "pipeline"
  Using cached beautifulsoup4-4.11.1-py3-none-any.whl (128 kB)
Collecting imagehash>=4.2.1; extra == "pipeline"
  Using cached ImageHash-4.2.1.tar.gz (812 kB)
Collecting sentencepiece>=0.1.91; extra == "pipeline"
  Using cached sentencepiece-0.1.96-cp38-cp38-win_amd64.whl (1.1 MB)
Collecting onnxmltools>=1.9.1; extra == "pipeline"
  Using cached onnxmltools-1.11.1-py3-none-any.whl (308 kB)
Collecting nltk>=3.5; extra == "pipeline"
  Using cached nltk-3.7-py3-none-any.whl (1.5 MB)
Collecting tika>=1.24; extra == "pipeline"
  Using cached tika-1.24.tar.gz (28 kB)
Collecting soundfile>=0.10.3.post1; extra == "pipeline"
  Using cached SoundFile-0.10.3.post1-py2.py3.cp26.cp27.cp32.cp33.cp34.cp35.cp36.pp27.pp32.pp33-none-win_amd64.whl (689 kB)
Collecting pillow>=9.0.1; extra == "pipeline"
  Using cached Pillow-9.2.0-cp38-cp38-win_amd64.whl (3.3 MB)
Collecting timm>=0.4.12; extra == "pipeline"
  Using cached timm-0.6.5-py3-none-any.whl (512 kB)
Collecting fasttext>=0.9.2; extra == "pipeline"
  Using cached fasttext-0.9.2.tar.gz (68 kB)
Collecting pandas>=1.1.0; extra == "pipeline"
  Using cached pandas-1.4.3-cp38-cp38-win_amd64.whl (10.6 MB)
Collecting onnxruntime>=1.8.1; extra == "pipeline"
  Using cached onnxruntime-1.11.1-cp38-cp38-win_amd64.whl (5.6 MB)
Collecting onnx>=1.10.1; extra == "pipeline"
  Using cached onnx-1.12.0-cp38-cp38-win_amd64.whl (11.5 MB)
Collecting typing-extensions
  Using cached typing_extensions-4.3.0-py3-none-any.whl (25 kB)
Collecting huggingface-hub<1.0,>=0.1.0
  Using cached huggingface_hub-0.8.1-py3-none-any.whl (101 kB)
Collecting tqdm>=4.27
  Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)
Collecting filelock
  Using cached filelock-3.7.1-py3-none-any.whl (10 kB)
Collecting requests
  Using cached requests-2.28.1-py3-none-any.whl (62 kB)
Collecting packaging>=20.0
  Using cached packaging-21.3-py3-none-any.whl (40 kB)
Collecting regex!=2019.12.17
  Using cached regex-2022.7.9-cp38-cp38-win_amd64.whl (262 kB)
Collecting soupsieve>1.2
  Using cached soupsieve-2.3.2.post1-py3-none-any.whl (37 kB)
Collecting six
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting scipy
  Using cached scipy-1.8.1-cp38-cp38-win_amd64.whl (36.9 MB)
Collecting PyWavelets
  Using cached PyWavelets-1.3.0-cp38-cp38-win_amd64.whl (4.2 MB)
Collecting skl2onnx
  Using cached skl2onnx-1.11.2-py2.py3-none-any.whl (278 kB)
Collecting click
  Using cached click-8.1.3-py3-none-any.whl (96 kB)
Collecting joblib
  Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)
Requirement already satisfied: setuptools in c:\users\user_\translator_ja\.venv\lib\site-packages (from tika>=1.24; extra == "pipeline"->txtai[pipeline]) (47.1.0)
Collecting cffi>=1.0
  Using cached cffi-1.15.1-cp38-cp38-win_amd64.whl (178 kB)
Collecting torchvision
  Using cached torchvision-0.13.0-cp38-cp38-win_amd64.whl (1.1 MB)
Requirement already satisfied: pybind11>=2.2 in c:\users\user_\translator_ja\.venv\lib\site-packages (from fasttext>=0.9.2; extra == "pipeline"->txtai[pipeline]) (2.10.0)
Collecting python-dateutil>=2.8.1
  Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting pytz>=2020.1
  Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)
Collecting flatbuffers
  Using cached flatbuffers-2.0-py2.py3-none-any.whl (26 kB)
Collecting protobuf
  Using cached protobuf-4.21.2-cp38-cp38-win_amd64.whl (524 kB)
Collecting colorama; platform_system == "Windows"
  Using cached colorama-0.4.5-py2.py3-none-any.whl (16 kB)
Collecting charset-normalizer<3,>=2
  Using cached charset_normalizer-2.1.0-py3-none-any.whl (39 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2022.6.15-py3-none-any.whl (160 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.10-py2.py3-none-any.whl (139 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.3-py3-none-any.whl (61 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
  Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)
Collecting scikit-learn>=0.19
  Using cached scikit_learn-1.1.1-cp38-cp38-win_amd64.whl (7.3 MB)
Collecting onnxconverter-common>=1.7.0
  Using cached onnxconverter_common-1.9.0-py2.py3-none-any.whl (78 kB)
Collecting pycparser
  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)
Collecting threadpoolctl>=2.0.0
  Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)
Using legacy setup.py install for imagehash, since package 'wheel' is not installed.
Using legacy setup.py install for tika, since package 'wheel' is not installed.
Using legacy setup.py install for fasttext, since package 'wheel' is not installed.
ERROR: onnx 1.12.0 has requirement protobuf<=3.20.1,>=3.12.2, but you'll have protobuf 4.21.2 which is incompatible.
Installing collected packages: typing-extensions, torch, numpy, pyyaml, pyparsing, packaging, colorama, tqdm, filelock, charset-normalizer, certifi, urllib3, idna, requests, huggingface-hub, tokenizers, regex, transformers, faiss-cpu, soupsieve, beautifulsoup4, six, scipy, pillow, PyWavelets, imagehash, sentencepiece, protobuf, onnx, joblib, threadpoolctl, scikit-learn, onnxconverter-common, skl2onnx, onnxmltools, click, nltk, tika, pycparser, cffi, soundfile, torchvision, timm, fasttext, python-dateutil, pytz, pandas, flatbuffers, onnxruntime, txtai
    Running setup.py install for imagehash ... done
    Running setup.py install for tika ... done
    Running setup.py install for fasttext ... done
Successfully installed PyWavelets-1.3.0 beautifulsoup4-4.11.1 certifi-2022.6.15 cffi-1.15.1 charset-normalizer-2.1.0 click-8.1.3 colorama-0.4.5 faiss-cpu-1.7.2 fasttext-0.9.2 filelock-3.7.1 flatbuffers-2.0 huggingface-hub-0.8.1 idna-3.3 imagehash-4.2.1 joblib-1.1.0 nltk-3.7 numpy-1.23.1 onnx-1.12.0 onnxconverter-common-1.9.0 onnxmltools-1.11.1 onnxruntime-1.11.1 packaging-21.3 pandas-1.4.3 pillow-9.2.0 protobuf-4.21.2 pycparser-2.21 pyparsing-3.0.9 python-dateutil-2.8.2 pytz-2022.1 pyyaml-6.0 regex-2022.7.9 requests-2.28.1 scikit-learn-1.1.1 scipy-1.8.1 sentencepiece-0.1.96 six-1.16.0 skl2onnx-1.11.2 soundfile-0.10.3.post1 soupsieve-2.3.2.post1 threadpoolctl-3.1.0 tika-1.24 timm-0.6.5 tokenizers-0.12.1 torch-1.12.0 torchvision-0.13.0 tqdm-4.64.0 transformers-4.20.1 txtai-4.5.0 typing-extensions-4.3.0 urllib3-1.26.10
WARNING: You are using pip version 20.1.1; however, version 22.1.2 is available.
You should consider upgrading via the 'c:\users\user_\translator_ja\.venv\scripts\python.exe -m pip install --upgrade pip' command.

仮想環境を構築し、今回は「pip install txtai[pipeline]」のコマンドを用いてインストールすると、WARNING(警告)とERROR(エラー)が出力された。

出力されたが一旦無視してスクリプトを実行する。

Traceback (most recent call last):
  File "translator_ja.py", line 1, in 
    from txtai.pipeline import Translation
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\txtai\pipeline\__init__.py", line 15, in 
    from .train import *
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\txtai\pipeline\train\__init__.py", line 5, in 
    from .hfonnx import HFOnnx
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\txtai\pipeline\train\hfonnx.py", line 13, in 
    from onnxruntime.quantization import quantize_dynamic
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\onnxruntime\quantization\__init__.py", line 1, in 
    from .quantize import quantize, quantize_static, quantize_dynamic
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\onnxruntime\quantization\quantize.py", line 7, in 
    import onnx
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\onnx\__init__.py", line 6, in 
    from onnx.external_data_helper import load_external_data_for_model, write_external_data_tensors, convert_model_to_external_data
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\onnx\external_data_helper.py", line 9, in 
    from .onnx_pb import TensorProto, ModelProto, AttributeProto, GraphProto
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\onnx\onnx_pb.py", line 4, in 
    from .onnx_ml_pb2 import *  # noqa
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\onnx\onnx_ml_pb2.py", line 33, in 
    _descriptor.EnumValueDescriptor(
  File "C:\Users\user_\translator_ja\.venv\lib\site-packages\google\protobuf\descriptor.py", line 755, in __new__
    _message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates

実行すると、上記のエラーが出力された。エラーの内容を確認すると、「protoc >= 3.19.0」で再生成するか、protobufをダウングレードするなどの解決方法が記載されている。今回は、protobufをダウングレードする。(https://stackoverflow.com/questions/72441758/typeerror-descriptors-cannot-not-be-created-directly

ダウングレードするために、「pip install protobuf==3.20.*」のコマンドを用いて、ダウングレードする。

>pip install protobuf==3.20.*
Collecting protobuf==3.20.*
  Downloading protobuf-3.20.1-cp38-cp38-win_amd64.whl (904 kB)
     |████████████████████████████████| 904 kB 939 kB/s
Installing collected packages: protobuf
  Attempting uninstall: protobuf
    Found existing installation: protobuf 4.21.2
    Uninstalling protobuf-4.21.2:
      Successfully uninstalled protobuf-4.21.2
Successfully installed protobuf-3.20.1
WARNING: You are using pip version 20.1.1; however, version 22.1.2 is available.
You should consider upgrading via the 'c:\users\user_\translator_ja\.venv\scripts\python.exe -m pip install --upgrade pip' command.

ダウングレードが完了後、再度スクリプトを実行する。

>python translator_ja.py
Downloading: 100%|██████████████████████████████████████████████████████████████████| 916k/916k [00:00<00:00, 1.36MB/s]
Downloading: 100%|█████████████████████████████████████████████████████████████████████| 908/908 [00:00<00:00, 227kB/s]
Downloading: 100%|████████████████████████████████████████████████████████████████| 1.80G/1.80G [05:20<00:00, 6.04MB/s]
Downloading: 100%|████████████████████████████████████████████████████████████████| 3.54M/3.54M [00:02<00:00, 1.77MB/s]
Downloading: 100%|████████████████████████████████████████████████████████████████| 2.31M/2.31M [00:00<00:00, 2.94MB/s]
Downloading: 100%|█████████████████████████████████████████████████████████████████████| 272/272 [00:00<00:00, 267kB/s]
Downloading: 100%|█████████████████████████████████████████████████████████████████| 1.11k/1.11k [00:00<00:00, 286kB/s]
今日は素晴らしい日だし、空は青い。

実行すると、今度はエラーが発生せずに、英語のテキストが日本語に翻訳されました。

コメント

タイトルとURLをコピーしました