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

1. 准备工作

在此 Codelab 中,您将学习如何更新文本分类模型,该模型是以原始博客垃圾评论数据集为基础构建的,并且使用您自己的评论进行了增强,所以您可以构建一个与您的数据结合使用的模型。

前提条件

此 Codelab 是“移动文本分类入门”在线课程的一部分。此在线课程中的 Codelab 是按顺序编排的。您要学习的应用和模型应该与之前学习过的课程一起构建。如果您还没有完成之前的活动,请立即停止,立即行动

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

学习内容

  • 如何更新您在“移动文本分类入门”在线课程中构建的文本分类模型
  • 如何自定义模型以阻止应用中最常见的垃圾内容

所需物品

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

2. 增强文本分类

您可以通过克隆代码库并从 TextClassificationStep2 加载应用来获得此代码。您可以在 TextClassificationOnMobile->Android 路径中找到它。

finished 代码也以 TextClassificationStep3 的形式提供给您。

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

f111e21903d6fd1f.png

这样的拼写错误是避免垃圾邮件过滤器的常见方法。虽然邮件看似无害,但垃圾邮件发件人通常会在用户 ID 中添加链接(而不是邮件本身,因为具有邮件的链接可能会触发过滤器)。

在本实验中,您将学习如何使用新数据更新模型。完成上述操作后,用相同的语句运行就可以得到如下结果,其中该消息被识别为垃圾邮件!

c96613a0a4d1fef0.png

3.修改 CSV 文件

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

CSV 文件的组成是让第一行描述列,这里的列标有 commenttextspam

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

64c0128548e1d082.png

右侧的标签为垃圾邮件标签,为非垃圾邮件标签。在这种情况下,系统会将第 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,则可以直接从此处启动该 SDK,或者从代码库中获取此代码,并在您选择的笔记本环境中运行它。

以下是更新后的代码:

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

通过笔记本下载 modelvocablabels 文件。在下一步中,您将在 Android 中集成这些 API。

5. 更新您的 Android 应用

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

91116524e9016ed4.png

  1. 右键点击素材资源文件夹。
  2. 在菜单中,选择使用操作系统的文件管理器打开文件夹的选项。(在查找器中显示如下所示。即在 Windows 上为在资源管理器中显示,在 Linux 上为在“文件”中打开或类似选项)。

25f63f9629657e85.png

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

您无需对应用中的代码做出任何更改。运行代码并进行测试,您会看到如上所示的结果,在该模型中,模型进行了改进,能够检测到“做成交易”文本场景。

代码库的完整版本以 TextClassificationStep3 形式存储在代码库中。

6.更新您的 iOS 应用

您可以通过克隆代码库并从 TextClassificationStep2 加载应用来获得此代码。您可以在 TextClassificationOnMobile->Android 路径中找到它。

finished 代码也以 TextClassificationStep3 的形式提供给您。

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

553b845565b5b822.png

更新应用以使用新模型非常简单。最简单的方法是直接转到文件浏览器,获取新版本的 model.tflitevocablabels.txt,然后将它们复制到您的项目目录中。

完成此操作后,您的应用将与新模型配合使用,您可以尝试一下。以下示例展示了同一句话,但使用了新的模型:

9031ec260b1857a3.png

7. 恭喜

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

后续步骤

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

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

您的用户会无缝获得更新后的模型,而无需您将其复制为资源,然后重新编译并重新分发。例如,您还可以使用 Firebase Remote Config 管理发送垃圾内容的阈值,而不是您目前拥有的 0.8。

无限可能,我们将在本课程的后续 Codelab 中探索这些!