import gradio as gr from transformers import AutoModelForSeq2SeqLM, AutoTokenizer import torch # تحميل النموذج والتوكنايزر model_id = "methodya/arabic-summarizer-philosophy-v2" model = AutoModelForSeq2SeqLM.from_pretrained(model_id) tokenizer = AutoTokenizer.from_pretrained(model_id) # نقل النموذج إلى GPU إذا كان متوفراً device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = model.to(device) model.eval() def summarize(text, max_length=200, num_beams=7, length_penalty=1.2): # تحويل القيم إلى النوع المناسب max_length = int(max_length) num_beams = int(num_beams) length_penalty = float(length_penalty) if not text.strip(): return "الرجاء إدخال نص للتلخيص" # تجهيز البيانات للنموذج inputs = tokenizer( text, return_tensors="pt", max_length=2048, padding=True, truncation=True ) inputs = {k: v.to(device) for k, v in inputs.items()} # توليد الملخص مع معاملات محسنة with torch.no_grad(): outputs = model.generate( **inputs, max_length=max_length, min_length=30, num_beams=num_beams, length_penalty=length_penalty, repetition_penalty=2.5, do_sample=False, temperature=1.0, top_p=0.95, no_repeat_ngram_size=4, num_return_sequences=1, early_stopping=True ) return tokenizer.decode(outputs[0], skip_special_tokens=True) # تعريف واجهة Gradio interface = gr.Interface( fn=summarize, inputs=[ gr.Textbox(lines=8, label="النص", placeholder="أدخل النص العربي هنا..."), gr.Slider(100, 400, value=200, label="طول الملخص"), gr.Slider(1, 10, value=7, step=1, label="دقة التلخيص (num_beams)"), gr.Slider(0.5, 2.0, value=1.2, step=0.1, label="معامل الطول (length_penalty)") ], outputs=gr.Textbox(label="الملخص"), title="نظام تلخيص النصوص الفلسفية العربية", description="نموذج متقدم لتلخيص النصوص الفلسفية باللغة العربية", submit_btn="تلخيص", clear_btn="مسح" ) # تشغيل التطبيق interface.launch()