使用 TensorFlow Lite 和 Firebase 為您的應用添加設備上文本分類 - Android Codelab

一、概述

ac7309bdf044dae8.png

歡迎使用 TensorFlow Lite 和 Firebase 代碼實驗室進行文本分類。在此 Codelab 中,您將學習如何使用 TensorFlow Lite 和 Firebase 來訓練文本分類模型並將其部署到您的應用中。此代碼實驗室基於此 TensorFlow Lite示例

文本分類是根據文本內容為文本分配標籤或類別的過程。它是自然語言處理 (NLP) 的基本任務之一,具有廣泛的應用,例如情感分析、主題標籤、垃圾郵件檢測和意圖檢測。

情緒分析是使用文本分析技術對文本數據中的情緒(正面、負面和中性)進行解釋和分類。情緒分析使企業能夠在在線對話和反饋中識別客戶對產品、品牌或服務的情緒。

本教程展示瞭如何構建用於情感分析的機器學習模型,特別是將文本分類為正面或負面。這是二分類或二分類的示例,這是一種重要且廣泛適用的機器學習問題。

你會學到什麼

  • 使用 TF Lite Model Maker 訓練 TF Lite 情感分析模型
  • 將 TF Lite 模型部署到 Firebase ML 並從您的應用訪問它們
  • 使用 TF Lite 任務庫將 TF Lite 情緒分析模型集成到您的應用程序中

你需要什麼

  • Android Studio 版本 4.0+。
  • 示例代碼。
  • 具有 Android 4.4+ 和 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 控制台中的其餘設置步驟操作,然後點擊創建項目(或添加 Firebase,如果您使用的是現有的 Google 項目)。

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文件,將 Firebase 添加到您的應用中。

google-services 插件使用 google-services.json 文件將您的應用程序配置為使用 Firebase。

將您的項目與 gradle 文件同步

為確保您的應用程序可以使用所有依賴項,此時您應該將項目與 gradle 文件同步。從 Android Studio 工具欄中選擇File > Sync Project with Gradle Files

7. 使用 Firebase 運行應用

現在您已經使用 JSON 文件配置了google-services插件,您可以使用 Firebase 運行該應用程序了。連接您的 Android 設備,然後單擊運行( 執行.png ) 在 Android Studio 工具欄中。

該應用程序應在您的設備上啟動。此時,您的應用程序應該仍然可以成功構建。

8. 訓練情感分析模型

我們將使用 TensorFlow Lite Model Maker 訓練文本分類模型來預測給定文本的情緒。

此步驟以 Python 筆記本的形式呈現,您可以在 Google Colab 中打開它。您可以選擇Runtime > Run all以一次執行所有 notebook。

在 Colab 中打開

完成此步驟後,您將擁有一個可部署到移動應用程序的 TensorFlow Lite 情緒分析模型。

9. 將模型部署到 Firebase ML

將模型部署到 Firebase ML 非常有用,主要有兩個原因:

  1. 我們可以保持應用程序安裝大小較小,僅在需要時下載模型
  2. 該模型可以定期更新,並且發布週期與整個應用程序不同

該模型可以通過控制台部署,也可以使用 Firebase Admin SDK 以編程方式部署。在這一步中,我們將通過控制台進行部署。

首先,打開Firebase 控制台並單擊左側導航面板中的機器學習。如果您是第一次打開,請單擊“開始”。然後導航到“自定義”並單擊“添加模型”按鈕。

出現提示時,將模型命名為 Sentiment_analysis 並上傳您在上一步中從sentiment_analysis下載的文件。

3c3c50e6ef12b3b.png

10. 從 Firebase ML 下載模型

選擇何時將遠程模型從 Firebase 下載到您的應用中可能會很棘手,因為 TFLite 模型可能會變得相對較大。理想情況下,我們希望避免在應用程序啟動時立即加載模型,因為如果我們的模型僅用於一個功能並且用戶從不使用該功能,我們將無緣無故下載大量數據。我們還可以設置下載選項,例如僅在連接到 wifi 時獲取模型。如果您想確保模型在沒有網絡連接的情況下也可用,那麼在沒有應用程序的情況下捆綁它作為備份也很重要。

