1. 准备工作
在此 Codelab 中,您将学习如何更新文本分类模型,该模型基于原始博客垃圾评论数据集构建,但通过您自己的评论进行了增强,以便您可以拥有一个可以处理您的数据的模型。
前提条件
此 Codelab 是“移动文本分类入门”在线课程的一部分。此在线课程中的 Codelab 是按顺序编排的。您将使用的应用和模型应该在之前按照第一条在线课程进行构建。如果您还没有完成之前的活动,请立即停下来先完成这些活动:
- 构建基本消息传递样式应用
- 构建垃圾评论机器学习模型
- 更新应用以使用垃圾内容过滤机器学习模型
学习内容
- 如何更新您在“移动文本分类入门”在线课程中构建的文本分类模型
- 如何自定义模型以屏蔽应用中最常见的垃圾内容
所需条件
- 您在之前的活动中观察和构建的即时通讯应用和垃圾邮件过滤模型。
2. 增强文本分类
您可以通过克隆此代码库并从 TextClassificationStep2
加载该应用来获取其代码。您可以在 TextClassificationOnMobile->Android
路径中找到该编号。
您也可以以 TextClassificationStep3
的形式获取 finished 代码。
如果您打开自己构建的短信应用并尝试发送这条短信,会得到一个非常低的垃圾邮件评分:
诸如此类的拼写错误是避开垃圾邮件过滤器的常见方法。虽然邮件无害,但垃圾邮件发件人通常会在用户 ID 中添加链接(而不是在邮件本身中添加链接,因为邮件中有链接可能会触发过滤器)。
在本实验中,您将了解如何使用新数据更新模型。完成后,使用相同句子运行便会得到以下结果,其中该邮件被识别为垃圾邮件!
3. 修改 CSV 文件
为了训练原始模型,我们创建了一个 CSV 格式 (lmblog_comments.csv
) 的数据集,其中包含近一千条被标记为垃圾内容或非垃圾内容的评论。如果您想检查该 CSV 文件,请在任意文本编辑器中打开它。
CSV 文件由第一行描述列,此处标记为 commenttext
和 spam
。
后续的每一行都遵循以下格式:
右侧的标签表示垃圾邮件为 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)
在训练时,您应该会看到模型仍会训练到较高水平的准确率:
浏览笔记本以下载模型、词汇表和标签文件。在下一步中,您将将它们集成到 Android 中。
5. 更新您的 Android 应用
- 在 Android Studio 中打开应用,并确保已选择 Project Explorer 顶部的 Android。
- 从旧版本模型文件中找到包含标签、模型和词汇表的
assets
文件。
- 右键点击素材资源文件夹。
- 在菜单中,选择相应选项以通过操作系统的文件管理器打开该文件夹。(Mac 上在“访达”中显示,如图所示。在 Windows 中是在资源管理器中显示,在 Linux 中是在“文件”中打开或类似选项。)
- 此操作会在操作系统的文件管理器中打开包含模型、词汇和标签的目录。将您在上一步中创建的新项目复制到这些节点。
您无需对应用中的代码进行任何更改。运行它并进行测试,您将看到如上所示的结果,其中模型已改进,可以检测“在线交易”文本场景。
代码库中有完成版代码,名称为 TextClassificationStep3。
6. 更新您的 iOS 应用
您可以通过克隆此代码库并从 TextClassificationStep2
加载该应用来获取其代码。您可以在 TextClassificationOnMobile->Android
路径中找到该编号。
您也可以以 TextClassificationStep3
的形式获取 finished 代码。
如果您学习了上一个 Codelab,则会获得可与基本模型搭配使用的 iOS 版本的 TextClassificationStep2。如果您想从现有版本着手,只需从代码库中获取版本即可。它将使用基于垃圾评论数据训练的第一个模型,您可能会看到如下结果:
更新应用以使用新模型非常简单。最简单的方法是直接转到文件资源管理器,获取 model.tflite
、vocab
和 labels.txt
的新版本,并将其复制到您的项目目录。
完成此操作后,您的应用将与新模型配合使用,您可以试用一下。下面是一个使用新模型的同一句子的示例:
7. 恭喜
大功告成!通过使用新数据重新训练模型,并将其添加到您的 Android 和 iOS 应用,您无需编写任何新代码即可更新其功能!
后续步骤
该模型只是个玩具,仅用 1000 个数据项进行了训练。
在探索自然语言处理时,您可能希望使用较大的数据集。您还可以设置持续训练流水线,这样当有新数据传入并被标记为垃圾内容时,它可以在后端自动重新训练模型,然后使用 Firebase Model Hosting 部署该模型。
您的用户将无缝获得更新后的模型,而无需您将其复制并粘贴到资源中、重新编译和再分发。例如,您还可以使用 Firebase Remote Config 来管理发送垃圾内容的阈值,而非目前的 0.8。
这些可能性非常多,我们将在本课程的后续 Codelab 中探讨这些可能性!