An end-to-end explainable machine learning platform that detects clickbait headlines in real time, provides linguistic transparency, and seamlessly integrates with a Chrome browser extension and web UI.
GUIDO (Explainable Clickbait Detection) addresses the growing challenge of misleading, exaggerated, and sensationalized headlines across digital media[cite: 5]. Unlike traditional black-box classification models, GUIDO provides explainable AI predictions by analyzing lexical patterns, sentiment polarization, punctuation frequency, and syntactic clickbait structures[cite: 5].
The system comprises a trained NLP machine learning classifier, a Flask API backend, a web-based dashboard, and an active Manifest V3 Chrome Extension that highlights clickbait links directly as you browse the web[cite: 5].
- π§ Explainable NLP Model: Evaluates text features (sensation scores, punctuation density, emotional intensity, and structural patterns) to explain why a headline is classified as clickbait[cite: 5].
- π REST API Backend: Flask server powering high-speed batch and single-headline inference endpoints (
backend/app.py)[cite: 5]. - π§© Live Chrome Extension: Automatically scans webpages, highlights sensational headlines, and displays real-time analytics in an interactive sidepanel/popup (
extension/)[cite: 5]. - π Visual Analytics Dashboard: Includes built-in Chart.js analytics for tracking browsing habits, clickbait frequency, and historical detection scores (
extension/analytics.html)[cite: 5]. - π Automated SDD & PDF Report Generator: Integrated tools to build system design documentation and technical evaluation reports (
generate_report.py,create_algorithmic_sdd.py)[cite: 5].
graph TD
subgraph Clients [Client Layer]
WebUI[Web Frontend - index.html]
ChromeExt[Chrome Extension - Manifest V3]
end
subgraph ChromeExtFiles [Extension Subsystem]
Popup[popup.html / popup.js]
ContentScript[content.js]
Background[background.js]
Analytics[analytics.html / chart.js]
end
subgraph BackendApp [Flask Backend Application]
API[Flask REST Server - backend/app.py]
Predictor[NLP Feature Extractor & Predictor]
end
subgraph MLPipeline [Model & Data Processing]
Dataset[(clickbait_data.csv)]
Trainer[Model Trainer - model/train.py]
TrainedModel[Serialized NLP Model]
end
ChromeExt --> Popup
ChromeExt --> ContentScript
ChromeExt --> Background
ChromeExt --> Analytics
WebUI <-->|HTTP POST /predict| API
ContentScript <-->|HTTP POST /predict| API
API --> Predictor
Predictor --> TrainedModel
Dataset --> Trainer
Trainer --> TrainedModel
flowchart LR
A[Raw Headline Text] --> B[Preprocessing & Tokenization]
B --> C[Linguistic Feature Extraction]
subgraph Feature Engineering
C --> C1[Sensational Word Density]
C --> C2[Punctuation & Capitalization Ratio]
C --> C3[Sentiment & Emotional Polarization]
end
C1 --> D[Vectorization]
C2 --> D
C3 --> D
D --> E[ML Classifier Model]
E --> F[Probability Score]
E --> G[Linguistic Feature Breakdown]
F --> H[JSON Output: Score + Explanation]
G --> H
sequenceDiagram
autonumber
actor User as Web Browser User
participant Page as Webpage DOM
participant CS as Extension Content Script
participant API as Flask Backend API
participant Model as NLP Inference Engine
User->>Page: Navigate to News Website
Page->>CS: Trigger DOM Load Event
CS->>CS: Extract Article Headlines from DOM
CS->>API: POST /predict (Payload: Headlines List)
API->>Model: Run Feature Extraction & Classification
Model-->>API: Return Clickbait Probability & Explanation
API-->>CS: JSON Response
CS->>Page: Highlight Clickbait Links & Attach Tooltips
CS->>User: Display Clickbait Summary in Popup / Sidepanel
| Feature | Web Interface | Chrome Extension | REST API |
|---|---|---|---|
| Single Headline Analysis | β | β | β |
| DOM Webpage Auto-Highlighting | β | β | β |
| Linguistic Explanation Breakdown | β | β | β |
| Historical Browsing Analytics | β | β | β |
| Batch Inference Engine | β | β | β |
-
Language: Python 3.11+
-
Machine Learning & NLP: Scikit-Learn, NLTK, NumPy, Pandas
-
Backend Framework: Flask
-
Browser Extension: JavaScript (ES6+), Chrome Manifest V3
-
Visualization & Reporting: Chart.js, FPDF, ReportLab
Explainable-Clickbait-Detection/
βββ backend/
β βββ app.py # Flask API endpoints for inference[cite: 5]
β βββ __init__.py
βββ extension/ # Manifest V3 Chrome Extension[cite: 5]
β βββ analytics.html / .js # Analytics panel with Chart.js[cite: 5]
β βββ background.js # Service worker background handler[cite: 5]
β βββ chart.js # Charting library bundle[cite: 5]
β βββ content.js # DOM scanning & page overlay script[cite: 5]
β βββ manifest.json # Extension manifest configuration[cite: 5]
β βββ popup.html / .js # Popup user interface[cite: 5]
β βββ style.css # Extension styling[cite: 5]
βββ frontend/ # Web Dashboard UI[cite: 5]
β βββ index.html # Landing & analysis interface[cite: 5]
β βββ script.js # Web app logic[cite: 5]
β βββ style.css # Web app stylesheet[cite: 5]
βββ model/ # Model Training & Pipeline[cite: 5]
β βββ train.py # NLP feature extraction & training script[cite: 5]
β βββ __init__.py
βββ clickbait_data.csv # Dataset used for model training[cite: 5]
βββ create_algorithmic_sdd.py # System Design Document generator script[cite: 5]
βββ generate_report.py # PDF summary report generator[cite: 5]
βββ requirements.txt # Python package dependencies[cite: 5]
βββ test_model.py # Unit testing suite for NLP pipeline[cite: 5]
- Clone the repository:
git clone [https://github.com/your-username/Explainable-Clickbait-Detection.git](https://github.com/your-username/Explainable-Clickbait-Detection.git)
cd Explainable-Clickbait-Detection
- Set up a Python virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install dependencies:
pip install -r requirements.txt
- Train the Model (Optional if pre-trained model exists):
python model/train.py
- Start the Flask Backend API:
python backend/app.py
The backend server will run at http://localhost:5000.
- Open Google Chrome and go to
chrome://extensions/. - Toggle Developer mode in the top-right corner.
- Click Load unpacked.
- Select the
extension/directory in this repository.
| Parameter | Default Value | Description |
|---|---|---|
API_PORT |
5000 |
Port for the Flask backend API |
CLICKBAIT_THRESHOLD |
0.65 |
Probability threshold above which a headline is flagged as clickbait |
MAX_HEADLINES_PER_BATCH |
50 |
Maximum headlines scanned per DOM request |
- URL:
/predict - Method:
POST - Payload:
{
"headline": "You Won't Believe What This Celebrity Did Next!"
}
- Response:
{
"is_clickbait": true,
"confidence_score": 0.92,
"explanations": [
"High density of sensational keywords ('Won't Believe')",
"Exaggerated emotional polarization",
"Punctuation intensity flag"
]
}
- Transformer Model Integration: Upgrade to fine-tuned RoBERTa / DeBERTa embeddings for improved context-aware detection.
- Multi-Language Support: Extend clickbait classification across Spanish, German, and Hindi headlines.
- Browser Cross-Compatibility: Port extension to Mozilla Firefox and Microsoft Edge.