Αυτό το έργο υλοποιεί έναν Naive Bayes ταξινομητή για την ανάλυση συναισθήματος σε κριτικές ταινιών από το σύνολο δεδομένων IMDb. Ο ταξινομητής κατασκευάζεται από την αρχή, με στόχο την κατανόηση βασικών εννοιών επεξεργασίας φυσικής γλώσσας (NLP), επιλογής χαρακτηριστικών και πιθανοκρατικής μοντελοποίησης.
- Δημιουργία λεξιλογίου με βάση
Information Gain - Μετατροπή κειμένων σε διανύσματα χαρακτηριστικών (bag-of-words)
- Εκπαίδευση custom
Naive Bayesταξινομητή - Σύγκριση με
Scikit-learn BernoulliNB - Αξιολόγηση μοντέλων με
precision,recall,F1καιaccuracy
Ο κώδικας αποτελείται από τις εξής βασικές κλάσεις:
- Κρατά στατιστικά για κάθε λέξη: πόσες φορές εμφανίζεται σε θετικά/αρνητικά έγγραφα.
- Υλοποιεί το λεξιλόγιο:
- Φιλτράρει λέξεις (αγνοεί τις πιο συχνές και πιο σπάνιες).
- Υπολογίζει Information Gain (IG) για επιλογή των πιο χρήσιμων λέξεων.
- Παράγει το τελικό λεξιλόγιο με
mχαρακτηριστικά.
- Μετατρέπει έγγραφα σε διανύσματα χαρακτηριστικών (binary features):
- 1 αν η λέξη υπάρχει στο έγγραφο, 0 αν όχι.
- Προσθέτει και την ετικέτα (1 = θετικό, 0 = αρνητικό).
- Custom υλοποίηση του Naive Bayes:
- Χρήση log πιθανοτήτων και Laplace smoothing.
- Υπολογίζει log-likelihood για κάθε χαρακτηριστικό.
- Προβλέπει την πιθανότερη κατηγορία για νέα έγγραφα.
- Κατεβάστε το IMDB dataset και αποσυμπιέστε το.
- Τρέξε το Jupyter notebook:
jupyter notebook NaiveBayesClassifier.ipynb- Παράμετροι:
n=50,k=80,m=500 - Αφαιρούνται οι top-50 συχνότερες λέξεις και οι 80 σπανιότερες.
- Επιλέγονται οι top-500 λέξεις βάσει Information Gain.
- Μετατροπή όλων των κριτικών σε διανύσματα χαρακτηριστικών.
- Εκπαίδευση custom Naive Bayes.
- Εκπαίδευση Scikit-learn BernoulliNB για σύγκριση.
- Εκτύπωση precision, recall, F1-score, accuracy.
Τροποποίησε τις παρακάτω παραμέτρους στο notebook:
# Παράμετροι λεξιλογίου
n = 50 # Αγνόηση top-n συχνών λέξεων
k = 80 # Αγνόηση bottom-k σπάνιων λέξεων
m = 500 # Επιλογή top-m χαρακτηριστικών
# Παράμετροι εκπαίδευσης
train_size = 25000 # Δείγματα εκπαίδευσης ανά κατηγορία
test_size = 25000 # Δείγματα δοκιμής ανά κατηγορία| Μοντέλο | Accuracy | Precision | Recall | F1 Score |
|---|---|---|---|---|
| Custom NaiveBayes | 0.85 | 0.84 | 0.85 | 0.84 |
| Scikit-Learn NaiveBayes | 0.86 | 0.85 | 0.86 | 0.85 |
- Python 3.7+
- Βιβλιοθήκες:
numpypandasmatplotlibsklearn
pip install numpy pandas matplotlib scikit-learn seaborn jupyter- Στατιστική μέθοδος για επιλογή των πιο διακριτικών χαρακτηριστικών
- Αντιμετωπίζει άγνωστες λέξεις κατά την ταξινόμηση
- Δυαδικά χαρακτηριστικά βελτιστοποιημένα για μνήμη και ταχύτητα
- Καμπύλες μάθησης, πίνακες σύγχυσης και γραφήματα σημαντικότητας χαρακτηριστικών
Ολοκληρώθηκε η δημιουργία λεξιλογίου (500 λέξεις)
Πρώτες 10 λέξεις λεξιλογίου: ['excellent', 'wonderful', 'best', 'perfect', 'great', ...]
Μέγεθος εκπαίδευσης: 25,000 διανύσματα
Μέγεθος τεστ: 25,000 διανύσματα
Αποτελέσματα Προσαρμοσμένου NaiveBayes:
precision recall f1-score support
Αρνητικό 0.84 0.85 0.84 12500
Θετικό 0.85 0.84 0.84 12500
accuracy 0.85 25000
Αποτελέσματα Scikit-Learn:
precision recall f1-score support
Αρνητικό 0.85 0.86 0.85 12500
Θετικό 0.86 0.85 0.85 12500
accuracy 0.86 25000