JAVA PlatoBlockchain ডেটা ইন্টেলিজেন্সে একটি Naive Bayes Text Classifier তৈরি করা। উল্লম্ব অনুসন্ধান. আ.

JAVA-তে একটি Naive Bayes Text Classifier তৈরি করা

পূর্ববর্তী নিবন্ধগুলিতে আমরা এর তাত্ত্বিক পটভূমি নিয়ে আলোচনা করেছি নেভ বেইস টেক্সট ক্লাসিফায়ার এবং ব্যবহারের গুরুত্ব বৈশিষ্ট্য নির্বাচন কৌশল পাঠ্য শ্রেণীবিভাগে। এই নিবন্ধে, আমরা সবকিছু একত্রিত করতে যাচ্ছি এবং JAVA-তে Naive Bayes টেক্সট ক্লাসিফিকেশন অ্যালগরিদমের একটি সহজ বাস্তবায়ন তৈরি করতে যাচ্ছি। ক্লাসিফায়ারের কোডটি ওপেন সোর্স (GPL v3 লাইসেন্সের অধীনে) এবং আপনি এটি থেকে ডাউনলোড করতে পারেন গিটহাব.

আপডেট: Datumbox মেশিন লার্নিং ফ্রেমওয়ার্ক এখন ওপেন সোর্স এবং বিনামূল্যে ডাউনলোড. জাভাতে Naive Bayes Classifier এর বাস্তবায়ন দেখতে com.datumbox.framework.machinelearning.classification প্যাকেজটি দেখুন।

নেভ বেইস জাভা ইমপ্লিমেন্টেশন

কোডটি JAVA-তে লেখা এবং সরাসরি এখান থেকে ডাউনলোড করা যায় গিটহাব. এটি GPLv3 এর অধীনে লাইসেন্সপ্রাপ্ত তাই এটি ব্যবহার করতে, এটিকে সংশোধন করতে এবং অবাধে পুনরায় বিতরণ করতে নির্দ্বিধায়৷

টেক্সট ক্লাসিফায়ার প্রয়োগ করে মাল্টিনমিয়াল নেভ বেইস সঙ্গে মডেল Chisquare বৈশিষ্ট্য নির্বাচন অ্যালগরিদম উভয় কৌশল কীভাবে কাজ করে তার সমস্ত তাত্ত্বিক বিবরণ পূর্ববর্তী নিবন্ধগুলিতে কভার করা হয়েছে এবং বিস্তারিত জাভাডোক মন্তব্যগুলি বাস্তবায়নের বর্ণনাকারী উত্স কোডে পাওয়া যাবে। সুতরাং এই সেগমেন্টে আমি ক্লাসিফায়ারের আর্কিটেকচারের একটি উচ্চ স্তরের বর্ণনায় ফোকাস করব।

1. NaiveBayes ক্লাস

এটি টেক্সট ক্লাসিফায়ারের প্রধান অংশ। এটি ট্রেন() এবং ভবিষ্যদ্বাণী() এর মতো পদ্ধতিগুলি প্রয়োগ করে যা একটি শ্রেণিবিন্যাসকারীকে প্রশিক্ষণ এবং ভবিষ্যদ্বাণীর জন্য এটি ব্যবহার করার জন্য দায়ী। এটি লক্ষ করা উচিত যে প্রশিক্ষণ/ভবিষ্যদ্বাণী করার আগে নথিটিকে প্রিপ্রসেস এবং টোকেনাইজ করার জন্য উপযুক্ত বাহ্যিক পদ্ধতিগুলিকে কল করার জন্যও এই শ্রেণীটি দায়ী।

2. NaiveBayesKnowledgeBase অবজেক্ট

প্রশিক্ষণের আউটপুট হল একটি NaiveBayesKnowledgeBase অবজেক্ট যা Naive Bayes Classifier দ্বারা ব্যবহৃত সমস্ত প্রয়োজনীয় তথ্য এবং সম্ভাব্যতা সংরক্ষণ করে।

3. ডকুমেন্ট অবজেক্ট

বাস্তবায়নে প্রশিক্ষণ এবং ভবিষ্যদ্বাণী পাঠ্য উভয়ই অভ্যন্তরীণভাবে নথি বস্তু হিসাবে সংরক্ষণ করা হয়। ডকুমেন্ট অবজেক্ট নথির সমস্ত টোকেন (শব্দ), তাদের পরিসংখ্যান এবং নথির লক্ষ্য শ্রেণিবিন্যাস সংরক্ষণ করে।

4. ফিচারস্ট্যাটস অবজেক্ট

ফিচারস্ট্যাটস অবজেক্ট বেশ কিছু পরিসংখ্যান সঞ্চয় করে যা ফিচার এক্সট্রাকশন পর্বের সময় তৈরি হয়। এই ধরনের পরিসংখ্যান হল বৈশিষ্ট্য এবং ক্লাসের যৌথ গণনা (যা থেকে যৌথ সম্ভাব্যতা এবং সম্ভাবনা অনুমান করা হয়), ক্লাস গণনা (যেখান থেকে পূর্ববর্তীদের মূল্যায়ন করা হয় যদি কোনোটি ইনপুট হিসাবে না দেওয়া হয়) এবং প্রশিক্ষণের জন্য ব্যবহৃত মোট পর্যবেক্ষণের সংখ্যা।

