JAVA PlatoBlockchain ڈیٹا انٹیلی جنس میں Naive Bayes Text Classifier تیار کرنا۔ عمودی تلاش۔ عی

JAVA میں ایک Naive Bayes Text Classifier تیار کرنا

پچھلے مضامین میں ہم نے کے نظریاتی پس منظر پر بات کی ہے۔ Naive Bayes ٹیکسٹ کلاسیفائر اور استعمال کی اہمیت فیچر سلیکشن تکنیک متن کی درجہ بندی میں۔ اس آرٹیکل میں، ہم سب کچھ ایک ساتھ ڈالنے جا رہے ہیں اور JAVA میں Naive Bayes ٹیکسٹ کلاسیفکیشن الگورتھم کا ایک سادہ نفاذ بنانے جا رہے ہیں۔ درجہ بندی کرنے والے کا کوڈ اوپن سورس (GPL v3 لائسنس کے تحت) ہے اور آپ اسے یہاں سے ڈاؤن لوڈ کر سکتے ہیں۔ Github کے.

اپ ڈیٹ: ڈیٹام باکس مشین لرننگ فریم ورک اب اوپن سورس اور مفت ہے۔ ڈاؤن لوڈ، اتارنا. جاوا میں Naive Bayes Classifier کے نفاذ کو دیکھنے کے لیے پیکیج com.datumbox.framework.machineleaning.classification کو دیکھیں۔

Naive Bayes جاوا پر عمل درآمد

کوڈ جاوا میں لکھا گیا ہے اور اسے براہ راست یہاں سے ڈاؤن لوڈ کیا جا سکتا ہے۔ Github کے. یہ GPLv3 کے تحت لائسنس یافتہ ہے لہذا بلا جھجھک اسے استعمال کریں، اس میں ترمیم کریں اور اسے آزادانہ طور پر دوبارہ تقسیم کریں۔

ٹیکسٹ کلاسیفائر لاگو کرتا ہے۔ کثیر النوع بولی Bayes کے ساتھ ساتھ ماڈل Chisquare فیچر سلیکشن الگورتھم دونوں تکنیکوں کے کام کرنے کے طریقے کی تمام نظریاتی تفصیلات پچھلے مضامین میں دی گئی ہیں اور تفصیلی javadoc تبصرے ماخذ کوڈ پر دیکھے جا سکتے ہیں جس پر عمل درآمد کو بیان کیا گیا ہے۔ اس طرح اس سیگمنٹ میں میں درجہ بندی کرنے والے کے فن تعمیر کی اعلیٰ سطحی وضاحت پر توجہ دوں گا۔

1. NaiveBayes کلاس

یہ ٹیکسٹ کلاسیفائر کا اہم حصہ ہے۔ یہ ٹرین () اور پیشین گوئی () جیسے طریقوں کو لاگو کرتا ہے جو درجہ بندی کرنے والے کو تربیت دینے اور اسے پیشین گوئیوں کے لیے استعمال کرنے کے ذمہ دار ہیں۔ واضح رہے کہ یہ کلاس تربیت/پیش گوئی سے پہلے دستاویز کو پری پروسیس اور ٹوکنائز کرنے کے لیے مناسب بیرونی طریقوں کو کال کرنے کے لیے بھی ذمہ دار ہے۔

2. NaiveBayesKnowledgeBase آبجیکٹ

تربیت کا آؤٹ پٹ ایک NaiveBayesKnowledgeBase آبجیکٹ ہے جو تمام ضروری معلومات اور امکانات کو ذخیرہ کرتا ہے جو Naive Bayes Classifier کے ذریعے استعمال ہوتے ہیں۔

3. دستاویز آبجیکٹ

عمل درآمد میں تربیت اور پیشین گوئی کے متن دونوں اندرونی طور پر دستاویز آبجیکٹ کے طور پر محفوظ ہیں۔ دستاویز آبجیکٹ دستاویز کے تمام ٹوکن (الفاظ)، ان کے اعداد و شمار اور دستاویز کی ہدف کی درجہ بندی کو محفوظ کرتا ہے۔

4. فیچر سٹیٹس آبجیکٹ

فیچر اسٹیٹس آبجیکٹ کئی اعدادوشمار کو اسٹور کرتا ہے جو فیچر نکالنے کے مرحلے کے دوران تیار ہوتے ہیں۔ اس طرح کے اعداد و شمار خصوصیات اور کلاس کی مشترکہ گنتی ہیں (جس سے مشترکہ امکانات اور امکانات کا اندازہ لگایا جاتا ہے)، کلاس شمار (جس سے پہلے کا اندازہ لگایا جاتا ہے اگر کوئی بھی ان پٹ کے طور پر نہیں دیا جاتا ہے) اور تربیت کے لیے استعمال ہونے والے مشاہدات کی کل تعداد۔

