news-apex-api / bias_module /preprocess.py
Breadknife's picture
Restore original bias_module content as per user instructions
fb57171
Raw
History Blame Contribute Delete
2.25 kB
# 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)