| import argparse |
| from collections import Counter |
| from pathlib import Path |
|
|
| from datasets import load_dataset |
| from transformers import AutoTokenizer |
|
|
|
|
| def parse_args(): |
| parser = argparse.ArgumentParser(description="Prepare tokenized IMDB datasets") |
| parser.add_argument("--data-dir", default="./data") |
| parser.add_argument("--backbone", default="distilbert-base-uncased") |
| parser.add_argument("--max-length", type=int, default=128) |
| parser.add_argument("--max-train-samples", type=int, default=None) |
| parser.add_argument("--max-test-samples", type=int, default=None) |
| return parser.parse_args() |
|
|
|
|
| def is_valid_text(example): |
| text = example["text"] |
| return text is not None and len(text.strip()) > 10 |
|
|
|
|
| def main(): |
| args = parse_args() |
| data_dir = Path(args.data_dir) |
| train_path = data_dir / "imdb_train" |
| test_path = data_dir / "imdb_test" |
| tokenizer_path = data_dir / "tokenizer" |
| data_dir.mkdir(parents=True, exist_ok=True) |
|
|
| dataset = load_dataset("imdb") |
| train_ds = dataset["train"] |
| test_ds = dataset["test"] |
|
|
| if args.max_train_samples is not None: |
| train_ds = train_ds.select(range(args.max_train_samples)) |
| if args.max_test_samples is not None: |
| test_ds = test_ds.select(range(args.max_test_samples)) |
|
|
| print("raw train label counts:", Counter(train_ds["label"])) |
| print("raw test label counts:", Counter(test_ds["label"])) |
|
|
| tokenizer = AutoTokenizer.from_pretrained(args.backbone) |
|
|
| def tokenize_batch(examples): |
| return tokenizer( |
| examples["text"], |
| truncation=True, |
| max_length=args.max_length, |
| ) |
|
|
| train_processed = ( |
| train_ds.filter(is_valid_text) |
| .map(tokenize_batch, batched=True, remove_columns=["text"]) |
| .rename_column("label", "labels") |
| ) |
| test_processed = ( |
| test_ds.filter(is_valid_text) |
| .map(tokenize_batch, batched=True, remove_columns=["text"]) |
| .rename_column("label", "labels") |
| ) |
|
|
| train_processed.save_to_disk(str(train_path)) |
| test_processed.save_to_disk(str(test_path)) |
| tokenizer.save_pretrained(str(tokenizer_path)) |
|
|
| print("saved train dataset:", train_path) |
| print("saved test dataset:", test_path) |
| print("saved tokenizer:", tokenizer_path) |
| print("processed columns:", train_processed.column_names) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|