はじめに
この度は個人でmeta翻訳という翻訳サービスを開発しました。
現在Google翻訳を筆頭に、機械翻訳サービスは乱立していて、業界としてレッドオーシャンだと思いますが、meta翻訳は複数ある翻訳サービスの中でも日本語⇄英語の翻訳では最高精度だと自負しております。
なので、個人でも頑張ればレッドオーシャンに突っ込めるくらいの機械学習サービスを開発できるというお話しをしたいと思います。
※個人開発とは思えないくらい高精度なので是非一度使ってみてください。
meta翻訳の精度
まず初めにmeta翻訳の精度を簡潔に紹介したいと思います。
専門的な文章を翻訳する場合
「storm surge」など、専門的な単語にきちんと対応できています。
また、「power」が「電力」と訳されているように、専門的な文脈も識別して翻訳します。
口語的な文章を翻訳する場合
実は専門的な文章よりも口語的な文章の方が機械翻訳では難しかったりします。
下の表のように超細かいネイティブのニュアンスを再現して翻訳します。
「やっぱ(男子より)女子がいいわ」という文に対して「prefer」という比較のニュアンスを持った単語をチョイスしていたり、「way to go」などの表現が出てきていたり、開発者の想像を超えた精度です。
私の調査の範囲ではこれ程の翻訳を出来ているサービスは他にありませんでした。
個人で開発するにあたって
meta翻訳開発にあたって、大まかに3つの部分を開発する必要があります。
- フロントエンド
- バックエンド
- 機械学習モジュール
個人開発では労力の配分が本当に重要で、これらに対する労力の配分はおよそ1:1:98です。
機械学習サービスである以上、機械学習モデルの精度があくまで最重要です。
つまり、フロントエンドとバックエンドの開発でいかに楽をするのかが肝要と考えます。
フロントエンド、バックエンドの開発
機械学習モジュールはPythonで開発されるケースが大半なので、翻訳APIにはPythonを使用し、その他の部分にはJavaScript(React)、Firebaseを使用して開発しました。
機械学習サービスを個人開発する場合、この組み合わせは強く推奨します。
(細かいフレームワークは自分が開発しやすいものを採用すれば良いと思います)
中でも、Firebaseは個人開発のデファクトスタンダードだと思います。
個人的には以下の理由から推しています。
- データベースをいちいち作成しなくて良い
- デプロイが簡単(インフラの知識がなくてもコマンド一発)
その他にもFirebaseが神たる所以は山ほどありますが、素晴らしい記事が大量にあるので、本記事では割愛します。
機械学習モジュールの開発
知識のインプットと実証の重要性
meta翻訳開発に際してキーになったと考えるプロセスは
「論文を読んで実装・実験するサイクルを回す」
ことです。
このサイクルの高速化と実験管理も当然肝要です。
私自身、meta翻訳開発にあたって数百本論文を読みました。
しかし、これら全てを実装するわけにもいきません。
実装する前には、「実装の手間」と「精度の改善幅の予想」を念入りに天秤にかけていました。
モデルの評価の重要性
論文を読んだりしていると、機械学習っぽい感じがしますが、モデルの評価はより重要です。
学習したモデルのエラーを分析し、改善の為のアルゴリズムを随時実装します。
最後に
翻訳業界でも海外サービスが猛威を奮っており、「日本語くらい日本発のサービスで」という心意気で開発を始めました。
とはいえ、開発当初は、海外サービスに対抗したり、上回ったりできるサービスを開発できるのか自分でも疑問に思うことは多々ありました。
おそらく、同じ気持ちで開発を断念されたサービスは水面下に無数にあると思います。
このような疑念で開発の手を止める人が多くいると思い、今回この記事を書くに至りました。
この記事を読んでいただき、少しでも多くの方の開発の手が進み、良いサービスが生まれる一助となれば幸いです。
twitterやmeta翻訳の技術記事では、具体的にmeta翻訳のアーキテクチャに採用した論文の話や、機械学習のトレンドなどについても触れていこうと思っておりますので、よければご覧になってください。