使用 TensorFlow Lite 和 Firebase 向应用添加设备端文本分类 - iOS Codelab

1. 概览

分类结果屏幕.png

欢迎学习“使用 TensorFlow Lite 和 Firebase 进行文本分类”Codelab。在此 Codelab 中,您将学习如何使用 TensorFlow Lite 和 Firebase 训练文本分类模型并将其部署到您的应用。此 Codelab 基于此 TensorFlow Lite 示例

文本分类是根据文本内容为文本分配标签或类别的过程。它是自然语言处理 (NLP) 的基本任务之一,具有多种应用,例如情感分析、主题标签、垃圾内容检测和意图检测。

情感分析是使用文本分析技术对文本数据中的情绪(积极、消极和中性的)进行解释和分类。通过情感分析,商家可以确定客户在线对话和反馈时对产品、品牌或服务的感受。

本教程介绍如何构建用于情感分析的机器学习模型,特别是如何对文本进行正面或负面的分类。这是一个二元分类(或两类分类)的示例,也是一种重要且广泛适用的机器学习问题。

学习内容

  • 使用 TF Lite Model Maker 训练 TF Lite 情感分析模型
  • 将 TF Lite 模型部署到 Firebase ML 并从您的应用访问这些模型
  • 使用 Firebase Analytics 跟踪用户反馈以衡量模型准确率
  • 通过 Firebase Performance Monitoring 分析模型性能
  • 选择通过 Remote Config 加载多个已部署模型中的哪一个
  • 通过 Firebase A/B Testing 使用不同模型进行实验

所需条件

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

您将如何使用本教程?

仅阅读教程内容 阅读并完成练习

您如何评价自己在构建 Android 应用方面的经验水平?

新手 中等 熟练

2. 创建 Firebase 控制台项目

将 Firebase 添加到项目中

  1. 前往 Firebase 控制台
  2. 选择创建新项目,并将您的项目命名为“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

将 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,然后上传您在上一步中从 Colab 下载的文件。

3c3c50e6ef12b3b

6. 从 Firebase ML 下载模型

选择何时从 Firebase 将远程模型下载到应用可能会很困难,因为 TFLite 模型可能会变得相对较大。理想情况下,我们希望避免在应用启动时立即加载模型,因为如果模型仅用于一项功能,而用户从未使用该功能,我们就会无缘无故下载大量数据。我们还可以设置下载选项,例如在连接到 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.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 实例。然后,我们将使用它对来自应用用户的文本输入进行分类,并在界面上显示结果。

添加依赖项

转到应用的 Podfile,然后将 TensorFlow Lite Task Library (Text) 添加到应用的依赖项中。请务必在 target 'TextClassification' 声明下添加该依赖项。

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

运行 pod install 以安装新的依赖项。

初始化文本分类器

然后,我们将使用 Task 库的 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 工具栏中的 Run ( 执行.png)。

应用应该能够正确预测您输入的影评的情感。

分类结果屏幕.png

9. 利用更多 Firebase 功能为应用提供支持

除了托管 TFLite 模型之外,Firebase 还提供了一些其他功能来支持您的机器学习用例:

  • Firebase Performance Monitoring 用于衡量模型在用户设备上运行的推断速度。
  • Firebase Analytics,通过衡量用户的反应来衡量模型在生产环境中的表现。
  • 使用 Firebase A/B Testing 测试模型的多个版本
  • 你还记得我们之前训练了两个版本的 TFLite 模型吗?A/B 测试是了解哪些版本在生产环境中效果更好的好方法!

如需详细了解如何在应用中利用这些功能,请查看以下 Codelab:

10. 恭喜!

在此 Codelab 中,您学习了如何使用 Firebase 训练情感分析 TFLite 模型并将其部署到移动应用。如需详细了解 TFLite 和 Firebase,请查看其他 TFLite 示例和 Firebase 入门指南。

所学内容

  • TensorFlow Lite
  • Firebase ML

后续步骤

  • 使用 Firebase Performance Monitoring 衡量模型的推断速度。
  • 通过 Firebase ML Model Management API 将模型从 Colab 直接部署到 Firebase。
  • 添加一种机制,允许用户针对预测结果提供反馈,并使用 Firebase Analytics 跟踪用户反馈。
  • 使用 Firebase A/B Testing 对平均字词向量模型和 MobileBERT 模型进行 A/B 测试。

了解详情

有疑问?

报告问题