|
|
import gradio as gr |
|
|
import pandas as pd |
|
|
import torch |
|
|
from sentence_transformers import SentenceTransformer, util |
|
|
|
|
|
|
|
|
df = pd.read_csv("cleaned_questions.csv", encoding='ISO-8859-1') |
|
|
questions = df['question'].tolist() |
|
|
answers = df['answer'].tolist() |
|
|
|
|
|
|
|
|
model = SentenceTransformer('all-MiniLM-L6-v2') |
|
|
embeddings = model.encode(questions, convert_to_tensor=True) |
|
|
|
|
|
|
|
|
def get_answer(user_question, threshold=0.75): |
|
|
if not user_question.strip(): |
|
|
return "من فضلك أدخل سؤالًا." |
|
|
|
|
|
question_embedding = model.encode(user_question, convert_to_tensor=True) |
|
|
scores = util.pytorch_cos_sim(question_embedding, embeddings) |
|
|
top_idx = torch.argmax(scores).item() |
|
|
top_score = scores[0][top_idx].item() |
|
|
|
|
|
if top_score >= threshold: |
|
|
return answers[top_idx] |
|
|
else: |
|
|
return "Sorry, I couldn't find a suitable answer to your question. Please try rephrasing it." |
|
|
|
|
|
|
|
|
iface = gr.Interface( |
|
|
fn=get_answer, |
|
|
inputs=gr.Textbox(lines=2, placeholder="اكتب سؤالك هنا..."), |
|
|
outputs="text", |
|
|
title="الرد على الأسئلة الشائعة", |
|
|
description="أدخل سؤالاً وسأبحث عن أقرب إجابة من قاعدة البيانات." |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
iface.launch() |
|
|
|