Mengembangkan Pengklasifikasi Teks Naive Bayes di JAVA PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Mengembangkan Klasifikasi Teks Naif Bayes di JAVA

Pada artikel sebelumnya kita telah membahas latar belakang teoritis dari Klasifikasi Teks Naif Bayes dan pentingnya menggunakan Teknik pemilihan fitur dalam Klasifikasi Teks. Pada artikel ini, kita akan menggabungkan semuanya dan membangun implementasi sederhana dari algoritma klasifikasi teks Naive Bayes di JAVA. Kode classifier ini bersumber terbuka (di bawah lisensi GPL v3) dan Anda dapat mengunduhnya Github.

Pembaruan: Kerangka Pembelajaran Mesin Datumbox sekarang open-source dan bebas untuk Download. Lihatlah paket com.datumbox.framework.machinelearning.classification untuk melihat implementasi Naive Bayes Classifier di Jawa.

Implementasi Java Naif Bayes

Kode ini ditulis dalam JAWA dan dapat diunduh langsung dari Github. Ini dilisensikan di bawah GPLv3 sehingga merasa bebas untuk menggunakannya, memodifikasinya, dan mendistribusikannya kembali secara bebas.

Text Classifier mengimplementasikan Naive Bayes Multinomial model bersama Seleksi Fitur Chisquare algoritma. Semua perincian teoretis tentang bagaimana kedua teknik bekerja tercakup dalam artikel sebelumnya dan komentar javadoc yang terperinci dapat ditemukan pada kode sumber yang menjelaskan implementasi. Jadi di segmen ini saya akan fokus pada deskripsi tingkat tinggi dari arsitektur classifier.

1. Kelas NaiveBayes

Ini adalah bagian utama dari Text Classifier. Ini mengimplementasikan metode seperti train () dan predict () yang bertanggung jawab untuk melatih pengklasifikasi dan menggunakannya untuk prediksi. Perlu dicatat bahwa kelas ini juga bertanggung jawab untuk memanggil metode eksternal yang sesuai untuk preproses dan tokenize dokumen sebelum pelatihan / prediksi.

2. Objek NaiveBayesKnowledgeBase

Output dari pelatihan adalah Objek NaiveBayesKnowledgeBase yang menyimpan semua informasi dan probabilitas yang diperlukan yang digunakan oleh Naive Bayes Classifier.

3. Obyek Dokumen

Baik pelatihan dan teks prediksi dalam implementasi disimpan secara internal sebagai Objek Dokumen. Objek Dokumen menyimpan semua token (kata-kata) dokumen, statistiknya, dan klasifikasi target dokumen.

4. Objek FeatureStats

Obyek FeatureStats menyimpan beberapa statistik yang dihasilkan selama fase Ekstraksi Fitur. Statistik tersebut adalah Jumlah Gabungan Fitur dan Kelas (dari mana probabilitas gabungan dan kemungkinan diperkirakan), jumlah Kelas (dari mana prior dievaluasi jika tidak ada yang diberikan sebagai input) dan jumlah total pengamatan yang digunakan untuk pelatihan.

5. Kelas Fitur Ekstraksi

Ini adalah kelas yang bertanggung jawab untuk melakukan ekstraksi fitur. Perlu dicatat bahwa karena kelas ini menghitung secara internal beberapa statistik yang sebenarnya diperlukan oleh algoritme klasifikasi di tahap selanjutnya, semua statistik ini di-cache dan dikembalikan dalam Objek FeatureStats untuk menghindari penghitungan ulangnya.

6. Kelas TextTokenizer

Ini adalah sebuah sederhana kelas tokenization teks, bertanggung jawab untuk preprocessing, kliring dan tokenizing teks asli dan mengubahnya menjadi objek Dokumen.

Menggunakan Kelas JAVA NaiveBayes

Di kelas NaiveBayesExample Anda dapat menemukan contoh menggunakan Kelas NaiveBayes. Sasaran kode sampel adalah untuk menyajikan contoh yang melatih Klasifikasi Naif Bayes sederhana untuk mendeteksi Bahasa teks. Untuk melatih classifier, pada awalnya kami menyediakan jalur set data pelatihan dalam HashMap dan kemudian kami memuat isinya.

   //map of dataset files
   Map<String, URL> trainingFiles = new HashMap<>();
   trainingFiles.put("English", NaiveBayesExample.class.getResource("/datasets/training.language.en.txt"));
   trainingFiles.put("French", NaiveBayesExample.class.getResource("/datasets/training.language.fr.txt"));
   trainingFiles.put("German", NaiveBayesExample.class.getResource("/datasets/training.language.de.txt"));

   //loading examples in memory
   Map<String, String[]> trainingExamples = new HashMap<>();
   for(Map.Entry<String, URL> entry : trainingFiles.entrySet()) {
      trainingExamples.put(entry.getKey(), readLines(entry.getValue()));
   }

Pengklasifikasi NaiveBayes dilatih dengan meneruskan data ke sana. Setelah pelatihan selesai, Objek NaiveBayesKnowledgeBase disimpan untuk digunakan nanti.

   //train classifier
   NaiveBayes nb = new NaiveBayes();
   nb.setChisquareCriticalValue(6.63); //0.01 pvalue
   nb.train(trainingExamples);
      
   //get trained classifier
   NaiveBayesKnowledgeBase knowledgeBase = nb.getKnowledgeBase();

