Analysisofsent / app.py
ahmedyoussef1's picture
Update app.py
bd80957 verified
import gradio as gr
import numpy as np
import torch
from transformers import BertTokenizer, AutoModel
import tensorflow as tf
# Load tokenizer and BERT model for embeddings extraction
model_name = "aubmindlab/bert-base-arabertv02"
tokenizer = BertTokenizer.from_pretrained(model_name)
bert_model = AutoModel.from_pretrained(model_name)
bert_model.eval()
# Load your trained RNN model
model = tf.keras.models.load_model("rnn_Bi.h5")
print("✅ Model loaded successfully!")
# Function to extract BERT embedding
def get_bert_embedding(text, max_length=100):
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=max_length)
with torch.no_grad():
outputs = bert_model(**inputs)
# Use CLS token embedding as sentence embedding
embedding = outputs.last_hidden_state[:, 0, :].numpy()
embedding = embedding.reshape(1, 1, 768) # shape (1, 1, 768)
return embedding
# Real sentiment prediction function using the model
def predict_sentiment(text):
embedding = get_bert_embedding(text)
pred = model.predict(embedding)[0][0]
label = "إيجابي" if pred > 0.5 else "سلبي"
confidence = pred if pred > 0.5 else 1 - pred
return label, f"{confidence * 100:.2f}%"
# Custom CSS for soft Arabic interface
custom_css = """
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
direction: rtl;
text-align: right;
background-color: #f5f7fa;
color: #202123;
}
.gradio-container h2, .gradio-container p {
color: #000000 !important;
}
.gradio-container {
max-width: 600px;
margin: 40px auto;
background: #ffffff;
padding: 25px 35px;
border-radius: 16px;
box-shadow: 0 8px 24px rgba(32, 33, 35, 0.1);
}
.gr-button {
background-color: #4caf50 !important;
color: white !important;
font-weight: 600;
border-radius: 12px !important;
padding: 12px 30px !important;
font-size: 18px !important;
transition: background-color 0.3s ease;
}
.gr-button:hover {
background-color: #45a049 !important;
}
.gr-textbox textarea {
font-size: 18px !important;
padding: 14px !important;
border: 1.5px solid #d1d9e6 !important;
border-radius: 12px !important;
background-color: #f9fbfd !important;
color: #202123 !important;
transition: border-color 0.3s ease;
}
.gr-textbox textarea:focus {
border-color: #4caf50 !important;
outline: none;
}
.gr-label {
font-size: 20px !important;
font-weight: 600 !important;
margin-bottom: 8px !important;
}
.gr-textbox label,
.gr-label label {
color: #8B0000 !important;
}
.gr-textbox input[type="text"] {
background-color: #f9fbfd !important;
}
.gr-label .label-value,
.gr-label .label-item,
.gr-label .label,
.gr-label span {
color: #000000 !important;
}
"""
# Build Gradio interface
with gr.Blocks(css=custom_css) as iface:
gr.Markdown("## تحليل المشاعر العربية بالذكاء الاصطناعي")
gr.Markdown("اكتب جملة لتحليل المشاعر (إيجابي أو سلبي)")
input_text = gr.Textbox(lines=2, placeholder="اكتب الجملة هنا...")
sentiment_label = gr.Label(num_top_classes=2, label="المشاعر")
confidence_score = gr.Textbox(label="نسبة الثقة")
btn = gr.Button("تحليل")
btn.click(fn=predict_sentiment, inputs=input_text, outputs=[sentiment_label, confidence_score])
if __name__ == "__main__":
iface.launch()