### 在Tensorflow特征列中填充序列

如何在特征列中填充序列,以及feature_column中的dimension是什么意思?

我正在使用Tensorflow 2.0并实现一个文本摘要的示例。我对机器学习、深度学习和TensorFlow还比较新手。

我遇到了feature_column,发现它们很有用,因为我认为它们可以嵌入到模型的处理管道中。

在经典场景中,如果不使用feature_column,我可以预处理文本,对其进行分词,将其转换为一系列数字,然后填充到maxlen为100个单词的长度。但在使用feature_column时,我无法实现这一点。

以下是我目前编写的代码。

train_dataset = tf.data.experimental.make_csv_dataset(    'assets/train_dataset.csv', label_name=LABEL, num_epochs=1, shuffle=True, shuffle_buffer_size=10000, batch_size=1, ignore_errors=True)vocabulary = ds.get_vocabulary()def text_demo(feature_column):    feature_layer = tf.keras.experimental.SequenceFeatures(feature_column)    article, _ = next(iter(train_dataset.take(1)))    tokenizer = tf_text.WhitespaceTokenizer()    tokenized = tokenizer.tokenize(article['Text'])    sequence_input, sequence_length = feature_layer({'Text':tokenized.to_tensor()})    print(sequence_input)def categorical_column(feature_column):    dense_column = tf.keras.layers.DenseFeatures(feature_column)    article, _ = next(iter(train_dataset.take(1)))    lang_tokenizer = tf.keras.preprocessing.text.Tokenizer(      filters='')    lang_tokenizer.fit_on_texts(article)    tensor = lang_tokenizer.texts_to_sequences(article)    tensor = tf.keras.preprocessing.sequence.pad_sequences(tensor,                                                         padding='post', maxlen=50)    print(dense_column(tensor).numpy())text_seq_vocab_list = tf.feature_column.sequence_categorical_column_with_vocabulary_list(key='Text', vocabulary_list=list(vocabulary))text_embedding = tf.feature_column.embedding_column(text_seq_vocab_list, dimension=8)text_demo(text_embedding)numerical_voacb_list = tf.feature_column.categorical_column_with_vocabulary_list(key='Text', vocabulary_list=list(vocabulary))embedding = tf.feature_column.embedding_column(numerical_voacb_list, dimension=8)categorical_column(embedding)

我对这里应该使用sequence_categorical_column_with_vocabulary_list还是categorical_column_with_vocabulary_list感到困惑。在文档中,虽然我知道SequenceFeatures是一个实验性功能,但它并没有被详细解释。

我也不明白dimension参数的作用是什么?


回答:

实际上,以下问题

我对这里应该使用sequence_categorical_column_with_vocabulary_list还是categorical_column_with_vocabulary_list感到困惑。

应该是第一个问题,因为它影响到主题名称中的解释。

此外,关于文本摘要的含义还不太清楚。你打算将处理后的文本传递给哪种类型的模型/层?

顺便说一下,这很重要,因为tf.keras.layers.DenseFeaturestf.keras.experimental.SequenceFeatures适用于不同的网络架构和方法。

SequenceFeatures层的文档所说,SequenceFeatures层的输出应该被输入到序列网络中,如RNN。

DenseFeatures会产生一个密集的张量作为输出,因此适合其他类型的网络。

由于你在代码片段中执行了分词,你将在模型中使用嵌入。然后你有两个选择:

  1. 将学习到的嵌入传递到Dense层。这意味着你不会分析单词的顺序。
  2. 将学习到的嵌入传递到卷积、循环、平均池化、LSTM层,并利用单词顺序进行学习。

第一种选择需要使用:

  • tf.keras.layers.DenseFeatures
  • tf.feature_column.categorical_column_*()中的一个
  • tf.feature_column.embedding_column()

第二种选择需要使用:

  • tf.keras.experimental.SequenceFeatures
  • tf.feature_column.sequence_categorical_column_*()中的一个
  • tf.feature_column.embedding_column()

以下是示例。对于两种选择,预处理和训练部分是相同的:

...

这是我们不考虑单词顺序进行学习的第一种选择

...

这是我们考虑单词顺序并在模型中学习的第二种选择。

...

请在我的GitHub上找到包含这些示例的完整Jupyter笔记本:

feature_column.embedding_column()中的dimension参数正是模型学习过程中表示标记的空间维度。请参阅https://www.tensorflow.org/beta/tutorials/text/word_embeddings以获取详细解释

另外,请注意使用feature_column.embedding_column()tf.keras.layers.Embedding()的替代方案。如你所见,feature_column从预处理管道中执行编码步骤,但你仍然需要手动执行句子的分割、填充和截断。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注