1. 總覽
歡迎來到「使用 TensorFlow Lite 和 Firebase 進行文字分類」程式碼研究室。在本程式碼研究室中,您將瞭解如何使用 TensorFlow Lite 和 Firebase,訓練及部署文字分類模型至應用程式。本程式碼研究室以這個 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
目錄 ( ) (依序選取「File」 >「Open」 > .../codelab-textclassification-android-master/start)。
您現在應該已在 Android Studio 中開啟起始專案。
4. 執行範例應用程式
將專案匯入 Android Studio 後,即可首次執行應用程式。連線至 Android 裝置,然後按一下 Android Studio 工具列中的「Run」 ( )。
應用程式應會在裝置上啟動。其中只包含簡單的 UI,方便您在後續步驟中整合及測試文字分類模型。此時若嘗試預測情緒,應用程式只會傳回一些虛擬結果。
5. 建立 Firebase 控制台專案
將 Firebase 新增至專案
- 前往 Firebase 控制台。
- 選取「新增專案」。
- 選取或輸入專案名稱。
- 按照 Firebase 控制台中的剩餘設定步驟操作,然後按一下「建立專案」(如果您使用現有的 Google 專案,則為「新增 Firebase」)。
6. 將 Firebase 新增至應用程式
- 在新的專案總覽畫面中,按一下 Android 圖示來啟動設定工作流程。
- 輸入程式碼研究室的套件名稱:
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」 ( )。
應用程式應會在裝置上啟動。此時,您的應用程式仍應建構成功。
8. 訓練情緒分析模型
我們將使用 TensorFlow Lite Model Maker 訓練文字分類模型,預測特定文字的情緒。
這個步驟會以 Python 筆記本的形式呈現,您可以在 Google Colab 中開啟。您可以選擇「執行階段」>「全部執行」,一次執行所有筆記本。
在 Colab 中開啟
完成這個步驟後,您將擁有可部署至行動應用程式的 TensorFlow Lite 情緒分析模型。
9. 將模型部署至 Firebase ML
將模型部署至 Firebase ML 的主要好處有兩個:
- 我們可以縮減應用程式安裝大小,並只在需要時下載模型
- 模型可以定期更新,且發布週期與整個應用程式不同
您可以透過控制台部署模型,也可以使用 Firebase Admin SDK 以程式輔助方式部署。在本步驟中,我們將透過控制台部署。
首先,開啟 Firebase 控制台,然後點選左側導覽面板中的「機器學習」。如果是第一次開啟,請按一下「開始使用」。然後前往「自訂」,按一下「新增模型」按鈕。
系統出現提示時,請將模型命名為 sentiment_analysis
,並上傳您在上一個步驟中從 Colab 下載的檔案。
10. 從 Firebase ML 下載模型
由於 TFLite 模型可能會變得相當大,因此選擇何時從 Firebase 將遠端模型下載到應用程式中,可能是一項棘手的任務。理想情況下,我們希望避免在應用程式啟動時立即載入模型,因為如果模型只用於一項功能,而使用者從未使用該功能,我們就會無故下載大量資料。我們也可以設定下載選項,例如只在連上 Wi-Fi 時擷取模型。如要確保即使沒有網路連線也能使用模型,請務必將模型與應用程式分開打包,做為備份。
為求簡化,我們會移除預設的隨附模型,並在應用程式首次啟動時,一律從 Firebase 下載模型。這樣一來,執行情緒分析時,您就能確保推論作業是使用 Firebase 提供的模型。
在 app/build.gradle.kts
檔案中,新增 Firebase ML 依附元件。
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 Task Library (Text)。
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
執行個體後,您只需呼叫單一方法,即可執行情緒分析。
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」 ( )。
應用程式應能正確預測你輸入的電影評論所表達的情緒。
13. 運用更多 Firebase 功能強化應用程式
除了代管 TFLite 模型,Firebase 還提供多項功能,可強化機器學習用途:
- Firebase Performance Monitoring,用於評估在使用者裝置上執行的模型推論速度。
- Firebase Analytics 可評估使用者反應,藉此衡量模型在正式環境中的成效。
- Firebase A/B 測試,可測試多個版本的模型
- 還記得我們稍早訓練了兩個版本的 TFLite 模型嗎?A/B 測試是找出實際工作環境中成效較佳版本的好方法!
如要進一步瞭解如何在應用程式中運用這些功能,請參閱下列程式碼研究室:
14. 恭喜!
在本程式碼研究室中,您已瞭解如何訓練情緒分析 TFLite 模型,並使用 Firebase 將模型部署至行動應用程式。如要進一步瞭解 TFLite 和 Firebase,請參閱其他 TFLite 範例和 Firebase 入門指南。
涵蓋內容
- TensorFlow Lite
- Firebase ML
後續步驟
- 使用 Firebase Performance Monitoring 評估模型推論速度。
- 透過 Firebase ML 模型管理 API,直接從 Colab 將模型部署至 Firebase。
- 新增機制,讓使用者針對預測結果提供意見回饋,並使用 Firebase Analytics 追蹤使用者意見回饋。
- 使用 Firebase A/B 測試,對 Average Word Vector 模型和 MobileBERT 模型進行 A/B 測試。