Badr AlKhamissi commited on
Commit
0a5c0c9
1 Parent(s): 8ee7e5d

using HF models

Browse files
Files changed (4) hide show
  1. .DS_Store +0 -0
  2. app.py +92 -1
  3. poet_names.json +0 -0
  4. requirements.txt +2 -1
.DS_Store DELETED
Binary file (6.15 kB)
 
app.py CHANGED
@@ -1,8 +1,99 @@
 
 
 
 
1
  import gradio as gr
 
2
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, AutoConfig
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  def greet(name):
5
  return "Hello " + name + "!!"
6
 
7
- iface = gr.Interface(fn=greet, inputs="text", outputs="text")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  iface.launch()
 
1
+ # coding=utf8
2
+
3
+ import json
4
+ import torch
5
  import gradio as gr
6
+ import pyarabic.araby as araby
7
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, AutoConfig
8
 
9
+ feature_names = [
10
+ "Title",
11
+ "Meter",
12
+ "Theme",
13
+ "Name",
14
+ "Era",
15
+ "Country",
16
+ "Type"
17
+ ]
18
+
19
+ with open("./models/poet_names.json", 'r', encoding="utf-8") as fin:
20
+ poet_names = json.load(fin)
21
+
22
  def greet(name):
23
  return "Hello " + name + "!!"
24
 
