使用 TensorFlow Lite 和 Firebase 將裝置上文字分類新增至您的應用程式 - Android Codelab

1. 概述

文字分類結果.png

歡迎來到使用 TensorFlow Lite 和 Firebase 進行文字分類 Codelab。在此 Codelab 中,您將學習如何使用 TensorFlow Lite 和 Firebase 訓練文字分類模型並將其部署到您的應用程式。此 Codelab 基於此 TensorFlow Lite範例

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

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

本教學展示如何建立用於情緒分析的機器學習模型,特別是將文字分類為正面或負面。這是二元分類(或二類分類)的一個範例,是一種重要且廣泛適用的機器學習問題。

你將學到什麼

  • 使用 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. 輸入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 工具列選擇「檔案」>「將專案與 Gradle 檔案同步」

7. 使用 Firebase 運行應用程式

現在您已經使用 JSON 檔案設定了google-services插件,您就可以使用 Firebase 來執行該應用程式了。連接您的 Android 設備,然後按一下執行( 執行.png )在 Android Studio 工具列中。

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

8. 訓練情緒分析模型

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

此步驟以 Python 筆記本形式呈現,您可以在 Google Colab 中開啟。您可以選擇“運行時”>“全部運行”以立即執行所有筆記本。

在 Colab 中打開

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

9. 將模型部署到 Firebase ML

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

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

此模型可以透過控制台部署,也可以使用 Firebase Admin SDK 以程式設計方式部署。在此步驟中,我們將透過控制台進行部署。

首先,打開Firebase 控制台並點擊左側導覽面板中的「機器學習」。如果您是第一次打開,請按一下「開始」。然後導航到“自訂”並點擊“新增模型”按鈕。

出現提示時,將模型命名sentiment_analysis並上傳您在上一個步驟中從 Colab 下載的檔案。

3c3c50e6ef12b3b.png

10.從 Firebase ML 下載模型

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

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

app/build.gradle.kts檔案中,新增 Firebase 機器學習依賴項。

應用程式/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 要求同步您的專案時,選擇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) {
      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();

                      }
              );

}

接下來,在 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.3.0")

當 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(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/文本分類結果.png

13. 使用更多 Firebase 功能為應用程式提供支持

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

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

要了解有關如何在應用程式中利用這些功能的更多信息,請查看以下程式碼實驗室:

14. 恭喜!

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

我們涵蓋的內容

  • TensorFlow Lite
  • Firebase 機器學習

下一步

  • 使用 Firebase 效能監控衡量模型推理速度。
  • 透過 Firebase ML 模型管理 API 將模型從 Colab 直接部署到 Firebase。
  • 新增允許使用者回饋預測結果的機制,並使用 Firebase Analytics 追蹤使用者回饋。
  • 使用 Firebase A/B 檢定對平均詞向量模型和 MobileBERT 模型進行 A/B 測試。

了解更多

有一個問題?

報告問題