model_train / fine_tune.py
sufya12's picture
Rename test_local.py to fine_tune.py
2c693fe verified
Raw History Blame Contribute Delete
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!")