Lensa ML

Text Classification

Langkah 1 dari 6: Bag of Words

Dari teks ke feature vector

Ukuran vocabulary6
Kalimat input:thismoviewasgreatandamazing↓Vector bag-of-words (vocab=6):great1terrible0love0hate0good0bad0Kata di luar vocabulary ("this", "movie", "was", "and") diabaikan
Ukuran vocab
6
Bukan nol
1
Sparsity
83%

Dengan vocabulary 6 kata, kalimat ini menjadi vector 6 dimensi. Sebagian besar isinya 0 (sparsity 83%). Urutan kata diabaikan: "great and amazing" = "amazing and great".

Geser Ukuran vocabulary dari 4 ke 12 dan lihat vector untuk "this movie was great and amazing" bertambah panjang. Vocabulary ini hanya berisi kata sentiment, jadi "this", "movie", dan "was" sama sekali tidak mendapat kolom, dan "amazing" baru muncul setelah vocabulary mencapai 7 kata. Memilih vocabulary adalah keputusan pemodelan. Filter spam butuh kata seperti "free" dan "winner", sedangkan model sentiment butuh negasi seperti "not", yang justru dibuang oleh banyak daftar stop word bawaan. Sebagian besar pipeline menyerahkan pilihan ini pada data dengan menyimpan beberapa ribu kata atau n-gram yang paling sering muncul.

Langkah 2 dari 6: Feature Space

Dokumen sebagai titik data

Kalimat (1/8)0
thismoviewasgreatandamazing
1122330jumlah kata positif →jumlah kata negatif →+×3(2, 0)−×3−+PositifNegatif
Kata positif
2
Kata negatif
0
Label asli
Positif
Bisa dipisah?
Ya ✓

Kalimat ini punya 2 kata positif dan tanpa kata negatif, jadi posisinya di kanan bawah, tempat sebagian besar ulasan positif berada.

Geser Kalimat dari 1 ke 8 untuk menelusuri ulasan dan menemukan posisi masing-masing di plot. Kalimat 4 dan 7 mencampur kata positif dan negatif, jadi keduanya berada di antara dua cluster. Kedua sumbu adalah hitungan kata positif dan negatif yang dirancang manual, sehingga 12 dimensi vocabulary menyusut menjadi 2. Sinyal buatan tangan seperti ini menggerakkan sistem sentiment generasi awal. Model yang belajar sendiri mengambil jalan sebaliknya: setiap kata tetap menjadi dimensinya sendiri, dan training yang menentukan mana yang berpengaruh. Cara ini berhasil karena kelas yang tumpang tindih di dua dimensi sering kali menjadi linearly separable di ribuan dimensi.

Langkah 3 dari 6: Melatih Classifier

Mencari decision boundary

Sudut decision boundary (°)120
katapositifkata negatif+×3−×3−+✗
Sudut
120°
Akurasi
88%
Benar
7/8

Akurasi 88%. Boundary salah mengklasifikasikan 1 titik, yang ditandai ✗. Terus putar untuk mencari sudut yang lebih baik.

Geser Sudut decision boundary (°) dari 0 ke 360 dan lihat akurasinya berubah. Pada sudut bawaan 120°, ulasan campuran "great work despite a bad start" jatuh di sisi negatif, dan hanya sudut sekitar 136° sampai 153° yang membuat semua 8 ulasan benar. Aturannya ŷ = 1 jika w · x > 0, dengan w adalah weight vector yang tegak lurus terhadap garis. Di sini hanya sudutnya yang bergerak, tetapi model yang dilatih juga mempelajari panjang w dan bias b yang menggeser garis menjauhi titik asal. Training tidak mencoba sudut satu per satu. Logistic regression mengikuti gradient dari cross-entropy loss, dan linear SVM memaksimalkan margin antarkelas. Pada data yang bersih, garis keduanya berakhir berdekatan.

Langkah 4 dari 6: Softmax & Confidence

Dari skor ke probabilitas

Temperature1.00
softmax(z_i / T), T = 1.0Logit mentah:2.1Positif-1.5Negatif÷T, exp, normProbabilitas:97.3%2.7%Meter confidence97.3%0.112.55argmax (one-hot)standarseragam
Temperature
1.0
P(positif)
97.3%
P(negatif)
2.7%
Confidence
97.3%

Temperature 1,0: model memberi 97% untuk Positif dan 3% untuk Negatif. Pada T=1 (softmax standar), kedua angka ini langsung mengikuti selisih logit mentah.

Geser Temperature dari 0,1 ke 5,0 dan lihat confidence turun dari hampir 100% menuju 50%. Logit-nya tetap: 2,1 untuk Positif dan −1,5 untuk Negatif. Dengan dua kelas, softmax menjadi sigmoid dari selisihnya: P(positif) = σ((2.1 − (−1.5)) / T), yaitu σ(3.6) ≈ 0.973 pada T = 1. Neural classifier modern cenderung terlalu yakin. Guo et al. (2017) menunjukkan bahwa mencocokkan satu temperature pada validation set setelah training, yang disebut temperature scaling, memperbaiki sebagian besar miscalibration ini tanpa mengubah prediksi apa pun.

Langkah 5 dari 6: Sentiment Polarity

Positif, negatif, dan netral

Kalimat (1/8)0
1. Cari setiap kata di sentiment lexicon:this+0.00movie+0.00was+0.00great+0.40and+0.00amazing+0.482. Lihat kontribusi setiap kata:0+−3. Jumlahkan semua skor → polarity:+0.40 +0.48 = +0.884. Petakan ke skala polarity [−1, +1]:−1 (negatif)0+1 (positif)POSITIF (+0.88)
Polarity
+0.88
Kata berskor
2/6
Jumlah mentah
+0.88
Sentiment
Positif

