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

1。概要

テキスト分類結果.png

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

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

感情分析は、テキスト分析技術を使用して、テキスト データ内の感情 (肯定的、否定的、中立的) を解釈および分類することです。センチメント分析を使用すると、企業はオンラインでの会話やフィードバックから、製品、ブランド、サービスに対する顧客のセンチメントを特定できます。

このチュートリアルでは、感情分析、特にテキストをポジティブまたはネガティブに分類するための機械学習モデルを構築する方法を説明します。これは、重要かつ広く適用可能な種類の機械学習問題であるバイナリ (つまり 2 クラス) 分類の例です。

学べること

  • TF Lite Model Maker を使用して TF Lite 感情分析モデルをトレーニングする
  • TF Lite モデルを Firebase ML にデプロイし、アプリからアクセスする
  • TF Lite タスク ライブラリを使用して、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 ) サンプル コードをダウンロードします ( [ファイル] > [開く] > [.../codelab-textclassification-android-master/start])。

これで、Android Studio で開始プロジェクトが開いたはずです。

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

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

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

2fb4e69fafb2e3ed.png

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

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

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

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

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

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

パッケージ名を追加して [登録]** を選択した後、[Download 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 ツールバーから[ファイル] > [プロジェクトを Gradle ファイルと同期]を選択します。

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

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

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

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

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

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

コラボで開く

このステップを完了すると、モバイル アプリにデプロイする準備ができた TensorFlow Lite センチメント分析モデルが完成します。

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

モデルを Firebase ML にデプロイすると、主に次の 2 つの理由で役立ちます。

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

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

まず、 Firebase コンソールを開き、左側のナビゲーション パネルで [機械学習] をクリックします。初めて開く場合は、「始める」をクリックしてください。次に、「カスタム」に移動し、「モデルの追加」ボタンをクリックします。

プロンプトが表示されたら、モデルに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 タスク ライブラリを使用すると、わずか数行のコードで TensorFlow Lite モデルをアプリに統合できます。 Firebase からダウンロードした TensorFlow Lite モデルを使用してNLClassifierインスタンスを初期化します。次に、それを使用してアプリユーザーから入力されたテキストを分類し、結果を UI に表示します。

依存関係を追加する

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

アプリ/ビルド.gradle

このコメントを見つけてください:

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

それから加えて:

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

Android Studio からプロジェクトを同期するように求められたら、 [今すぐ同期]を選択します。

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

次に、タスク ライブラリの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インスタンスが設定されると、単一のメソッド呼び出しでセンチメント分析を実行できます。

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 デバイスを接続し、 「実行」( 実行.png )Android Studio ツールバー。

アプリは、入力した映画レビューの感情を正確に予測できる必要があります。

img/text-classification-result.png

13. Firebase 機能を追加してアプリをパワーアップする

TFLite モデルをホストするだけでなく、Firebase は機械学習のユースケースを強化するための他の機能をいくつか提供します。

  • Firebase Performance Monitoring は、ユーザーのデバイス上で実行されているモデルの推論速度を測定します。
  • Firebase Analytics は、ユーザーの反応を測定することで、本番環境でのモデルのパフォーマンスを測定します。
  • モデルの複数のバージョンをテストする Firebase A/B Testing
  • 以前に TFLite モデルの 2 つのバージョンをトレーニングしたことを覚えていますか? A/B テストは、実稼働環境でどのバージョンのパフォーマンスが優れているかを確認する良い方法です。

アプリでこれらの機能を活用する方法の詳細については、以下のコードラボを確認してください。

14. おめでとうございます!

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

私たちがカバーした内容

  • TensorFlow Lite
  • Firebase ML

次のステップ

  • Firebase Performance Monitoring を使用してモデルの推論速度を測定します。
  • Firebase ML Model Management API を介して、Colab から Firebase にモデルを直接デプロイします。
  • ユーザーが予測結果についてフィードバックできるようにするメカニズムを追加し、Firebase Analytics を使用してユーザーのフィードバックを追跡します。
  • Firebase A/B テストを使用して、Average Word Vector モデルと MobileBERT モデルを A/B テストします。

もっと詳しく知る

質問があります?

問題を報告する