一、概述
欢迎使用 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 添加到项目中
- 转到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 控制台下载项目的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 下载模型
选择何时将远程模型从 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.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 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 设备,然后单击“运行” ( ) 在 Xcode 工具栏中。
该应用程序应该能够正确预测您输入的电影评论的情绪。
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 测试。