TensorFlow Lite と Firebase を使用してアプリにオンデバイスのテキスト分類を追加する - Android Codelab

TensorFlow Lite と Firebase を使用してアプリにオンデバイスのテキスト分類を追加する - Android Codelab

この Codelab について

subject最終更新: 9月 4, 2024
account_circle作成者: ulukaya@, khanhlvg@

1. 概要

text-classification-result.png

TensorFlow Lite と Firebase によるテキスト分類の Codelab へようこそ。この Codelab では、TensorFlow Lite と Firebase を使用してテキスト分類モデルをトレーニングし、アプリにデプロイする方法を学びます。この Codelab は、この TensorFlow Lite のサンプルに基づいています。

テキスト分類は、テキストの内容に応じてタグまたはカテゴリを割り当てるプロセスです。これは、感情分析、トピックのラベル付け、スパム検出、インテント検出など、幅広いアプリケーションを持つ自然言語処理(NLP)の基本的なタスクの一つです。

感情分析とは、テキスト分析手法を使用してテキストデータ内の感情(ポジティブ、ネガティブ、ニュートラル)を解釈し、分類することです。感情分析を使用すると、オンラインでの会話やフィードバックから、商品、ブランド、サービスに対する顧客の感情を特定できます。

このチュートリアルでは、感情分析用の機械学習モデルを構築する方法について説明します。具体的には、テキストをポジティブまたはネガティブに分類します。これは、バイナリ(2 クラス)分類の例です。これは、広範囲に適用できる重要な機械学習の問題です。

学習内容

  • TF Lite Model Maker を使用して TF Lite 感情分析モデルをトレーニングする
  • TF Lite モデルを Firebase ML にデプロイし、アプリからアクセスする
  • TF Lite Task Library を使用して TF Lite 感情分析モデルをアプリに統合する

必要なもの

  • 最新の Android Studio バージョン。
  • サンプルコード。
  • Android 5.0 以降および Google Play 開発者サービス 9.8 以降を搭載したテストデバイス、または Google Play 開発者サービス 9.8 以降を搭載したエミュレータ
  • デバイスを使用している場合は、接続ケーブル。

このチュートリアルをどのように使用されますか?

Android アプリ作成のご経験についてお答えください。

2. サンプルコードを取得する

コマンドラインから GitHub リポジトリのクローンを作成します。

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

git をインストールしていない場合は、GitHub ページから、または こちらのリンクをクリックしてサンプル プロジェクトをダウンロードすることもできます。

3. スターター アプリをインポートする

Android Studio で、サンプルコードのダウンロードから codelab-textclassification-android-master ディレクトリ(android_studio_folder.png)を選択します([File] > [Open] > .../codelab-textclassification-android-master/start)。

Android Studio で開始プロジェクトが開いているはずです。

4. スターター アプリを実行する

プロジェクトを Android Studio にインポートしたので、アプリを初めて実行する準備ができました。Android デバイスを接続し、Android Studio ツールバーの [Run](execute.png)をクリックします。

デバイスでアプリが起動するはずです。次の手順でテキスト分類モデルを簡単に統合してテストできるように、シンプルな UI のみが含まれています。この時点で感情を予測しようとすると、アプリはダミーの結果のみを返します。

2fb4e69fafb2e3ed.png

5. Firebase コンソール プロジェクトを作成する

プロジェクトに Firebase を追加する

  1. Firebase コンソールに移動します。
  2. [プロジェクトを追加] を選択します。
  3. プロジェクト名を選択または入力します。
  4. Firebase コンソールで残りの設定手順を実施した後、[プロジェクトを作成](既存の Google プロジェクトを使用する場合は [Firebase を追加])をクリックします。

6. アプリに Firebase を追加する

  1. 新しいプロジェクトの概要画面で、Android アイコンをクリックして設定ワークフローを起動します。
  2. Codelab のパッケージ名(org.tensorflow.lite.codelabs.textclassification)を入力します。

アプリに google-services.json ファイルを追加する

