Download model.py from abhi-codes/conversation_summary_generator: direct link, hf CLI and curl.
- Browser
- Download file 2.62 kB
-
https://huggingface.co/spaces/abhi-codes/conversation_summary_generator/resolve/main/model.py
- Command line
-
hf download hf://spaces/abhi-codes/conversation_summary_generator/model.py
-
curl -L -o model.py https://huggingface.co/spaces/abhi-codes/conversation_summary_generator/resolve/main/model.py
2.62 kB
| # -*- coding: utf-8 -*- | |
| """hf_workshop_project.ipynb | |
| Automatically generated by Colab. | |
| Original file is located at | |
| https://colab.research.google.com/drive/16rr3KcHT3lyfI2QjUDm720EZjpP8Jw28 | |
| """ | |
| from datasets import load_dataset | |
| from transformers import T5Tokenizer,T5ForConditionalGeneration | |
| from transformers import Seq2SeqTrainingArguments,Seq2SeqTrainer | |
| import evaluate | |
| import numpy as np | |
| df = load_dataset("knkarthick/samsum") | |
| tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-small") | |
| model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-small",device_map = "auto") | |
| def tokenize(data): | |
| input = ["summarize: "+ text for text in data['dialogue']] | |
| model_inputs = tokenizer(input,max_length=128,padding='max_length',truncation=True) | |
| label = tokenizer(data['summary'],max_length=128,padding='max_length',truncation=True) | |
| model_inputs['labels'] = label['input_ids'] | |
| return model_inputs | |
| tokenized_train_data = df['train'].map(tokenize,batched= True) | |
| tokenized_validation_data = df['validation'].map(tokenize,batched= True) | |
| # tokenized_train_data = df['train'].select(range(2000)).map(tokenize,batched= True) | |
| # tokenized_validation_data = df['validation'].select(range(600)).map(tokenize,batched= True) | |
| training_args = Seq2SeqTrainingArguments( | |
| output_dir = './results', | |
| eval_strategy = 'epoch', | |
| learning_rate = 3e-5, | |
| per_device_train_batch_size = 8, | |
| per_device_eval_batch_size = 8, | |
| num_train_epochs = 10, | |
| weight_decay = 0.01, | |
| report_to = "none", | |
| logging_dir = './logs', | |
| fp16 = False, | |
| predict_with_generate= True, | |
| generation_max_length= 128, | |
| ) | |
| # !pip install evaluate | |
| # !pip install rouge_score | |
| metric = evaluate.load('rouge') | |
| def compute_metrics(eval_pred) : | |
| preds,labels = eval_pred | |
| if isinstance(preds,tuple): | |
| preds = preds[0] | |
| if preds.ndim == 3: | |
| preds = np.argmax(preds, axis=-1) | |
| preds = np.where(preds < 0, tokenizer.pad_token_id, preds) | |
| decoded_preds = tokenizer.batch_decode(preds,skip_special_tokens= True) | |
| labels = np.where(labels !=-100,labels,tokenizer.pad_token_id) | |
| decoded_labels = tokenizer.batch_decode(labels,skip_special_tokens= True) | |
| return metric.compute(predictions=decoded_preds, | |
| references = decoded_labels, | |
| use_stemmer = True) | |
| trainer = Seq2SeqTrainer( | |
| model = model, | |
| train_dataset= tokenized_train_data, | |
| eval_dataset= tokenized_validation_data, | |
| args = training_args, | |
| compute_metrics= compute_metrics | |
| ) | |
| trainer.train() | |
| save_dir = './summary_model' | |
| trainer.save_model(save_dir) | |
| tokenizer.save_pretrained(save_dir) |