来自 Tensorflow TextLineDataset 的 Ngram

Ngrams from Tensorflow TextLineDataset

我有一个文本文件,每行一个句子

当我创建一个 TextLineDataset 并使用迭代器对其进行迭代时,它 returns 文件逐行

我想一次遍历我的文件两个标记,这是我当前的代码:

sentences = tf.data.TextLineDataset("data/train.src")
iterator = sentences.make_initializable_iterator()
next_element = iterator.get_next()

sess = tf.Session()

sess.run(tf.tables_initializer())
sess.run(iterator.initializer)

elem = sess.run(next_element)
print(elem)

是否可以使用 TextLineDataset 来实现?

编辑:"tokens" 我的意思是 "words"

这绝对是可能的,但您需要做一些争论。您需要:

  1. 将每一行拆分成单词
  2. 将其扁平化为单个单词流
  3. 批量为 2 个

我们可以用tf.strings.split来表示1.:

words = sentences.map(tf.strings.split)

flat_map 为 2.:

flat_words = words.flat_map(tf.data.Dataset.from_tensor_slices)

batch 为 3:

word_pairs = flat_words.batch(2)

当然,我们可以将所有这些操作链接在一起,得到如下结果:

word_pairs = sentences \
  .map(tf.strings.split) \
  .flat_map(tf.data.Dataset.from_tensor_slices) \
  .batch(2)