Mari kita selesaikan dari bawah ke atas. Klasifikasi (juga dikenal sebagai kategorisasi) adalah contoh pembelajaran terawasi . Dalam pembelajaran yang diawasi, Anda memiliki:
- model - sesuatu yang mendekati struktur internal dalam data Anda, memungkinkan Anda untuk memikirkannya dan membuat prediksi yang berguna (misalnya memprediksi kelas suatu objek); biasanya model memiliki parameter yang ingin Anda "pelajari"
- melatih dan menguji dataset - set objek yang Anda gunakan untuk melatih model Anda (menemukan nilai bagus untuk parameter) dan mengevaluasi lebih lanjut
- algoritma pelatihan dan klasifikasi - pertama menjelaskan cara belajar model dari set data pelatihan, kedua menunjukkan cara mendapatkan kelas objek baru yang diberikan model terlatih
Sekarang mari kita ambil contoh sederhana klasifikasi spam. Kumpulan data pelatihan Anda adalah kumpulan email + label yang sesuai - "spam" atau "bukan spam". Dataset Pengujian memiliki struktur yang sama, tetapi dibuat dari beberapa email independen (biasanya satu hanya membagi dataset-nya dan membuat, katakanlah, 9/10 darinya untuk digunakan untuk pelatihan dan 1/10 - untuk pengujian). Salah satu cara untuk memodelkan email adalah dengan merepresentasikan masing-masingnya sebagai kumpulan kata. Jika kita mengasumsikan bahwa kata-kata tidak saling tergantung satu sama lain, kita dapat menggunakan pengklasifikasi Naif Bayes , yaitu, menghitung probabilitas sebelumnya untuk setiap kata dan setiap kelas (algoritma pelatihan) dan kemudian menerapkan teorema Bayes untuk menemukan probabilitas posterior dari dokumen baru yang akan dimiliki. kelas tertentu.
Jadi, pada dasarnya kita memiliki:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Sekarang perhatikan bahwa kami mewakili objek kami (dokumen) sebagai kantong kata-kata. Tetapi apakah satu-satunya jalan? Bahkan, kita dapat mengekstraksi lebih banyak dari teks mentah. Sebagai contoh, alih-alih kata-kata seperti ini, kita dapat menggunakan batang atau lemmasanya , membuang kata-kata berhenti yang berisik , menambahkan tag POS kata-kata, mengekstrak entitas bernama atau bahkan menjelajahi struktur HTML dokumen. Bahkan, representasi yang lebih umum dari suatu dokumen (dan, secara umum, objek apa pun) adalah vektor fitur . Misalnya untuk teks:
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
Di sini baris pertama adalah daftar fitur yang mungkin dan baris berikutnya menunjukkan berapa kali fitur itu terjadi dalam dokumen. Misalnya dalam dokumen pertama tidak ada kemunculan kata "aktor", 1 kemunculan kata "burn", 5 kata benda, 2 kata sifat dan 2 buah teks dalam huruf tebal. Kolom terakhir sesuai dengan label kelas yang dihasilkan.
Menggunakan vektor fitur, Anda dapat memasukkan properti apa pun dari teks Anda. Meskipun menemukan serangkaian fitur yang baik mungkin membutuhkan waktu.
Dan bagaimana dengan model dan algoritma? Apakah kita terikat ke Naif Bayes. Tidak semuanya. regresi logistik , SVM , pohon keputusan - hanya untuk menyebutkan beberapa pengklasifikasi populer. (Catatan, yang kami katakan "classifier" dalam kebanyakan kasus kami maksudkan model + algoritma yang sesuai untuk pelatihan dan klasifikasi).
Sedangkan untuk implementasi, Anda dapat membagi tugas menjadi 2 bagian:
- Ekstraksi fitur - mengubah teks mentah menjadi vektor fitur.
- Klasifikasi objek - membangun dan menerapkan model.
Poin pertama berhasil di banyak perpustakaan NLP . Kedua adalah tentang pembelajaran mesin, jadi, tergantung pada dataset Anda, Anda bisa menggunakan Weka , atau MLlib .
Pemodelan Topik akan menjadi metode yang sangat tepat untuk masalah Anda. Model Topik adalah bentuk pembelajaran / penemuan tanpa pengawasan, di mana sejumlah topik tertentu (atau yang ditemukan) ditentukan oleh daftar kata yang memiliki kemungkinan besar muncul bersama. Dalam langkah terpisah, Anda dapat memberi label setiap topik menggunakan pakar materi pelajaran, tetapi untuk tujuan Anda ini tidak perlu karena Anda hanya tertarik untuk mendapatkan tiga kelompok.
Anda memperlakukan setiap dokumen sebagai kantong kata, dan pra-proses untuk menghapus kata berhenti, dll. Dengan metode paling sederhana, Anda menentukan sebelumnya jumlah topik. Dalam kasus Anda, Anda dapat menentukan "3", yang merupakan batas tetap Anda pada kategori, atau memilih topik dengan jumlah yang lebih besar (antara 10 dan 100), dan kemudian dalam langkah terpisah, bentuk tiga kluster untuk dokumen dengan penekanan umum pada topik. K-means atau metode pengelompokan lainnya dapat digunakan. (Saya akan merekomendasikan pendekatan yang terakhir)
Anda tidak perlu membuat kode perangkat lunak pemodelan topik dari awal. Berikut adalah halaman web dengan banyak sumber, termasuk pustaka / paket perangkat lunak .
Tidak ada di Jawa, tetapi ada cara untuk menjalankan C ++ dan Python di bawah Java.
sumber
Berikut adalah beberapa paket perangkat lunak sumber terbuka yang sangat bagus untuk klasifikasi teks yang dapat membantu Anda memulai:
sumber