5. فیچر ایکسٹریکشن کلاس

یہ وہ کلاس ہے جو فیچر نکالنے کے لیے ذمہ دار ہے۔ واضح رہے کہ چونکہ یہ کلاس اندرونی طور پر کئی اعدادوشمار کا حساب لگاتی ہے جو درحقیقت بعد کے مرحلے میں درجہ بندی الگورتھم کے لیے درکار ہوتے ہیں، اس لیے ان تمام اعدادوشمار کو دوبارہ گنتی سے بچنے کے لیے فیچر اسٹیٹس آبجیکٹ میں کیش کر کے واپس کر دیا جاتا ہے۔

6. ٹیکسٹ ٹوکنائزر کلاس

یہ ایک ہے سادہ ٹیکسٹ ٹوکنائزیشن کلاس، اصل متن کو پہلے سے پروسیس کرنے، صاف کرنے اور ٹوکنائز کرنے اور انہیں دستاویزی اشیاء میں تبدیل کرنے کے لیے ذمہ دار ہے۔

NaiveBayes JAVA کلاس کا استعمال

NaiveBayesExample کلاس میں آپ NaiveBayes کلاس استعمال کرنے کی مثالیں تلاش کر سکتے ہیں۔ نمونہ کوڈ کا ہدف ایک ایسی مثال پیش کرنا ہے جو متن کی زبان کا پتہ لگانے کے لیے ایک سادہ Naive Bayes Classifier کو تربیت دیتا ہے۔ درجہ بندی کرنے والے کو تربیت دینے کے لیے، ابتدائی طور پر ہم ایک HashMap میں تربیتی ڈیٹاسیٹس کے راستے فراہم کرتے ہیں اور پھر ہم ان کے مواد کو لوڈ کرتے ہیں۔

   //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 آبجیکٹ کو پاس کر کے ایک نیا درجہ بندی شروع کرنا ہے جسے آپ نے پہلے تربیت کے ذریعے حاصل کیا تھا۔ پھر صرف predict() طریقہ پر کال کرکے آپ کو دستاویز کی پیشین گوئی کی کلاس مل جاتی ہے۔

   //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. مطلوبہ الفاظ کا اخراج:

اگرچہ ایک کلیدی الفاظ کا استعمال سادہ مسائل جیسے کہ زبان کی کھوج کے لیے کافی ہو سکتا ہے، دیگر زیادہ پیچیدہ مسائل کے لیے n-grams نکالنے کی ضرورت ہوتی ہے۔ اس طرح کوئی بھی یا تو TextTokenizer.extractKeywords() طریقہ کو اپ ڈیٹ کرکے زیادہ نفیس ٹیکسٹ نکالنے والے الگورتھم کو نافذ کرسکتا ہے یا Datumbox کا استعمال کرسکتا ہے۔ کلیدی لفظ نکالنے کا API دستاویز کے تمام n-گرامس (کلیدی الفاظ کے مجموعے) حاصل کرنے کے لیے فنکشن۔

2. ٹیکسٹ پری پروسیسنگ:

کلاسیفائر استعمال کرنے سے پہلے عام طور پر غیر ضروری حروف/حصوں کو ہٹانے کے لیے دستاویز کو پہلے سے پروسیس کرنا ضروری ہوتا ہے۔ اگرچہ موجودہ نفاذ TextTokenizer.preprocess() طریقہ استعمال کرکے محدود پری پروسیسنگ انجام دیتا ہے، جب HTML صفحات کا تجزیہ کرنے کی بات آتی ہے تو چیزیں مشکل ہوجاتی ہیں۔ کوئی بھی HTML ٹیگز کو آسانی سے تراش سکتا ہے اور دستاویز کا صرف سادہ متن رکھ سکتا ہے یا مزید نفیس مشین لرننگ تکنیکوں کا سہارا لے سکتا ہے جو صفحہ کے مرکزی متن کا پتہ لگاتا ہے اور فوٹر، ہیڈر، مینو وغیرہ سے تعلق رکھنے والے مواد کو ہٹا سکتا ہے۔ Datumbox کا استعمال کر سکتے ہیں۔ ٹیکسٹ ایکسٹریکشن API تقریب.

3. اضافی نائیو بیز ماڈلز:

