Path: blob/master/site/zh-cn/tutorials/text/warmstart_embedding_matrix.ipynb
25118 views
Warm-start embedding layer matrix
本教程展示了如何在更改词汇后使用 tf.keras.utils.warmstart_embedding_matrix
API 来“温启动”训练以进行文本情感分类。
您将首先使用基本词汇训练一个简单的 Keras 模型,然后在更新词汇后继续训练该模型。这称为“温启动”训练,为此您需要为新词汇重新映射文本嵌入向量矩阵。
嵌入向量矩阵
嵌入向量提供了一种使用高效、密集表示的方式,其中相似的词汇词例具有相似的编码。它们是可以训练的参数(模型在训练过程中学习的权重,与模型学习密集层的权重的方式相同)。8 维嵌入向量对于小型数据集而言较为常见,而处理大型数据集时嵌入向量则会高达 1024 维。维度更高的嵌入向量可以捕获单词之间的细粒度关系,但需要更多数据来学习。
词汇
一组独特的单词被称为词汇。要构建文本模型,您需要选择固定的词汇。通常,您可以从数据集中最常见的单词构建词汇。借助词汇,我们可以通过您能够在嵌入向量矩阵中查找的 ID 序列来表示每段文本。借助词汇,我们可以通过其中出现的特定单词来表示每段文本。
为什么要温启动嵌入向量矩阵?
使用表示给定词汇的一组嵌入向量来训练模型。如果模型需要更新或改进,您可以通过重复使用之前运行中的权重来显著加快训练收敛速度。使用之前运行中的嵌入向量矩阵的难度会加大。问题的起因是对词汇的任何更改都会使单词到 ID 的映射失效。
tf.keras.utils.warmstart_embedding_matrix
可以通过基于基本词汇的嵌入向量矩阵为新词汇创建嵌入向量矩阵来解决这个问题。如果一个单词同时存在于两个词汇中,则会将基本嵌入向量复制到新嵌入向量矩阵中的正确位置。此方式可以在词汇的大小或顺序发生任何变化后温启动训练。
安装
加载数据集
本教程将使用 Large Movie Review Dataset。您将在此数据集上训练情感分类器模型,在此过程中将从头开始学习嵌入向量。请参阅加载文本教程以了解详情。
使用 Keras 文件实用程序下载数据集并检查目录。
train/
目录包含 pos
和 neg
文件夹,其中的电影评论分别被标记为正面和负面。您将使用 pos
和 neg
文件夹中的评论来训练二元分类模型。
train
目录中还包含其他文件夹,应在创建训练集之前将其删除。
接下来,使用 tf.keras.utils.text_dataset_from_directory
创建 tf.data.Dataset
。您可以在此文本分类教程中阅读有关使用此实用程序的更多信息。
使用train
目录创建训练集和验证集,拆分 20% 用于验证。
配置数据集以提高性能
您可以在数据性能指南中详细了解 Dataset.cache
和 Dataset.prefetch
,以及如何将数据缓存到磁盘。
文本预处理
接下来,定义情绪分类模型所需的数据集预处理步骤。使用所需参数初始化 layers.TextVectorization
层以矢量化电影评论。您可以在文本分类教程中详细了解如何使用此层。
创建分类模型
使用 Keras Sequential API 定义情感分类模型。
编译并训练模型
您将使用 TensorBoard 呈现包括损失和准确率在内的指标。创建 tf.keras.callbacks.TensorBoard
。
使用 Adam
优化器和 BinaryCrossentropy
损失编译并训练模型。
通过这种方式,模型的验证准确率达到约 85%
注:您的结果可能会略有不同,具体取决于训练嵌入向量层之前如何随机初始化权重。
您可以查看模型摘要以详细了解模型的每个层。
在 TensorBoard 中呈现模型指标。
词汇重映射
现在,您要更新词汇并继续处理温启动训练。
首先,获取基本词汇和嵌入向量矩阵。
定义新的矢量化层以生成新的更大型词汇
使用 keras.utils.warmstart_embedding_matrix
效用函数生成更新的嵌入向量。
或者
如果您具有要用于初始化新嵌入向量矩阵的嵌入向量矩阵,请使用 keras.initializers.Constant
作为 new_embeddings 初始值设定项。请将以下代码块复制到代码单元格中进行尝试。当您对词汇中的新单词进行更好的嵌入向量矩阵初始化时,这将很有帮助。
验证嵌入向量矩阵的形状是否已更改以反映新词汇。
现在,您已具有更新的嵌入向量矩阵,那么下一步是更新层权重。
修改模型架构以使用新的文本矢量化层。
您还可以从检查点加载模型并更新模型架构,如下所示。
您已成功更新模型以接受新的词汇。更新嵌入向量层以将旧词汇映射到旧嵌入向量,并针对要学习的新词汇初始化嵌入向量。模型其余部分的学习权重将保持不变。模型将温启动以从之前停止的位置继续训练。
您现在可以验证重新映射是否有效。获取同时存在于基本词汇和新词汇中的单词“the”的索引,并比较它们的嵌入向量值。它们应相同。
继续温启动训练
注意训练是如何温启动的。第一个周期的准确率约为 85%。接近上次训练结束时的准确率。
呈现温启动训练
后续步骤
在本教程中,您学习了如何:
基于小型词汇数据集从头开始训练情感分类模型。
当词汇大小发生变化时,更新模型架构并温启动嵌入向量矩阵。
通过扩展数据集不断提高模型准确率
要详细了解嵌入向量,请参阅 Word2Vec 和用于语言理解的 Transformer 模型教程。