25
+ def normalize_text(text):
26
+ text = araby.strip_tatweel(text)
27
+ return text
28
+
29
+ def generate_poem(country, era, meter, theme, lang_type, poet, num_lines, num_poems, title):
30
+
31
+ num_poems = int(num_poems)
32
+ prompt = title
33
+ prompt = normalize_text(prompt)
34
+
35
+ features = [prompt, meter, theme, poet, era, country, lang_type]
36
+
37
+ prompt = ""
38
+ for name, feat in zip(feature_names, features):
39
+ prompt += f"{name}: {feat}; "
40
+ prompt += f"Length: {num_lines}; Poem:"
41
+
42
+ num_beams = 2
43
+ top_k = 50
44
+ top_p = 0.9
45
+ r_penalty = 5.
46
+
47
+ input_ids = torch.tensor(tokenizer.encode(prompt)).unsqueeze(0)
48
+ print(f"> Running: {prompt} | {num_poems} Poems")
49
+ outputs = model.generate(input_ids=input_ids,
50
+ min_length=32,
51
+ max_length=256,
52
+ do_sample=True,
53
+ top_k=top_k,
54
+ top_p=top_p,
55
+ repetition_penalty=r_penalty,
56
+ num_beams=num_beams,
57
+ num_return_sequences=num_poems,
58
+ early_stopping=True
59
+ )
60
+
61
+ poems = []
62
+ print(f"> # of Outputs: {len(outputs)}")
63
+ for output in outputs:
64
+ raw = tokenizer.decode(output)
65
+ raw = raw.replace("<pad>", "").replace("</s>", "")
66
+ print("="*100)
67
+ print(raw)
68
+ print("="*100)
69
+ poems += ['\n'.join(raw.split("<s>"))]
70
+
71
+ return "\n\n".join(poems)
72
+
73
+
74
+
75
+ meters = ['البسيط', 'التفعيله', 'الحداء', 'الخفيف', 'الدوبيت', 'الرجز', 'الرمل', 'السريع', 'السلسلة', 'الصخري', 'الطويل', 'الكامل', 'الكان كان', 'اللويحاني', 'المتدارك', 'المتقارب', 'المجتث', 'المديد', 'المسحوب', 'المضارع', 'المقتضب', 'المنسرح', 'المواليا', 'الموشح', 'الهجيني', 'الهزج', 'الوافر', 'بحر أحذ الكامل', 'بحر أحذ المديد', 'بحر أحذ الوافر', 'بحر البسيط', 'بحر التفعيله', 'بحر الخبب', 'بحر الخفيف', 'بحر الدوبيت', 'بحر الرجز', 'بحر الرمل', 'بحر السريع', 'بحر السلسلة', 'بحر الطويل', 'بحر القوما', 'بحر الكامل', 'بحر الكامل المقطوع', 'بحر المتدارك', 'بحر المتدارك المنهوك', 'بحر المتقارب', 'بحر المجتث', 'بحر المديد', 'بحر المضارع', 'بحر المقتضب', 'بحر المنسرح', 'بحر المواليا', 'بحر الهزج', 'بحر الوافر', 'بحر تفعيلة الرجز', 'بحر تفعيلة الرمل', 'بحر تفعيلة الكامل', 'بحر تفعيلة المتقارب', 'بحر مجزوء البسيط', 'بحر مجزوء الخفيف', 'بحر مجزوء الدوبيت', 'بحر مجزوء الرجز', 'بحر مجزوء الرمل', 'بحر مجزوء الرمل ', 'بحر مجزوء السريع', 'بحر مجزوء الطويل', 'بحر مجزوء الكامل', 'بحر مجزوء المتدارك', 'بحر مجزوء المتقارب', 'بحر مجزوء المجتث', 'بحر مجزوء المديد', 'بحر مجزوء المنسرح', 'بحر مجزوء المواليا', 'بحر مجزوء الهزج', 'بحر مجزوء الوافر', 'بحر مجزوء موشح', 'بحر مخلع البسيط', 'بحر مخلع الرجز', 'بحر مخلع الرمل', 'بحر مخلع السريع', 'بحر مخلع الكامل', 'بحر مخلع موشح', 'بحر مربع البسيط', 'بحر مربع الرجز', 'بحر مشطور الرجز', 'بحر مشطور السريع', 'بحر مشطور الطويل', 'بحر منهوك البسيط', 'بحر منهوك الرجز', 'بحر منهوك الكامل', 'بحر منهوك المنسرح', 'بحر موشح', 'بسيط', 'زجل', 'شعر التفعيلة', 'شعر حر', 'عامي', 'عدة أبحر', 'عموديه', 'مجزوء الخفيف', 'نثريه', 'None']
76
+ themes = ['قصيدة اعتذار', 'قصيدة الاناشيد', 'قصيدة المعلقات', 'قصيدة حزينه', 'قصيدة دينية', 'قصيدة ذم', 'قصيدة رثاء', 'قصيدة رومنسيه', 'قصيدة سياسية', 'قصيدة شوق', 'قصيدة عامه', 'قصيدة عتاب', 'قصيدة غزل', 'قصيدة فراق', 'قصيدة قصيره', 'قصيدة مدح', 'قصيدة هجاء', 'قصيدة وطنيه', 'None']
77
+ language_types = ['شعبي', 'عامي', 'فصحى', 'فصيح', '-', 'None']
78
+ poet_era = ['العصر الأموي', 'العصر الأندلسي', 'العص�� الأيوبي', 'العصر الإسلامي', 'العصر الجاهلي', 'العصر الحديث', 'العصر العباسي', 'العصر العثماني', 'العصر الفاطمي', 'العصر المملوكي', 'المخضرمين', 'المغرب والأندلس', 'عصر بين الدولتين', 'قبل الإسلام', 'None']
79
+ countries = ['الأردن', 'الإمارات', 'البحرين', 'الجزائر', 'السعودية', 'السنغال', 'السودان', 'الصومال', 'العراق', 'الكويت', 'المغرب', 'اليمن', 'تونس', 'سوريا', 'سورية', 'عمان', 'فلسطين', 'قطر', 'لبنان', 'ليبيا', 'مصر', 'موريتانيا', 'None']
80
+
81
+ tokenizer: AutoTokenizer = AutoTokenizer.from_pretrained("bkhmsi/arapoet-mt5", use_auth_token="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")
82
+ model: AutoModelForSeq2SeqLM = AutoModelForSeq2SeqLM.from_pretrained("bkhmsi/arapoet-mt5", use_auth_token="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")
83
+ model.eval()
84
+
85
+ iface = gr.Interface(generate_poem,
86
+ [
87
+ gr.Dropdown(countries),
88
+ gr.Dropdown(poet_era),
89
+ gr.Dropdown(meters),
90
+ gr.Dropdown(themes),
91
+ gr.Dropdown(language_types),
92
+ gr.Dropdown(poet_names),
93
+ gr.Slider(2, 20, value=10),
94
+ gr.Slider(1, 4, value=1),
95
+ "text"
96
+ ], "text"
97
+ )
98
+
99
  iface.launch()
poet_names.json ADDED
The diff for this file is too large to render. See raw diff
 
requirements.txt CHANGED
@@ -1,2 +1,3 @@
1
  transformers
2
- torch
 
 
1
  transformers
2
+ torch
3
+ pyarabic