パッケージ名を追加して [登録] を選択したら、[google-services.json をダウンロード] をクリックして Firebase Android 構成ファイルを取得し、google-services.json ファイルをプロジェクトの *app* ディレクトリにコピーします。

google-services プラグインをアプリに追加する

Firebase コンソールで build.gradle.kts ファイルを更新し、Firebase をアプリに追加する手順に沿って操作します。

google-services プラグインは、google-services.json ファイルを使用して、Firebase を使用するようにアプリを構成します。

プロジェクトを Gradle ファイルと同期する

すべての依存関係がアプリで使用可能であることを確認するには、この時点でプロジェクトを Gradle ファイルと同期する必要があります。Android Studio のツールバーから [File] > [Sync Project with Gradle Files] を選択します。

7. Firebase でアプリを実行する

JSON ファイルで google-services プラグインを構成したので、Firebase でアプリを実行する準備が整いました。Android デバイスを接続し、Android Studio ツールバーの [Run](execute.png)をクリックします。

デバイスでアプリが起動するはずです。この時点で、アプリは正常にビルドされるはずです。

8. 感情分析モデルをトレーニングする

TensorFlow Lite Model Maker を使用して、特定のテキストの感情を予測するテキスト分類モデルをトレーニングします。

このステップは、Google Colab で開くことができる Python ノートブックとして示されています。[ランタイム] > [すべて実行] を選択して、ノートブックをすべて一度に実行できます。

Colab で開く

この手順を完了すると、モバイルアプリにデプロイできる TensorFlow Lite 感情分析モデルが作成されます。

9. Firebase ML にモデルをデプロイする

モデルを Firebase ML にデプロイする主な理由は 2 つあります。

  1. アプリのインストール サイズを小さく抑え、必要な場合にのみモデルをダウンロードできる
  2. モデルは定期的に更新でき、アプリ全体とは異なるリリース サイクルで更新できます

モデルは、コンソールから、または Firebase Admin SDK を使用してプログラムでデプロイできます。このステップでは、コンソールからデプロイします。

まず、Firebase コンソールを開き、左側のナビゲーション パネルで [Machine Learning] をクリックします。初めて開く場合は、[使ってみる] をクリックします。[カスタム] に移動し、[モデルを追加] ボタンをクリックします。

プロンプトが表示されたら、モデルに sentiment_analysis という名前を付け、前の手順で Colab からダウンロードしたファイルをアップロードします。

3c3c50e6ef12b3b.png

10. Firebase ML からモデルをダウンロードする

TFLite モデルは比較的大きくなるため、Firebase からアプリにリモートモデルをダウンロードするタイミングを選択するのは難しい場合があります。理想的には、アプリの起動時にモデルをすぐに読み込まないようにします。モデルが 1 つの機能にのみ使用され、ユーザーがその機能を使用しない場合は、無駄に大量のデータをダウンロードすることになります。Wi-Fi に接続されているときにのみモデルを取得するなど、ダウンロード オプションを設定することもできます。ネットワーク接続がなくてもモデルを使用できるようにするには、アプリなしのバックアップとしてモデルをバンドルすることも重要です。

わかりやすくするため、デフォルトのバンドルモデルを削除し、アプリが初めて起動したときに常に Firebase からモデルをダウンロードします。これにより、感情分析を実行するときに、Firebase から提供されたモデルで推論が実行されていることを確認できます。

app/build.gradle.kts ファイルに Firebase Machine Learning の依存関係を追加します。

app/build.gradle.kts

次のコメントを見つけます。

// TODO 1: Add Firebase ML dependency

次に、次のパラメータを追加します。

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

Android Studio からプロジェクトの同期を求められた場合は、[今すぐ同期] を選択します。

次に、Firebase からモデルをダウンロードするコードを追加します。

MainActivity.java

次のコメントを見つけます。

// TODO 2: Implement a method to download TFLite model from Firebase

次に、次のパラメータを追加します。

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

次に、アクティビティの onCreate メソッドで downloadModel メソッドを呼び出します。

MainActivity.java

次のコメントを見つけます。

// TODO 3: Call the method to download TFLite model

次に、次のパラメータを追加します。

downloadModel("sentiment_analysis");

