jeevan0704/sequential-model-for-sequential_dataset
0
1"""2Main script for end-to-end sequence labeling pipeline3"""4import torch5import pickle6import os7 8import config9from utils import set_seed, create_directories10from data_preprocessing import load_data, prepare_data, create_data_loaders11from model import create_model12from train import train_model13from evaluate import evaluate_model, save_results, show_sample_predictions14from visualize_results import visualize_all_results15 16 17def main():18 """Main execution pipeline"""19 print("\n" + "="*80)20 print("SEQUENCE LABELING MODEL - END-TO-END PIPELINE")21 print("="*80)22 23 # Set seed for reproducibility24 set_seed(config.RANDOM_SEED)25 print(f"Random seed set to: {config.RANDOM_SEED}")26 27 # Create directories28 create_directories([config.MODEL_DIR, config.RESULTS_DIR])29 30 # Step 1: Load and prepare data31 print("\n" + "="*80)32 print("STEP 1: DATA LOADING AND PREPROCESSING")33 print("="*80)34 35 data = load_data()36 train_dataset, val_dataset, test_dataset, stats = prepare_data(data)37 train_loader, val_loader, test_loader = create_data_loaders(38 train_dataset, val_dataset, test_dataset39 )40 41 vocab_size = stats['vocab_size']42 print(f"\nDataset prepared:")43 print(f" Vocabulary size: {vocab_size}")44 print(f" Train samples: {len(train_dataset)}")45 print(f" Val samples: {len(val_dataset)}")46 print(f" Test samples: {len(test_dataset)}")47 48 # Step 2: Train model49 print("\n" + "="*80)50 print("STEP 2: MODEL TRAINING")51 print("="*80)52 53 model, history = train_model(vocab_size, train_loader, val_loader, config.DEVICE)54 55 # Save training history56 history_path = os.path.join(config.RESULTS_DIR, 'training_history.pkl')57 with open(history_path, 'wb') as f:58 pickle.dump(history, f)59 print(f"\nTraining history saved to {history_path}")60 61 # Step 3: Evaluate model62 print("\n" + "="*80)63 print("STEP 3: MODEL EVALUATION")64 print("="*80)65 66 # Load best model67 from utils import load_checkpoint68 best_model_path = os.path.join(config.MODEL_DIR, 'best_model.pth')69 load_checkpoint(best_model_path, model)70 71 # Evaluate72 results = evaluate_model(model, test_loader, config.DEVICE)73 74 # Save results75 save_results(results, config.RESULTS_DIR)76 77 # Show sample predictions78 show_sample_predictions(model, test_dataset, config.DEVICE, num_samples=5)79 80 # Step 4: Visualize results81 print("\n" + "="*80)82 print("STEP 4: VISUALIZATION")83 print("="*80)84 85 visualize_all_results(86 history, 87 results['confusion_matrix'], 88 results['targets'],89 config.RESULTS_DIR90 )91 92 # Final summary93 print("\n" + "="*80)94 print("PIPELINE COMPLETED SUCCESSFULLY!")95 print("="*80)96 print(f"\nFinal Results:")97 print(f" Test Accuracy: {results['metrics']['accuracy']:.4f}")98 print(f" Test F1 (Macro): {results['metrics']['f1_macro']:.4f}")99 print(f" Test F1 (Weighted): {results['metrics']['f1_weighted']:.4f}")100 print(f"\nOutputs saved to:")101 print(f" Model: {config.MODEL_DIR}/best_model.pth")102 print(f" Results: {config.RESULTS_DIR}/")103 print("="*80)104 105 106if __name__ == "__main__":107 main()108 