Spaces:
Runtime error
Runtime error
| from transformers import GPT2Tokenizer, GPT2LMHeadModel | |
| from transformers import TextDataset, DataCollatorForLanguageModeling | |
| from transformers import Trainer, TrainingArguments | |
| import torch | |
| import os | |
| import gradio as gr | |
| # Load pre-trained GPT-2 model and tokenizer | |
| model_name = "gpt2" | |
| model = GPT2LMHeadModel.from_pretrained(model_name) | |
| tokenizer = GPT2Tokenizer.from_pretrained(model_name) | |
| # Load your preprocessed data | |
| with open("normans_wikipedia.txt", "r", encoding="utf-8") as file: | |
| data = file.read() | |
| # Specify the output directory for fine-tuned model | |
| output_dir = "./normans_fine-tuned" | |
| os.makedirs(output_dir, exist_ok=True) | |
| # Tokenize and encode the data | |
| input_ids = tokenizer.encode(data, return_tensors="pt") | |
| # Create a dataset and data collator | |
| dataset = TextDataset( | |
| tokenizer=tokenizer, | |
| file_path="normans_wikipedia.txt", | |
| block_size=512, # Adjust this value based on your requirements | |
| ) | |
| data_collator = DataCollatorForLanguageModeling( | |
| tokenizer=tokenizer, | |
| mlm=False | |
| ) | |
| # Fine-tune the model | |
| training_args = TrainingArguments( | |
| output_dir=output_dir, | |
| overwrite_output_dir=True, | |
| num_train_epochs=10, | |
| per_device_train_batch_size=2, | |
| save_steps=10_000, | |
| save_total_limit=2, | |
| logging_dir=output_dir, # Add this line for logging | |
| logging_steps=100, # Adjust this value based on your requirements | |
| ) | |
| trainer = Trainer( | |
| model=model, | |
| args=training_args, | |
| data_collator=data_collator, | |
| train_dataset=dataset, | |
| ) | |
| # Training loop | |
| try: | |
| trainer.train() | |
| except KeyboardInterrupt: | |
| print("Training interrupted by user.") | |
| # Save the fine-tuned model | |
| model.save_pretrained(output_dir) | |
| tokenizer.save_pretrained(output_dir) | |
| # Load the fine-tuned model | |
| fine_tuned_model = GPT2LMHeadModel.from_pretrained(output_dir) | |
| # Function to generate responses from the fine-tuned model | |
| def generate_response(user_input): | |
| # Tokenize and encode user input | |
| user_input_ids = tokenizer.encode(user_input, return_tensors="pt") | |
| # Generate response from the fine-tuned model | |
| generated_output = fine_tuned_model.generate( | |
| user_input_ids, | |
| max_length=100, | |
| num_beams=5, | |
| no_repeat_ngram_size=2, | |
| top_k=50, | |
| top_p=0.90, | |
| temperature=0.9 | |
| ) | |
| # Decode and return the generated response | |
| chatbot_response = tokenizer.decode( | |
| generated_output[0], skip_special_tokens=True) | |
| return "Chatbot: " + chatbot_response | |
| # Create a Gradio interface | |
| iface = gr.Interface( | |
| fn=generate_response, | |
| inputs="text", | |
| outputs="text", | |
| live=True | |
| ) | |
| # Launch the Gradio interface | |
| iface.launch() | |