数学的にどうなのさ?

大学時代にちょっと長く数学を勉強した人の雑記。数学のこと(主に統計)や趣味、メモなどが多くなります

pythonで翻訳してみた

概要

pythonでの自然言語処理って仕事でもあんまり使わないし,今後使うことがあるのかも疑問だったが,まさかプライベートで使いたくなるとは…
とある方が作成されたソフトでも翻訳はしてくれるのだが,正直ポンk...
というわけでもっといい機能がないかと探していきついたのがM2M_100.
導入の仕方とか,ほかのものとかを忘備録としてメモしておきます.

翻訳ツールについて

翻訳ツールは今はいろいろ利用できます.Google翻訳なんかは一番有名なのかな?
最近ではdeepl翻訳なんかもありますね.
どうやらニューラル機械翻訳なるものが内部では動いているようですが,私も詳しくはわかりません.

APIの利用

できれば自動翻訳をしてほしいというのが今回の思うところ.
まず考えたのは,Google翻訳でもdeepl翻訳でもいいからpythonに文字列投げて,webサービスAPI使って訳させるということ.
ただ調べるとそこそこお値段しますね…
できればタダでやりたいという貧乏症を発揮して他の案を探してみる.

Pythonの翻訳パッケージ

たぶん一番簡単に利用できるのがgoogle_translator.インストールは下記の通り.

pip install google_translator

ただこれ非常に翻訳性能が悪く,明らかに日本語から英語への翻訳が変.そもそも日本語の翻訳が難しいとかいう問題もある気もするけど…

他にもgoogletransとか似たような名前のパッケージはあるけど,他は何故か動作確認できず.
deeplもあったけど,こっちも動かなかった.

既存の翻訳モデルを持ってくる.

そうなると自分でモデル作るってか?ってなったんですが,非常に難しいのでさすがにやめ.
ならばすでに出来上がっているモデルを拝借して使えばいいのではという考えに.
その中で見つけたのがM2M_100.

thebridge.jp

Facebookさんが作った翻訳モデルみたいですね.とりあえずこれ使うかーとなったんですが,どうやって持ってくるのか? 色々さがしてたら以下のページを発見.

pythonrepo.com

これ使えばいいんだなということでやってみた.

easyNMTのインストール

easyNMTを使うとM2M_100だけじゃなく,他の翻訳モデルを使うことができる模様.
まずはM2M_100でテストするとして,導入してみます.

fastTextのインストール

最初にやらないといけないのがfastTextのインストール.
どうやらgitからソースコード持ってきてビルドしてやらないとダメらしい.
そのためにgcc-g++やらmakeやら必要なのですが,とりあえずcygwinで入れてしまうことに.
とりあえず以下を参考にしました.

qiita.com

そしてgitのインストール.ここを参考に.

qiita.com

これでやっとコマンドプロンプト上でgitからソースコードを持ってきてビルドすることができるようになった.
以下を参考に進める.

tadaoyamaoka.hatenablog.com

コマンドは

git clone https://github.com/facebookresearch/fastText.git
cd fastText
make
pip install .

easyNMTのインストール

これは単純に

pip install easynmt

としてあげればOK.

動作確認

以下でテスト.

from easynmt import EasyNMT
model = EasyNMT('mbart50_m2m')
model.translate('これはテストです', target_lang='en')

Jupyter上で行うとIProgress not foundとでてJupyterとipywidgetsをアップデートせよとメッセージが出たが,コマンドプロンプトで行うと回避できる.
もしJupyter上で行いたい場合,どうやらnodejsのインストール,jupyter lab使うならjupyterlabextension,jupyter notebook使うならnbextensionを導入する必要があるらしい.
なお実行には約2GBのデータのダウンロードが起こるようなので注意.そこそこ時間がかかる.
初回だけではなさそう.
結果は以下の通り:

f:id:lua0810:20210801165516p:plain

翻訳精度自体は他のモデルとも比較して確認したいから時間かかりますが,ひとまずこれで自動翻訳の第一歩は踏み出せたかなと.