Naive Bayes adalah model klasifikasi probabilistik yang menentukan kelas dokumen dari hitungan kata dengan satu asumsi sederhana, yaitu kata-kata di dalam dokumen saling bebas. Topik ini menjelaskan kaidah Bayes sebagai dasarnya, mendemokan MultinomialNB dari scikit-learn pada korpus ulasan film, dan membahas alasan model ini tetap menjadi baseline yang sulit dikalahkan pada data kecil. Seluruh angka pada keluaran merupakan hasil eksekusi nyata yang dapat direproduksi.
Kaidah Bayes untuk teks#
Naive Bayes adalah model generatif, yaitu model yang mempelajari bagaimana teks dibangkitkan oleh setiap kelas. Pada tahap pelatihan, model mengestimasi peluang kata untuk setiap kata dan kelas dari hitungan kemunculannya, beserta peluang kelas . Pada tahap klasifikasi, model memilih kelas dengan peluang posterior terbesar menurut kaidah Bayes berikut.
Dokumen diperlakukan sebagai gabungan katanya, sehingga peluang dokumen menjadi perkalian peluang kata-katanya. Tanda proporsional menggantikan pembagi yang sama untuk semua kelas sehingga dapat diabaikan. Kata naive merujuk pada asumsi independensi di balik perkalian itu, yaitu kemunculan satu kata tidak memengaruhi kemungkinan munculnya kata lain. Asumsi ini secara linguistik keliru, sebab urutan kata jelas membawa informasi, tetapi sinyal kata yang membedakan kelas tetap terbaca oleh model.
Perhitungan nyatanya memakai logaritma. Produk ratusan probabilitas kecil cepat menuju nol pada aritmetika pecahan, sehingga implementasi menjumlahkan log-peluang kata alih-alih mengalikan probabilitasnya. Untuk fitur hitungan kata, scikit-learn menyediakan MultinomialNB yang mengestimasi peluang kata per kelas dari hitungan dengan penghalusan Laplace melalui parameter alpha. Nilai default alpha 1.0 menambahkan hitungan imajiner satu ke setiap kata sehingga kata yang belum pernah muncul pada suatu kelas tidak mendapatkan peluang nol.
Demo MultinomialNB pada korpus ulasan film#
Korpus movie_reviews dari NLTK berisi 2000 ulasan film dengan label pos dan neg masing-masing 1000 ulasan. Program berikut membagi korpus menjadi data latih dan data uji dengan proporsi 75:25 yang terstratifikasi, membentuk fitur hitungan kata dengan CountVectorizer, melatih MultinomialNB, lalu mencetak akurasi beserta laporan klasifikasi. Simpan programnya sebagai naive_bayes_demo.py dan jalankan dengan perintah python3 naive_bayes_demo.py.
import warnings
warnings.filterwarnings("ignore")
from nltk.corpus import movie_reviews
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import accuracy_score, classification_report
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
dokumen = [movie_reviews.raw(fid) for fid in movie_reviews.fileids()]
label = [movie_reviews.categories(fid)[0] for fid in movie_reviews.fileids()]
X_latih, X_uji, y_latih, y_uji = train_test_split(
dokumen, label, test_size=0.25, random_state=0, stratify=label
)
vektor = CountVectorizer()
X_latih_v = vektor.fit_transform(X_latih)
X_uji_v = vektor.transform(X_uji)
print("Jumlah fitur kosakata:", len(vektor.get_feature_names_out()))
model = MultinomialNB()
model.fit(X_latih_v, y_latih)
prediksi = model.predict(X_uji_v)
print("Akurasi:", accuracy_score(y_uji, prediksi))
print()
print(classification_report(y_uji, prediksi, target_names=["negatif", "positif"]))Jumlah fitur kosakata: 35255
Akurasi: 0.824
precision recall f1-score support
negatif 0.81 0.84 0.83 250
positif 0.84 0.80 0.82 250
accuracy 0.82 500
macro avg 0.82 0.82 0.82 500
weighted avg 0.82 0.82 0.82 500Membaca laporan klasifikasi#
Akurasi 0.824 berarti 412 dari 500 ulasan data uji diklasifikasikan dengan benar. Jumlah fitur kosakata mencapai 35255, yaitu jumlah kata berbeda pada data latih setelah tanda baca dibuang. Laporan klasifikasi merinci performa per kelas. Untuk kelas negatif, presisi 0.81 berarti 81 persen prediksi negatif memang benar negatif, sedangkan recall 0.84 berarti 84 persen ulasan negatif yang sebenarnya berhasil ditemukan. Kelas positif menunjukkan pola serupa dengan presisi 0.84 dan recall 0.80.
Rata-rata macro dan weighted bernilai sama karena kedua kelas berukuran seimbang, masing-masing 250 ulasan data uji. Pada korpus seimbang seperti ini, baseline paling sederhana yang selalu menjawab kelas terbanyak hanya mencapai akurasi 0.5. Akurasi 0.824 dengan fitur sekadar hitungan kata, tanpa penyetelan apa pun, menandakan sinyal leksikal pada ulasan film sudah cukup kuat.
Mengapa tetap kuat pada data kecil#
Keunggulan Naive Bayes pada data kecil berasal dari jumlah parameternya. Model hanya menyimpan satu peluang untuk setiap pasangan kata dan kelas, dan setiap peluang diestimasi dari hitungan kemunculan yang stabil bahkan dengan sedikit dokumen. Penghalusan Laplace menjaga estimasi tetap masuk akal bagi kata yang belum terlihat, sehingga tidak ada langkah pelatihan yang gugup pada data kecil.
Proses pelatihannya pun berbeda dari model yang mengoptimalkan batas keputusan. Tidak ada perulangan iteratif, cukup satu penelusuran korpus untuk menghitung seluruh hitungan, sehingga pelatihan dan prediksi berlangsung cepat bahkan pada kosakata berukuran 35 ribu kata. Kesalahan asumsi independensi tidak menghalangi kinerja tersebut karena keputusan hanya membutuhkan sinyal kata yang membedakan, bukan model bahasa yang sempurna. Dengan ciri-ciri ini, Naive Bayes lazim menjadi baseline pertama sebelum model yang lebih kompleks dicoba.
Kesalahan umum#
Dua kesalahan berikut sering muncul ketika model ini dipraktikkan.
- Memakai GaussianNB untuk hitungan kata. Fitur hitungan tidak berdistribusi normal, sehingga asumsi GaussianNB bertentangan dengan datanya dan hasil klasifikasi jauh lebih rendah. Gunakan MultinomialNB untuk fitur hitungan dan frekuensi.
- Menyetel
alphatanpa data validasi terpisah. Nilaialphayang lebih kecil membuat model peka terhadap kata langka, sedangkan nilai yang lebih besar meratakan peluang antarkata. Penyetelan yang dinilai langsung dari data uji menghasilkan estimasi optimis, sehingga gunakan validasi silang untuk memilih nilaialpha.
Ringkasan#
- Naive Bayes mengestimasi dan dari hitungan kata, lalu memilih kelas dengan posterior terbesar menurut kaidah Bayes dengan asumsi independensi antarkata.
- MultinomialNB menyertakan penghalusan Laplace melalui parameter
alphasehingga kata yang belum terlihat pada suatu kelas tidak mendapatkan peluang nol. - Pada korpus ulasan film 2000 dokumen, model mencapai akurasi 0.824 dengan 35255 fitur tanpa penyetelan.
- Keunggulannya pada data kecil berasal dari parameter yang dihitung sekali jalan, pelatihan cepat tanpa optimisasi iteratif, dan penghalusan yang stabil.
Referensi#
- Naive Bayes — scikit-learn
— Dokumentasi resmi varian Naive Bayes beserta peran parameter
alphapada MultinomialNB. - Speech and Language Processing, draf edisi ke-3 — Jurafsky & Martin, Stanford — Bab tentang naive Bayes dan klasifikasi teks menjelaskan kaidah Bayes, asumsi independensi, dan penghalusan.