5. ফিচার এক্সট্রাকশন ক্লাস

এটি এমন একটি শ্রেণী যা বৈশিষ্ট্য নিষ্কাশন সম্পাদনের জন্য দায়ী। এটি লক্ষ করা উচিত যে যেহেতু এই ক্লাসটি অভ্যন্তরীণভাবে বেশ কয়েকটি পরিসংখ্যান গণনা করে যা প্রকৃতপক্ষে পরবর্তী পর্যায়ে শ্রেণিবিন্যাস অ্যালগরিদম দ্বারা প্রয়োজনীয়, এই সমস্ত পরিসংখ্যান ক্যাশে করা হয় এবং তাদের পুনঃগণনা এড়াতে ফিচারস্ট্যাট অবজেক্টে ফেরত দেওয়া হয়।

6. TextTokenizer ক্লাস

এটা একটা সহজ টেক্সট টোকেনাইজেশন ক্লাস, মূল টেক্সটগুলিকে প্রিপ্রসেসিং, ক্লিয়ারিং এবং টোকেনাইজ করার জন্য এবং সেগুলিকে ডকুমেন্ট অবজেক্টে রূপান্তর করার জন্য দায়ী।

NaiveBayes JAVA ক্লাস ব্যবহার করা

NaiveBayesExample ক্লাসে আপনি NaiveBayes ক্লাস ব্যবহার করার উদাহরণ খুঁজে পেতে পারেন। নমুনা কোডের লক্ষ্য হল একটি উদাহরণ উপস্থাপন করা যা একটি পাঠ্যের ভাষা সনাক্ত করার জন্য একটি সাধারণ Naive Bayes ক্লাসিফায়ারকে প্রশিক্ষণ দেয়। ক্লাসিফায়ারকে প্রশিক্ষণ দেওয়ার জন্য, প্রাথমিকভাবে আমরা একটি হ্যাশম্যাপে প্রশিক্ষণ ডেটাসেটের পাথগুলি প্রদান করি এবং তারপরে আমরা তাদের বিষয়বস্তু লোড করি।

   //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() পদ্ধতি আপডেট করে আরও পরিশীলিত পাঠ্য নিষ্কাশন অ্যালগরিদম প্রয়োগ করতে পারে অথবা Datumbox-এর ব্যবহার করতে পারে। কীওয়ার্ড এক্সট্রাকশন API নথির সমস্ত n-গ্রাম (কীওয়ার্ড সমন্বয়) পেতে ফাংশন।

2. টেক্সট প্রিপ্রসেসিং:

একটি ক্লাসিফায়ার ব্যবহার করার আগে সাধারণত অপ্রয়োজনীয় অক্ষর/অংশগুলি মুছে ফেলার জন্য নথিটি প্রিপ্রসেস করা প্রয়োজন। যদিও বর্তমান ইমপ্লিমেন্টেশন TextTokenizer.preprocess() পদ্ধতি ব্যবহার করে সীমিত প্রিপ্রসেসিং সঞ্চালন করে, HTML পৃষ্ঠাগুলি বিশ্লেষণ করার সময় জিনিসগুলি আরও জটিল হয়ে ওঠে। কেউ কেবল এইচটিএমএল ট্যাগগুলি ছাঁটাই করতে পারে এবং নথির কেবলমাত্র সাধারণ পাঠ্য রাখতে পারে বা আরও পরিশীলিত মেশিন লার্নিং কৌশল অবলম্বন করতে পারে যা পৃষ্ঠার মূল পাঠ্য সনাক্ত করে এবং পাদচরণ, শিরোনাম, মেনু ইত্যাদির অন্তর্গত বিষয়বস্তু সরিয়ে দেয়। Datumbox এর ব্যবহার করতে পারেন পাঠ্য নিষ্কাশন API ফাংশন.

3. অতিরিক্ত নেভ বেইস মডেল:

বর্তমান ক্লাসিফায়ারটি মাল্টিনমিয়াল নেভ বেইস ক্লাসিফায়ার প্রয়োগ করে, তা সত্ত্বেও আমরা আগের নিবন্ধে আলোচনা করেছি অনুভূতির বিশ্লেষণ, বিভিন্ন শ্রেণীবিভাগ সমস্যা বিভিন্ন মডেল প্রয়োজন. কিছুতে অ্যালগরিদমের একটি বাইনারিকৃত সংস্করণ আরও উপযুক্ত হবে, অন্যদের ক্ষেত্রে বার্নৌলি মডেল অনেক ভাল ফলাফল প্রদান করবে। একটি সূচনা বিন্দু হিসাবে এই বাস্তবায়ন ব্যবহার করুন এবং নির্দেশাবলী অনুসরণ করুন নেভ বেইস টিউটোরিয়াল মডেল প্রসারিত করতে।

