この記事は Christiaan Prins と Max Gubin による The Firebase Blog の記事 "ML Kit expands into NLP with Language Identification and Smart Reply " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Christiaan Prins Max Gubin
プロダクト マネージャー ソフトウェア エンジニア
本日は、ML Kit に 2 つの新機能がリリースされたことをお知らせします。それは、言語識別 とスマート リプライ です。
この 2 つの機能は、イメージや動画の処理に特化していた既存の API とは違うことに気づいた方もいらっしゃるでしょう。ML Kit が目指しているのは、分野を問わず ML を活用してもらえるように、強力で使いやすい API を提供することです。そのため、自然言語処理(NLP)用のソリューションで ML Kit を拡張できたことをうれしく思っています。
NLP は、文字や音声などの自然言語データの分析や生成を扱う ML の一分野です。今回、すばらしいことに、テキストの言語を識別する API と、チャットアプリで応答候補を提案する API の提供を開始できました。どちらの機能も、ML Kit SDK の最新バージョンがあれば完全に端末上だけで動作します。対応しているのは、iOS(9.0 以降)および Android(4.1 以降)です。
以前のメッセージの内容を元に応答を提案する
メッセージング アプリに登場している新機能に、通知アクションやアプリ内部でいくつかの応答候補をユーザーに提案するというものがあります。この機能は、忙しいときにすばやく応答したい場合や、長いメッセージを書き始める場合に極めて便利です。
新しい Smart Reply API を使うと、皆さんのアプリでも短時間で同じことを実現できます。この API は、会話内の直近 10 個のメッセージに基づいて提案を行いますが、以前のメッセージが 1 個しかなくても動作します。これは完全に端末上だけで動作するステートレスな API なので、メモリにメッセージの履歴を保持することも、サーバーにメッセージを送信することもありません。
textPlus アプリは、スマート リプライを使って応答候補の提案を行っている。
私たちは、スマート リプライが十分実用に耐えられるように、textPlus などのパートナーと密に連携してきました。そして現在、最新バージョンの textPlus アプリには、アプリ内で応答候補を提案する機能が実装されています(上のスクリーンショット)。
皆さんのアプリにも、簡単な関数を呼び出すだけでスマート リプライを追加することができます(この例では Kotlin を使っています)。
val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
.addOnSuccessListener { result ->
if (result.status == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
// The conversation's language isn't supported, so the
// the result doesn't contain any suggestions.
} else if (result.status == SmartReplySuggestionResult.STATUS_SUCCESS) {
// Task completed successfully
// ...
}
}
.addOnFailureListener {
// Task failed with an exception
// ...
}
スマート リプライのインスタンスを初期化し、直近のメッセージのリストを suggestReplies に渡すと、コールバックで提案のリストを含む result を受け取ることができます。
Smart Reply API の詳しい使い方については、ドキュメント をご覧ください。
さらに詳しく...
デベロッパーとしてこの新しい API をアプリに組み込むのは簡単ですが、内部で何が行われているのかについて知りたい方もいるでしょう。スマート リプライの中枢部分には、
TensorFlow Lite で実行される機械学習モデルと、SentencePiece テキスト エンコーディング [
1 ] および Transformer [
2 ] に基づく最新アーキテクチャが存在します。
しかし、API の開発を始めたときに気づいたのですが、デベロッパーがアプリで使えるソリューションを提供するために必要なのは、中核となる提案モデルだけではありませんでした。たとえば、悪口に応答する場合や個人的な不幸や困難が起きている場合は提案を避けられるように、問題となる可能性があるトピックを検知するモデルを追加しました。また、中核となるモデルのトレーニングが行われていない言語に対して提案を行うことがないように、言語識別の機能も含めました。スマート リプライ機能は、まず英語のサポートからリリースされます。
テキストの一部から言語を識別する
与えられたテキスト文字列が何語かというのは、検出が難しいものの役に立つ情報です。言語に依存する機能は、たくさんのアプリに搭載されています。たとえば、スペルチェック、テキストの翻訳、スマート リプライなどの機能が思い浮かぶでしょう。言語を特定したい場合、ユーザーに尋ねる代わりに、新しい Language Identification API を使うことができます。
ML Kit は、110 種類の言語 のテキストを認識します。通常は、いくつかの単語さえあれば、正確に判断できます。また高速に処理でき、iOS や Android を搭載したスマートフォンでは、1 ミリ秒から 2 ミリ秒以内に応答を返します。
Smart Reply API と同じように、関数を呼び出すことで言語を識別できます(この例では Kotlin を使っています)。
val languageIdentification =
FirebaseNaturalLanguage.getInstance().languageIdentification
languageIdentification
.identifyLanguage("¿Cómo estás?")
.addOnSuccessListener { identifiedLanguage ->
Log.i(TAG, "Identified language: $identifiedLanguage")
}
.addOnFailureListener { e ->
Log.e(TAG, "Language identification error", e)
}
identifyLanguage 関数に何文字かのテキストを渡すと、コールバックで BCP-47 言語コード を受け取ることができます。確実に言語を識別できない場合、ML Kit は未確定(undetermined)を示すコード und を返します。Language Identification API から、可能性のある言語のリストとその信頼値を受け取ることもできます。
Language Identification API の詳しい使い方については、ドキュメント をご覧ください。
さっそく使ってみましょう
ML Kit を拡張して自然言語 API を提供できることをとても嬉しく思っています。ぜひ 2 つの新しい NLP API を試してみて、感想をお聞かせください。お気づきの点などは、いつでも Firebase Talk Google Group からご連絡ください。
さらのほかの API やカテゴリを追加して ML Kit を拡張し、皆さんが今まで以上にスマートな体験をユーザーに提供できるようになることを楽しみにしています。Google I/O での ML Kit の発表もお楽しみに。
Reviewed by Khanh LeViet - Developer Relations Team