Kata positif (great, amazing) menyumbang +0,40, +0,48. Totalnya +0,88, jadi polarity-nya jelas positif. Untuk kalimat yang lugas seperti ini, lexicon sudah cukup.

Geser Kalimat dari 1 ke 8 dan lihat skor lexicon setiap kata terjumlah. Metode lexicon tidak butuh data training, itu sebabnya alat seperti VADER masih dipakai untuk analisis media sosial yang cepat. Kalimat 5, "not bad but could be better", menunjukkan kelemahannya: jumlahnya −0,38, label negatif untuk ulasan yang agak positif. Sistem berbasis aturan menambal negasi dengan membalik skor kata setelah "not". Model yang belajar sendiri menanganinya dengan memperlakukan "not bad" sebagai bigram atau dengan membaca kalimat secara berurutan.

Langkah 6 dari 6: Lebih dari Dua Kelas

Text classification multi-class

Jumlah kelas2
PositifNegatif
Kelas
2
Sampel
10
Boundary
1

Binary classification: positif vs. negatif. Satu decision boundary membagi ruang menjadi dua wilayah, seperti satu threshold pada skor.

Geser Jumlah kelas dari 2 ke 5 dan lihat wilayahnya bertambah. Softmax classifier mempelajari satu weight vector per kelas dan memasukkan setiap input ke kelas dengan skor tertinggi, jadi K kelas butuh K weight vector, bukan satu per pasangan. Banyak tugas justru multi-label: satu berita bisa sekaligus tentang olahraga dan bisnis. Tugas seperti ini memakai sigmoid terpisah per label dan threshold untuk masing-masing. Sekarang, pendekatan yang lazim adalah melakukan fine-tune pada model pretrained seperti BERT dengan classification layer kecil di atasnya.

Apa itu text classification?

Text classification adalah tugas memberi label pada sepotong teks, misalnya positif atau negatif untuk ulasan, atau spam atau bukan spam untuk email. Classifier mengubah teks menjadi vector berisi angka, menghitung skor untuk setiap label, lalu memilih label dengan skor tertinggi. Cara memberi skor ini dipelajarinya dari contoh yang sudah dilabeli manusia.

Ini salah satu penerapan machine learning pada bahasa yang paling umum. Penyedia email menyaring spam dengannya, tim dukungan mengarahkan tiket berdasarkan topik, chatbot mendeteksi maksud pengguna, platform menandai unggahan beracun, dan perusahaan memantau sentiment di ulasan dan media sosial. Metodenya beragam, dari hitungan kata dengan logistic regression, yang masih menjadi baseline yang kuat, sampai transformer yang di-fine-tune seperti BERT dan zero-shot prompting pada large language model.

Ide utama

  • Text classifier memetakan dokumen ke vector, lalu vector ke label.
  • Vector bag-of-words dan TF-IDF dengan model linear adalah baseline yang kuat dan cepat.
  • Linear classifier memisahkan kelas dengan hyperplane w · x + b = 0.
  • Softmax mengubah skor kelas menjadi probabilitas, dan temperature mengatur seberapa yakin hasilnya terlihat.
  • Penskoran lexicon tidak butuh training, tetapi gagal pada negasi, sarkasme, dan konteks.
  • Tugas multi-class memakai satu softmax atas K kelas, sedangkan tugas multi-label memakai satu sigmoid per label.

Pertanyaan umum

Apa algoritma terbaik untuk text classification?

Tergantung seberapa banyak data berlabel yang kamu punya. Dengan beberapa ribu contoh, TF-IDF dengan logistic regression atau linear SVM cepat dan sulit dikalahkan. Dengan data lebih banyak, atau ketika konteks dan negasi berpengaruh, transformer yang di-fine-tune seperti BERT biasanya lebih akurat. Tanpa data berlabel sama sekali, large language model bisa mengklasifikasikan dari prompt.

Bagaimana cara mengevaluasi text classifier?

Akurasi cocok ketika kelasnya seimbang. Ketika satu kelas jarang muncul, seperti spam atau unggahan beracun, precision, recall, dan F1 untuk kelas itu lebih informatif, karena model yang selalu memprediksi kelas mayoritas pun tetap bisa meraih akurasi tinggi. Confusion matrix menunjukkan kelas mana yang tertukar.

Berapa banyak data berlabel yang dibutuhkan text classification?

Tugas biner sederhana dengan kata-kata yang khas bisa berjalan dengan beberapa ratus contoh berlabel. Fine-tuning model pretrained butuh data jauh lebih sedikit daripada training dari nol, karena model sudah mengenal bahasanya. Tugas dengan banyak kelas atau perbedaan yang halus butuh lebih banyak contoh per kelas.

Apa bedanya sentiment analysis dan text classification?

Sentiment analysis adalah salah satu jenis text classification, dengan label berupa opini seperti positif, negatif, dan netral. Text classification juga mencakup pelabelan topik, deteksi spam, identifikasi bahasa, dan deteksi maksud, yang semuanya memakai metode yang sama dengan label yang berbeda.

Penjelasan terkait

Referensi

  1. Pang, Lee & Vaithyanathan (2002), "Thumbs up? Sentiment Classification using Machine Learning Techniques", EMNLP
  2. Joulin et al. (2016), "Bag of Tricks for Efficient Text Classification"
  3. Guo et al. (2017), "On Calibration of Modern Neural Networks", ICML
  4. Devlin et al. (2019), "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding", NAACL
  5. Jurafsky & Martin, "Speech and Language Processing" (3rd ed. draft)

Terakhir diperbarui