4. অতিরিক্ত বৈশিষ্ট্য নির্বাচন পদ্ধতি:

এই বাস্তবায়নটি শ্রেণীবিভাগের জন্য সবচেয়ে উপযুক্ত বৈশিষ্ট্য নির্বাচন করতে Chisquare বৈশিষ্ট্য নির্বাচন অ্যালগরিদম ব্যবহার করে। আমরা একটি পূর্ববর্তী নিবন্ধে দেখেছি, Chisquare বৈশিষ্ট্য নির্বাচন পদ্ধতি একটি ভাল কৌশল যা উপযুক্ত বৈশিষ্ট্যগুলি নির্বাচন করার জন্য পরিসংখ্যানের উপর রিলে করে, তবুও এটি বিরল বৈশিষ্ট্যগুলিতে উচ্চ স্কোর দেওয়ার প্রবণতা রাখে যা শুধুমাত্র একটি বিভাগে প্রদর্শিত হয়। বৈশিষ্ট্য নির্বাচনের দিকে অগ্রসর হওয়ার আগে গোলমাল/বিরল বৈশিষ্ট্যগুলিকে অপসারণ করে বা পূর্বোক্ত নিবন্ধে আমরা আলোচনা করেছি এমন পারস্পরিক তথ্যের মতো অতিরিক্ত পদ্ধতি প্রয়োগ করে উন্নতি করা যেতে পারে।

5. কর্মক্ষমতা অপ্টিমাইজেশান:

নির্দিষ্ট বাস্তবায়নে কোডে মাইক্রো-অপ্টিমাইজেশন করার পরিবর্তে কোডের পঠনযোগ্যতা উন্নত করা গুরুত্বপূর্ণ ছিল। এই ধরনের অপ্টিমাইজেশনগুলি কোডটিকে আরও কুশ্রী এবং পড়া/রক্ষণাবেক্ষণ করা কঠিন করে তোলে তা সত্ত্বেও, তারা প্রায়শই প্রয়োজনীয় কারণ এই অ্যালগরিদমের অনেকগুলি লুপ প্রশিক্ষণ এবং পরীক্ষার সময় লক্ষ লক্ষ বার কার্যকর করা হয়। এই বাস্তবায়ন আপনার নিজস্ব টিউন করা সংস্করণ বিকাশের জন্য একটি দুর্দান্ত সূচনা পয়েন্ট হতে পারে।

প্রায় শেষ... চূড়ান্ত নোট!

আমি-শুনেছি-সে-গুড-এ-কোডিং-এলএই বাস্তবায়ন কীভাবে কাজ করে তা ভালভাবে বোঝার জন্য আপনাকে পূর্ববর্তী দুটি নিবন্ধ পড়ার পরামর্শ দেওয়া হচ্ছে নেভ বেইস ক্লাসিফায়ার এবং বৈশিষ্ট্য নির্বাচন. আপনি পদ্ধতিগুলির তাত্ত্বিক পটভূমিতে অন্তর্দৃষ্টি পাবেন এবং এটি অ্যালগরিদম/কোডের অংশগুলিকে আরও পরিষ্কার করে তুলবে।

আমাদের লক্ষ্য করা উচিত যে Naive Bayes একটি সহজ, দ্রুত এবং বেশিরভাগ সময় "বেশ নির্ভুল" হওয়া সত্ত্বেও, এটি "Naive" কারণ এটি বৈশিষ্ট্যগুলির শর্তাধীন স্বাধীনতার অনুমান করে। যেহেতু টেক্সট ক্লাসিফিকেশন সমস্যায় এই অনুমানটি প্রায় কখনোই পূরণ হয় না, তাই নেভ বেইস প্রায় কখনোই সেরা পারফরমিং ক্লাসিফায়ার নয়। ভিতরে Datumbox API, স্ট্যান্ডার্ড Naive Bayes ক্লাসিফায়ারের কিছু সম্প্রসারণ শুধুমাত্র ভাষা সনাক্তকরণের মতো সাধারণ সমস্যার জন্য ব্যবহার করা হয়। আরও জটিল পাঠ্য শ্রেণিবিন্যাস সমস্যার জন্য আরও উন্নত কৌশল যেমন সর্বোচ্চ এনট্রপি ক্লাসিফায়ার প্রয়োজনীয়।

আপনি যদি একটি আকর্ষণীয় প্রকল্প বাস্তবায়ন ব্যবহার করুন আমাদের একটি লাইন ড্রপ এবং আমরা আমাদের ব্লগে আপনার প্রকল্পটি তুলে ধরব। এছাড়াও আপনি যদি নিবন্ধটি পছন্দ করেন তবে অনুগ্রহ করে একটু সময় নিন এবং টুইটার বা ফেসবুকে শেয়ার করুন। 🙂

সময় স্ট্যাম্প:

থেকে আরো ডেটাবক্স