tf.data.Dataset:将字符串拆分并转换为整数数组

时间:2018-10-23 18:23:01

标签: python tensorflow tensorflow-datasets

我正在使用tf.data.Dataset API,并且从标签的df['et'].apply(lambda et: pd.datetime.combine(datetime.datetime.strptime('2018-01-01', '%Y-%m-%d').date(),et)) numpy数组和x numpy数组开始。我的y仅由字符串组成:

x

所以我分成了训练和测试,并创建了一个array([["good movie"], ["terrible film"]]

tf.data.Dataset

但是现在,我想这样做:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=42)

dataset = tf.data.Dataset.from_tensor_slices(({"reviews": x_train}, y_train))

但是此语法不正确。我已经看过dataset["reviews"] = tf.string_split(dataset["sequence"]) ,但不想对map中的所有列进行操作。

此外,将字符串转换为整数数组的最佳方法是什么(每个单词都有一个唯一的整数)。所以:

tf.data.Dataset可能会变成["good movie"]

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在Tensorflow存储库here中找到有关tf.data的很好的示例。

在存储库中,除了其并行数据集外,它还包含两个名为src_vocab_filetrg_vocab_file的词典文件,其中包含我们语料库中的所有词汇。

首先,它将使用vocab_utils.py将这两个文件转换为src_vocab_tabletrg_vocab_table

from tensorflow.python.ops import lookup_ops

src_vocab_table = lookup_ops.index_table_from_file(
      src_vocab_file, default_value=UNK_ID)

第二,它使用iterator_utils.py拆分,缩短和转换数据集中的字符串为ID:

src_dataset = src_dataset.map(lambda src: tf.string_split([src]).values)
src_dataset = src_dataset.map(lambda src: src[:src_max_len])
src_dataset = src_dataset.map(lambda src: tf.cast(src_vocab_table.lookup(src), tf.int32))