import gradio as gr import torch # Import libraries from transformers from transformers import AutoTokenizer, AutoModelForQuestionAnswering # Define model and tokenizer model_name = "google-bert/bert-large-uncased-whole-word-masking-finetuned-squad" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForQuestionAnswering.from_pretrained(model_name) def answer_question(context, question): """ This function takes a context and question as input, performs question answering using the loaded model, and returns the predicted answer. """ # Encode the context and question with special character handling inputs = tokenizer(context, question, return_tensors="pt", truncation=True) # Perform question answering outputs = model(**inputs) # Get the predicted start and end token positions start_scores, end_scores = outputs.start_logits, outputs.end_scores # Decode the answer based on predicted positions answer_start = torch.argmax(start_scores) answer_end = torch.argmax(end_scores) + 1 # Get answer tokens and convert them to string, removing special tokens answer = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0][answer_start:answer_end]) answer = "".join(answer[2:-2]) # Remove special tokens ([CLS] and [SEP]) return answer # Define the Gradio interface interface = gr.Interface( fn=answer_question, inputs=[gr.Textbox("Context"), gr.Textbox("Question")], outputs="text", title="Question Answering with BERT", description="Ask a question about the provided context and get an answer powered by Google BERT model.", ) # Launch the Gradio app interface.launch()