1. 概览
欢迎学习“使用 TensorFlow Lite 和 Firebase 进行文本分类”Codelab。在此 Codelab 中,您将学习如何使用 TensorFlow Lite 和 Firebase 训练文本分类模型并将其部署到您的应用中。此 Codelab 基于此 TensorFlow Lite 示例。
文本分类是根据文本内容为文本分配标签或类别的过程。这是自然语言处理 (NLP) 中的基本任务之一,具有广泛的应用,例如情感分析、主题标签、垃圾内容检测和意图检测。
情感分析是指使用文本分析技术对文本数据中的情绪(积极、消极和中性)进行解读和分类。通过情感分析,企业可以在在线对话和反馈中确定客户对产品、品牌或服务的情感。
本教程介绍了如何构建用于情感分析的机器学习模型,尤其是将文本分类为正面或负面。这是二元分类(或两类分类)的示例,这是一种重要且广泛适用的机器学习问题。
学习内容
- 使用 TF Lite Model Maker 训练 TF Lite 情感分析模型
- 将 TF Lite 模型部署到 Firebase ML,并从应用中访问这些模型
- 使用 TF Lite Task 库将 TF Lite 情感分析模型集成到您的应用中
所需条件
- 最新版 Android Studio。
- 示例代码。
- 一台安装了 Android 5.0+ 和 Google Play 服务 9.8 或更高版本的测试设备,或者一个安装了 Google Play 服务 9.8 或更高版本的模拟器
- 如果使用设备,还需要一根连接电缆。
您打算如何使用本教程?
您如何评价自己在构建 Android 应用方面的经验?
2. 获取示例代码
从命令行克隆 GitHub 代码库。
$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git
如果您尚未安装 git,也可以从其 GitHub 页面或点击此链接下载示例项目。
3. 导入起始应用
在 Android Studio 中,从示例代码下载 (File > Open > .../codelab-textclassification-android-master/start) 中选择 codelab-textclassification-android-master
目录 ()。
现在,您应该已在 Android Studio 中打开启动项目。
4. 运行起始应用
现在,您已将项目导入 Android Studio,可以首次运行该应用了。连接您的 Android 设备,然后点击 Android Studio 工具栏中的 Run ( )。
应用应该会在您的设备上启动。它仅包含一个简单的界面,可让您在后续步骤中轻松集成和测试文本分类模型。此时,如果您尝试预测情感,应用将仅返回一些虚拟结果。
5. 创建 Firebase 控制台项目
将 Firebase 添加到项目
- 前往 Firebase 控制台。
- 选择添加项目。
- 选择或输入项目名称。
- 在 Firebase 控制台中完成剩下的设置步骤,然后点击“创建项目”(如果您使用的是现有 Google 项目,则点击“添加 Firebase”)。
6. 将 Firebase 添加到应用
- 在新项目的概览屏幕中,点击 Android 图标以启动设置工作流。
- 输入此 Codelab 的软件包名称:
org.tensorflow.lite.codelabs.textclassification
将 google-services.json 文件添加到您的应用中
添加软件包名称并选择“Register**”,点击“Download google-services.json**”以获取 Firebase Android 配置文件,然后将 google-services.json
文件复制到项目的 *app
* 目录中。
将 google-services 插件添加到您的应用中
按照 Firebase 控制台上更新 build.gradle.kts
文件的说明,将 Firebase 添加到您的应用。
google-services 插件使用 google-services.json 文件将应用配置为使用 Firebase。
将项目与 Gradle 文件同步
为确保所有依赖项都对您的应用可用,此时应将项目与 Gradle 文件同步。选择文件 >Sync Project with Gradle Files 菜单。
7. 使用 Firebase 运行应用
现在,您已使用 JSON 文件配置了 google-services
插件,可以使用 Firebase 运行应用了。连接您的 Android 设备,然后点击 Android Studio 工具栏中的 Run ( )。
应用应在您的设备上启动。此时,您的应用应该仍能成功构建。
8. 训练情感分析模型
我们将使用 TensorFlow Lite Model Maker 训练文本分类模型,以预测给定文本的情感。
此步骤以 Python 笔记本的形式呈现,您可以在 Google Colab 中打开该笔记本。您可以选择运行时 >Run all 可同时执行所有笔记本。
在 Colab 中打开
完成此步骤后,您将得到一个可以部署到移动应用的 TensorFlow Lite 情感分析模型。
9. 将模型部署到 Firebase ML
将模型部署到 Firebase ML 有两个主要原因:
- 我们可以缩减应用安装大小,并且仅在需要时下载模型
- 模型可以定期更新,并且发布周期与整个应用不同
您可以通过控制台或使用 Firebase Admin SDK 以编程方式部署模型。在此步骤中,我们将通过控制台进行部署。
首先,打开 Firebase 控制台,然后点击左侧导航面板中的“机器学习”。如果这是您首次打开此应用,请点击“开始”。然后前往“自定义”然后点击“添加模型”按钮。
出现提示时,为模型命名为 sentiment_analysis
,然后上传您在上一步中从 Colab 下载的文件。
10. 从 Firebase ML 下载模型
选择何时从 Firebase 将远程模型下载到您的应用可能很棘手,因为 TFLite 模型可能会变得相对较大。理想情况下,我们希望避免在应用启动时立即加载模型,因为如果模型仅用于一项特征,而用户从未使用该功能,那么我们将无故下载大量数据。我们还可以设置下载选项,例如仅在连接到 Wi-Fi 时提取模型。如果您想确保模型在没有网络连接的情况下仍然可用,请务必将该模型捆绑在一起,而不将其作为备份应用。
为简单起见,我们将移除默认的捆绑模型,并始终在应用首次启动时从 Firebase 下载模型。这样,在运行情感分析时,您可以确保推理是使用 Firebase 提供的模型运行的。
在 app/build.gradle.kts
文件中,添加 Firebase 机器学习依赖项。
app/build.gradle.kts
找到以下评论:
// TODO 1: Add Firebase ML dependency
然后添加:
implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")
当 Android Studio 要求同步您的项目时,选择 Sync Now。
然后,我们来添加一些代码,以便从 Firebase 下载该模型。
MainActivity.java
查找此评论:
// TODO 2: Implement a method to download TFLite model from Firebase
然后添加:
/** Download model from Firebase ML. */
private synchronized void downloadModel(String modelName) {
CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
.requireWifi()
.build();
FirebaseModelDownloader.getInstance()
.getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
.addOnSuccessListener(model -> {
try {
// TODO 6: Initialize a TextClassifier with the downloaded model
predictButton.setEnabled(true);
} catch (IOException e) {
Log.e(TAG, "Failed to initialize the model. ", e);
Toast.makeText(
MainActivity.this,
"Model initialization failed.",
Toast.LENGTH_LONG)
.show();
predictButton.setEnabled(false);
}
})
.addOnFailureListener(e -> {
Log.e(TAG, "Failed to download the model. ", e);
Toast.makeText(
MainActivity.this,
"Model download failed, please check your connection.",
Toast.LENGTH_LONG)
.show();
}
);
}
接下来,在 activity 的 onCreate
方法中调用 downloadModel
方法。
MainActivity.java
查找此评论:
// TODO 3: Call the method to download TFLite model
然后添加:
downloadModel("sentiment_analysis");
11. 在应用中集成模型
TensorFlow Lite Task 库可帮助您只需几行代码即可将 TensorFlow Lite 模型集成到应用中。我们将使用从 Firebase 下载的 TensorFlow Lite 模型来初始化 NLClassifier
实例。然后,我们将使用它对来自应用用户的文本输入进行分类,并在界面上显示结果。
添加依赖项
前往应用的 Gradle 文件,然后在应用的依赖项中添加 TensorFlow Lite 任务库 (Text)。
app/build.gradle
查找此评论:
// TODO 4: Add TFLite Task API (Text) dependency
然后添加:
implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")
当 Android Studio 要求您同步项目时,请选择立即同步。
初始化文本分类器
然后,我们将使用 Task 库的 NLClassifier
加载从 Firebase 下载的情感分析模型。
MainActivity.java
我们来声明一个 NLClassifier 实例变量。查找此评论:
// TODO 5: Define a NLClassifier variable
然后添加:
private NLClassifier textClassifier;
使用从 Firebase 下载的情感分析模型初始化 textClassifier
变量。查找此评论:
// TODO 6: Initialize a TextClassifier with the downloaded model
然后添加:
textClassifier = NLClassifier.createFromFile(model.getFile());
对文本进行分类
设置 textClassifier
实例后,您只需调用一次方法即可运行情感分析。
MainActivity.java
查找此评论:
// TODO 7: Run sentiment analysis on the input text
然后添加:
List<Category> results = textClassifier.classify(text);
实现后期处理
最后,我们将模型的输出转换为说明性文本,以在屏幕上显示。
MainActivity.java
查找此评论:
// TODO 8: Convert the result to a human-readable text
移除生成虚拟结果文本的代码:
String textToShow = "Dummy classification result.\n";
然后添加:
String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
Category result = results.get(i);
textToShow += String.format(" %s: %s\n", result.getLabel(),
result.getScore());
}
textToShow += "---------\n";
12. 运行 final 应用
您已将情感分析模型集成到应用中,让我们来测试一下。连接您的 Android 设备,然后点击 Android Studio 工具栏中的 Run ( )。
应用应该能够正确预测您输入的影评的情感。
13. 利用更多 Firebase 功能让应用如虎添翼
除了托管 TFLite 模型之外,Firebase 还提供多项其他功能来增强机器学习用例的效果:
- Firebase Performance Monitoring,用于衡量在用户设备上运行的模型推理速度。
- Firebase Analytics,用于衡量用户反馈,以便评估模型在生产环境中的效果。
- 使用 Firebase A/B Testing 测试模型的多个版本
- 还记得我们之前训练了两个版本的 TFLite 模型吗?您可以通过 A/B 测试找出哪个版本在生产环境中的效果更好!
如需详细了解如何在应用中利用这些功能,请参阅以下 Codelab:
14. 恭喜!
在此 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 测试。