Spaces:
Sleeping
Sleeping
| # src/preprocess.py | |
| import sys | |
| import os | |
| # Add project root to Python path so config.py can be imported | |
| PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) | |
| if PROJECT_ROOT not in sys.path: | |
| sys.path.insert(0, PROJECT_ROOT) | |
| import config | |
| from datasets import Dataset | |
| from transformers import BertTokenizer | |
| import torch | |
| from torch.utils.data import DataLoader, TensorDataset | |
| # Initialize BERT tokenizer | |
| tokenizer = BertTokenizer.from_pretrained(config.MODEL_NAME) | |
| def tokenize_dataset(dataset_split): | |
| """ | |
| Tokenize the 'text' column of a Hugging Face dataset split. | |
| Args: | |
| dataset_split: Dataset object (train or test) | |
| Returns: | |
| TensorDataset for PyTorch | |
| """ | |
| # Convert the 'text' column to a Python list | |
| texts = list(dataset_split["text"]) # <-- fixed | |
| labels = list(dataset_split["label"]) # also ensure labels are a list | |
| # Tokenize all texts | |
| encoding = tokenizer( | |
| texts, | |
| padding="max_length", | |
| truncation=True, | |
| max_length=config.MAX_LENGTH, | |
| return_tensors="pt" | |
| ) | |
| # Convert labels to tensors | |
| labels_tensor = torch.tensor(labels) | |
| # Return a TensorDataset | |
| dataset = TensorDataset( | |
| encoding["input_ids"], | |
| encoding["attention_mask"], | |
| labels_tensor | |
| ) | |
| return dataset | |
| def create_dataloaders(dataset, batch_size=config.BATCH_SIZE): | |
| """ | |
| Create PyTorch DataLoaders for train and test splits. | |
| """ | |
| train_dataset = tokenize_dataset(dataset["train"]) | |
| test_dataset = tokenize_dataset(dataset["test"]) | |
| train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) | |
| test_loader = DataLoader(test_dataset, batch_size=batch_size) | |
| return train_loader, test_loader | |
| # Optional test | |
| if __name__ == "__main__": | |
| from src.load_data import load_babe_dataset | |
| dataset = load_babe_dataset() | |
| train_loader, test_loader = create_dataloaders(dataset) | |
| # Print the first batch for verification | |
| batch = next(iter(train_loader)) | |
| print("input_ids shape:", batch[0].shape) | |
| print("attention_mask shape:", batch[1].shape) | |
| print("labels shape:", batch[2].shape) |