使用 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. 选择 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

将 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 Task 库,您只需几行代码即可将 TensorFlow Lite 模型集成到您的应用中。我们将使用从 Firebase 下载的 TensorFlow Lite 模型来初始化 TFLNLClassifier 实例。然后,我们将使用它对来自应用用户的文本输入进行分类,并在界面上显示结果。

添加依赖项

前往应用的 Podfile,然后在应用的依赖项中添加 TensorFlow Lite Task 库(文本)。请务必在 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 测试。

了解详情

有疑问?

报告问题