- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为一些背景知识,我最近越来越关注 NLP 和文本处理。我更熟悉计算机视觉。我完全理解标记化的想法。
我的困惑源于 Tokenizer
的各种实现。可以在 Tensorflow
中找到的 类 生态系统。
有一个 Tokenizer
在 Tensorflow Datasets
中找到 类 ( tfds
) 以及 Tensorflow
中的一个 正确: tfds.features.text.Tokenizer()
& tf.keras.preprocessing.text.Tokenizer()
分别。
我查看了源代码(链接如下),但无法收集到任何有用的见解
tfds
implementation tf
implementation... line 18
links to the next link 这里的 tl;dr 问题是:您使用哪个库来做什么?一个库比另一个库有什么好处?
注意
我跟着 Tensorflow In Practice Specialization 以及这个 tutorial 。 TF in Practice Specialization 使用 tf.Keras.preprocessing.text.Tokenizer()
实现和文本加载教程使用 tfds.features.text.Tokenizer()
最佳答案
有许多包已经开始提供自己的 API 来进行文本预处理,但是,每个包都有自己的细微差别。
tf.keras.preprocessing.text.Tokenizer()
由 Keras 实现,并作为高级 API 被 Tensorflow 支持。
tfds.features.text.Tokenizer()
由 tensorflow 自己开发和维护。
两者都有自己的方式来对 token 进行编码。您可以通过下面的示例进行说明。
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
import tensorflow_datasets as tfds
让我们获取一些样本数据并查看这两个 API 的编码输出:
text_data = ["4. Kurt Betschart - Bruno Risi ( Switzerland ) 22",
"Israel approves Arafat 's flight to West Bank .",
"Moreau takes bronze medal as faster losing semifinalist .",
"W D L G / F G / A P",
"-- Helsinki newsroom +358 - 0 - 680 50 248",
"M'bishi Gas sets terms on 7-year straight ."]
首先,让我们看看 tf.keras.Tokenizer()
的结果:
tf_keras_tokenizer = Tokenizer()
tf_keras_tokenizer.fit_on_texts(text_data)
tf_keras_encoded = tf_keras_tokenizer.texts_to_sequences(text_data)
tf_keras_encoded = pad_sequences(tf_keras_encoded, padding="post")
对于我们输入数据中的第一句话,结果将是:
tf_keras_encoded[0]
array([2, 3, 4, 5, 6, 7, 8, 0], dtype=int32)
如果我们查看单词到索引的映射。
tf_keras_tokenizer.index_word
{1: 'g',
2: '4',
3: 'kurt',
4: 'betschart',
5: 'bruno',
6: 'risi',
7: 'switzerland',
8: '22',
9: 'israel',
10: 'approves',
11: 'arafat',
12: "'s",
13: 'flight',
14: 'to',
15: 'west',
16: 'bank',
17: 'moreau',
18: 'takes',
19: 'bronze',
20: 'medal',
21: 'as',
22: 'faster',
23: 'losing',
24: 'semifinalist',
25: 'w',
26: 'd',
27: 'l',
28: 'f',
29: 'a',
30: 'p',
31: 'helsinki',
32: 'newsroom',
33: '358',
34: '0',
35: '680',
36: '50',
37: '248',
38: "m'bishi",
39: 'gas',
40: 'sets',
41: 'terms',
42: 'on',
43: '7',
44: 'year',
45: 'straight'}
现在让我们试试 tfds.features.text.Tokenizer()
:
text_vocabulary_set = set()
for text in text_data:
text_tokens = tfds_tokenizer.tokenize(text)
text_vocabulary_set.update(text_tokens)
tfds_text_encoder = tfds.features.text.TokenTextEncoder(text_vocabulary_set, tokenizer=tfds_tokenizer)
对于我们输入数据中的第一句话,结果将是:
tfds_text_encoder.encode(text_data[0])
[35, 19, 44, 38, 32, 2, 14]
如果我们查看单词到索引的映射(注意索引从 0 开始)。
tfds_text_encoder._token_to_id
{'0': 0,
'22': 13,
'248': 17,
'358': 23,
'4': 34,
'50': 9,
'680': 6,
'7': 26,
'A': 19,
'Arafat': 39,
'Bank': 35,
'Betschart': 43,
'Bruno': 37,
'D': 15,
'F': 20,
'G': 28,
'Gas': 29,
'Helsinki': 38,
'Israel': 3,
'Kurt': 18,
'L': 44,
'M': 5,
'Moreau': 22,
'P': 10,
'Risi': 31,
'Switzerland': 1,
'W': 30,
'West': 33,
'approves': 4,
'as': 7,
'bishi': 2,
'bronze': 12,
'faster': 8,
'flight': 27,
'losing': 42,
'medal': 32,
'newsroom': 11,
'on': 25,
's': 24,
'semifinalist': 40,
'sets': 36,
'straight': 45,
'takes': 41,
'terms': 16,
'to': 14,
'year': 21}
您可以看到两个结果中的编码差异以及两个 API 都提供了一些可以根据需要使用和更改的超参数。
关于python - tf.keras.preprocessing.text.Tokenizer() 和 tfds.features.text.Tokenizer() 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61661160/
在 Tensorflow(从 v1.2.1 开始)中,似乎有(至少)两个并行 API 来构建计算图。 tf.nn 中有函数,如 conv2d、avg_pool、relu、dropout,tf.laye
我正在处理眼睛轨迹数据和卷积神经网络。我被要求使用 tf.reduce_max(lastconv, axis=2)代替 MaxPooling 层和 tf.reduce_sum(lastconv,axi
TensorFlow 提供了 3 种不同的数据存储格式 tf.train.Feature .它们是: tf.train.BytesList tf.train.FloatList tf.train.In
我正在尝试为上下文强盗问题 (https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part
我在使用 Tensorflow 时遇到问题: 以下代码为卷积 block 生成正确的图: def conv_layer(self, inputs, filter_size = 3, num_filte
我正在将我的训练循环迁移到 Tensorflow 2.0 API .在急切执行模式下,tf.GradientTape替换 tf.gradients .问题是,它们是否具有相同的功能?具体来说: 在函数
tensorflow 中 tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)) 的目的是什么? 更多上下文:
我一直在努力学习 TensorFlow,我注意到不同的函数用于相同的目标。例如,为了平方变量,我看到了 tf.square()、tf.math.square() 和 tf.keras.backend.
我正在尝试使用自动编码器开发图像着色器。有 13000 张训练图像。如果我使用 tf.data,每个 epoch 大约需要 45 分钟,如果我使用 tf.utils.keras.Sequence 大约
我尝试按照 tensorflow 教程实现 MNIST CNN 神经网络,并找到这些实现 softmax 交叉熵的方法给出了不同的结果: (1) 不好的结果 softmax = tf.nn.softm
其实,我正在coursera上做deeplearning.ai的作业“Art Generation with Neural Style Transfer”。在函数 compute_layer_styl
训练神经网络学习“异或” 我正在尝试使用“批量归一化”,我创建了一个批量归一化层函数“batch_norm1”。 import tensorflow as tf import nump
我正在尝试协调来自 TF“图形和 session ”指南以及 TF“Keras”指南和 TF Estimators 指南的信息。现在在前者中它说 tf.Session 使计算图能够访问物理硬件以执行图
我正在关注此处的多层感知器示例:https://github.com/aymericdamien/TensorFlow-Examples我对函数 tf.nn.softmax_cross_entropy
回到 TensorFlow = 2.0 中消失了。因此,像这样的解决方案...... with tf.variable_scope("foo"): with tf.variable_scope
我按照官方网站中的步骤安装了tensorflow。但是,在该网站中,作为安装的最后一步,他们给出了一行代码来“验证安装”。但他们没有告诉这段代码会给出什么输出。 该行是: python -c "imp
代码: x = tf.constant([1.,2.,3.], shape = (3,2,4)) y = tf.constant([1.,2.,3.], shape = (3,21,4)) tf.ma
我正在尝试从 Github 训练一个 3D 分割网络.我的模型是用 Keras (Python) 实现的,这是一个典型的 U-Net 模型。模型,总结如下, Model: "functional_3"
我正在使用 TensorFlow 2。我正在尝试优化一个函数,该函数使用经过训练的 tensorflow 模型(毒药)的损失。 @tf.function def totalloss(x): x
试图了解 keras 优化器中的 SGD 优化代码 (source code)。在 get_updates 模块中,我们有: # momentum shapes = [K.int_shape(p) f
我是一名优秀的程序员,十分优秀!