### 3. train.py ```python #!/usr/bin/env python3 """ Training script for POSNEG dataset sentiment classification """ import torch from torch.utils.data import DataLoader from transformers import ( AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer, ) from datasets import load_dataset import numpy as np from sklearn.metrics import accuracy_score, precision_recall_fscore_support class POSNEGDataset(torch.utils.data.Dataset): def __init__(self, texts, labels, tokenizer, max_length=512): self.texts = texts self.labels = labels self.tokenizer = tokenizer self.max_length = max_length def __len__(self): return len(self.texts) def __getitem__(self, idx): text = str(self.texts[idx]) label = self.labels[idx] encoding = self.tokenizer( text, truncation=True, padding='max_length', max_length=self.max_length, return_tensors='pt' ) return { 'input_ids': encoding['input_ids'].flatten(), 'attention_mask': encoding['attention_mask'].flatten(), 'labels': torch.tensor(label, dtype=torch.long) } def compute_metrics(eval_pred): predictions, labels = eval_pred predictions = np.argmax(predictions, axis=1) precision, recall, f1, _ = precision_recall_fscore_support(labels, predictions, average='weighted') acc = accuracy_score(labels, predictions) return { 'accuracy': acc, 'f1': f1, 'precision': precision, 'recall': recall } def main(): # Load POSNEG dataset print("Loading POSNEG dataset...") dataset = load_dataset("chaosbringerc/POSNEG") # Your dataset # Initialize tokenizer and model model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained( model_name, num_labels=2, id2label={0: "NEGATIVE", 1: "POSITIVE"}, label2id={"NEGATIVE": 0, "POSITIVE": 1} ) # Prepare datasets train_dataset = POSNEGDataset( texts=dataset['train']['text'], labels=dataset['train']['label'], tokenizer=tokenizer ) eval_dataset = POSNEGDataset( texts=dataset['validation']['text'], labels=dataset['validation']['label'], tokenizer=tokenizer ) # Training arguments training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=16, per_device_eval_batch_size=16, warmup_steps=500, weight_decay=0.01, logging_dir='./logs', logging_steps=10, evaluation_strategy="epoch", save_strategy="epoch", load_best_model_at_end=True, ) # Initialize trainer trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, compute_metrics=compute_metrics, ) # Train the model print("Starting training...") trainer.train() # Save the model print("Saving model...") trainer.save_model() tokenizer.save_pretrained('./results') print("Training completed!") if __name__ == "__main__": main()