Как генерировать закодированный текст непосредственно из метода tf.data.Dataset.from_generator? - PullRequest
0 голосов
/ 28 апреля 2020

Вкл. Повышение производительности с помощью API tf.data Учебное пособие по Tensorflow демонстрирует простую и эффективную реализацию Dataset. При работе с наборами текстовых данных эта реализация будет выглядеть примерно так:

class TextDataset(tf.data.Dataset):

    def _generator(dataset_dir, num_samples):
        # Opening the dataset file
        dataset_file = open(dataset_dir, "r")

        for sample_idx in range(num_samples):
            # Reading data (line, record) from the file
            sample = dataset_file.readline()

            yield {"idx": sample_idx, "text": sample}

    def __new__(cls, dataset_dir, num_samples=3):
        return tf.data.Dataset.from_generator(
            cls._generator,
            output_types={"idx": tf.dtypes.int64, "text": tf.dtypes.string},
            output_shapes={"idx": (), "text": ()},
            args=(dataset_dir, num_samples,)
        )

, которая генерирует следующий набор данных:

{'idx': <tf.Tensor: shape=(), dtype=int64, numpy=0>,  
 'text': <tf.Tensor: shape=(), dtype=string, numpy=b'sample one'>},

{'idx': <tf.Tensor: shape=(), dtype=int64, numpy=1>, 
 'text': <tf.Tensor: shape=(), dtype=string, numpy=b'sample two'>},

{'idx': <tf.Tensor: shape=(), dtype=int64, numpy=2>, 
 'text': <tf.Tensor: shape=(), dtype=string, numpy=b'sample three'>}

...

Теперь вместо выдачи text в виде строки в метод _generator, было бы интересно вернуть только идентификаторы строковых токенов (кодировать). Это можно сделать с помощью tokenizer.

Итак, как кодировать text как список целых чисел, прежде чем выдать его в методе _generator?

Примечание : рабочий пример доступен в Google Colab .

...