Jorge-AM's picture
feat: Fine-tune an irony head on TweetEval with MLflow tracking
3fbe048
Raw History Blame Contribute Delete
1.14 kB
"""Loads the TweetEval irony split and encodes it for DistilBERT."""
from datasets import DatasetDict, load_dataset
from transformers import AutoTokenizer, DataCollatorWithPadding
from training.config import BASE_CHECKPOINT, DATASET_CONFIG, DATASET_ID, MAX_LENGTH
def load_splits() -> DatasetDict:
"""Returns the official train/validation/test splits, unmodified."""
return load_dataset(DATASET_ID, DATASET_CONFIG)
def build_tokenizer(checkpoint: str = BASE_CHECKPOINT):
return AutoTokenizer.from_pretrained(checkpoint)
def encode(splits: DatasetDict, tokenizer) -> DatasetDict:
"""
Tokenises without padding so the collator can pad each batch to its own
longest sequence: on CPU, padding everything to 96 tokens wastes most of the
attention computation on a corpus whose median tweet is under 30.
"""
def apply(batch: dict) -> dict:
return tokenizer(batch["text"], truncation=True, max_length=MAX_LENGTH)
return splits.map(apply, batched=True, remove_columns=["text"])
def build_collator(tokenizer) -> DataCollatorWithPadding:
return DataCollatorWithPadding(tokenizer=tokenizer)