Tic商业评论

关注微信公众号【站长自定义模块】,定时推送前沿、专业、深度的商业资讯。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

  • QQ空间
  • 回复
  • 收藏

TensorFlow2 NLP 分类例子

lijingle 深度学习框架 2022-1-26 15:29 2691人围观

在上一篇文章中,我们介绍了有关计算机视觉的 TensorFlow 编码示例。 现在,我们将专注于 NLP 分类和 BERT。 以下是示例列表,使用 2020 年 12 月发布的 TF 2.4.0 进行测试。这些示例源自 TensorFlow 教程。
  • IMDB 文件:使用数据集映射和嵌入进行情感分析,
  • IMDB 文件:TensorBoard & Sentimental analysis with Embedding & a data preprocessing layer,
  • IMDB TF 数据集:使用预训练的 TF Hub 嵌入进行情感分析,
  • IMDB TF 数据集:使用双向 LSTM 进行情感分析,
  • 使用 tf.text 和 TextLineDataset 进行数据处理的 Illiad 文件分类,

IMDB 文件:使用数据集映射和嵌入进行情感分析
这个例子对 IMDB 电影评论进行情感分析——将它们分类为正面评论的 pos 和负面评论的 neg。
  • 使用数据集pipelining映射转换数据,
  • 由嵌入层和dense层组成的序列模型。
加载和准备 IMDB 数据文件:


删除不需要的目录后,数据目录变为:


使用来自多个目录的文件准备数据集(每个目录包含来自同一类的样本:pos 或 neg):


使用标准化和 TextVectorization 进行文本预处理(第 79-81 行):


在第 69 行,文本向量化层 (vectorize_layer) 将适应训练数据集的语料库来设置词汇表和单词索引。 因此,给定一个包含 10 个单词的标准化句子,它会生成一个由 10 个整数组成的序列。 所以“你在哪一边……”被转换成说 (79, 3, 4, 23, ...)。


优化数据集:


模型创建、训练和评估:


这是模型的摘要。


导出一个概率模型:


IMDB 文件:TensorBoard 和带有嵌入和数据预处理层的情感分析

在这个例子中,

  • 数据预处理作为模型中的一个层完成,而不是使用数据管道映射,并且
  • 将信息记录到 TensorBoard。

首先,用于加载数据和准备数据集的样板代码。


接下来,我们创建 TextVectorization 层并使其适应训练数据集。


将 TextVectorization 层包含到模型中。 通过回调训练模型并记录 TensorBoard 信息。 我们稍后可以使用“tensorboard -logdir logs”(其中“logs”是第 76 行中的 TensorBoard 日志目录)访问此信息。


我们可以保存嵌入权重和词汇表。


Metadata.tsv 包含词汇表——一行一个单词,vectors.tsv 包含每个单词的向量表示。


我们可以通过在下面的加载按钮中上传这两个文件来使用 projection.tensorflow.org 查看此嵌入信息。


IMDB TF 数据集:使用预训练的 TF Hub 嵌入进行情感分析

在这个情感分析中:

  • 数据来自 TensorFlow 数据集,
  • 该模型使用来自 TF hub 的预训练嵌入层,并且
  • 我们将密集层添加到序列模型中作为分类头。

一种常见的做法是使用 hub.KerasLayer(第 20 行)包装一个预训练的 TF Hub 模型。


这是模型:


IMDB TF 数据集:使用双向 LSTM 进行情感分析

在这个例子中,

  • 数据从 TF 数据集加载,
  • 使用带有内置标准化的 TextVectorization,
  • 在模型中包含 TextVectorization(编码器),以及
  • 使用双向 LSTM 层。


这是模型摘要。


然后,我们训练和评估模型。


使用 tf.text、TextLineDataset 进行数据处理的 Illiad 文件分类(可选)

在这个例子中,我们预测Illiad翻译的作者。


样本来自三个文件。 每个文件都包含由同一作者完成的 Illiad 翻译。 这是我们为每个文件创建数据集的代码。 由于每个文件都来自同一个作者,我们给它的所有样本都赋予了相同的标签(第 33 行)。 然后,我们将数据集连接(合并)为一个并打乱样本。 新数据集 all_labeled_data 包含文本和标签。


此示例不使用 TextVectorization,而是用于更复杂的路由。 我们使用 tf_text API 从 all_labeled_data 创建了一个标记化数据集。 这个新数据集将文本转换为单词序列。


使用 TextVectorization,我们可以使用训练样本对其进行调整,以创建词汇表以及单词和整数索引之间的映射。 在这里,我们手动完成。 首先,我们找到 10,000 个最频繁出现的单词并创建映射(第 96 行中的 vocab_table)。


最后,我们创建将文本向量化为整数序列(每个单词一个整数)的数据集。


现在,我们建立一个模型,对其进行训练和评估。


导出模型

现在,我们创建了一个导出模型,包括可用于生产推理的文本预处理。 该模型可以直接获取原始文本,无需额外的文本预处理代码。 我们将在复制数据预处理时使用 TextVectorization 层。 在第 142 到 148 行,它使用相同的标准化器和标记器,并适应我们之前创建的相同词汇表(包括映射)。 其余代码重建模型并进行预测。


所有源代码均源自或修改自 TensorFlow2 教程。






路过

雷人

握手

鲜花

鸡蛋
我有话说......
电话咨询: 135xxxxxxx
关注微信