taaahmed commited on
Commit
e8d9c22
·
verified ·
1 Parent(s): d980638

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +67 -37
app.py CHANGED
@@ -1,54 +1,84 @@
1
  import gradio as gr
2
- import torch
3
- from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
- # تحميل نموذج أخف للغة العربية
6
  print("جاري تحميل النموذج الخفيف...")
7
- MODEL_NAME = "aubmindlab/aragpt2-medium" # نموذج أخف من AraT5
8
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
9
- model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, low_cpu_mem_usage=True)
 
 
 
10
  print("تم تحميل النموذج بنجاح!")
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  # القائمة المنسدلة للمشاعر
13
- emotions = [
14
- "سعيد", "حزين", "غاضب", "متحمس", "خائف", "متفائل", "متشائم",
15
- "مندهش", "مشتاق", "ممتن", "فخور", "مرتبك", "محبط", "هادئ"
16
- ]
17
 
18
  def generate_text(emotion, length_choice):
19
- # تحويل اختيار الطول إلى رقم
20
- length_options = {"قصير": 80, "متوسط": 150, "طويل": 250}
21
- max_length = length_options.get(length_choice, 150)
22
-
23
- # إعداد المطالبة بناءً على المشاعر
24
- prompt = f"أشعر بأنني {emotion} لأن"
25
 
26
- # تجهيز المدخلات
27
- input_ids = tokenizer.encode(prompt, return_tensors="pt")
28
 
29
- # توليد النص بإعدادات أخف
30
- with torch.no_grad():
31
- output = model.generate(
32
- input_ids,
33
- max_length=max_length,
34
- num_return_sequences=1,
35
- temperature=0.8,
36
- top_k=40,
37
- top_p=0.9,
38
- no_repeat_ngram_size=2,
39
- pad_token_id=tokenizer.eos_token_id
40
- )
41
 
42
- # تحويل النتيجة إلى نص
43
- generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- # تنظيف النص وإضافة علامات ترقيم إذا لزم الأمر
46
- if not any(generated_text.endswith(x) for x in [".", "!", "؟", "،", "؛"]):
47
- generated_text += "."
48
 
49
- return generated_text
50
 
51
- # تعريف CSS المخصص للواجهة
52
  css = """
53
  :root {
54
  --rose-gold: #bd8c7d;
@@ -220,7 +250,7 @@ select, .dropdown {
220
  }
221
  """
222
 
223
- # إنشاء واجهة المستخدم
224
  with gr.Blocks(css=css) as demo:
225
  with gr.Column(elem_classes=["main"]):
226
  gr.HTML("""
 
1
  import gradio as gr
2
+ from transformers import AutoTokenizer, AutoModelForMaskedLM, pipeline
3
+ import random
4
 
5
+ # تحميل نموذج صغير للغة العربية
6
  print("جاري تحميل النموذج الخفيف...")
7
+ MODEL_NAME = "asafaya/bert-mini-arabic" # نموذج عربي أصغر بكثير
8
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
9
+ model = AutoModelForMaskedLM.from_pretrained(MODEL_NAME)
10
+
11
+ # إنشاء توليد النصوص
12
+ nlp = pipeline("fill-mask", model=model, tokenizer=tokenizer)
13
  print("تم تحميل النموذج بنجاح!")
14
 
15
+ # عبارات افتتاحية مختلفة حسب المشاعر
16
+ emotion_starters = {
17
+ "سعيد": [
18
+ "أشعر بسعادة كبيرة لأن",
19
+ "أنا سعيد جداً بـ",
20
+ "الفرح يملأ قلبي عندما",
21
+ "مما يسعدني حقاً هو"
22
+ ],
23
+ "حزين": [
24
+ "أشعر بالحزن بسبب",
25
+ "ما يؤلمني هو",
26
+ "يعتصر قلبي حزناً عندما",
27
+ "الحزن يسكنني لأن"
28
+ ],
29
+ "غاضب": [
30
+ "أشعر بالغضب من",
31
+ "ما يثير غضبي هو",
32
+ "لا أستطيع تحمل",
33
+ "يزعجني كثيراً أن"
34
+ ],
35
+ # يمكن إضافة المزيد للمشاعر الأخرى
36
+ }
37
+
38
+ # إضافة عبارات افتتاحية للمشاعر الأخرى
39
+ for emotion in ["متحمس", "خائف", "متفائل", "متشائم", "مندهش", "مشتاق", "ممتن", "فخور", "مرتبك", "محبط", "هادئ"]:
40
+ if emotion not in emotion_starters:
41
+ emotion_starters[emotion] = [f"أشعر بأنني {emotion} لأن", f"عندما أكون {emotion} فإنني", f"ما يجعلني {emotion} هو"]
42
+
43
  # القائمة المنسدلة للمشاعر
44
+ emotions = list(emotion_starters.keys())
 
 
 
45
 
46
  def generate_text(emotion, length_choice):
47
+ # تحويل اختيار الطول إلى عدد جمل
48
+ length_options = {"قصير": 3, "متوسط": 5, "طويل": 8}
49
+ num_sentences = length_options.get(length_choice, 5)
 
 
 
50
 
51
+ # اختيار عبارة افتتاحية عشوائية
52
+ starter = random.choice(emotion_starters[emotion])
53
 
54
+ text = starter
 
 
 
 
 
 
 
 
 
 
 
55
 
56
+ # استخدام التنبؤ بالكلمات المُخفاة لإنشاء جمل
57
+ for _ in range(num_sentences):
58
+ try:
59
+ # استخدام النموذج لتنبؤ كلمة جديدة
60
+ if len(text) > 5: # التأكد من وجود نص كافٍ
61
+ mask_input = text + " " + tokenizer.mask_token
62
+ result = nlp(mask_input)
63
+ predicted_word = result[0]['token_str'] if result else "والحياة"
64
+
65
+ # الاستمرار في بناء النص
66
+ text += " " + predicted_word
67
+
68
+ # إضافة علامات ترقيم عشوائية
69
+ if random.random() > 0.7:
70
+ text += random.choice([".", "،", "؛", "!"])
71
+ except Exception as e:
72
+ # إذا حدث خطأ، استمرار بكلمات بسيطة
73
+ text += " " + random.choice(["الحياة", "الأمل", "المستقبل", "الذكريات", "التجارب"])
74
 
75
+ # تنظيف النص وإضافة علامة ترقيم في النهاية
76
+ if not any(text.endswith(x) for x in [".", "!", "؟"]):
77
+ text += "."
78
 
79
+ return text
80
 
81
+ # نفس CSS السابق
82
  css = """
83
  :root {
84
  --rose-gold: #bd8c7d;
 
250
  }
251
  """
252
 
253
+ # إنشاء واجهة المستخدم (نفس الواجهة السابقة)
254
  with gr.Blocks(css=css) as demo:
255
  with gr.Column(elem_classes=["main"]):
256
  gr.HTML("""