# 🧠 Detekcia nenávistnej reči Webová aplikácia na klasifikáciu textov a detekciu nenávistnej alebo toxickej reči. Projekt bol vytvorený ako súčasť zadania na skúšku a spĺňa všetky požiadavky vrátane cloud nasadenia, API rozhrania a perzistentného ukladania výsledkov. --- ## Čo aplikácia robí - Umožňuje používateľovi zadať text cez frontend (React) - Text sa odosiela na backend (Flask API), kde je analyzovaný pomocou ML modelu - Výsledok predikcie („Pravdepodobne toxický“ alebo „Neutrálny text“) sa zobrazí používateľovi - Každá požiadavka sa uloží do `history.json` spolu s časovou pečiatkou - Endpoint `/api/history` vracia históriu predikcií vo formáte JSON --- ## Použité technológie ### Cloud infraštruktúra – [Railway](https://railway.app) - Automatizované nasadenie z GitHub - Predkonfigurovaný HTTPS a verejná doména - Automatická správa buildov, reštartov a logovania ### Docker - Backend kontajnerizovaný vlastným `Dockerfile` (Flask + model) - Frontend ako samostatná React služba (build cez Nixpacks alebo Docker) - Podpora manuálneho spustenia cez `Docker Compose` ### Perzistencia - `history.json`: lokálna databáza vo forme JSON - Uchováva: vstupný text, predikciu a čas - Endpoint: `GET /api/history` --- ## Štruktúra projektu ``` . ├── backend/ │ ├── app.py # Flask API endpointy │ ├── Dockerfile # Konfigurácia kontajnera pre backend │ └── history.json # Perzistencia predikcií ├── frontend/ │ └── vite.config.js # Railway doménová konfigurácia ├── docker-compose.yaml # Definuje služby pre frontend a backend ├── prepare-app.sh # Spustenie Docker kontajnerov ├── remove-app.sh # Zastavenie a odstránenie kontajnerov └── README.md # Dokumentácia projektu ``` ## Ako aplikáciu použiť 1. Otvor frontend: [https://hate-frontend-production.up.railway.app](https://hate-frontend-production.up.railway.app) 2. Zadaj text do vstupného poľa 3. Klikni na tlačidlo ✈️ 4. Výsledok sa zobrazí a zároveň uloží do histórie 5. Históriu si môžeš pozrieť cez: [https://hate-backend-production.up.railway.app/api/history](https://hate-backend-production.up.railway.app/api/history) ### Lokálne spustenie **Požiadavky:** - OS: Linux/macOS alebo WSL - Docker + Docker Compose ```bash chmod +x prepare-app.sh start-app.sh stop-app.sh remove-app.sh ./prepare-app.sh # Build a príprava kontajnerov ./start-app.sh # Spustenie aplikácie ./stop-app.sh # Zastavenie aplikácie ./remove-app.sh # Úplné vyčistenie aplikácie a odstránenie všetkých kontajnerov ``` ## API Endpointy - `POST /api/predict` – predikcia toxickosti zadaného textu - `GET /api/history` – výpis histórie všetkých analyzovaných textov - `GET /api/history/raw` - surový obsah history.json - `POST /api/history/reset` - resetovanie a vyčistenie histórie ## Model strojového učenia - **Názov:** [`tetianamohorian/hate_speech_model`](https://huggingface.co/tetianamohorian/hate_speech_model) - **Architektúra:** vlastný klasifikačný model trénovaný na báze Slovak-T5-base-small.Model bol vlastnoručne fine-tunovaný na binárnu klasifikáciu textov (toxický vs. neutrálny) s použitím dátovej množiny určenenej na detekciu nenávistnej reči [`TUKE-KEMT/hate_speech_slovak`](https://huggingface.co/datasets/TUKE-KEMT/hate_speech_slovak). - **Typ:** Encoder-decoder transformer, finetunovaný na binárnu klasifikáciu (toxický / neutrálny) ## Použité knižnice - `transformers` – práca s Hugging Face modelmi - `torch` – tensorový backend - `flask` – API backend - `flask_cors` – povolenie CORS - `flask_caching` – cache výsledkov ## Funkcionality Projekt demonštruje: - Nasadenie do cloudu (Railway) ✅ - HTTPS certifikát ✅ - Docker kontajnery pre frontend a backend ✅ - Trvalé ukladanie predikcií (JSON) ✅ - Automatické reštarty ✅ - API testovanie ✅ - Kvalitná dokumentácia ✅