JAVA प्लेटोब्लॉकचैन डेटा इंटेलिजेंस में एक Naive Bayes Text Classifier का विकास करना। लंबवत खोज। ऐ.

JAVA में एक Naive Bayes Text Classifier का विकास करना

पिछले लेखों में हमने सैद्धांतिक पृष्ठभूमि पर चर्चा की है Naive Bayes टेक्स्ट क्लासिफायरियर और उपयोग करने का महत्व सुविधा चयन तकनीक पाठ वर्गीकरण में। इस लेख में, हम सब कुछ एक साथ रखने जा रहे हैं और जेएवीए में नैवे बेस पाठ वर्गीकरण एल्गोरिदम का एक सरल कार्यान्वयन बनाने जा रहे हैं। क्लासिफायर का कोड खुला-खट्टा है (जीपीएल v3 लाइसेंस के तहत) और आप इसे डाउनलोड कर सकते हैं Github.

अद्यतन: डाटंबॉक्स मशीन लर्निंग फ्रेमवर्क अब खुला-स्रोत और मुफ्त है डाउनलोड। Java में Naive Bayes Classifier के कार्यान्वयन को देखने के लिए पैकेज com.datumbox.framework.machinelearning.classification देखें।

Naive Bayes Java कार्यान्वयन

कोड JAVA में लिखा गया है और इसे सीधे डाउनलोड किया जा सकता है Github। यह GPLv3 के तहत लाइसेंस प्राप्त है इसलिए इसका उपयोग करने के लिए स्वतंत्र महसूस करें, इसे संशोधित करें और इसे स्वतंत्र रूप से पुनर्वितरित करें।

पाठ क्लासिफायर लागू करता है मल्टीनोमियल नाइव बेयस साथ में मॉडल Chisquare फ़ीचर चयन कलन विधि। दोनों तकनीकों के काम के सभी सैद्धांतिक विवरण पिछले लेखों में शामिल किए गए हैं और कार्यान्वयन के बारे में बताने के लिए स्रोत कोड पर विस्तृत javadoc टिप्पणियां पाई जा सकती हैं। इस प्रकार इस सेगमेंट में मैं क्लासिफायरियर की वास्तुकला के उच्च स्तरीय विवरण पर ध्यान केंद्रित करूंगा।

1. NaiveBayes वर्ग

यह Text Classifier का मुख्य भाग है। यह ट्रेन () और भविष्यवाणी () जैसे तरीकों को लागू करता है जो एक क्लासिफायरियर के प्रशिक्षण और भविष्यवाणियों के लिए इसका उपयोग करने के लिए जिम्मेदार हैं। यह ध्यान दिया जाना चाहिए कि यह वर्ग प्रशिक्षण / भविष्यवाणी से पहले दस्तावेज को प्रीप्रोसेस और टोकन करने के लिए उपयुक्त बाहरी तरीकों को कॉल करने के लिए भी जिम्मेदार है।

2. NaiveBayesKnowledgeBase ऑब्जेक्ट

प्रशिक्षण का उत्पादन एक NaiveBayesKnowledgeBase ऑब्जेक्ट है जो Naive Bayes Classifier द्वारा उपयोग की जाने वाली सभी आवश्यक जानकारी और संभावनाओं को संग्रहीत करता है।

3. दस्तावेज़ वस्तु

कार्यान्वयन में प्रशिक्षण और भविष्यवाणी पाठ दोनों को आंतरिक रूप से दस्तावेज़ ऑब्जेक्ट के रूप में संग्रहीत किया जाता है। दस्तावेज़ ऑब्जेक्ट दस्तावेज़ के सभी टोकन (शब्द), उनके आंकड़े और दस्तावेज़ के लक्ष्य वर्गीकरण को संग्रहीत करता है।

4. फ़ीचरस्टैट ऑब्जेक्ट

फ़ीचरस्टैट्स ऑब्जेक्ट कई आंकड़े संग्रहीत करता है जो फ़ीचर एक्सट्रैक्शन चरण के दौरान उत्पन्न होते हैं। इस तरह के आँकड़े फ़ीचर और क्लास (जहाँ से संयुक्त संभावनाओं और संभावनाओं का अनुमान लगाया जाता है) की संयुक्त गिनती होती है, क्लास की गिनती (जहाँ से किसी को इनपुट के रूप में नहीं दिया जाता है) का मूल्यांकन किया जाता है) और प्रशिक्षण के लिए उपयोग की जाने वाली टिप्पणियों की कुल संख्या।

5. फीचरटेक्स्ट क्लास

