moazx commited on
Commit
2a67e41
1 Parent(s): d728538

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +91 -0
  2. requirements.txt +3 -0
  3. trained_model.zip +3 -0
app.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
3
+ import torch
4
+ import zipfile
5
+ import os
6
+
7
+ # Path to the zip file
8
+ zip_file_path = "./trained_model.zip"
9
+
10
+ # Directory to extract the contents of the zip file
11
+ extracted_dir = "./trained_model"
12
+
13
+ # Extract the contents of the zip file
14
+ with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
15
+ zip_ref.extractall(extracted_dir)
16
+
17
+ # Load the saved model and tokenizer
18
+ tokenizer = AutoTokenizer.from_pretrained(extracted_dir)
19
+ model = AutoModelForSequenceClassification.from_pretrained(extracted_dir)
20
+
21
+ # Define the device to run inference on (GPU if available, otherwise CPU)
22
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
23
+
24
+ # Move the model to the device
25
+ model.to(device)
26
+
27
+
28
+
29
+ # Define function for sentiment analysis
30
+ def predict_sentiment(review):
31
+ # Step 1: Tokenization
32
+ encoded_text = tokenizer(
33
+ review, padding=True, truncation=True, max_length=256, return_tensors="pt"
34
+ )
35
+
36
+ # Move input tensors to the appropriate device
37
+ input_ids = encoded_text["input_ids"].to(device)
38
+ attention_mask = encoded_text["attention_mask"].to(device)
39
+
40
+ # Step 2: Inference
41
+ with torch.no_grad():
42
+ outputs = model(input_ids, attention_mask=attention_mask)
43
+
44
+ # Step 3: Prediction with probabilities
45
+ probs = torch.softmax(outputs.logits, dim=-1)
46
+ probs = (
47
+ probs.squeeze().cpu().numpy()
48
+ ) # Convert to numpy array and remove the batch dimension
49
+
50
+ # Map predicted class index to label
51
+ label_map = {0: 'سلبي', 1: 'إيجابي'}
52
+
53
+ output_dict = {label_map[i]: float(probs[i]) for i in range(len(probs))}
54
+ return output_dict
55
+
56
+
57
+ # Create Gradio interface
58
+ examples = [
59
+ ["كانت تجربتي في هذا المطعم رائعة والطعام كان لذيذاً للغاية"],
60
+ ["المطعم يجنن والاكل تحفة"],
61
+ ["المطعم ما عجبني، الطعم مو حلو والخدمة كانت سيئة جداً، والموظفين ما كانوا محترمين. الأسعار غالية مقارنة بالجودة. ما بنصح فيه."],
62
+ ["الطعام لا يستحق الثمن المدفوع، جودة سيئة للغاية."],
63
+ ["الاكل كان جميل جدا والناس هناك محترمه جدا,"],
64
+ ["الأكل وحش والخدمة سيئة، مش هرجع تاني للمطعم ده."],
65
+ ["المطعم وايد حلو وأكلهم طيب بشكل مو طبيعي! الخدمة عندهم ممتازة والأجواء جداً مريحة. بالتأكيد راح أزورهم مرة ثانية وأنصح الكل يجربهم!"],
66
+ ["تجربتي في هذا المطعم كانت مخيبة للآمال. الأطعمة كانت جافة ومُضيعة للوقت، وخدمة العملاء كانت بطيئة ولا تلبي التوقعات. بالإضافة إلى ذلك، الأسعار مبالغ فيها مقارنة بجودة الطعام المقدمة. لن أعيد زيارة هذا المكان مرة أخرى."],
67
+
68
+ ]
69
+
70
+ description_html = """
71
+ <p>This model was trained by Moaz Eldsouky. You can find more about me here:</p>
72
+ <p>GitHub: <a href="https://github.com/MoazEldsouky">GitHub Profile</a></p>
73
+ <p>LinkedIn: <a href="https://www.linkedin.com/in/moaz-eldesouky-762288251/">LinkedIn Profile</a></p>
74
+ <p>Kaggle: <a href="https://www.kaggle.com/moazeldsokyx">Kaggle Profile</a></p>
75
+ <p>Email: <a href="mailto:moazeldsoky8@gmail.com">moazeldsoky8@gmail.com</a></p>
76
+ """
77
+
78
+
79
+ iface = gr.Interface(
80
+ fn=predict_sentiment,
81
+ inputs = gr.Textbox(placeholder='أدخل تقييماً لمطعم باللغة العربية'),
82
+ outputs = gr.Label(num_top_classes=2, min_width=360),
83
+ title = "تحليل المشاعر لتقيمات المطاعم باللغة العربية",
84
+ article = description_html,
85
+ allow_flagging = "auto",
86
+ examples = examples,
87
+ )
88
+ iface.launch()
89
+
90
+
91
+
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio==3.39.0
2
+ torch==2.2.1
3
+ transformers==4.37.0
trained_model.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c4d234caa81a49b0bc51d966b2311fbd1729b268fdc098c4128b9d2c78d7fca4
3
+ size 502923967