1. 總覽
歡迎來到 TensorFlow Lite 和 Firebase 程式碼研究室:文字分類。在這個程式碼研究室中,您將瞭解如何使用 TensorFlow Lite 和 Firebase 訓練文字分類模型,並部署至應用程式。本程式碼研究室是以這個 TensorFlow Lite 範例為基礎。
文字分類是指根據文字內容,為文字指派標記或類別的程序。這是自然語言處理 (NLP) 中的基本工作之一,廣泛應用於情緒分析、主題標記、垃圾郵件偵測和意圖偵測等。
情緒分析是使用文字分析技巧,在文字資料中解釋情緒 (包括正面、負面和中立) 的解釋和分類。商家可透過情緒分析,在線上對話和意見回饋中,找出消費者對產品、品牌或服務的情緒。
本教學課程說明如何建構情緒分析的機器學習模型,特別是將文字分類為正面或負面。這是二元或兩類分類的範例,這是一種重要且廣泛適用的機器學習問題。
課程內容
- 使用 TensorFlow 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 檔案
新增套件名稱並選取「註冊」後,請點選「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 工具列中,依序選取「File」>「Sync Project with Gradle Files」。
7. 使用 Firebase 執行應用程式
您已使用 JSON 檔案設定 google-services
外掛程式,現在可以使用 Firebase 執行應用程式了。連結 Android 裝置,然後按一下 Android Studio 工具列中的「Run」圖示 。
應用程式應會在裝置上啟動。此時,您的應用程式應該仍可成功建構。
8. 訓練情緒分析模型
我們將使用 TensorFlow Lite Model Maker 訓練文字分類模型,以預測特定文字的情緒。
這個步驟會以 Python 筆記本的形式呈現,您可以在 Google Colab 中開啟。您可以選擇「Runtime」>「Run all」,一次執行所有筆記本。
在 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 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 要求您同步處理專案時,請選擇「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();
}
);
}
接著,在活動的 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 工作程式庫 (文字)。
app/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 裝置,然後按一下 Android Studio 工具列中的「Run」圖示 ()。
應用程式應能正確預測您輸入的電影評論情緒。
13. 運用更多 Firebase 功能強化應用程式
除了託管 TFLite 模型,Firebase 也提供其他幾項功能,可強化機器學習用途:
- Firebase 效能監控功能,可評估使用者的模型推論速度裝置。
- Firebase Analytics 可評估使用者反應,以便評估模型在實際環境中的成效。
- 使用 Firebase A/B 測試來測試模型的多個版本
- 您是否曾記得我們先前訓練了兩個版本的 TFLite 模型?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 測試,針對平均 Word Vector 模型和 MobileBERT 模型進行 A/B 版本測試。