- Ocak 27, 2014
- Vasilis Vryniotis
- . 16 Yorumlar
Önceki makalelerde teorik arka planı tartışmıştık. Naive Bayes Metin Sınıflandırıcı ve kullanmanın önemi Özellik Seçim teknikleri Metin Sınıflandırmasında. Bu makalede, her şeyi bir araya getireceğiz ve JAVA'da Naive Bayes metin sınıflandırma algoritmasının basit bir uygulamasını oluşturacağız. Sınıflandırıcının kodu açık kaynaklıdır (GPL v3 lisansı altında) ve şu adresten indirebilirsiniz: Github.
Güncelleme: Datumbox Machine Learning Framework artık açık kaynak kodlu ve ücretsiz indir. Java'da Naive Bayes Sınıflandırıcısının uygulamasını görmek için com.datumbox.framework.machinelearning.classification paketine bakın.
Naive Bayes Java Uygulaması
Kod JAVA'da yazılmıştır ve doğrudan şuradan indirilebilir: Github. GPLv3 altında lisanslanmıştır, bu yüzden onu kullanmaktan, değiştirmekten ve özgürce yeniden dağıtmaktan çekinmeyin.
Metin Sınıflandırıcı, Çok terimli Naif Bayes ile birlikte model Chisquare Unsur Seçimi algoritması. Her iki tekniğin nasıl çalıştığına dair tüm teorik ayrıntılar önceki makalelerde ele alınmıştır ve ayrıntılı javadoc yorumları, uygulamayı açıklayan kaynak kodda bulunabilir. Bu nedenle, bu bölümde sınıflandırıcının mimarisinin üst düzey bir tanımına odaklanacağım.
1. NaiveBayes Sınıfı
Bu, Metin Sınıflandırıcının ana parçasıdır. Bir sınıflandırıcıyı eğitmekten ve tahminler için kullanmaktan sorumlu olan train () ve tahmin () gibi yöntemleri uygular. Bu sınıfın aynı zamanda, eğitim / tahminden önce belgeyi ön işleme ve belirtmek için uygun harici yöntemleri çağırmaktan da sorumlu olduğu unutulmamalıdır.
2. NaiveBayesKnowledgeBase Nesnesi
Eğitimin çıktısı, Naive Bayes Sınıflandırıcısı tarafından kullanılan tüm gerekli bilgileri ve olasılıkları saklayan bir NaiveBayesKnowledgeBase Nesnesidir.
3. Belge Nesnesi
Uygulamadaki hem eğitim hem de tahmin metinleri Belge Nesneleri olarak dahili olarak saklanır. Belge Nesnesi, belgenin tüm simgelerini (sözcüklerini), bunların istatistiklerini ve belgenin hedef sınıflandırmasını depolar.
4. FeatureStats Nesnesi
FeatureStats Nesnesi, Özellik Çıkarma aşamasında oluşturulan çeşitli istatistikleri depolar. Bu tür istatistikler, Özelliklerin ve Sınıfın (ortak olasılıkların ve olasılıkların tahmin edildiği) Ortak sayıları, Sınıf sayıları (bunlardan hiçbiri girdi olarak verilmemişse önceliklerin değerlendirildiği) ve eğitim için kullanılan toplam gözlem sayısıdır.
5. FeatureExtraction Sınıfı
Bu, özellik çıkarımının yapılmasından sorumlu olan sınıftır. Bu sınıf, daha sonraki aşamada sınıflandırma algoritması tarafından gerçekten gerekli olan birkaç istatistiği dahili olarak hesapladığından, tüm bu istatistiklerin önbelleğe alındığı ve yeniden hesaplanmalarını önlemek için bir FeatureStats Nesnesine döndürüldüğü unutulmamalıdır.
6. TextTokenizer Sınıfı
Bu bir basit orijinal metinlerin önişlemesinden, temizlenmesinden ve belirteç haline getirilmesinden ve bunları Belge nesnelerine dönüştürmekten sorumlu metin belirteçleştirme sınıfı.
NaiveBayes JAVA Sınıfını Kullanma
NaiveBayesExample sınıfında, NaiveBayes Sınıfının kullanımına ilişkin örnekler bulabilirsiniz. Örnek kodun hedefi, bir metnin Dilini tespit etmek için basit bir Naive Bayes Sınıflandırıcıyı eğiten bir örnek sunmaktır. Sınıflandırıcıyı eğitmek için, başlangıçta eğitim veri setlerinin yollarını bir HashMap'te sağlıyoruz ve ardından içeriklerini yüklüyoruz.
//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())); }
NaiveBayes sınıflandırıcı, ona verileri ileterek eğitilir. Eğitim tamamlandığında NaiveBayesKnowledgeBase Nesnesi daha sonra kullanılmak üzere saklanır.
//train classifier NaiveBayes nb = new NaiveBayes(); nb.setChisquareCriticalValue(6.63); //0.01 pvalue nb.train(trainingExamples); //get trained classifier NaiveBayesKnowledgeBase knowledgeBase = nb.getKnowledgeBase();
Son olarak, sınıflandırıcıyı kullanmak ve yeni örneklerin sınıflarını tahmin etmek için yapmanız gereken tek şey, daha önce eğitimle edindiğiniz NaiveBayesKnowledgeBase Nesnesini geçerek yeni bir sınıflandırıcı başlatmaktır. Daha sonra basitçe tahmin () yöntemini çağırarak belgenin tahmin edilen sınıfını elde edersiniz.
//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);
Gerekli Genişletmeler
Özel JAVA uygulaması, karmaşık metin sınıflandırma problemleri için kullanıma hazır tam bir çözüm olarak görülmemelidir. Yapılabilecek önemli genişletmelerden bazıları şunlardır:
1. Anahtar Kelime Çıkarma:
Dil Algılama gibi basit problemler için tek anahtar kelimeler kullanmak yeterli olsa da, diğer daha karmaşık problemler n-gramların çıkarılmasını gerektirir. Böylece, TextTokenizer.extractKeywords () yöntemini güncelleyerek daha gelişmiş bir metin çıkarma algoritması uygulayabilir veya Datumbox'ın Anahtar Kelime Çıkarma API'si belgenin tüm n-gramlarını (anahtar kelime kombinasyonları) alma işlevi.
2. Metin Ön İşleme:
Bir sınıflandırıcı kullanmadan önce, genellikle gereksiz karakterleri / parçaları kaldırmak için belgeyi önceden işlemek gerekir. Mevcut uygulama, TextTokenizer.preprocess () yöntemini kullanarak sınırlı ön işleme gerçekleştirse de, HTML sayfalarını analiz etmek söz konusu olduğunda işler daha karmaşık hale gelir. Basitçe HTML etiketlerini kırpıp belgenin yalnızca düz metnini saklayabilir veya sayfanın ana metnini algılayan ve altbilgi, üstbilgi, menülere vb. Ait içeriği kaldıran daha karmaşık Makine Öğrenimi tekniklerine başvurulabilir. Datumbox'ı kullanabilir Metin Çıkarma API fonksiyonu.
3. Ek Naif Bayes Modelleri:
Mevcut sınıflandırıcı, Multinomial Naive Bayes sınıflandırıcısını uygular, yine de önceki bir makalede tartıştığımız gibi. Duygu Analizifarklı sınıflandırma problemleri farklı modeller gerektirir. Bazılarında algoritmanın İkili bir versiyonu daha uygun olurken, bazılarında Bernoulli Modeli çok daha iyi sonuçlar sağlayacaktır. Bu uygulamayı bir başlangıç noktası olarak kullanın ve talimatlarını izleyin. Naive Bayes Eğitimi Modeli genişletmek için.
4. Ek Özellik Seçim Yöntemleri:
Bu uygulama, sınıflandırma için en uygun özellikleri seçmek için Chisquare özellik seçim algoritmasını kullanır. Önceki bir makalede gördüğümüz gibi, Chisquare özellik seçimi yöntem, uygun özellikleri seçmek için istatistiklere dayanan iyi bir tekniktir, ancak yine de kategorilerden birinde görünen nadir özelliklerden daha yüksek puanlar verme eğilimindedir. Özellik seçimine geçmeden önce gürültülü / nadir özelliklerin kaldırılmasıyla veya yukarıda bahsedilen makalede tartıştığımız Karşılıklı Bilgi gibi ek yöntemler uygulanarak iyileştirmeler yapılabilir.
5. Performans Optimizasyonu:
Özel uygulamada, kod üzerinde mikro optimizasyonlar gerçekleştirmek yerine kodun okunabilirliğini geliştirmek önemliydi. Bu tür optimizasyonların kodu daha çirkin ve okumayı / sürdürmeyi zorlaştırmasına rağmen, bu algoritmadaki birçok döngü eğitim ve test sırasında milyonlarca kez çalıştırıldığı için genellikle gereklidir. Bu uygulama, kendi ayarlanmış sürümünüzü geliştirmek için harika bir başlangıç noktası olabilir.
Neredeyse bitti ... Son Notlar!
Bu uygulamanın nasıl çalıştığını daha iyi anlamak için önceki iki makaleyi okumanız şiddetle tavsiye edilir. Naive Bayes Sınıflandırıcı ve Öznitelik Seçimi. Yöntemlerin teorik arka planı hakkında bilgi edineceksiniz ve bu, algoritmanın / kodun bölümlerini daha net hale getirecektir.
Naive Bayes'in kolay, hızlı ve çoğu zaman “oldukça doğru” olmasına rağmen, aynı zamanda özelliklerin koşullu bağımsızlık varsayımını yaptığı için “Naif” olduğunu da belirtmeliyiz. Bu varsayım, Metin Sınıflandırma problemlerinde neredeyse hiç karşılanmadığından, Naive Bayes neredeyse hiçbir zaman en iyi performans gösteren sınıflandırıcı değildir. İçinde Veri Kutusu API'si, standart Naive Bayes sınıflandırıcısının bazı genişletmeleri yalnızca Dil Algılama gibi basit sorunlar için kullanılır. Daha karmaşık metin sınıflandırma sorunları için daha gelişmiş teknikler, örneğin Max Entropy sınıflandırıcı gerekli.
Uygulamayı ilginç bir projede kullanırsanız bize yazmaktan ve projenizi blogumuzda yayınlayacağız. Ayrıca makaleyi beğendiyseniz lütfen bir dakikanızı ayırın ve Twitter veya Facebook'ta paylaşın. 🙂
- AI
- yapay zeka
- AI sanat üreteci
- yapay zeka robotu
- yapay zeka
- yapay zeka sertifikası
- yapay zeka robotu
- yapay zeka robotları
- yapay zeka yazılımı
- blockchain
- blockchain konferans ai
- zeka
- konuşma yapay zekası
- kripto konferans ai
- dal-e
- Veri kutusu
- derin öğrenme
- google ai
- makine öğrenme
- Makine Öğrenimi ve İstatistikler
- Platon
- plato yapay zekası
- Plato Veri Zekası
- Plato Oyunu
- PlatoVeri
- plato oyunu
- Programlama
- ölçek ai
- sözdizimi
- zefirnet