Firebase ML On-Device Translate API
はじめに
Firebase ML のオンデバイス翻訳が Google Translate と同等の翻訳レベルでかつ無料で使えると聞いたのでちょっと試してみました。基本、オンデバイス翻訳のリンク先に書いてあることと同じです。
オンデバイス翻訳は59カ国語をサポートし、翻訳に必要なデータファイルをデバイスにダウンロードしてローカルで処理を行います。言語のマッピングは全パターンサポートしている訳ではなく、英語を挟んだ翻訳になります。例えば、中国語を日本語に翻訳する際は、一度英語に翻訳してから日本語に翻訳されます。
手順
Firebase のアプリ登録して google-services.json プロジェクトに追加します(省略)。
以下を dependencies に追加します。
dependencies {
// ...
implementation 'com.google.firebase:firebase-ml-natural-language:19.0.0'
implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:19.0.0'
}
FirebaseNaturalLanguage のインスタンスを生成します。FirebaseTranslatorOptions で翻訳元・先を指定します。
翻訳元の言語がわからない場合向けに Language Identification API と云うのもあります。
val options = FirebaseTranslatorOptions.Builder()
.setSourceLanguage(FirebaseTranslateLanguage.EN)
.setTargetLanguage(FirebaseTranslateLanguage.JA)
.build()
translator = FirebaseNaturalLanguage.getInstance().getTranslator(options)
translator.downloadModelIfNeeded()
.addOnSuccessListener {
// 言語データダウンロード完了
}
.addOnFailureListener { e ->
// エラー
}
上の準備が完了したら実際に翻訳処理を行います。
translator.translate(text)
.addOnSuccessListener { translatedText ->
// 成功したので翻訳結果表示の処理を行う
}
.addOnFailureListener { e ->
// エラー
}}
これだけです。簡単すぎ。実際にアプリにして動かしてみるとこんな感じに。

いまいち🤔 なんか切れてるし。Google Translate で同じ文章を訳すと、
ぜんぜん違う。

まぁ、合っている。でも思っていたのと違う。Google Translate では、
おわりに
とりあえず Google Translate と同等の翻訳精度ではなさそうです。ML を活用した翻訳といってもデバイス上に落とせる程度(言語により25MB~35MBのデータ)でできる範囲のものでこんなものなのかもしれません。英語からの直接翻訳でこの精度だと他の言語 ⇒ 英語 ⇒ 日本語だともっと期待できない結果な気がします。それでも、日本語への翻訳のハードルが高いだけで他言語だとそうでもないのかも知れないし、無料で組み込めることを考えると活用できるシーンがあると思います。有料で精度の高い Cloud Translation API と云うサービスも提供されているので今度試してみたいと思います。