### 在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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