import gradio as gr import numpy as np import os # Lazy import - sadece model yüklerken import et def load_model(): """Model ve gerekli kütüphaneleri lazy loading ile yükle""" print("Loading TensorFlow...") os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # TensorFlow loglarını azalt import tensorflow as tf print(f"TensorFlow version: {tf.__version__}") print("Loading Keras Hub...") import keras_hub print(f"Keras Hub version: {keras_hub.__version__}") print("Loading BERT model...") try: model = tf.keras.models.load_model('model_4.keras') print("✅ Model loaded successfully!") return model except Exception as e: print(f"❌ Error loading model: {e}") raise # Model yükleme - global değişken print("Initializing application...") model = load_model() print("Application ready!") def predict_disaster(text): """Predict if a tweet is about a disaster or not""" if not text.strip(): return { "Disaster": 0.0, "Not Disaster": 0.0 }, "⚠️ Please enter a tweet to classify" try: # BERT model directly accepts raw text (has built-in preprocessing) prediction = model.predict([text], verbose=0)[0][0] # Calculate probabilities disaster_prob = float(prediction) not_disaster_prob = 1 - disaster_prob # Result message if disaster_prob > 0.5: result = f"🚨 **DISASTER** (Confidence: {disaster_prob*100:.1f}%)" else: result = f"✅ **NOT DISASTER** (Confidence: {not_disaster_prob*100:.1f}%)" return { "Disaster": disaster_prob, "Not Disaster": not_disaster_prob }, result except Exception as e: return { "Disaster": 0.0, "Not Disaster": 0.0 }, f"❌ Error during prediction: {str(e)}" # Example tweets for testing examples = [ ["Our Deeds are the Reason of this #earthquake May ALLAH Forgive us all"], ["Forest fire near La Ronge Sask. Canada"], ["13,000 people receive #wildfires evacuation orders in California"], ["Just happened a terrible car crash"], ["I love summer days at the beach with friends"], ["The sunset today is absolutely beautiful"], ["Residents asked to shelter in place are being notified by officers. No other evacuation or shelter in place orders are expected"], ["This is so awesome! Best day ever!"], ["Heard loud noises from downtown, seems like an explosion"], ["I'm making dinner tonight, trying a new recipe"], ["Buildings are collapsing after the earthquake"], ["Had a great time at the party last night!"], ["Emergency services responding to massive flooding in the area"], ["Can't wait for the weekend to start"], ["Tornado warning issued for our county, take shelter immediately"] ] # Create Gradio interface with gr.Blocks(theme=gr.themes.Soft(), title="Disaster Tweet Classifier") as demo: gr.Markdown(""" # 🚨 Disaster Tweet Classification ### AI-Powered BERT Model to Identify Real Disaster Reports This application uses a fine-tuned **BERT** (Bidirectional Encoder Representations from Transformers) model to analyze tweets and classify them as either referring to a **real disaster** or **not a disaster**. Perfect for emergency response teams, news organizations, and disaster management agencies! 🚑🔥🌊 """) with gr.Row(): with gr.Column(scale=2): input_text = gr.Textbox( label="📝 Enter Tweet Text", placeholder="Type or paste a tweet here... (e.g., 'Earthquake hits California')", lines=4 ) with gr.Row(): clear_btn = gr.Button("🗑️ Clear", variant="secondary") predict_btn = gr.Button("🔍 Classify Tweet", variant="primary", size="lg") with gr.Column(scale=1): output_label = gr.Label( label="📊 Prediction Confidence", num_top_classes=2 ) output_text = gr.Markdown(label="Result") # Examples section gr.Markdown(""" --- ### 📝 Try These Examples: Click on any example below to automatically classify it """) gr.Examples( examples=examples, inputs=input_text, outputs=[output_label, output_text], fn=predict_disaster, cache_examples=False, label="Sample Tweets" ) gr.Markdown(""" --- ### ℹ️ About This Model **Model Architecture**: BERT Tiny (English, Uncased) - **Parameters**: ~4.4M parameters - **Training**: Fine-tuned on disaster tweet dataset - **Accuracy**: Optimized for real-time disaster detection **Use Cases**: - 🚨 Emergency response monitoring - 📰 News verification - 🌐 Social media analysis - 🔍 Crisis management **How it Works**: The model uses contextual understanding to distinguish between: - Real disaster reports (earthquakes, fires, accidents, floods, etc.) - Casual language or metaphorical usage of disaster-related words **Limitations**: - Optimized for English tweets only - May require context for ambiguous cases - Should be used as a support tool, not sole decision-maker """) # Event handlers predict_btn.click( fn=predict_disaster, inputs=input_text, outputs=[output_label, output_text] ) input_text.submit( fn=predict_disaster, inputs=input_text, outputs=[output_label, output_text] ) clear_btn.click( fn=lambda: ("", {"Disaster": 0.0, "Not Disaster": 0.0}, ""), outputs=[input_text, output_label, output_text] ) # Launch the app if __name__ == "__main__": demo.launch( share=False, debug=False )