यह वह वर्ग है जो फीचर निष्कर्षण के लिए जिम्मेदार है। यह ध्यान दिया जाना चाहिए कि चूंकि यह वर्ग आंतरिक रूप से कई आँकड़ों की गणना करता है जो कि बाद के चरण में वर्गीकरण एल्गोरिथम द्वारा आवश्यक होते हैं, इन सभी आँकड़ों को कैश किया जाता है और उनके पुनर्गणना से बचने के लिए एक फीचरस्टैट ऑब्जेक्ट में लौटाया जाता है।

6. टेक्टोकेनाइजर क्लास

यह एक है सरल टेक्स्ट टोकेनाइजेशन क्लास, प्रीप्रोसेसिंग के लिए जिम्मेदार, क्लीयरिंग और मूल टेक्स्ट को टोकन करके उन्हें डॉक्यूमेंट ऑब्जेक्ट में परिवर्तित करना।

NaiveBayes JAVA क्लास का उपयोग करना

NaiveBayesExample वर्ग में आप NaiveBayes वर्ग का उपयोग करने के उदाहरण पा सकते हैं। नमूना कोड का लक्ष्य एक उदाहरण प्रस्तुत करना है जो एक पाठ की भाषा का पता लगाने के लिए एक सरल Naive Bayes Classifier को प्रशिक्षित करता है। क्लासिफायरियर को प्रशिक्षित करने के लिए, शुरू में हम एक हाशप में प्रशिक्षण डेटासेट के पथ प्रदान करते हैं और फिर हम उनकी सामग्री को लोड करते हैं।

   //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 क्लासिफायर को इसे डेटा पास करके प्रशिक्षित किया जाता है। एक बार प्रशिक्षण पूरा होने के बाद NaiveBayesKnowledgeBase ऑब्जेक्ट को बाद के उपयोग के लिए संग्रहीत किया जाता है।

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

अंत में क्लासिफायर का उपयोग करने के लिए और नए उदाहरणों की कक्षाओं की भविष्यवाणी करने के लिए, आपको केवल एक नई क्लासिफायरराइज़र को शुरू करना होगा जो कि NaiveBayesKnowledgeBase ऑब्जेक्ट को पार करके प्राप्त होगी जिसे आपने प्रशिक्षण से पहले हासिल किया था। फिर केवल प्रेडिक्ट () पद्धति को कॉल करके आप दस्तावेज़ की अनुमानित कक्षा प्राप्त करते हैं।

   //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);   

आवश्यक विस्तार

विशेष JAVA कार्यान्वयन को परिष्कृत पाठ वर्गीकरण समस्याओं के समाधान के उपयोग के लिए एक पूर्ण तैयार नहीं माना जाना चाहिए। यहाँ कुछ महत्वपूर्ण विस्तार दिए जा सकते हैं:

1. कीवर्ड निष्कर्षण:

भले ही एकल कीवर्ड का उपयोग करना सरल समस्याओं के लिए पर्याप्त हो, जैसे कि भाषा का पता लगाना, अन्य जटिल समस्याओं के लिए एन-ग्राम की निकासी की आवश्यकता होती है। इस प्रकार एक या तो TextTokenizer.extractKeywords () विधि को अपडेट करके या डेटाबॉक्स का उपयोग करके एक अधिक परिष्कृत पाठ निष्कर्षण एल्गोरिथ्म को लागू कर सकता है कीवर्ड एक्सट्रैक्शन एपीआई दस्तावेज़ के सभी एन-ग्राम (कीवर्ड संयोजन) प्राप्त करने के लिए कार्य करते हैं।

2. टेक्स्ट प्रीप्रोसेसिंग:

आमतौर पर एक क्लासिफायर का उपयोग करने से पहले अनावश्यक पात्रों / भागों को हटाने के लिए दस्तावेज़ को पूर्वप्रक्रमित करना आवश्यक है। भले ही वर्तमान कार्यान्वयन TextTokenizer.preprocess () विधि का उपयोग करके सीमित प्रीप्रोसेसिंग करता है, जब HTML पृष्ठों का विश्लेषण करने की बात आती है तो चीजें पेचीदा हो जाती हैं। कोई बस HTML टैग्स को ट्रिम कर सकता है और केवल डॉक्यूमेंट के सादे पाठ को रख सकता है या अधिक सोफिस्टिकेट मशीन लर्निंग तकनीकों का सहारा ले सकता है जो पृष्ठ के मुख्य पाठ का पता लगाता है और सामग्री को हटाता है जो कि पाद, हेडर, मेनू आदि से संबंधित है। बाद के लिए। Datumbox का उपयोग कर सकते हैं पाठ निष्कर्षण एपीआई समारोह.

3. अतिरिक्त Naive Bayes मॉडल:

