| from datasets import load_dataset |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer, DataCollatorWithPadding |
| import evaluate |
| import numpy as np |
| from transformers import EvalPrediction |
|
|
| task = "sst2" |
|
|
| |
| raw = load_dataset("glue", task) |
| tokenizer = AutoTokenizer.from_pretrained("your-model-or-tokenizer") |
| model = AutoModelForSequenceClassification.from_pretrained("your-model-or-checkpoint", num_labels=len(set(raw["train"]["label"]))) |
|
|
| |
| def preprocess(batch): |
| |
| sent1 = batch.get("sentence1") or batch.get("question") or batch.get("sentence") |
| sent2 = batch.get("sentence2") |
| if sent2 is None: |
| return tokenizer(sent1, truncation=True) |
| return tokenizer(sent1, sent2, truncation=True) |
|
|
| tokenized = raw.map(preprocess, batched=True) |
|
|
| |
| data_collator = DataCollatorWithPadding(tokenizer) |
|
|
| |
| metric = evaluate.load("glue", task) |
|
|
| def compute_metrics(p: EvalPrediction): |
| logits = p.predictions |
| if isinstance(logits, tuple): |
| logits = logits[0] |
| preds = np.argmax(logits, axis=-1) |
| return metric.compute(predictions=preds, references=p.label_ids) |
|
|
| |
| training_args = TrainingArguments( |
| output_dir="./out", |
| per_device_train_batch_size=16, |
| per_device_eval_batch_size=32, |
| evaluation_strategy="epoch", |
| save_strategy="epoch", |
| num_train_epochs=3, |
| ) |
|
|
| trainer = Trainer( |
| model=model, |
| args=training_args, |
| train_dataset=tokenized["train"], |
| eval_dataset=tokenized["validation"], |
| tokenizer=tokenizer, |
| data_collator=data_collator, |
| compute_metrics=compute_metrics, |
| ) |
|
|
| |
| trainer.train() |
| trainer.evaluate() |
|
|