Skip to main content

smile-datasets

Python package PyPI version Python

LaSt mile Datasets: Use tf.data to solve the last mile data loading problem for tensorflow.

If you want to load public datasets, try:

If you want to load local, personal dataset with minimized boilerplate, use Smile Dataset!

Support Matrix

task supported core abstractions
question answering [x] ExampleForQuestionAnswering, DatasetForQuestionAnswering, DatapipeForQuestionAnswering
masked language model [x] ExampleForMaskedLanguageModel, DatasetForMaskedLanguageModel, DatapipeForMaskedLanguageModel
sequence classification [x] ExampleForSequenceClassification, DatasetForSequenceClassification, DatapipeForSequenceClassification
token classification [x] ExampleForTokenClassification, DatasetForTokenClassification, DatapipeForTokenClassification
unsupervised simcse [x] ExampleForUnsupervisedSimCSE, DatasetForUnsupervisedSimCSE, DatapipeForUnsupervisedSimCSE
supervised simcse [x] ExampleForSupervisedSimCSE, DatasetForSupervisedSimCSE, DatapipeForSupervisedSimCSE
hard negative simcse [x] ExampleForHardNegativeSimCSE, DatasetForHardNegativeSimCSE, DatapipeForHardNegativeSimCSE

Usage

All datapipes for different tasks has the same interface.

Here is an example for question answering task, but you can use datapipe the same way for other tasks.

Example for Question Answering

from smile_datasets import DatasetForQuestionAnswering, DatapipeForQuestionAnswering

# each line is a JSON {"sequece": "我喜欢自然语言处理(NLP)"}
train_input_jsonl_files = ["data/train.jsonl"]
train_dataset = DatapipeForQuestionAnswering.from_jsonl_files(
    input_files=train_input_jsonl_files, 
    vocab_file="bert/vocab.txt",
    batch_size=32,
)

# check dataset
print(next(iter(train_dataset)))

# model = build_keras_model(...)
# model.compile(...)
# train model
model.fit(train_dataset, callbacks=[...])

For maximum flexibility, you can always subclass DatasetForQuestionAnswering to load your dataset, just like torch.utils.data.Dataset:

from smile_datasets import DatasetForQuestionAnswering, DatapipeForQuestionAnswering, ParserForQuestionAnswering

class DuReaderDatasetForQuestionAnswering(DatasetForQuestionAnswering):
    """Dataset reader for DuReader dataset."""

    def __init__(self, input_files, vocab_file, subset="rubost", **kwargs) -> None:
        super().__init__()
        self.parser = ParserForQuestionAnswering(tokenizer=None, vocab_file=vocab_file, **kwargs)
        if subset == "rubost":
            self.instances = list(readers.read_dureader_rubost(input_files, **kwargs))
        else:
            self.instances = list(readers.read_dureader_checklist(input_files, **kwargs))
        self.examples = []
        for instance in self.instances:
            e = self.parser.parse(instance)
            if not e:
                continue
            self.examples.append(e)

    def __len__(self):
        return len(self.examples)

    def __getitem__(self, index) -> ExampleForQuestionAnswering:
        return self.examples[index]


dataset = DuReaderDatasetForQuestionAnswering(input_files=["data/trian.jsonl"], vocab_file="bert/vocab.txt")
train_dataset = DatapipeForQuestionAnswering.from_dataset(dataset, batch_size=32)

# check dataset
print(next(iter(train_dataset)))

# model = build_keras_model(...)
# model.compile(...)
# train model
model.fit(train_dataset, callbacks=[...])

For better performance, you can convert dataset to tfrecord ahead of time, and then build datapipe from tfrecord files directly:

# save dataset in tfrecord format
dataset.save_tfrecord(output_files="data/train.tfrecord")

# build datapipe from tfrecord files
train_dataset = DatapipeForQuestionAnswering.from_tfrecord_files(input_files="data/train.tfrecord", batch_size=32)

# check dataset
print(next(iter(train_dataset)))

# model = build_keras_model(...)
# model.compile(...)
# train model
model.fit(train_dataset, callbacks=[...])

Metadata

Release files for smile-datasets 0.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for smile-datasets 0.0.6
File Size Uploaded
smile-datasets-0.0.6.tar.gz 23.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for smile-datasets 0.0.6
File Interpreter ABI Platform
smile_datasets-0.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 65.9 kB

Release files / smile-datasets-0.0.6.tar.gz

Download URL smile-datasets-0.0.6.tar.gz
Size 23.8 kB
Tags Source
SHA-256 checksum
How to use checksums
786b4fd408e02c77dda4dcf725ddc4928a73b048e453c03e56b138cae8f7059b
BLAKE2b-256 checksum
How to use checksums
7228bdee1d8fadf99f99daea01b0a09546932871fb995e82838c6c59e5c94ffb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

Release files / smile_datasets-0.0.6-py3-none-any.whl

Download URL smile_datasets-0.0.6-py3-none-any.whl
Size 42.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bb12a3f674f309c8b2841251ebc02926c7eb4aa42a82a4deb6aa1589994547f6
BLAKE2b-256 checksum
How to use checksums
a37c1ce87e87ebc2267591494e0fb3dc56f49646f069c14666e8cb7787262466
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

Release history Release notifications | RSS feed

This release

0.0.6 This release

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page