Model automatycznej klasyfikacji emocji dla firmy monitorującej media społecznościowe. Projekt implementuje pipeline uczenia maszynowego do kategoryzacji tekstów na 6 emocji: radość 😊, smutek 😢, złość 😠, strach 😨, miłość ❤️ i zaskoczenie 😲.
Firmy monitorujące media społecznościowe potrzebują zautomatyzowanych narzędzi do analizy tysięcy postów dziennie. Manualna kategoryzacja emocji jest czasochłonna i kosztowna, ograniczając możliwość reakcji w czasie rzeczywistym na zmiany nastrojów konsumentów.
- 82% dokładności na zbiorze testowym ✅ - przekracza założony próg biznesowy 75%
- Najlepsze wyniki: smutek (F1: 0.873), złość (F1: 0.846)
- Najtrudniejsze klasy: zaskoczenie (F1: 0.673), miłość (F1: 0.704)
- Model gotowy do wdrożenia produkcyjnego 🚀
- Python 3.12 🐍
- scikit-learn 🤖 - Uczenie maszynowe
- TF-IDF 📝 - Wektoryzacja tekstu
- Regresja logistyczna 📊 - Najlepszy model
- Pandas, NumPy 🔢 - Przetwarzanie danych
- Matplotlib, Seaborn 📈 - Wizualizacja
emotion-classification-nlp/
├── README.md
├── requirements.txt
├── analiza_sentymentu_emotions.ipynb # Główny notebook z analizą
├── data/
│ ├── train.txt # Zbiór treningowy
│ ├── val.txt # Zbiór walidacyjny
│ └── test.txt # Zbiór testowy
├── src/
│ ├── __init__.py
│ ├── data_exploration.py # Funkcje eksploracji danych
│ ├── preprocessing.py # Pipeline przetwarzania tekstu
│ ├── modeling.py # Trenowanie i porównanie modeli
│ ├── evaluation.py # Finalna ewaluacja i tuning
│ └── deployment.py # Wdrożenie modelu do produkcji
└── results/
├── confusion_matrix.png
├── training_data_exploration.png
└── emotion_model.pkl # Zapisany model
- Sklonuj repozytorium:
git clone https://github.com/twojusername/emotion-classification-nlp.git
cd emotion-classification-nlp- Zainstaluj zależności:
pip install -r requirements.txtOtwórz analiza_sentymentu_emotions.ipynb w Jupyter Notebook/Lab dla kompletnej analizy z wizualizacjami i szczegółowymi wyjaśnieniami.
jupyter notebook analiza_sentymentu_emotions.ipynb- Automatyczne wykrywanie stop words używając heurystyki (słowa występujące w >67% klas emocji)
- Wektoryzacja TF-IDF z uni- i bi-gramami
- Zbalansowane wagi klas do radzenia sobie z nierównowagą danych
Przetestowano 3 algorytmy:
- Regresja logistyczna (Zwycięzca: 80.93% dokładności walidacyjnej)
- Random Forest (78.00% dokładności, problemy z overfittingiem)
- Naive Bayes (78.72% dokładności, najlepsza generalizacja)
- Macierz pomyłek 🎯 ujawniająca wzorce błędnej klasyfikacji emocji
- Ważność cech 💡 pokazująca charakterystyczne słowa dla każdej emocji
- Analiza błędów 🕵️ identyfikująca wyzwania językowe (ironia, mieszane emocje)
Po wytrenowaniu modelu w notebooku, można go używać do klasyfikacji nowych tekstów:
from src.deployment import EmotionPredictor
# Wczytanie wytrenowanego modelu
predictor = EmotionPredictor()
predictor.load_model()
# Klasyfikacja pojedynczego tekstu
emotion, confidence = predictor.predict_emotion("I feel really happy today!")
print(f"Emocja: {emotion}, Pewność: {confidence:.3f}")
# Klasyfikacja wielu tekstów
texts = ["Great news!", "I'm worried", "This is surprising"]
results = predictor.predict_batch(texts)Uwagi wdrożeniowe:
- Modele z pewnością <50% wymagają przeglądu przez analityka
- System nadaje się do automatycznego pre-sortowania z opcją weryfikacji manualnej
- Model zapisywany jest w formacie pickle w
results/emotion_model.pkl
- Trening: 16,000 próbek
- Walidacja: 2,000 próbek
- Test: 2,000 próbek
- Format: Pary tekst-emocja oddzielone średnikiem
- Źródło: Emotions Dataset for NLP 🔗
- Radość często mylona ze smutkiem - wskazuje na obecność ironii/sarkazmu w mediach społecznościowych
- Zaskoczenie najtrudniejsze do klasyfikacji - z powodu nierównowagi danych (3.6% próbek)
- Wulgarny język koreluje z silnymi emocjami - ważne dla moderacji treści
- Kontekst ma znaczenie - te same słowa mogą wyrażać różne emocje w zależności od użycia
- Zarządzanie kryzysowe - Szybka detekcja negatywnych nastrojów
- Monitoring kampanii - Śledzenie pozytywnych reakcji na marketing
- Moderacja treści - Automatyczne filtrowanie oparte na emocjach
- Insights konsumenckie - Zrozumienie emocjonalnych reakcji klientów
- Zebranie większej ilości danych dla niedoreprezentowanych emocji (zaskoczenie, miłość) 📊
- Implementacja metod ensemble lub modeli transformer 🤖
- Dodanie preprocessing wykrywającego ironię/sarkazm 🙃
- Stworzenie kategorii mieszanych emocji 🎭
Projekt realizowany według standardu CRISP-DM:
- Zrozumienie biznesowe - Analiza potrzeb firmy monitorującej media
- Zrozumienie danych - Eksploracja 16k tekstów i rozkładu emocji
- Przygotowanie danych - Inteligentne przetwarzanie i wektoryzacja TF-IDF
- Modelowanie - Porównanie algorytmów i wybór najlepszego
- Ewaluacja - Tuning hiperparametrów, testy finalne i analiza wyników
- Wdrożenie - Deployment modelu z interfejsem predykcji
MIT License