创建自定义文本分类模型,并使用该模型更新应用

1. 准备工作

在此 Codelab 中,您将学习如何更新基于原始博客垃圾评论数据集构建的文本分类模型,该模型已使用您自己的评论加以增强,以便拥有一个可处理您的数据的模型。

前提条件

此 Codelab 是《移动文本分类入门》开发者在线课程的一部分。此开发者在线课程中的 Codelab 是按顺序编排的。您将使用的应用和模型应该在之前您依次按照第一个开发者在线课程学习时已构建完毕。如果您尚未完成之前的活动,请立即停止并完成这些活动

  • 构建基本的消息式应用
  • 构建垃圾评论机器学习模型
  • 更新应用以使用垃圾内容过滤机器学习模型

学习内容

  • 如何更新您在《移动文本分类入门》开发者在线课程中构建的文本分类模型
  • 如何自定义模型来屏蔽您应用中最常见的垃圾内容

所需条件

  • 您在之前的活动中观察和构建的即时通讯应用和垃圾内容过滤模型。

2. 增强文本分类

您可以通过克隆 仓库并从 TextClassificationStep2 文件夹加载该应用来获取此代码。您可以在 TextClassificationOnMobile->Android 路径中找到此代码。

已完成 的代码也可作为 TextClassificationStep3 提供给您。

如果您打开构建的消息应用并尝试发送此消息,则会得到非常低的垃圾内容得分:

f111e21903d6fd1f.png

像这样拼写错误是避免垃圾内容过滤器的常见方法。虽然消息本身是无害的,但垃圾内容发布者通常会在用户 ID 中添加链接(而不是在消息本身中添加链接,因为在消息本身中添加链接可能会触发过滤器)。

在此实验中,您将了解如何使用新数据更新模型。完成后,使用相同的句子运行将得到以下结果,其中此消息被识别为垃圾内容!

c96613a0a4d1fef0.png

3. 修改 CSV 文件

为了训练原始模型,系统创建了一个 CSV 格式 (lmblog_comments.csv) 的数据集,其中包含近一千条标记为垃圾内容或非垃圾内容的评论。如果您想检查该 CSV 文件,请在任意文本编辑器中打开它。

在该 CSV 文件中,第一行描述列(标记为 commenttextspam)。

后续的每一行都遵循以下格式:

64c0128548e1d082.png

对于垃圾内容,右侧的标签为 true;对于非垃圾内容,右侧的标签为 false。在本例中,第 3 行被视为垃圾内容。

如需添加您自己的评论,例如,如果很多人在您的网站上发布有关在线交易的垃圾信息,您只需在网站底部添加垃圾评论样本即可。例如:

online trading can be highly highly effective,true
online trading can be highly effective,true
online trading now,true
online trading here,true
online trading for the win,true

完成后,请使用新名称(例如 lmblog_comments.csv)保存该文件,然后您就可以使用它来训练新模型了。

在此 Codelab 的其余部分,您会将 Google Cloud Storage 上提供、修改和托管的样本与在线交易更新搭配使用。如果您想使用自己的数据集,可以在代码中更改网址!

4. 使用新数据重新训练模型

如需重新训练模型,您只需重复使用之前的代码 (SpamCommentsModelMaker.ipynb),但需要将其指向新的 CSV 数据集(称为 lmblog_comments_extras.csv)。如果您需要包含更新内容的完整笔记本,可以在 SpamCommentsUpdateModelMaker.ipynb. 中找到它。

如果您有权访问 Google Colab,可以直接从 此处 启动它,否则请从代码库获取代码并在您选择的笔记本环境中运行它。

以下是更新后的代码:

training_data = tf.keras.utils.get_file(fname='comments-spam-extras.csv',   
          origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/
                  lmblog_comments_extras.csv', 
          extract=False)

在训练时,您应该看到模型仍会训练到较高级别的准确率:

8886033d1f8161c.png

浏览笔记本以下载模型词汇表标签 文件。在下一步中,您将在 Android 中集成它们。

5. 更新 Android 应用

  1. 在 Android Studio 中打开该应用,并确保在项目资源管理器的顶部选择了 Android
  2. 找到包含旧版模型文件的标签、模型和词汇表的 assets 文件。

91116524e9016ed4.png

  1. 右键点击 assets 文件夹。
  2. 在菜单中,选择使用操作系统的文件管理器打开文件夹的选项。(在 Mac 上,此选项为在访达中显示 ,如图所示。在 Windows 上,此选项为在资源管理器中显示 ;在 Linux 上,此选项为在文件中打开 或类似选项。)

25f63f9629657e85.png

  1. 这会在操作系统的文件管理器中打开包含模型、词汇表和标签的目录。将您在上一步中创建的新文件复制到这些文件上。

您无需对应用中的代码进行任何更改。高效运转并测试该应用,您将看到如上所示的结果,其中模型已得到改进,可以检测“onllline trading”文本场景。

代码的已完成版本在代码库中以 TextClassificationStep3 的形式提供。

6. 更新 iOS 应用

您可以通过克隆 仓库并从 TextClassificationStep2 文件夹加载该应用来获取此代码。您可以在 TextClassificationOnMobile->Android 路径中找到此代码。

已完成 的代码也可作为 TextClassificationStep3 提供给您。

如果您已完成上一个 Codelab,您将拥有一个适用于基本模型的 iOS 版 TextClassificationStep2。如果您想从我们的现有版本开始,只需从代码库中获取该版本即可。它将与第一个基于垃圾评论数据训练的模型搭配使用,您可能会看到如下所示的结果:

553b845565b5b822.png

更新应用以使用新模型非常简单。最简单的方法是直接前往文件资源管理器,获取 model.tflitevocablabels.txt 的新版本,然后将其复制到项目目录。

完成此操作后,您的应用将与新模型搭配使用,您可以试用一下。以下是使用新模型的同一句子的示例:

9031ec260b1857a3.png

7. 恭喜

大功告成!通过使用新数据重新训练模型,并将其添加到 Android 和 iOS 应用中,您无需编写任何新代码即可更新它们的功能!

后续步骤

此模型只是一个玩具模型,仅基于 1000 个数据项进行训练。

在探索自然语言处理时,您可能需要处理更大的数据集。您还可以设置持续训练流水线,以便在新数据传入并标记为垃圾内容时,它可以在后端自动重新训练模型,然后使用 Firebase 模型托管部署该模型。

您的用户可以无缝获取更新后的模型,而无需您将其复制并粘贴为资源、重新编译和重新分发。例如,您还可以使用 Firebase Remote Config 管理发送垃圾内容的阈值,而不是现在的 0.8。

有太多可能性,我们将在本课程的后续 Codelab 中探索这些可能性!