| import torch | |
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForSeq2SeqLM | |
| large_model_name = "DmitryMalikov/t5-base-question-gen" | |
| small_model_name = "DmitryMalikov/t5-small-question-gen" | |
| tokenizers = { | |
| "Base T5": AutoTokenizer.from_pretrained(large_model_name), | |
| "Small T5": AutoTokenizer.from_pretrained(small_model_name), | |
| } | |
| models = { | |
| "Base T5": AutoModelForSeq2SeqLM.from_pretrained(large_model_name), | |
| "Small T5": AutoModelForSeq2SeqLM.from_pretrained(small_model_name), | |
| } | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| for model in models.values(): | |
| model.to(device) | |
| def generate_question(context, model_choice): | |
| tokenizer = tokenizers[model_choice] | |
| model = models[model_choice] | |
| input_text = context.strip() | |
| inputs = tokenizer(input_text, return_tensors="pt", truncation=True, max_length=256).to(device) | |
| outputs = model.generate( | |
| **inputs, | |
| max_length=64, | |
| num_beams=4, | |
| early_stopping=True | |
| ) | |
| question = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| return question | |
| iface = gr.Interface( | |
| fn=generate_question, | |
| inputs=[ | |
| gr.Textbox(label="Context", lines=5, placeholder="Enter text context for question..."), | |
| gr.Dropdown(choices=["Base T5", "Small T5"], label="Choose model", value="Small T5") | |
| ], | |
| outputs=gr.Textbox(label="Generated question"), | |
| title="Question generation based on context", | |
| description="Enter text and receive question that can be answered with given context." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |