1. 總覽
歡迎來到「使用 TensorFlow Lite 和 Firebase 進行文字分類」程式碼研究室。在本程式碼研究室中,您將瞭解如何使用 TensorFlow Lite 和 Firebase,訓練及部署文字分類模型至應用程式。本程式碼研究室以這個 TensorFlow Lite 範例為基礎。
文字分類是指根據文字內容指派標記或類別的程序。這是自然語言處理 (NLP) 的基本工作之一,廣泛應用於情緒分析、主題標籤、垃圾內容偵測和意圖偵測等。
情緒分析是指使用文字分析技術,解讀及分類文字資料中的情緒 (正面、負面和中性)。商家可以透過情緒分析,瞭解顧客在線上對話和意見回饋中,對產品、品牌或服務的情緒。
本教學課程說明如何建構機器學習模型來進行情緒分析,特別是將文字分類為正面或負面。這是二元 (或雙類) 分類的範例,也是一種重要且廣泛適用的機器學習問題。
課程內容
- 使用 TF Lite Model Maker 訓練 TF Lite 情緒分析模型
- 將 TF Lite 模型部署至 Firebase ML,並從應用程式存取模型
- 使用 Firebase Analytics 追蹤使用者意見回饋,評估模型準確度
- 透過 Firebase Performance Monitoring 監控設定檔模型成效
- 透過遠端設定選取要載入的多個已部署模型
- 透過 Firebase A/B 測試實驗不同模型
事前準備
- Xcode 11 以上版本
- CocoaPods 1.9.1 以上版本
您會如何使用本教學課程?
您對建構 Android 應用程式的體驗滿意嗎?
2. 建立 Firebase 控制台專案
將 Firebase 新增至專案
- 前往 Firebase 控制台。
- 選取「建立新專案」,並將專案命名為「Firebase ML iOS Codelab」。
3. 取得範例專案
下載程式碼
首先,請複製範例專案,並在專案目錄中執行 pod update
:
git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git cd codelab-textclassification-ios pod install --repo-update
如果沒有安裝 git,也可以從 GitHub 頁面下載範例專案,或按一下這個連結。下載專案後,請在 Xcode 中執行專案,並試用文字分類功能,瞭解其運作方式。
設定 Firebase
請按照文件建立新的 Firebase 專案。取得專案後,請從 Firebase 主控台下載專案的 GoogleService-Info.plist
檔案,並拖曳至 Xcode 專案的根目錄。
將 Firebase 新增至 Podfile,然後執行 pod install。
pod 'FirebaseMLModelDownloader', '9.3.0-beta'
在 AppDelegate
的 didFinishLaunchingWithOptions
方法中,於檔案頂端匯入 Firebase
import FirebaseCore
並新增呼叫來設定 Firebase。
FirebaseApp.configure()
再次執行專案,確認應用程式設定正確無誤,且不會在啟動時異常終止。
4. 訓練情緒分析模型
我們將使用 TensorFlow Lite Model Maker 訓練文字分類模型,預測特定文字的情緒。
這個步驟會以 Python 筆記本的形式呈現,您可以在 Google Colab 中開啟。
在 Colab 中開啟
完成這個步驟後,您將擁有可部署至行動應用程式的 TensorFlow Lite 情緒分析模型。
5. 將模型部署至 Firebase ML
將模型部署至 Firebase ML 的主要好處有兩個:
- 我們可以縮減應用程式安裝大小,並只在需要時下載模型
- 模型可以定期更新,且發布週期與整個應用程式不同
您可以透過控制台部署模型,也可以使用 Firebase Admin SDK 以程式輔助方式部署。在本步驟中,我們將透過控制台部署。
首先,開啟 Firebase 控制台,然後點選左側導覽面板中的「機器學習」。如果是第一次開啟,請按一下「開始使用」。然後前往「自訂」,按一下「新增模型」按鈕。
系統出現提示時,請將模型命名為 sentiment_analysis
,並上傳您在上一個步驟中從 Colab 下載的檔案。
6. 從 Firebase ML 下載模型
由於 TFLite 模型可能會變得相當大,因此選擇何時從 Firebase 將遠端模型下載到應用程式中,可能是一項棘手的任務。理想情況下,我們希望避免在應用程式啟動時立即載入模型,因為如果模型只用於一項功能,而使用者從未使用該功能,我們就會無故下載大量資料。我們也可以設定下載選項,例如只在連上 Wi-Fi 時擷取模型。如要確保即使沒有網路連線也能使用模型,請務必將模型與應用程式分開打包,做為備份。
為求簡化,我們會移除預設的隨附模型,並在應用程式首次啟動時,一律從 Firebase 下載模型。這樣一來,執行情緒分析時,您就能確保推論作業是使用 Firebase 提供的模型。
在 ModelLoader.swift
頂端匯入 Firebase 模組。
import FirebaseCore import FirebaseMLModelDownloader
然後實作下列方法。
static func downloadModel(named name: String, completion: @escaping (CustomModel?, DownloadError?) -> Void) { guard FirebaseApp.app() != nil else { completion(nil, .firebaseNotInitialized) return } guard success == nil && failure == nil else { completion(nil, .downloadInProgress) return } let conditions = ModelDownloadConditions(allowsCellularAccess: false) ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in switch (result) { case .success(let customModel): // Download complete. // The CustomModel object contains the local path of the model file, // which you can use to instantiate a TensorFlow Lite classifier. return completion(customModel, nil) case .failure(let error): // Download was unsuccessful. Notify error message. completion(nil, .downloadFailed(underlyingError: error)) } } }
在 ViewController.swift
的 viewDidLoad
中,將對 loadModel()
的呼叫替換為新的模型下載方法。
// Download the model from Firebase print("Fetching model...") ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in guard let customModel = customModel else { if let error = error { print(error) } return } print("Model download complete") // TODO: Initialize an NLClassifier from the downloaded model }
重新執行應用程式。幾秒後,Xcode 應該會顯示記錄,指出遠端模型已成功下載。嘗試輸入一些文字,確認應用程式的行為沒有改變。
7. 在應用程式中整合模型
TensorFlow Lite 工作程式庫可協助您在應用程式中整合 TensorFlow Lite 模型,只需編寫幾行程式碼即可。我們會使用從 Firebase 下載的 TensorFlow Lite 模型,初始化 TFLNLClassifier
執行個體。接著,我們會使用該模型分類應用程式使用者的文字輸入內容,並在 UI 上顯示結果。
新增依附元件
前往應用程式的 Podfile,並在應用程式的依附元件中新增 TensorFlow Lite Task Library (Text)。請務必在 target 'TextClassification'
宣告下方新增依附元件。
pod 'TensorFlowLiteTaskText', '~> 0.2.0'
執行 pod install
安裝新的依附元件。
初始化文字分類器
接著,我們會使用 Task Library 的 NLClassifier
,載入從 Firebase 下載的情緒分析模型。
ViewController.swift
我們來宣告 TFLNLClassifier 例項變數。在檔案頂端匯入新的依附元件:
import TensorFlowLiteTaskText
在我們於上一個步驟中修改的方法上方,找到這個註解:
// TODO: Add a TFLNLClassifier property.
使用下列程式碼取代 TODO:
private var classifier: TFLNLClassifier?
使用從 Firebase 下載的情緒分析模型,初始化 textClassifier
變數。找出上一個步驟中新增的註解:
// TODO: Initialize an NLClassifier from the downloaded model
使用下列程式碼取代 TODO:
let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)
分類文字
設定 classifier
執行個體後,您只需呼叫單一方法,即可執行情緒分析。
ViewController.swift
在 classify(text:)
方法中,找出 TODO 註解:
// TODO: Run sentiment analysis on the input text
將註解替換成下列程式碼:
guard let classifier = self.classifier else { return }
// Classify the text
let classifierResults = classifier.classify(text: text)
// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)
8. 執行最終應用程式
您已將情緒分析模型整合至應用程式,現在來測試一下。連線 iOS 裝置,然後點選 Xcode 工具列中的「執行」 ( )。
應用程式應能正確預測你輸入的電影評論所表達的情緒。
9. 運用更多 Firebase 功能強化應用程式
除了代管 TFLite 模型,Firebase 還提供多項功能,可強化機器學習用途:
- Firebase Performance Monitoring,用於評估在使用者裝置上執行的模型推論速度。
- Firebase Analytics 可評估使用者反應,藉此衡量模型在正式環境中的成效。
- Firebase A/B 測試,可測試多個版本的模型
- 還記得我們稍早訓練了兩個版本的 TFLite 模型嗎?A/B 測試是找出實際工作環境中成效較佳版本的好方法!
如要進一步瞭解如何在應用程式中運用這些功能,請參閱下列程式碼研究室:
10. 恭喜!
在本程式碼研究室中,您已瞭解如何訓練情緒分析 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 測試。