理系論文翻訳アプリ「翻訳くん」

OVERVIEW

理系論文を丸ごと翻訳したときにありがちな数式のズレを克服した翻訳アプリです

本作品は理系論文を読む際に一度日本語にする翻訳する手間を省くために作成したものです。

  • 作成理由

4回生になり、研究が本格化しはじめ、学会論文などを読む機会が増えてきた。読むべきアカデミックな論文はそのほとんどが英語で書かれており、英語アレルギーの私としては大変苦心させられることになった。そこで学生の強い味方であるDeepL翻訳のPDFを丸ごと翻訳してくれる機能を用いて疑似日本語論文を作成したのが、完成したPDFを見てがっかりした。そこにはうまく処理できなかった式がぐちゃぐちゃに配置しており、混沌としたPDFがあった。とても読めたものではない。ならば1行づつ翻訳していけばいいのではないか。私はそれができるほどマメな男ではなかった。ならば英語で辞書を引きながら読めるようになるのはどうだろうか。私はそれができるほど勤勉な男ではなかった。そこで数式のズレが起きない翻訳機を自作することにした。(Pass:Honyaku1)


  • 要件定義

まず最初に行ったのは要件定義だ。まず数式ズレが起きないようにするためにはそもそも数式を翻訳しない必要がある。このアイデアは下のサイトを参考にした。

Latex形式英文の数式を配列にいれ、元の場所に目印として「QJAAA~~QJZZZ」「QEAAA~QEZZZ」を順においていき、翻訳後にまた置き換えるという手法で数式の翻訳を回避することにした。ここで2つ配列が存在するのは文中の式と別行立ての式を別々に入れるためである。

次に考えたのは翻訳の方法だ。1行づつだと文のつながりが途切れすぎるため1パラグラフづつに分解して翻訳をかけることにした。

とりあえずここまでを決定し、プログラミングへと乗り出した。

  • プログラミング

このアプリはpythonを用いて作成することにした。その理由は私が最も勉強した言語であること、そしてライブラリが充実している点だ。単純に翻訳アプリを作るのは無謀なので既存ライブラリを組み合わせることで実現させることにした。Deepl翻訳のAPIを利用してpythonで投げた文を翻訳することにし、Deeplに課金した。

まず最初の壁はどうPDFをLatex形式に変換するかだが、Nougatというライブラリを発見したためそれを利用することにした。といっても使い方はかなり手探りでどうしようするのかを把握するのにかなり時間がかかった。

これで入手したLatex形式の文から数式を抜き出し、翻訳後に返しPDFに変換する。簡単な仕組みだがこれだけで半分近くは成功したようなものだ。しかしそう上手くはいかなかった。この時点で発生した問題は目印「QE~」が翻訳機にかけると変な日本語として出力されること、PDFが出力できずプログラムが強制停止することだ。

まず前者の問題はDeeplAPIの辞書機能を用いることで解決した。これはあらかじめ翻訳しない単語をcsvにまとめておくという機能だ。日本語でのチュートリアルが存在しなかったのでこの辞書機能をどうプログラムに組み込むかもかなり苦労させられた。

後者は翻訳後の出力方法を変えることで解決した。このエラーはNougatの精度によって引き起こされているので自力ではどうしようもなかった。PDFとして出力しようして失敗すると翻訳データがパーになってしまう。そこでLatex形式で出力し、そのLatexを手動でコンパイルすることでPDFを作ることにした。この手法だと例えばうまくPDF化できない場合でも最悪手動Latexファイルをいじり直すことができる。変に頼りきりにしてはいけない。この時点で自動というコンセプトは崩壊したが、このプログラムが無になるより半自動で完成させたほうが良いと考えたからここは飲み込むことにした。

ほかにもLatex形式からPDFに変換する場合に#などの記号が文中にあるとコンパイルできないなどの問題が発生したが一括置換で何とかすることにした。こうして一応実用化に耐えうる翻訳アプリが完成させることができた。これを「翻訳くん」と名付けた。

  • 実際に使用

画質は荒いが、左の英語論文を翻訳すると右のようになった。読んでみた感じ自然な文章で、内容把握程度なら問題なく使用できると感じた。(Pass:Honyaku2)


  • 翻訳くんの今後

翻訳くんの今後のビジョンとして完全な全自動の実現を目標にしたい。その手法として1つ考えているのがChatGDPの連携だ。出力されたLatexをChatGDPにAPIで流すことで自動修復できるのではいう構想はある。しかしChatGDPの精度とDeepl+ChatGDPで二重にお金を取られることを考えたら、いったんこのままでもいいかな。