使用 TensorFlow Lite 和 Firebase 為您的應用添加設備上文本分類 - iOS Codelab

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

一、概述

分類結果屏幕.png

歡迎使用 TensorFlow Lite 和 Firebase 代碼實驗室進行文本分類。在此 Codelab 中,您將學習如何使用 TensorFlow Lite 和 Firebase 來訓練文本分類模型並將其部署到您的應用中。此代碼實驗室基於此 TensorFlow Lite示例

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

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

本教程展示瞭如何構建用於情感分析的機器學習模型,特別是將文本分類為正面或負面。這是二分類或二分類的示例,這是一種重要且廣泛適用的機器學習問題。

你會學到什麼

  • 使用 TF Lite Model Maker 訓練 TF Lite 情感分析模型
  • 將 TF Lite 模型部署到 Firebase ML 並從您的應用訪問它們
  • 使用 Firebase Analytics 跟踪用戶反饋以衡量模型的準確性
  • 通過 Firebase 性能監控分析模型性能
  • 選擇通過遠程配置加載多個部署模型中的哪一個
  • 通過 Firebase A/B 測試試驗不同的模型

你需要什麼

  • Xcode 11(或更高版本)
  • CocoaPods 1.9.1(或更高版本)

您將如何使用本教程?

只通讀一遍閱讀並完成練習

您對構建 Android 應用程序的體驗有何評價?

新手中間的精通

2. 創建 Firebase 控制台項目

將 Firebase 添加到項目中

  1. 轉到Firebase 控制台
  2. 選擇Create New Project並將您的項目命名為“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 項目的根目錄。

9efb62a92f27e939.png

將 Firebase 添加到您的 Podfile 並運行 pod install。

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

AppDelegatedidFinishLaunchingWithOptions方法中,在文件頂部導入 Firebase

import FirebaseCore

並添加一個調用來配置 Firebase。

FirebaseApp.configure()

再次運行項目以確保應用程序配置正確並且在啟動時不會崩潰。

4. 訓練情感分析模型

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

此步驟以 Python 筆記本的形式呈現,您可以在 Google Colab 中打開它。

在 Colab 中打開

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

5. 將模型部署到 Firebase ML

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

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

該模型可以通過控制台部署,也可以使用 Firebase Admin SDK 以編程方式部署。在這一步中,我們將通過控制台進行部署。

首先,打開Firebase 控制台並單擊左側導航面板中的機器學習。如果您是第一次打開,請單擊“開始”。然後導航到“自定義”並單擊“添加模型”按鈕。

出現提示時,將模型命名為 Sentiment_analysis 並上傳您在上一步中從sentiment_analysis下載的文件。

3c3c50e6ef12b3b.png

6. 從 Firebase ML 下載模型

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

為簡單起見,我們將刪除默認捆綁模型,並始終在應用首次啟動時從 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.swiftviewDidLoad中,將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 任務庫(文本)。確保在target 'TextClassification'聲明下添加依賴項。

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

運行pod install以安裝新的依賴項。

初始化一個文本分類器

然後我們將使用任務庫的NLClassifier加載從 Firebase 下載的情緒分析模型。

ViewController.swift

讓我們聲明一個 TFLNLClassifier 實例變量。在文件頂部,導入新的依賴項:

import TensorFlowLiteTaskText

在我們上一步修改的方法上面找到這條註釋:

// TODO: Add an 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 設備,然後單擊運行( 執行.png ) 在 Xcode 工具欄中。

該應用程序應該能夠正確預測您輸入的電影評論的情緒。

分類結果屏幕.png

9. 使用更多 Firebase 功能啟動應用程序

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

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

要詳細了解如何在您的應用中利用這些功能,請查看以下代碼實驗室:

10. 恭喜!

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

我們涵蓋的內容

  • TensorFlow 精簡版
  • Firebase 機器學習

下一步

  • 使用 Firebase 性能監控衡量您的模型推理速度。
  • 通過 Firebase ML 模型管理 API 將模型從 Colab 直接部署到 Firebase。
  • 添加允許用戶對預測結果進行反饋的機制,並使用 Firebase Analytics 跟踪用戶反饋。
  • 使用 Firebase A/B 測試對平均詞向量模型和 MobileBERT 模型進行 A/B 測試。

學到更多

有一個問題?

報告問題