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 中開啟「Start」專案。
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 服務外掛程式會使用 google-services.json 檔案,將您的應用程式設定為使用 Firebase。
將專案與 Gradle 檔案同步處理
為確保應用程式能夠使用所有依附元件,請在此時將專案與 Gradle 檔案同步處理。選取「檔案」>透過 Android Studio 工具列同步處理專案與 Gradle 檔案。
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 下載模型
從 Firebase 將遠端模型下載至應用程式可能並不容易,因為 TFLite 模型的大小可能相對龐大。最理想的狀況是希望避免在應用程式啟動時立即載入模型,因為如果模型僅用於其中一項功能,且使用者從未使用該功能,我們就沒有理由下載大量資料。你也可以設定下載選項,例如只在連上 Wi-Fi 時擷取模型。如要確保模型在沒有網路連線的情況下也能使用,請務必將模型綁定做為備份使用。
為求簡單起見,在首次啟動時,我們會移除預設套裝組合模型,並一律從 Firebase 下載模型。這樣一來,執行情緒分析時,就能確保推論是以 Firebase 提供的模型執行。
在 app/build.gradle.kts
檔案中,新增 Firebase 機器學習依附元件。
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 數據分析會評估使用者反應,藉此評估模型在正式環境中的成效。
- 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 數據分析追蹤使用者的意見回饋。
- 使用 Firebase A/B 測試,針對平均 Word Vector 模型和 MobileBERT 模型進行 A/B 版本測試。