使用 TensorFlow Lite 和 Firebase 为您的应用添加设备上文本分类 - iOS Codelab

一、概述

分类结果_screen.png

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

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

情感分析是使用文本分析技术对文本数据中的情感(正面、负面和中性)进行解释和分类。情绪分析使企业能够在在线对话和反馈中识别客户对产品、品牌或服务的情绪。

本教程展示了如何构建用于情感分析的机器学习模型,特别是将文本分类为正面或负面。这是二元分类或两类分类的示例,这是一种重要且广泛应用的机器学习问题。

你会学到什么

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

你需要什么

  • 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 控制台下载项目的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并上传您在上一步中从 Colab 下载的文件。

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

添加依赖

转到应用程序的 Podfile 并在应用程序的依赖项中添加 TensorFlow Lite 任务库(文本)。确保在target 'TextClassification'声明下添加依赖项。

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

初始化文本分类器

然后我们将使用任务库的NLClassifier加载从 Firebase 下载的情绪分析模型。

视图控制器.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实例后,您可以通过单个方法调用运行情绪分析。

视图控制器.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 工具栏中。

该应用程序应该能够正确预测您输入的电影评论的情绪。

分类结果_screen.png

9. 使用更多 Firebase 功能启动应用程序

除了托管您的 TFLite 模型外,Firebase 还提供其他几个功能来增强您的机器学习用例:

  • Firebase 性能监控,用于测量在用户设备上运行的模型推理速度。
  • Firebase Analytics 通过衡量用户反应来衡量您的模型在生产中的表现。
  • Firebase A/B 测试以测试模型的多个版本
  • 你还记得我们之前训练了两个版本的 TFLite 模型吗? A/B 测试是找出哪个版本在生产中表现更好的好方法!

要详细了解如何在您的应用中利用这些功能,请查看以下代码实验室:

10. 恭喜!

在此 Codelab 中,您学习了如何训练情绪分析 TFLite 模型并使用 Firebase 将其部署到您的移动应用程序。要了解有关 TFLite 和 Firebase 的更多信息,请查看其他 TFLite示例和 Firebase入门指南。

我们涵盖的内容

  • TensorFlow 精简版
  • 火力地堡机器学习

下一步

  • 使用 Firebase Performance Monitoring 衡量您的模型推理速度。
  • 通过 Firebase ML 模型管理 API 将模型从 Colab 直接部署到 Firebase。
  • 添加一个机制让用户对预测结果进行反馈,并使用 Firebase Analytics 跟踪用户反馈。
  • 使用 Firebase A/B 测试对 Average Word Vector 模型和 MobileBERT 模型进行 A/B 测试。

了解更多

有一个问题?

报告问题