11. モデルをアプリに統合する

Tensorflow Lite Task Library を使用すると、数行のコードで TensorFlow Lite モデルをアプリに統合できます。Firebase からダウンロードした TensorFlow Lite モデルを使用して NLClassifier インスタンスを初期化します。次に、このモデルを使用して、アプリ ユーザーからのテキスト入力を分類し、結果を UI に表示します。

依存関係を追加する

アプリの Gradle ファイルに移動し、アプリの依存関係に TensorFlow Lite タスク ライブラリ(テキスト)を追加します。

app/build.gradle

次のコメントを見つけます。

// TODO 4: Add TFLite Task API (Text) dependency

次に、次のパラメータを追加します。

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

Android Studio からプロジェクトの同期を求められた場合は、[今すぐ同期] を選択します。

テキスト分類器を初期化する

次に、Task Library の NLClassifier を使用して、Firebase からダウンロードした感情分析モデルを読み込みます。

MainActivity.java

NLClassifier インスタンス変数を宣言しましょう。次のコメントを見つけます。

// TODO 5: Define a NLClassifier variable

次に、次のパラメータを追加します。

private NLClassifier textClassifier;

Firebase からダウンロードした感情分析モデルを使用して、textClassifier 変数を初期化します。次のコメントを見つけます。

// TODO 6: Initialize a TextClassifier with the downloaded model

次に、次のパラメータを追加します。

textClassifier = NLClassifier.createFromFile(model.getFile());

テキストを分類する

textClassifier インスタンスを設定したら、1 回のメソッド呼び出しで感情分析を実行できます。

MainActivity.java

次のコメントを見つけます。

// TODO 7: Run sentiment analysis on the input text

次に、次のパラメータを追加します。

List<Category> results = textClassifier.classify(text);

後処理を実装する

最後に、モデルの出力を説明的なテキストに変換して画面に表示します。

MainActivity.java

次のコメントを見つけます。

// TODO 8: Convert the result to a human-readable text

ダミーの結果テキストを生成するコードを削除します。

String textToShow = "Dummy classification result.\n";

次に、次のパラメータを追加します。

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

12. 最終的なアプリを実行する

感情分析モデルをアプリに統合したので、テストしてみましょう。Android デバイスを接続し、Android Studio ツールバーの [Run](execute.png)をクリックします。

入力した映画レビューの感情をアプリが正しく予測できるはずです。

img/text-classification-result.png

13. Firebase のその他の機能を使用してアプリを強化する

Firebase には、TFLite モデルをホストする以外にも、機械学習のユースケースを強化するための機能がいくつか用意されています。

  • Firebase Performance Monitoring: ユーザーのデバイスで実行されるモデル推論速度を測定します。
  • Firebase アナリティクス: ユーザーの反応を測定して、モデルが本番環境でどれだけ優れているかを測定します。
  • Firebase A/B Testing を使用してモデルの複数のバージョンをテストする
  • 前のセクションで、2 つのバージョンの TFLite モデルをトレーニングしたことを覚えていますか?A/B テストは、本番環境でパフォーマンスが優れているバージョンを特定するのに適した方法です。

アプリでこれらの機能を活用する方法について詳しくは、以下の Codelab をご覧ください。

14. お疲れさまでした

この Codelab では、感情分析 TFLite モデルをトレーニングし、Firebase を使用してモバイルアプリにデプロイする方法を学習しました。TFLite と Firebase の詳細については、他の TFLite サンプルと Firebase のスタートガイドをご覧ください。

学習した内容

  • TensorFlow Lite
  • Firebase ML

次のステップ

  • Firebase Performance Monitoring を使用してモデルの推論速度を測定する。
  • Firebase ML Model Management API を介して、Colab から Firebase にモデルを直接デプロイします。
  • 予測結果についてユーザーがフィードバックできるようにするメカニズムを追加し、Firebase アナリティクスを使用してユーザー フィードバックをトラッキングします。
  • Firebase A/B Testing を使用して、平均単語ベクトルモデルと MobileBERT モデルの A/B テストを実施します。

詳細

質問がある場合

問題を報告する