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

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

一、概述

文本分类结果.png

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

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

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

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

你会学到什么

  • 使用 TF Lite Model Maker 训练 TF Lite 情感分析模型
  • 将 TF Lite 模型部署到 Firebase ML 并从您的应用访问它们
  • 使用 TF Lite 任务库将 TF Lite 情绪分析模型集成到您的应用程序中

你需要什么

  • Android Studio 版本 4.0+。
  • 示例代码。
  • 具有 Android 4.4+ 和 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 中,选择codelab-textclassification-android-master目录( android_studio_folder.png )从示例代码下载(文件>打开> .../codelab-textclassification-android-master/start)。

您现在应该在 Android Studio 中打开了启动项目。

4. 运行入门应用

现在您已将项目导入 Android Studio,您已准备好首次运行该应用程序。连接您的 Android 设备,然后单击运行( 执行.png ) 在 Android Studio 工具栏中。

该应用程序应在您的设备上启动。它只包含一个简单的 UI,可以在接下来的步骤中轻松集成和测试文本分类模型。此时,如果您尝试预测情绪,应用程序只会返回一些虚拟结果。

2fb4e69fafb2e3ed.png

5. 创建 Firebase 控制台项目

将 Firebase 添加到项目中

  1. 转到Firebase 控制台
  2. 选择添加项目
  3. 选择或输入项目名称。
  4. 按照 Firebase 控制台中的其余设置步骤操作,然后点击创建项目(或添加 Firebase,如果您使用的是现有的 Google 项目)。

6. 将 Firebase 添加到应用程序

  1. 在新项目的概览屏幕中,单击 Android 图标以启动设置工作流程。
  2. 输入codelab的包名: org.tensorflow.lite.codelabs.textclassification

将 google-services.json 文件添加到您的应用

添加包名称并选择注册**后,单击下载 google-services.json** 以获取您的 Firebase Android 配置文件,然后将google-services.json文件复制到项目中的 * app * 目录中。

将 google-services 插件添加到您的应用

按照 Firebase 控制台上的说明更新build.gradle文件,将 Firebase 添加到您的应用中。

google-services 插件使用 google-services.json 文件将您的应用程序配置为使用 Firebase。

将您的项目与 gradle 文件同步

为确保您的应用程序可以使用所有依赖项,此时您应该将项目与 gradle 文件同步。从 Android Studio 工具栏中选择File > Sync Project with Gradle Files

7. 使用 Firebase 运行应用

现在您已经使用 JSON 文件配置了google-services插件,您可以使用 Firebase 运行该应用程序了。连接您的 Android 设备,然后单击运行( 执行.png ) 在 Android Studio 工具栏中。

该应用程序应在您的设备上启动。此时,您的应用程序应该仍然可以成功构建。

8. 训练情感分析模型

我们将使用 TensorFlow Lite Model Maker 训练文本分类模型来预测给定文本的情绪。

此步骤以 Python 笔记本的形式呈现,您可以在 Google Colab 中打开它。您可以选择Runtime > Run all以一次执行所有 notebook。

在 Colab 中打开

完成此步骤后,您将拥有一个可部署到移动应用程序的 TensorFlow Lite 情感分析模型。

9. 将模型部署到 Firebase ML

将模型部署到 Firebase ML 非常有用,主要有两个原因:

  1. 我们可以保持应用程序安装大小较小,仅在需要时下载模型
  2. 该模型可以定期更新,并且发布周期与整个应用程序不同

该模型可以通过控制台部署,也可以使用 Firebase Admin SDK 以编程方式部署。在这一步中,我们将通过控制台进行部署。

首先,打开Firebase 控制台并单击左侧导航面板中的机器学习。如果您是第一次打开,请单击“开始”。然后导航到“自定义”并单击“添加模型”按钮。

出现提示时,将模型命名为 Sentiment_analysis 并上传您在上一步中从sentiment_analysis下载的文件。

3c3c50e6ef12b3b.png

10. 从 Firebase ML 下载模型

选择何时将远程模型从 Firebase 下载到您的应用中可能会很棘手,因为 TFLite 模型可能会变得相对较大。理想情况下,我们希望避免在应用程序启动时立即加载模型,因为如果我们的模型仅用于一个功能并且用户从不使用该功能,我们将无缘无故下载大量数据。我们还可以设置下载选项,例如仅在连接到 wifi 时获取模型。如果您想确保模型在没有网络连接的情况下也可用,那么在没有应用程序的情况下捆绑它作为备份也很重要。

为简单起见,我们将删除默认捆绑模型,并始终在应用首次启动时从 Firebase 下载模型。这样,在运行情绪分析时,您可以确保推理正在使用 Firebase 提供的模型运行。

app/build.gradle文件中,添加 Firebase 机器学习依赖项。

应用程序/build.gradle

找到这条评论:

// TODO 1: Add Firebase ML dependency

然后加:

implementation platform('com.google.firebase:firebase-bom:29.3.0')
implementation 'com.google.firebase:firebase-ml-modeldownloader:24.0.4'

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

添加依赖

转到应用的 Gradle 文件并在应用的依赖项中添加 TensorFlow Lite 任务库(文本)。

应用程序/build.gradle

找到这条评论:

// TODO 4: Add TFLite Task API (Text) dependency

然后加:

implementation 'org.tensorflow:tensorflow-lite-task-text:0.3.0'

当 Android Studio 要求同步您的项目时,请选择Sync Now

初始化一个文本分类器

然后我们将使用任务库的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. 运行最终应用

您已将情绪分析模型集成到应用程序中,让我们对其进行测试。连接您的 Android 设备,然后单击运行( 执行.png ) 在 Android Studio 工具栏中。

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

img/文本分类结果.png

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

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

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

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

14. 恭喜!

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

我们涵盖的内容

  • TensorFlow 精简版
  • Firebase 机器学习

下一步

  • 使用 Firebase 性能监控衡量您的模型推理速度。
  • 通过 Firebase ML 模型管理 API 将模型从 Colab 直接部署到 Firebase。
  • 添加允许用户对预测结果进行反馈的机制,并使用 Firebase Analytics 跟踪用户反馈。
  • 使用 Firebase A/B 测试对平均词向量模型和 MobileBERT 模型进行 A/B 测试。

学到更多

有一个问题?

报告问题