Akhirnya untuk menggunakan classifier dan memprediksi kelas contoh baru yang perlu Anda lakukan adalah menginisialisasi classifier baru dengan melewati Obyek NaiveBayesKnowledgeBase yang Anda peroleh sebelumnya dengan pelatihan. Kemudian hanya dengan memanggil metode predict () Anda mendapatkan kelas dokumen yang diprediksi.

   //Test classifier
   nb = new NaiveBayes(knowledgeBase);
   String exampleEn = "I am English";
   String outputEn = nb.predict(exampleEn);
   System.out.format("The sentense "%s" was classified as "%s".%n", exampleEn, outputEn);   

Perlu Diperlukan

Implementasi JAVA tertentu tidak boleh dianggap sebagai solusi siap pakai lengkap untuk masalah klasifikasi teks canggih. Berikut adalah beberapa ekspansi penting yang bisa dilakukan:

1. Ekstraksi Kata Kunci:

Meskipun menggunakan kata kunci tunggal sudah cukup untuk masalah sederhana seperti Deteksi Bahasa, masalah lain yang lebih rumit memerlukan ekstraksi n-gram. Jadi seseorang dapat mengimplementasikan algoritma ekstraksi teks yang lebih canggih dengan memperbarui metode TextTokenizer.extractKeywords () atau menggunakan Datumbox's API Ekstraksi Kata Kunci berfungsi untuk mendapatkan semua n-gram (kombinasi kata kunci) dari dokumen.

2. Pemrosesan Ulang Teks:

Sebelum menggunakan classifier biasanya perlu untuk memproses ulang dokumen untuk menghapus karakter / bagian yang tidak perlu. Meskipun implementasi saat ini melakukan preprocessing terbatas dengan menggunakan metode TextTokenizer.preprocess (), ketika datang untuk menganalisis halaman HTML hal-hal menjadi lebih rumit. Seseorang dapat dengan mudah memangkas tag HTML dan hanya menyimpan teks biasa dokumen atau menggunakan teknik Pembelajaran Mesin yang lebih canggih yang mendeteksi teks utama halaman dan menghapus konten yang milik footer, header, menu dll. Untuk nanti Anda dapat menggunakan Datumbox's API Ekstraksi Teks fungsi.

3. Model Tambahan Naive Bayes:

Pengklasifikasi saat ini mengimplementasikan pengelompokan Multinomial Naive Bayes, namun seperti yang kita bahas dalam artikel sebelumnya tentang Analisis Sentimen, masalah klasifikasi yang berbeda memerlukan model yang berbeda. Dalam beberapa versi Binarized dari algoritma akan lebih tepat, sementara yang lain Model Bernoulli akan memberikan hasil yang lebih baik. Gunakan implementasi ini sebagai titik awal dan ikuti instruksi dari Tutorial Naif Bayes untuk memperluas model.

4. Metode Pemilihan Fitur Tambahan:

Implementasi ini menggunakan algoritma pemilihan fitur Chisquare untuk memilih fitur yang paling sesuai untuk klasifikasi. Seperti yang kita lihat di artikel sebelumnya, file Pemilihan fitur Chisquare metode adalah teknik yang baik yang menyampaikan statistik untuk memilih fitur yang sesuai, namun metode ini cenderung memberikan skor lebih tinggi pada fitur langka yang hanya muncul di salah satu kategori. Perbaikan dapat dilakukan dengan menghapus fitur bising / langka sebelum melanjutkan ke pemilihan fitur atau dengan menerapkan metode tambahan seperti Informasi Bersama yang kami bahas pada artikel yang disebutkan di atas.

5. Optimalisasi Kinerja:

Dalam implementasi tertentu penting untuk meningkatkan keterbacaan kode daripada melakukan optimasi mikro pada kode. Terlepas dari kenyataan bahwa optimasi seperti itu membuat kode lebih jelek dan lebih sulit untuk dibaca / dipelihara, mereka sering diperlukan karena banyak loop dalam algoritma ini dieksekusi jutaan kali selama pelatihan dan pengujian. Penerapan ini bisa menjadi titik awal yang bagus untuk mengembangkan versi Anda sendiri.

Hampir sampai ... Catatan Akhir!

Aku-dengar-dia-pandai-coding-lUntuk mendapatkan pemahaman yang baik tentang cara kerja implementasi ini, Anda sangat disarankan untuk membaca dua artikel sebelumnya Pengklasifikasi Naive Bayes dan Pemilihan Fitur. Anda akan mendapatkan wawasan tentang latar belakang teoritis dari metode dan itu akan membuat bagian dari algoritma / kode lebih jelas.

Kita harus mencatat bahwa Naive Bayes meskipun mudah, cepat dan sering kali โ€œcukup akuratโ€, ini juga โ€œNaifโ€ karena membuat asumsi independensi bersyarat dari fitur-fiturnya. Karena asumsi ini hampir tidak pernah ditemukan dalam masalah Klasifikasi Teks, Naive Bayes hampir tidak pernah menjadi pengklasifikasi dengan performa terbaik. Di API Datumbox, beberapa perluasan dari classifier Naive Bayes standar hanya digunakan untuk masalah sederhana seperti Deteksi Bahasa. Untuk masalah klasifikasi teks yang lebih rumit, teknik yang lebih canggih seperti Pengklasifikasi Entropi Maks diperlukan.

Jika Anda menggunakan implementasinya dalam proyek yang menarik drop kami baris dan kami akan menampilkan proyek Anda di blog kami. Juga jika Anda menyukai artikel ini, silakan luangkan waktu dan bagikan di Twitter atau Facebook. ๐Ÿ™‚

Stempel Waktu:

Lebih dari kotak data