Transformers.jsでオフライン翻訳させてみて精度はそこそこだけど翻訳速度がいまひとつだったので、Pythonで動かしてみることにしました。
翻訳結果が空文字だったり途中で切れる、長文だと勝手に意訳されまくる等、なかなか思ったようにいかなくて意外と手こずりました。
Mac純正のPythonだったりtransformersライブラリが4.34.0じゃないとlang_code_to_idが存在しなかったりもしましたし。
結果的にはAutoTokenizerの自動判別機能でうまくいきました。
長文の意訳についてはWebと同様に文章ごとに分割して実行させるようにしました。
肝心の処理速度に関してはMac Studio M2 Maxなので「mps」指定で実行するようにしたところ、Webで12分かかっていたものが3分くらいには短縮できました。
ただCPU使用率を見てもCPU側が90%、GPUが50%くらいで、CPU単体の150%くらいともうちょっとガンガン動いてくれても良いかも。
一文ごとに分割しているからマルチスレッドで処理しないのもあるでしょうが、意訳されるよりは良いですし…。
ただ翻訳結果はむしろWeb版のほうが圧倒的に安定しています。
モデルは変換精度を考慮して「facebook/nllb-200-1.3B」を当初使いましたが冗長な表現になることも多くいまひとつです。
「facebook/nllb-200-distilled-600M」だとさらにひどくなってしまいます。
これだとWebアプリのほうが使い勝手も含めて良好かなという印象でした。