वर्तमान क्लासिफायर, बहुराष्ट्रीय Naive Bayes classifier को लागू करता है, फिर भी जैसा कि हमने पिछले लेख में चर्चा की थी भावनाओं का विश्लेषण, विभिन्न वर्गीकरण समस्याओं के लिए विभिन्न मॉडलों की आवश्यकता होती है। एल्गोरिथ्म के कुछ बिनाराइज्ड संस्करण में अधिक उपयुक्त होगा, जबकि अन्य में बर्नौली मॉडल बहुत बेहतर परिणाम प्रदान करेगा। एक प्रारंभिक बिंदु के रूप में इस कार्यान्वयन का उपयोग करें और के निर्देशों का पालन करें Naive Bayes ट्यूटोरियल मॉडल का विस्तार करने के लिए।

4. अतिरिक्त सुविधा चयन के तरीके:

यह कार्यान्वयन वर्गीकरण के लिए सबसे उपयुक्त सुविधाओं का चयन करने के लिए चिसक्वेयर सुविधा चयन एल्गोरिदम का उपयोग करता है। जैसा कि हमने पिछले लेख में देखा था, Chisquare सुविधा का चयन विधि एक अच्छी तकनीक है जो उचित विशेषताओं का चयन करने के लिए आंकड़ों पर निर्भर करती है, फिर भी यह दुर्लभ विशेषताओं पर उच्च स्कोर देने के लिए जाती है जो केवल श्रेणियों में से एक में दिखाई देती है। चयन की प्रक्रिया को आगे बढ़ाने से पहले या म्यूचुअल इंफॉर्मेशन जैसे अतिरिक्त तरीकों को लागू करने से पहले, जो कि हमने उपरोक्त लेख पर चर्चा की थी, से शोर / दुर्लभ विशेषताओं को हटाकर सुधार किए जा सकते हैं।

5. प्रदर्शन अनुकूलन:

विशेष कार्यान्वयन में कोड पर माइक्रो-ऑप्टिमाइज़ेशन करने के बजाय कोड की पठनीयता में सुधार करना महत्वपूर्ण था। इस तथ्य के बावजूद कि इस तरह के अनुकूलन से कोड बदसूरत और पढ़ने / बनाए रखने में कठिन हो जाता है, वे अक्सर आवश्यक होते हैं क्योंकि इस एल्गोरिथ्म में कई लूप प्रशिक्षण और परीक्षण के दौरान लाखों बार निष्पादित होते हैं। यह कार्यान्वयन आपके स्वयं के ट्यून किए गए संस्करण को विकसित करने के लिए एक शानदार शुरुआती बिंदु हो सकता है।

लगभग वहाँ ... अंतिम नोट्स!

मैं-सुना-hes-अच्छा-पर-कोडिंग-lयह कार्यान्वयन कैसे काम करता है इसकी अच्छी समझ पाने के लिए आपको पिछले दो लेखों को पढ़ने की दृढ़ता से सलाह दी जाती है नैवे बेस क्लासिफायर और फीचर चयन। आप तरीकों की सैद्धांतिक पृष्ठभूमि पर अंतर्दृष्टि प्राप्त करेंगे और यह एल्गोरिथ्म / कोड को स्पष्ट करेगा।

हमें ध्यान देना चाहिए कि Naive Bayes एक आसान, तेज़ और बहुधा "काफी सटीक" होने के बावजूद, यह "Naive" भी है क्योंकि यह सुविधाओं की सशर्त स्वतंत्रता की धारणा बनाता है। चूँकि यह धारणा टेक्स्ट क्लासिफिकेशन समस्याओं में लगभग पूरी नहीं हुई है, इसलिए Naive Bayes लगभग कभी भी सर्वश्रेष्ठ प्रदर्शन करने वाला क्लासिफ़ायरफ़ॉर्म नहीं है। में डेटांबॉक्स एपीआईमानक नैवे बेस क्लासिफायर के कुछ विस्तार केवल सरल समस्याओं जैसे कि भाषा का पता लगाने के लिए उपयोग किए जाते हैं। अधिक जटिल पाठ वर्गीकरण समस्याओं के लिए अधिक उन्नत तकनीकों जैसे कि मैक्स एन्ट्रॉपी क्लासिफायर जरूरी हैं।

यदि आप एक दिलचस्प परियोजना में कार्यान्वयन का उपयोग करते हैं हमारे लिए एक लाइन छोड़ें और हम आपके प्रोजेक्ट को हमारे ब्लॉग पर दिखाएंगे। साथ ही अगर आपको यह लेख पसंद आया तो कृपया इसे एक पल के लिए ट्विटर और फेसबुक पर साझा करें। 🙂

समय टिकट:

से अधिक दातुनॉक्स