Advertisement
Guest User

TrainModelSeq2SeqSummary.py

a guest
Mar 19th, 2024
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.05 KB | Source Code | 0 0
  1. import torch
  2. from transformers import BartTokenizer, BartForConditionalGeneration, pipeline
  3. from torch.utils.data import DataLoader
  4. import json
  5. from tqdm import tqdm
  6.  
  7. def train_model(model, dataloader, optimizer, epochs): # 'cpu' to 'cuda' for GPU  
  8.     model.train()
  9.     for epoch in range(epochs):
  10.         total_loss = 0
  11.         total_eval = 0
  12.         for batch in tqdm(dataloader, desc=f"Training epoch {epoch+1}/{epochs}"):
  13.             inputs = tokenizer(batch['input_text'], return_tensors='pt', truncation=True, padding=True)
  14.             outputs = tokenizer(batch['output_text'], return_tensors='pt', truncation=True, padding=True)
  15.             loss = model(input_ids=inputs['input_ids'].to('cpu'), labels=outputs['input_ids'].to('cpu')).loss
  16.             loss.backward()
  17.             torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
  18.             optimizer.step()
  19.             optimizer.zero_grad()
  20.             total_loss += loss.item()
  21.             total_eval += 1
  22.         avg_train_loss = total_loss / total_eval
  23.         print(f"Epoch {epoch+1}/{epochs} - Average training loss: {avg_train_loss:.2f}")
  24.  
  25. def TrainCpu(dataset_path, pretrained_model_path, save_model_path):
  26.     global tokenizer
  27.     tokenizer = BartTokenizer.from_pretrained(pretrained_model_path)
  28.     model = BartForConditionalGeneration.from_pretrained(pretrained_model_path)
  29.     model = model.to('cpu')
  30.     optimizer = torch.optim.Adam(model.parameters(), lr=0.000001)
  31.  
  32.     with open(dataset_path, 'r', encoding='utf-8') as f:
  33.         data = json.load(f)
  34.     data = [{'input_text': input_text, 'output_text': label} for input_text, label in zip(data['input_ids'], data['labels'])]
  35.     dataloader = DataLoader(data, batch_size=1, shuffle=True)
  36.     train_model(model, dataloader, optimizer, epochs=30)
  37.     model.save_pretrained(save_model_path)
  38.     print(f"Model has been trained and saved to '{save_model_path}'")
  39.  
  40. def interference(model_path, pretrained_model_path):
  41.     tokenizer = BartTokenizer.from_pretrained(pretrained_model_path)
  42.     model = BartForConditionalGeneration.from_pretrained(model_path)
  43.     summarizer = pipeline('summarization', model=model, tokenizer=tokenizer)
  44.  
  45.     #text = "pristine quality, White hair, detailed, bright green eyes, breezy, flowing hair, sunny, upper body, detailed face, summer, lush greenery, golden sunlight" # summarizeExample1 = "White hair, detailed bright green eyes, summer"
  46.     #text = "best quality, masterpiece, White hair,detailed, red eyes, windy, floating hair, snowy, upper body, detailed face, winter, trees, sunshine"
  47.     text = "The Eiffel Tower is a wrought-iron lattice tower on the Champ de Mars in Paris, France. It is named after the engineer Gustave Eiffel, whose company designed and built the tower."
  48.    
  49.     summary = summarizer(text, max_length=20, min_length=5, do_sample=False)
  50.     print(summary[0]['summary_text'])
  51.  
  52. def main():
  53.     # TrainCpu('dataset_CLIP.json', 'sshleifer/distilbart-cnn-12-6', 'trained_model')
  54.     interference('trained_model', 'sshleifer/distilbart-cnn-12-6')
  55.  
  56.  
  57. if __name__ == "__main__":
  58.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement