Вкл. Повышение производительности с помощью 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 .