jesse-tong's picture
First commit
da89f1c
Raw
History Blame
2.94 kB
"""
Simple script to run the DocBERT model with predefined config presets
"""
import argparse
import logging
import os
from config import get_config
from model import DocBERT
from dataset import load_data, create_data_loaders
from trainer import Trainer
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def main():
parser = argparse.ArgumentParser(description="Run DocBERT with a predefined config")
parser.add_argument("--data_path", type=str, required=True, help="Path to the dataset file (CSV or TSV)")
parser.add_argument("--text_column", type=str, default="text", help="Name of the text column")
parser.add_argument("--label_column", type=str, default="label", help="Name of the label column")
parser.add_argument("--num_classes", type=int, required=True, help="Number of classes to predict")
parser.add_argument("--config", type=str, default="default",
choices=["default", "short_text", "long_document", "fine_tuning"],
help="Configuration preset to use")
parser.add_argument("--output_dir", type=str, default="./output", help="Directory to save outputs")
args = parser.parse_args()
# Get config
config_class = get_config(args.config)
config = config_class()
logger.info(f"Using '{args.config}' config preset")
# Create output directory
if not os.path.exists(args.output_dir):
os.makedirs(args.output_dir)
# Load and prepare data
logger.info("Loading data...")
train_data, val_data, test_data = load_data(
args.data_path,
text_col=args.text_column,
label_col=args.label_column,
validation_split=config.val_split,
test_split=config.test_split,
seed=config.seed
)
train_loader, val_loader, test_loader = create_data_loaders(
train_data,
val_data,
test_data,
tokenizer_name=config.bert_model,
max_length=config.max_seq_length,
batch_size=config.batch_size
)
# Initialize model
logger.info(f"Initializing model with {config.bert_model}...")
model = DocBERT(
num_classes=args.num_classes,
bert_model_name=config.bert_model,
dropout_prob=config.dropout
)
# Initialize trainer
trainer = Trainer(
model=model,
train_loader=train_loader,
val_loader=val_loader,
test_loader=test_loader,
lr=config.learning_rate,
weight_decay=config.weight_decay,
gradient_accumulation_steps=config.grad_accum_steps
)
# Train model
logger.info("Starting training...")
save_path = os.path.join(args.output_dir, "best_model.pth")
trainer.train(epochs=config.epochs, save_path=save_path)
logger.info("Training completed!")
if __name__ == "__main__":
main()