موجودہ درجہ بندی Multinomial Naive Bayes درجہ بندی کو نافذ کرتا ہے، اس کے باوجود جیسا کہ ہم نے پچھلے مضمون میں اس کے بارے میں بات کی تھی۔ احساس تجزیہمختلف درجہ بندی کے مسائل کے لیے مختلف ماڈلز کی ضرورت ہوتی ہے۔ کچھ میں الگورتھم کا بائنرائزڈ ورژن زیادہ مناسب ہوگا، جبکہ دوسروں میں برنولی ماڈل بہت بہتر نتائج فراہم کرے گا۔ اس نفاذ کو نقطہ آغاز کے طور پر استعمال کریں اور کی ہدایات پر عمل کریں۔ بولی Bayes ٹیوٹوریل ماڈل کو بڑھانے کے لیے۔

4. اضافی فیچر کے انتخاب کے طریقے:

درجہ بندی کے لیے موزوں ترین خصوصیات کو منتخب کرنے کے لیے یہ نفاذ Chisquare فیچر سلیکشن الگورتھم کا استعمال کرتا ہے۔ جیسا کہ ہم نے پچھلے مضمون میں دیکھا تھا، Chisquare خصوصیت کا انتخاب طریقہ ایک اچھی تکنیک ہے جو مناسب خصوصیات کو منتخب کرنے کے لیے اعداد و شمار پر ریلے کرتی ہے، اس کے باوجود یہ نادر خصوصیات پر زیادہ اسکور دیتی ہے جو صرف ایک زمرے میں ظاہر ہوتی ہیں۔ فیچر کے انتخاب پر آگے بڑھنے سے پہلے شور / نایاب خصوصیات کو ہٹا کر یا باہمی معلومات جیسے اضافی طریقوں کو لاگو کرکے بہتری لائی جا سکتی ہے جس پر ہم نے مذکورہ مضمون پر تبادلہ خیال کیا ہے۔

5. کارکردگی کی اصلاح:

خاص طور پر نفاذ میں کوڈ پر مائیکرو آپٹیمائزیشن کرنے کے بجائے کوڈ کی پڑھنے کی اہلیت کو بہتر بنانا ضروری تھا۔ اس حقیقت کے باوجود کہ اس طرح کی اصلاحیں کوڈ کو بدصورت اور پڑھنا/ برقرار رکھنا مشکل بناتی ہیں، وہ اکثر ضروری ہوتے ہیں کیونکہ اس الگورتھم میں بہت سے لوپس کو تربیت اور جانچ کے دوران لاکھوں بار عمل میں لایا جاتا ہے۔ یہ عمل آپ کے اپنے ٹیون شدہ ورژن کو تیار کرنے کے لیے ایک بہترین نقطہ آغاز ہو سکتا ہے۔

تقریباً وہاں… حتمی نوٹس!

میں نے-سنا-وہ-اچھا-کوڈنگ-lیہ عمل درآمد کیسے کام کرتا ہے اس کے بارے میں اچھی طرح سے سمجھنے کے لیے آپ کو اس بارے میں پچھلے دو مضامین کو پڑھنے کا سختی سے مشورہ دیا جاتا ہے۔ بولی Bayes کلاسیفائر اور فیچر سلیکشن. آپ طریقوں کے نظریاتی پس منظر کے بارے میں بصیرت حاصل کریں گے اور یہ الگورتھم/کوڈ کے حصوں کو واضح کر دے گا۔

ہمیں نوٹ کرنا چاہیے کہ Naive Bayes ایک آسان، تیز اور اکثر اوقات "کافی درست" ہونے کے باوجود، یہ "Naive" بھی ہے کیونکہ یہ خصوصیات کی مشروط آزادی کا مفروضہ بناتا ہے۔ چونکہ یہ مفروضہ متن کی درجہ بندی کے مسائل میں تقریباً کبھی پورا نہیں ہوتا ہے، اس لیے Naive Bayes تقریباً کبھی بھی بہترین کارکردگی کا درجہ دینے والا نہیں ہے۔ میں ڈیٹام باکس API، معیاری Naive Bayes درجہ بندی کی کچھ توسیعیں صرف سادہ مسائل جیسے کہ زبان کی کھوج کے لیے استعمال ہوتی ہیں۔ مزید پیچیدہ متن کی درجہ بندی کے مسائل کے لیے مزید جدید تکنیکیں جیسے کہ میکس اینٹروپی درجہ بندی ضروری ہیں۔

اگر آپ کسی دلچسپ منصوبے میں عمل درآمد کا استعمال کرتے ہیں۔ ہمیں ایک سطر چھوڑ دو اور ہم آپ کے پروجیکٹ کو اپنے بلاگ پر پیش کریں گے۔ اس کے علاوہ اگر آپ کو مضمون پسند ہے تو براہ کرم ایک لمحہ نکالیں اور اسے ٹویٹر یا فیس بک پر شیئر کریں۔ 🙂

ٹائم اسٹیمپ:

سے زیادہ ڈیٹا باکس