1. 概览
欢迎学习“使用 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 测试对不同的模型进行实验
您需要满足的条件
- 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 Task 库可帮助您只需几行代码即可将 TensorFlow Lite 模型集成到应用中。我们将使用从 Firebase 下载的 TensorFlow Lite 模型来初始化 TFLNLClassifier
实例。然后,我们将使用它对来自应用用户的文本输入进行分类,并在界面上显示结果。
添加依赖项
前往应用的 Podfile,然后在应用的依赖项中添加 TensorFlow Lite 任务库 (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 ( )。
应用应该能够正确预测您输入的影评的情感。
9. 利用更多 Firebase 功能为应用注入强劲动力
除了托管您的 TFLite 模型外,Firebase 还提供了一些其他功能来支持您的机器学习用例:
- Firebase Performance Monitoring,用于衡量在用户设备上运行的模型推理速度。
- Firebase Analytics,用于衡量用户反馈,以便评估模型在生产环境中的效果。
- Firebase A/B Testing,用于测试多个版本的模型
- 你记得我们之前训练过两个版本的 TFLite 模型吗?您可以通过 A/B 测试找出哪个版本在生产环境中的效果更好!
如需详细了解如何在应用中利用这些功能,请参阅以下 Codelab:
10. 恭喜!
在此 Codelab 中,您了解了如何训练情感分析 TFLite 模型,以及如何使用 Firebase 将其部署到移动应用。如需详细了解 TFLite 和 Firebase,请查看其他 TFLite 示例以及 Firebase 使用入门指南。
所学内容
- TensorFlow Lite
- Firebase ML
后续步骤
- 使用 Firebase Performance Monitoring 衡量模型推理速度。
- 通过 Firebase ML Model Management API 将模型从 Colab 直接部署到 Firebase。
- 添加一种机制,以允许用户对预测结果提供反馈,并使用 Firebase Analytics 跟踪用户反馈。
- 使用 Firebase A/B 测试对平均词向量模型和 MobileBERT 模型进行 A/B 测试。