Path: blob/master/site/zh-cn/tutorials/text/text_classification_rnn.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
使用 RNN 进行文本分类
此文本分类教程将在 IMDB 大型电影评论数据集上训练循环神经网络,以进行情感分析。
设置
导入 matplotlib
并创建一个辅助函数来绘制计算图:
数据集 info
包括编码器 (tfds.features.text.SubwordTextEncoder
)。
此文本编码器将以可逆方式对任何字符串进行编码,并在必要时退回到字节编码。
准备用于训练的数据
接下来,创建这些编码字符串的批次。使用 padded_batch
方法将序列零填充至批次中最长字符串的长度:
创建模型
构建一个 tf.keras.Sequential
模型并从嵌入向量层开始。嵌入向量层每个单词存储一个向量。调用时,它会将单词索引序列转换为向量序列。这些向量是可训练的。(在足够的数据上)训练后,具有相似含义的单词通常具有相似的向量。
与通过 tf.keras.layers.Dense
层传递独热编码向量的等效运算相比,这种索引查找方法要高效得多。
循环神经网络 (RNN) 通过遍历元素来处理序列输入。RNN 将输出从一个时间步骤传递到其输入,然后传递到下一个步骤。
tf.keras.layers.Bidirectional
包装器也可以与 RNN 层一起使用。这将通过 RNN 层向前和向后传播输入,然后连接输出。这有助于 RNN 学习长程依赖关系。
请注意,我们在这里选择 Keras 序贯模型,因为模型中的所有层都只有单个输入并产生单个输出。如果要使用有状态 RNN 层,则可能需要使用 Keras 函数式 API 或模型子类化来构建模型,以便可以检索和重用 RNN 层状态。有关更多详细信息,请参阅 Keras RNN 指南。
编译 Keras 模型以配置训练过程:
训练模型
上面的模型没有遮盖应用于序列的填充。如果在填充序列上进行训练并在未填充序列上进行测试,则可能导致倾斜。理想情况下,您可以使用遮盖来避免这种情况,但是正如您在下面看到的那样,它只会对输出产生很小的影响。
如果预测 >= 0.5,则为正,否则为负。
堆叠两个或更多 LSTM 层
Keras 循环层有两种可用的模式,这些模式由 return_sequences
构造函数参数控制:
返回每个时间步骤的连续输出的完整序列(形状为
(batch_size, timesteps, output_features)
的 3D 张量)。仅返回每个输入序列的最后一个输出(形状为 (batch_size, output_features) 的 2D 张量)。
检查其他现有循环层,例如 GRU 层。
如果您对构建自定义 RNN 感兴趣,请参阅 Keras RNN 指南。