昨天 Hugging Face 裡透過 Arrow 和 Stream 兩種機制,讓我們可以有效率的來操作資料,今天我們就來看看 Stream 的部份吧
Hugging Face Library 提供了一個 Stream 的功能,讓你可以串流你的 dataset,會回傳一個 IterableDataset,讓你可以迭代它。
nih_dataset_streamed = load_dataset(
"json", data_files=data_files, split="train", streaming=True
)
next(iter(nih_dataset_streamed))
才有辦法印出來。shuffled_dataset = nih_dataset_streamed.shuffle(buffer_size=10_000, seed=5566)
next(iter(shuffled_dataset))
我們在操作原本的 dataset 的時候,可以用 set_format
轉成 pandas ,不過這就不適用 streamed dataset 了。
還有 filter 和 take 可以用
nih_dataset_streamed = nih_dataset_streamed.filter(lambda x: x["meta"]["APPLICATION_ID"] >= 1000)
list(nih_dataset_streamed.take(3))
skipped_dataset = nih_dataset_streamed.skip(1000)
interleave_datasets
,這個可以把兩個 datasets 合併在一起,無論是 Dataset 還是 IterableDataset 都可以合併,但是一般用在 IterableDataset 的 dataset 合併,效能更佳。from datasets import interleave_datasets
combined_dataset = interleave_datasets([nih_dataset_streamed, other_dataset_streamed])
base_url = "https://mystic.the-eye.eu/public/AI/pile/"
data_files = {
"train": [base_url + "train/" + f"{idx:02d}.jsonl.zst" for idx in range(30)],
"validation": base_url + "val.jsonl.zst",
"test": base_url + "test.jsonl.zst",
}
pile_dataset = load_dataset("json", data_files=data_files, streaming=True)
next(iter(pile_dataset["train"]))
明天開始我們就來進入 Tokenizer 的部份吧!!