為簡單起見,我們將刪除默認捆綁模型,並始終在應用首次啟動時從 Firebase 下載模型。這樣,在運行情緒分析時,您可以確保推理正在使用 Firebase 提供的模型運行。

app/build.gradle文件中,添加 Firebase 機器學習依賴項。

應用程序/build.gradle

找到這條評論:

// TODO 1: Add Firebase ML dependency

然後加:

implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.3'

當 Android Studio 要求同步您的項目時,請選擇Sync Now

然後讓我們添加一些代碼來從 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) {
  final FirebaseCustomRemoteModel remoteModel =
      new FirebaseCustomRemoteModel
          .Builder(modelName)
          .build();
  FirebaseModelDownloadConditions conditions =
      new FirebaseModelDownloadConditions.Builder()
          .requireWifi()
          .build();
  final FirebaseModelManager firebaseModelManager =
      FirebaseModelManager.getInstance();
  firebaseModelManager
      .download(remoteModel, conditions)
      .continueWithTask(task ->
          firebaseModelManager.getLatestModelFile(remoteModel)
      )
      .continueWith(executorService, (Continuation<File, Void>) task -> {
        // Initialize a text classifier instance with the model
        File modelFile = task.getResult();

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

        // Enable predict button
        predictButton.setEnabled(true);
        return null;
      })
      .addOnFailureListener(e -> {
        Log.e(TAG, "Failed to download and initialize the model. ", e);
        Toast.makeText(
            MainActivity.this,
            "Model download failed, please check your connection.",
            Toast.LENGTH_LONG)
            .show();
        predictButton.setEnabled(false);
      });
}

接下來,在 Activity 的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 任務庫(文本)。

應用程序/build.gradle

找到這條評論:

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

然後加:

implementation 'org.tensorflow:tensorflow-lite-task-text:0.0.0-nightly'

當 Android Studio 要求同步您的項目時,請選擇Sync Now

初始化一個文本分類器

然後我們將使用任務庫的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(modelFile);

分類文本

設置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 工具欄中。

該應用程序應該能夠正確預測您輸入的電影評論的情緒。

ac7309bdf044dae8.png

13. 使用更多 Firebase 功能啟動應用程序

除了託管您的 TFLite 模型,Firebase 還提供了一些其他功能來增強您的機器學習用例:

  • Firebase 性能監控可測量您在用戶設備上運行的模型推理速度。
  • Firebase Analytics 通過衡量用戶反應來衡量您的模型在生產中的表現。
  • Firebase A/B 測試,用於測試模型的多個版本
  • 你還記得我們之前訓練了兩個版本的 TFLite 模型嗎? A/B 測試是找出哪個版本在生產中表現更好的好方法!

要詳細了解如何在您的應用中利用這些功能,請查看以下代碼實驗室:

14. 恭喜!

在此 Codelab 中,您學習瞭如何訓練情緒分析 TFLite 模型並使用 Firebase 將其部署到您的移動應用程序中。要了解有關 TFLite 和 Firebase 的更多信息,請查看其他 TFLite示例和 Firebase入門指南。

我們涵蓋的內容

  • TensorFlow 精簡版
  • Firebase 機器學習

下一步

  • 使用 Firebase 性能監控衡量您的模型推理速度。
  • 通過 Firebase ML 模型管理 API 將模型從 Colab 直接部署到 Firebase。
  • 添加允許用戶對預測結果進行反饋的機制,並使用 Firebase Analytics 跟踪用戶反饋。
  • 使用 Firebase A/B 測試對平均詞向量模型和 MobileBERT 模型進行 A/B 測試。

學到更多

有一個問題?

報告問題