Spaces:
Sleeping
Sleeping
Download fine_tune.py from sufya12/model_train: direct link, hf CLI and curl.
- Browser
- Download file 2.67 kB
-
https://huggingface.co/spaces/sufya12/model_train/resolve/main/fine_tune.py
- Command line
-
hf download hf://spaces/sufya12/model_train/fine_tune.py
-
curl -L -o fine_tune.py https://huggingface.co/spaces/sufya12/model_train/resolve/main/fine_tune.py
2.67 kB
| # Fine-tuning on Hugging Face Notebook | |
| # This runs in a HF notebook with GPU | |
| # Install requirements | |
| !pip install transformers datasets pandas scikit-learn accelerate | |
| import pandas as pd | |
| from transformers import ( | |
| AutoTokenizer, | |
| AutoModelForSeq2SeqLM, | |
| DataCollatorForSeq2Seq, | |
| Seq2SeqTrainingArguments, | |
| Seq2SeqTrainer | |
| ) | |
| from datasets import Dataset | |
| from sklearn.model_selection import train_test_split | |
| # Load your dataset | |
| df = pd.read_csv('Data_1.csv') | |
| print(f"Dataset loaded: {len(df)} rows") | |
| # Data preprocessing | |
| df = df.dropna() | |
| train_df, val_df = train_test_split(df, test_size=0.2, random_state=42) | |
| print(f"Training samples: {len(train_df)}") | |
| print(f"Validation samples: {len(val_df)}") | |
| # Load model and tokenizer | |
| model_name = "Helsinki-NLP/opus-mt-en-fr" | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForSeq2SeqLM.from_pretrained(model_name) | |
| # Preprocessing function | |
| def preprocess_function(examples): | |
| inputs = [] | |
| for i in range(len(examples['year'])): | |
| input_text = f"Generate French title: Year: {examples['year'][i]} City: {examples['city'][i]} Event: {examples['original_title'][i]}" | |
| inputs.append(input_text) | |
| targets = examples['target_title'] | |
| model_inputs = tokenizer(inputs, max_length=128, truncation=True, padding=True) | |
| with tokenizer.as_target_tokenizer(): | |
| labels = tokenizer(targets, max_length=128, truncation=True, padding=True) | |
| model_inputs["labels"] = labels["input_ids"] | |
| return model_inputs | |
| # Prepare datasets | |
| train_dataset = Dataset.from_pandas(train_df) | |
| val_dataset = Dataset.from_pandas(val_df) | |
| tokenized_train = train_dataset.map(preprocess_function, batched=True) | |
| tokenized_val = val_dataset.map(preprocess_function, batched=True) | |
| # Training arguments | |
| training_args = Seq2SeqTrainingArguments( | |
| output_dir="./french-title-model", | |
| evaluation_strategy="epoch", | |
| learning_rate=5e-5, | |
| per_device_train_batch_size=8, | |
| per_device_eval_batch_size=8, | |
| weight_decay=0.01, | |
| save_total_limit=3, | |
| num_train_epochs=10, | |
| predict_with_generate=True, | |
| push_to_hub=True, | |
| hub_model_id="sufya12/french-title-model", # Change to your username | |
| ) | |
| # Data collator | |
| data_collator = DataCollatorForSeq2Seq(tokenizer, model=model) | |
| # Trainer | |
| trainer = Seq2SeqTrainer( | |
| model=model, | |
| args=training_args, | |
| train_dataset=tokenized_train, | |
| eval_dataset=tokenized_val, | |
| tokenizer=tokenizer, | |
| data_collator=data_collator, | |
| ) | |
| # Start training | |
| print("Starting training...") | |
| trainer.train() | |
| # Save and push to Hub | |
| trainer.push_to_hub() | |
| print("Training completed and model pushed to Hugging Face Hub!") |