মেশিন কে হাতেরলেখা চিনানো বিশ্ববিখ্যাত MNIST ডাটাসেটের গল্প - ৬
মজার একটি রিপোর্ট দিয়ে আজকের লেখা শুরু করবো। সাল ২০১৬। মাইক্রোসফট এর একটি চ্যাটবট টে হঠাৎ করেই হৈচৈ ফেলে দিলো। কারণ সেই চ্যাটবট টুইট করে বসে : "Hitler Was Right I Hate the Jews" যার অর্থ- " হিটলার সঠিক কাজটি করেছিলেন এবং আমি ইহুদিদের ঘৃণা করি"। ঠিক তারপরেই মাইক্রসফট টে এর প্রজেক্ট বন্ধ করে দেয়। [লিংক : https://www.haaretz.com/science-and-health/2016-03-24/ty-article/microsoft-pulls-robot-after-it-tweets-hitler-was-right-i-hate-the-jews/0000017f-dede-d856-a37f-ffde9a9c0000]
এরকম অনেক ঘটনা নেটে খুঁজলে পেয়ে যাবেন। কেন হঠাৎ করে এইসব application নিজেদের মতামত এভাবে প্রকাশ করে ফেলে ? কখনো কি ভেবেছেন ? সম্ভ্যাব্য অনেক উত্তরের ভিতরে মোটামুটি গ্রহণযোগ্য একটি উত্তর হচ্ছে : যেই সুবিশাল তথ্য ভান্ডার বা নিউরাল নেটওয়ার্ক এর উপরে ভিত্তি করে এরা শিখে, সেই তথ্যভান্ডার মানুষের তৈরী। মানুষের মধ্যে যেরকম - "এক সাইড নিয়ে" কথা বলার প্রবণতা আছে, ঠিক সেরকম যন্ত্র একটা পর্যায়ে সেরকম - "একটা সাইড নিয়ে " কথা বলা শুরু করে। মানুষের মস্তিষ্ক যেরকম শিখে শিখে সামনে আগায়, ঠিক সেরকম এই যন্ত্রের শিখার জন্য একটা অনেক বড় মস্তিষ্ক বা নিউরাল নেটওয়ার্ক এর আশ্রয় নিতে হয়। আপনি এক্সেলে ৫+৩ লিখে দিলে আপনাকে এর যোগফল এক্সেল বলে দিবে। কারণ আগে থেকেই সেরকম প্রোগ্রাম করা হয়েছে। কিন্তু একবার ভাবুনতো তো কোথায় ৫+৩ যোগফল দেখাতে হবে, আর কোথায় ৫-৩ দেখাতে হবে, কিংবা কোথায় ৫*৩ দেখতে হবে, সেটি যদি মেশিন শিখে যায়, এবং প্রতিনিয়ত শিখতেই থাকে, তাহলে একটা সময়,আপনার মেশিনকে বলে দিতে হবে না। সে নিজে থেকেই প্যাটার্ন বুঝতে পারবে এবং তার শিখা থেকে সে প্রয়োগ শুরু করবে। যত বেশি শিখবে, তত সে দক্ষ হয়ে উঠবে এবং তার প্রয়োগ আরো বেশি নিখুঁত হবে।
শেখার বিষয় যেহেতু চলেই আসলো তাহলে এবার একটি ডাটাসেট নিয়ে কথা বলি। তার আগে একটি গল্প শুনে নেই।
১. ধরুন ০-৯ পর্যন্ত ডিজিট গুলো একঘরভর্তি বাচ্চাদেরকে লিখতে বলা হলো।
২. এক এক জন, এক এক ভাবে, এই ডিজিটগুলো তাদের খাতায় লিখলো।
৩. এবার আপনি সবগুলো এক এর ছবি নিয়ে একটা রো তে সাজালেন, এবং এর মধ্যে থেকে একটি ১ আঁকা ছবি সামনে ধরলেন
৪. সেই ছবিটির উচ্চতা ২৮ পিক্সেল এবং প্রস্থ ২৮ পিক্সেল, তারমানে একটি ১ আঁকা ছবিটি হচ্ছে ৭৮৪ পিক্সেলের
৫. প্রতিটি পিক্সেলের জন্য একটি পিক্সেল ভ্যালু আছে যা কিনা ০-২৫৫ এর ভিতরে
৬. এবার আপনি প্রত্যেকটা এক আঁকা ছবির জন্য উচ্চতা এবং প্রস্থ অনুযায়ি (২৮X ২৮) রো এর প্রত্যেকটি রো তে পিক্সেল ভ্যালু দিলেন। same কাজটি করলেন প্রত্যেকটি ছবির ক্ষেত্রে।
৭. ৪২০০০টি ০-৯ পর্যন্ত বিভিন্নভাবে আঁকা ডিজিটগুলির জন্য এভাবে পিক্সেল ভ্যালু বসিয়ে যেই ডাটাসেটটি তৈরী করা হলো, সেটি একটি Train ডাটাসেট। Train ডাটাসেট মানে - এই ডাটাসেট দিয়ে মেশিন কে ট্রেন করা হবে, বা শিখানো হবে।
৮. এবার সেই ট্রেন ডাটাসেটটি ইউজ করে আমরা মেশিন কে শিখাবো ০-৯ হাতে আঁকা ডিজিটগুলো ইডেন্টিফাই করতে, যাতে করে same প্যাটার্ন এর কেউ যদি হাতে ৫ লিখে, মেশিন সেটি দেখে সহজেই বুঝতে পারে এই ডিজিটটি ৫- অন্য কিছু নয়
অনেক বেশি টেকনিক্যাল হয়ে গেলো ? আমার এই ডাটাসেটটি বুঝতেই ২ সপ্তাহের মতো সময় লেগেছে। এটুকু কষ্ট করতেই হবে !
যদি আপনি ক্যাগলের ডাটাসেটটি বুঝতে পারেন ধরে নিতে পারেন আপনার কাজ প্রায় ৭০% এর মতো শেষ। বাকি শুধু মডেল তৈরী করে টেস্ট করা। বিখ্যাত এই ডাটাসেটটি হাতের লেখা মেশিন কে বুঝানোর জন্য বহুল ব্যাবহৃত একটি ডাটাসেট MNIST ("Modified National Institute of Standards and Technology") ডাটাসেট হিসেবে পরিচিত। আমাদের অবজেক্টিভ হচ্ছে ক্যাগলের এই কম্পিটিশন এ , হাজার হাজার হাতে লেখা ছবির একটি ডেটাসেট থেকে সংখ্যাগুলিকে সঠিকভাবে শনাক্ত করা। পয়েন্ট ১-৮ পর্যন্ত যা বললাম অলরেডি সেরকম একটি ডাটাসেট ট্রেন ডাটাসেট হিসেবে ক্যাগলে দেওয়া আছে ।
এবার একটা দুঃখ শেয়ার করি। ১৮৩৫ জনের কম্পিটিশন এ আমার মডেলের accuracy স্কোর ৯৭, ১০০ এর ভিতরে। কি ভাবছেন ১-৩ এর ভিতরে লিডারবোর্ডে জায়গা করতে পেরেছি? ভুল। আমার অবস্থান ১১৮১! বুঝতেই পারছেন খুব এ টাফ কম্পিটিশন হয়েছে। ১০০ তে ৯৭ পেয়েও ১০০০ জনের পরে আমার জায়গা হয়েছে। দরকার নেই ১-৩ এর ভিতরে হওয়ার, শুধু মনে রাখবেন , ১% মডেলের accuracy ডেভেলপ করলেও ক্যাগলে আপনি অনেক সামনে এগিয়ে যেতে পারবেন।
কিভাবে মডেলটি ডেভেলপ করলাম : পুরো মডেলটি ডেভেলপ করেছি জুলিয়াস এর সাহায্যেই। যে কেউ চাইলে দেখে নিতে পারেন : https://julius.ai/s/ecf541ee-d098-4755-8f22-8e1021557aea এখান থেকে, কনভারসেশন এর শেষের অংশ চাইলে ইগনোর করতে পারেন, কারণ শেষের অংশে জুলিয়াস এর সাথে চিল্লাচিল্লি করেছি মডেলের accuracy নিয়ে (চিল্লাচিল্লি মানে প্রম্পটিং, অন্য কিছু ভাববেন না )
মডেল ডেভেলপ করার আগে কিছু বিষয় মাথায় রাখবেন
১. ডাটাসেটের ওভারভিউ বোঝা : কি আছে, কি করতে চাচ্ছেন - এই ব্যাপারটা খুব স্পষ্ট বুঝতে হবে। কমন সেন্স apply করেন। ডাটাসেট নামিয়ে বার বার ফিচার্স গুলো দেখুন। আগে বুঝুন, কি করতে হবে, তারপরে কাজে লেগে যান
২. পড়া, পড়া এবং পড়া : যদি আপনার পড়ার অভ্যাস না থেকে থাকে, হোঁচট খাবেন। ক্যাগলে প্রায় প্রত্যেকটি ডাটাসেটের খুব সুন্দর বর্ণনা থাকে। গল্পের মতো। যদি আপনি সেটা না পড়ে, সামনে আগান, স্কোর দেখে পরবর্তীতে হতাশ হতে পারেন
৩. স্যাম্পল সাবমিশন বুঝা : ক্যাগলে একটি কম্পিটিশন এ জেতার থেকে যদি আপনি নিয়ম মেনে অংশগ্রহণ করে- সেটি আপনাকে অন্য সবার থেকে এগিয়ে রাখবে। কারণ অনেকেই বুঝে না কিভাবে পার্টিসিপেট করবে , আপনি সব বুঝলেন, কিন্তু কিভাবে উত্তর লিখে উত্তরপত্র সাবমিট করতে হবে , সেটি জানেন না। তাহলে ১ লক্ষ কে ০ দিয়ে গুন্ করার মতো ব্যাপারটা। প্রত্যেকটি কম্পিটিশন এর স্যাম্পল সাবমিশন কিভাবে হবে সেটি ক্যাগলে দেওয়া থাকে। সুতরাং সময় নিয়ে সেটি দেখুন এবং ফাইল নামিয়ে ভালো করে বুঝে নিন।
৪. ক্যাগল কোড দেখে না : আপনি হাতে লিখে মডেল ডেভেলপ করছেন নাকি জুলিয়াস দিয়ে মডেল ডেভেলপ করেছেন, সেটা ক্যাগলের কম্পিটিশন এ ম্যাটার করে না (কিছু এক্সক্লুসিভ কম্পিটিশন ছাড়া )। ক্যাগল দেখতে চায় আপনার উত্তরপত্র। ব্যাস ! আবার সেই উত্তরপত্র অন্য সবার তুলনায় কেমন করেছে, কোথায় আপনার অবস্থান, সেটিও আপনাকে জানিয়ে দিয়ে ১০ সেকেন্ডের ভিতরে। এখানেই মজা ! আপনি চাইলে মডেলকে আরেকটি ফাইন টিউন করে, resubmit ও করতে পারবেন। কি দারুন না ?
শেষ করছি আমার লিডারবোর্ড স্কোর দেখিয়ে !
কম্পিটিশন লিংক :
যেভাবে মডেল তৈরী করেছি তার বিস্তারিত :
Last updated