methodya commited on
Commit
d7c7206
·
verified ·
1 Parent(s): 3bfdbf4

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -0
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
3
+ import torch
4
+
5
+ # تحميل النموذج والتوكنايزر
6
+ model_id = "methodya/arabic-summarizer-philosophy-v2"
7
+ model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
8
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
9
+
10
+ # نقل النموذج إلى GPU إذا كان متوفراً
11
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
12
+ model = model.to(device)
13
+ model.eval()
14
+
15
+ def summarize(text, max_length=200, num_beams=7, length_penalty=1.2):
16
+ # تحويل القيم إلى النوع المناسب
17
+ max_length = int(max_length)
18
+ num_beams = int(num_beams)
19
+ length_penalty = float(length_penalty)
20
+
21
+ if not text.strip():
22
+ return "الرجاء إدخال نص للتلخيص"
23
+
24
+ # تجهيز البيانات للنموذج
25
+ inputs = tokenizer(
26
+ text,
27
+ return_tensors="pt",
28
+ max_length=2048, # زيادة الحد الأقصى للمدخلات
29
+ padding=True,
30
+ truncation=True
31
+ )
32
+ inputs = {k: v.to(device) for k, v in inputs.items()}
33
+
34
+ # توليد الملخص مع معاملات محسنة
35
+ with torch.no_grad():
36
+ outputs = model.generate(
37
+ **inputs,
38
+ max_length=max_length,
39
+ min_length=50, # زيادة الحد الأدنى للملخص
40
+ num_beams=num_beams,
41
+ length_penalty=length_penalty,
42
+ no_repeat_ngram_size=5, # منع تكرار العبارات
43
+ repetition_penalty=2.0, # معاقبة التكرار
44
+ do_sample=True, # تفعيل العينات العشوائية
45
+ top_k=50, # تحديد أفضل الكلمات
46
+ temperature=0.8, # ضبط الإبداعية
47
+ early_stopping=True, # التوقف المبكر
48
+ bad_words_ids=[[tokenizer.encode("أفهم", add_special_tokens=False)[0]],
49
+ [tokenizer.encode("أعرف", add_special_tokens=False)[0]]] # منع كلمات محددة
50
+ )
51
+
52
+ summary = tokenizer.decode(outputs[0], skip_special_tokens=True)
53
+ return summary
54
+
55
+ # تعريف واجهة Gradio
56
+ interface = gr.Interface(
57
+ fn=summarize,
58
+ inputs=[
59
+ gr.Textbox(lines=8, label="النص", placeholder="أدخل النص العربي هنا..."),
60
+ gr.Slider(100, 400, value=200, label="طول الملخص"),
61
+ gr.Slider(1, 10, value=7, step=1, label="دقة التلخيص (num_beams)"),
62
+ gr.Slider(0.5, 2.0, value=1.2, step=0.1, label="معامل الطول (length_penalty)")
63
+ ],
64
+ outputs=gr.Textbox(label="الملخص"),
65
+ title="نظام تلخيص النصوص الفلسفية العربية",
66
+ description="نموذج متقدم لتلخيص النصوص الفلسفية باللغة العربية",
67
+ submit_btn="تلخيص",
68
+ clear_btn="مسح"
69
+ )
70
+
71
+ # تشغيل التطبيق
72
+ interface.launch()