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


➤ মেশিন লার্নিং সিস্টেম

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

সিস্টেম ডায়াগ্রামটি অনুসারে আমরা সিস্টেমের ফিচারগুলো এভাবে সাজাতে পারিঃ

> রেজিস্ট্রেশন পোর্টালঃ একটি রেজিস্ট্রেশন পোর্টাল থাকবে যেখানে নতুন ইউজার সিস্টেমে যোগ হতে পারবে।

> ডেটা ভ্যালিডেটর মডেলঃ এটি একটি সুপারভাইজড মেশিন লার্নিং (Supervised Machine Learning) মডেল। এটি মূলত ক্লাসিফায়ার মডেল যা রেজিস্ট্রেশনের সময় ইউজার প্রদত্ত ডেটাকে ভ্যালিডেট করার কাজে ব্যবহার করা হবে। লেবেলকৃত ক্লিন ডেটাসেট ব্যবহার করে এরকম একটি মডেল প্রস্তুত করতে হবে। মডেলটি ইউজারের তথ্য ভ্যালিডেট করার পরেই ইউজার সিস্টেমে অনুমোদন পাবে।

> লগইন পোর্টালঃ অনুমোদিত ইউজারকে সিস্টেমে লগইন করতে হবে। ডেটাবেজ লুকআপের মাধ্যমে ইউজারকে যাচাই করে তাকে একটি প্রাথমিক নিউজ পোর্টালে পাঠানো হবে।

> নিউজ পোর্টালঃ একজন নতুন ইউজারের প্রাথমিক নিউজ পোর্টালে অনিয়মিতভাবে বিভিন্ন ধরনের নিউজ ও আর্টিকেল প্রদর্শিত হবে কেননা তার রুচি বা পছন্দ সম্পর্কে সিস্টেমের কোন ধারণা নেই। এখন ইউজার তার ইচ্ছামত পোর্টালটি ব্যবহার করতে পারবে। যেমন, সে চাইলে শুধুমাত্র ক্লিকের মাধ্যমে কোনও নির্দিষ্ট ধরনের নিউজকে হাইড করে দিতে পারে যাতে ওই ধরনের নিউজ তাকে দেখতে না হয়, আবার তার পছন্দের কোন নিউজ বা নিউজ ক্যাটাগরিকে প্রাধান্য দিতে পারে যাতে ওই ধরনের নিউজ বেশি দেখানো হোক। শুধু তাই নয়, সে চাইলে তার পছন্দের নিউজে লাইক বা সাপোর্টের রিঅ্যাকশন দিতে পারে, আবার অপছন্দের নিউজে ডিসলাইক বা ঘৃণার রিঅ্যাকশন দিতে পারে। এমনকি সে চাইলে মন্তব্যের মাধ্যমে তার প্রতিক্রিয়া ব্যক্ত করতে পারে। এছাড়া ইউজার যেকোনো সময় সিস্টেম থেকে সাইন আউট করতে পারে।

> রিকমেন্ডেশন মডেলঃ এটি একটি আনসুপারভাইজড মেশিন লার্নিং (Unsupervised Machine Learning) মডেল, যা একজন লগইনকৃত ইউজারের রুচি বা পছন্দ অনুযায়ী নিউজ/আর্টিকেল প্রদর্শনের কাজে ব্যবহার করা হবে। এধরনের মডেলের জন্য কোন লেবেলকৃত ক্লিন ডেটাসেট প্রয়োজন হয় না। ইউজারের পছন্দ-অপছন্দের উপর ক্লাস্টারিং অ্যানালাইসিস এলগরিদম ব্যবহার করে এরকম একটি মডেল প্রস্তুত করতে হবে। ইউজার যত বেশি সিস্টেমের সাথে ইন্টার‍্যাক্ট করবে, ততই নিউজ পোর্টালটি তার পছন্দের আইটেমের খবরাখবর দিয়ে সমৃদ্ধ হবে - যার পিছনে কাজ করবে এই রিকমেন্ডেশন মডেল।

> ডেটা অ্যানালাইটিক্স মডেলঃ এটিও একটি সুপারভাইজড মডেল যা বিভিন্ন ধরনের নিউজ/আর্টিকেলের সাথে প্রতিটি ইউজারের আন্তঃক্রিয়া(লাইক, ডিসলাইক, কমেন্ট ইত্যাদি) পর্যবেক্ষণ করে সংশ্লিষ্ট নিউজ/আর্টিকেলের ব্যাপারে ইউজারের প্রতিক্রিয়া নির্ধারণ করবে। এভাবে সকল ইউজারের ডেটার উপর ভিত্তি করে পারিসংখ্যানিক তথ্য প্রদান করবে যা জনমত যাচাইয়ে ভূমিকা রাখবে।

এটিই হবে আমাদের মেশিন লার্নিং সিস্টেম (SUT - System Under Test) যেটার টেস্টিং ও গুণগত মান নির্ধারণ নিয়ে আলোচনা করবো। সিস্টেমটিতে ৩ টি মেশিন লার্নিংভিত্তিক সাব-সিস্টেম রয়েছে যেগুলো মূলত একেকটি মেশিন লার্নিং মডেল দিয়ে বাস্তবায়ন করা হবে। অবশিষ্ট রেজিস্ট্রেশন, লগইন ও নিউজ পোর্টাল প্রচলিত ডেভেলপমেন্ট পদ্ধতিতে বাস্তবায়ন করা হবে।


➤ সিস্টেম ডিজাইন ও ডেভেলপমেন্ট

সিস্টেম ডিজাইন ও ডেভেলপমেন্টের শুরুতে ইউজকেস ডায়াগ্রাম অনুসারে উপযুক্ত ইউজার ইন্টারফেস ডিজাইন করা হয়। এরপর সিস্টেমের প্রতিটি মডিউলের লো-লেভেল ডিজাইন সম্পন্ন করা হয়, যেমন - ডেভেলপমেন্ট ল্যাঙ্গুয়েজ ও ফ্রেমওয়ার্ক নির্বাচন, ডেটাবেজ ডিজাইন, এপিআই(API) ডিজাইন ইত্যাদি। এর পাশাপাশি সব কিছুর ডিজাইন ডকুমেন্টেশন রাখা হয়। এই ডিজাইনের উপর ভিত্তি করে ডেভেলপমেন্টের কাজ চলতে থাকে।

অন্যদিকে মেশিন লার্নিংভিত্তিক সাব-সিস্টেমগুলোর জন্য মেশিন লার্নিং ডেভেলপারদের কাজ শুরু করতে হয়। মেশিন লার্নিং ডেভেলপমেন্ট একটি সময়সাপেক্ষ কাজ। মেশিন লার্নিং ডেভেলপমেন্ট বলতে মূলত মডেল ট্রেইনিং, মডেল ভ্যালিডেশন এবং মডেল ইন্টিগ্রেশনকেই  বুঝায়। কাঙ্ক্ষিত মডেলগুলোর ইউজকেস অনুযায়ী মডেল ট্রেইনিংয়ের জন্য প্রতিটি মডেলের আর্কিটেকচার নিয়ে আলাদাভাবে গবেষণা ও অনুসন্ধান করা এবং এর পাশাপাশি ডেটাসেট সংগ্রহ ও প্রস্তুতির প্রয়োজন পড়ে। এরপর মডেলটিকে ডিজাইন করা হয় এবং তারপরেই আসে মেশিন লার্নিং এলগরিদম প্রয়োগ করে মডেলটিকে ট্রেইন করার পালা। কোনও কোনও ক্ষেত্রে ব্যবহার উপযোগী ট্রেইনকৃত মডেল পাওয়া যেতে পারে। সেক্ষেত্রে সংগৃহীত ডেটাসেট দিয়ে মডেলটিকে পুনরায় ট্রেইন করানো যেতে পারে - যা ট্রান্সফার লার্নিং(Transfer Learning) নামে পরিচিত। ট্রেইনকৃত মডেলটি এরপর ভ্যালিডেশন ডেটাসেটের উপর প্রয়োগ করে ভ্যালিডেশন একুরেসি পরিমাপ করা হয়। ডেভেলপাররা ট্রেইনিং ও ভ্যালিডেশন একুরেসির জন্য একটি সর্বনিম্ন লিমিট ব্যবহার করে থাকে। মডেলটির একুরেসি সন্তোষজনক না হলে মডেলটি নিয়ে পুনঃনিরীক্ষণ চালানো হয়। এটি ইটারেশন ফেজ (Iteration Phase) নামে পরিচিত। ইটারেশন ফেজটি ডেভেলপারদের জন্য অনেক গুরুত্বপূর্ণ ও চ্যালেঞ্জিং। এসময় ট্রেইনিং প্যারামিটার পরিবর্তন করে মডেলটি পুনরায় ট্রেইন করা লাগতে পারে, আবার কখনও নতুন ডেটাসেটের উপর ট্রেইনিং ও ভ্যালিডেশন করার প্রয়োজন হতে পারে। এর বাইরেও কখনও মডেলের নতুন আর্কিটেকচার নিয়ে কাজ শুরু করা লাগতে পারে। মডেলের একুরেসি একটি গ্রহণযোগ্য পর্যায়ে পৌঁছালে মডেলটিকে অপটিমাইজ করা হয়। ডিপ আর্কিটেকচার ব্যবহার করে প্রস্তুতকৃত মডেলের ক্ষেত্রে স্ট্যাবিলিটি অ্যানালাইসিসের কাজও করতে হয়।

তারপর ট্রেইনকৃত অপটিমাইজড মডেলগুলো সিস্টেমে সংযোজন করা হয়। এছাড়া ডেভেলপাররা মডেল ট্রেইনিং, ভ্যালিডেশন ও কনফিগারেশন স্ক্রিপ্টের যথাযথ ইউনিট টেস্ট সম্পন্ন করে। অতঃপর সিস্টেমটি টেস্টিংয়ের জন্য উন্মুক্ত করা হয়।


➤ সিস্টেম টেস্টিং ও গুণগত মান নিশ্চিতকরণ

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

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

মেশিন লার্নিং ভিত্তিক সিস্টেমের টেস্টিং বলতে গতানুগতিক সফটওয়্যার সিস্টেমের টেস্টিংয়ের পাশাপাশি বিশেষভাবে মেশিন লার্নিং মডেলের টেস্টিং ও যাচাইকরণকে বুঝায়, যা আমাদের আলোচনার মূল বিষয়। সামগ্রিকভাবে মেশিন লার্নিং সিস্টেমের গুণগত মান নিশ্চিতকরণের জন্য ভেরিফিকেশন ও ভ্যালিডেশন ২টি ধাপে টেস্টিং সম্পন্ন করতে হয়।

ভেরিফিকেশনঃ
ডেভেলপমেন্টের মত টেস্টিংয়ের জন্য ডেটা সায়েন্স বা মেশিন লার্নিংয়ে পারদর্শী হতে হবে এমন না, তবে মেশিন লার্নিং ডেভেলপমেন্ট প্রসেস সম্পর্কে ধারণা থাকা এবং মডেল কিভাবে কাজ করে সেটা জানা থাকা আবশ্যিক। এর বাইরে মডেল সম্পর্কিত গবেষণায় যুক্ত থাকলে সেটা বড় প্লাসপয়েন্ট।

টেস্টিংয়ের ভেরিফিকেশন ধাপটি অনেকটা 'ডেভেলপমেন্ট চলে ডালে ডালে, টেস্টিং চলবে পাতায় পাতায়' টাইপের। এ ধাপে মেশিন লার্নিং সাব-সিস্টেমের ডিজাইন ডায়াগ্রাম সঠিক উপায়ে যাচাই করতে হয়। ডেভেলপমেন্ট টীমের সমান্তরালে টেস্টিং টীমকে কাঙ্ক্ষিত মডেলের স্টেট অফ দি আর্ট (state-of-the-art) প্রযুক্তি ও সম্ভাবনা এবং এই প্রযুক্তির চ্যালেঞ্জ নিয়ে অনুসন্ধান ও গবেষণা চালাতে হয়। পাশাপাশি যথাযথ ডেভেলপমেন্ট প্র্যাকটিস অনুসরণ করা হচ্ছে কিনা সেটা নিশ্চিত করা প্রয়োজন।

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

> প্রস্তুতকৃত মডেলের সর্বশেষ ভার্সনের তথ্যাদি, যেমনঃ মডেলের সাইজ, ফাইল ফরম্যাট, ইনপুট ও আউটপুট ডেটা ফরম্যাট ইত্যাদি
> কখন কোন মডেল আর্কিটেকচার নিয়ে কাজ করা হয়েছে(বিস্তারিত রেফারেন্সসহ), কোন আর্কিটেকচারের একুরেসি কেমন ইত্যাদি
> প্রতিটি ইটারেশনে মডেল ট্রেইনিংয়ের যাবতীয় তথ্য, যেমনঃ ট্রেইনিং ডেটাসেটের তথ্য, ট্রেইনিং একুরেসি ও অন্যান্য পরিমাপক (ট্রেইনিং প্যারামিটারের তথ্য নিষ্প্রয়োজন)
> প্রতিটি ইটারেশনে মডেল ভ্যালিডেশনের যাবতীয় তথ্য, যেমনঃ ভ্যালিডেশন ডেটাসেটের তথ্য, ভ্যালিডেশন একুরেসি ও অন্যান্য পরিমাপক, মডেল ভ্যালিডেশনে কোন প্রক্রিয়া ব্যবহার করা হয়েছে ইত্যাদি
> ট্রেইনকৃত মডেল ব্যবহার করা হলে সেই মডেলের বিস্তারিত রেফারেন্স
> ট্রান্সফার লার্নিং করা হলে প্রতিটি ইটারেশনে ট্রান্সফার লার্নিংয়ের যাবতীয় তথ্য, যেমনঃ ব্যবহৃত মডেল ও ডেটাসেটের তথ্য

এগুলো এক অর্থে ডেভেলপমেন্ট প্র্যাকটিসের জবাবদিহিতা নিশ্চিত করে। এসব তথ্যাদি সংগ্রহ সাপেক্ষে মেশিন লার্নিং সাব-সিস্টেমের ভ্যালিডেশন টেস্টিং সম্পাদন করা হয়।

মডেল আর্কিটেকচার যাচাইকরণঃ
যে আর্কিটেকচার অনুযায়ী মডেলটি প্রস্তুত করা হয়েছে তা যাচাই করা উচিত। এজন্য আর্কিটেকচারের বিস্তারিত রেফারেন্স চেক করা প্রয়োজন। একই ফ্যামিলির অন্যান্য পরিচিত আর্কিটেকচারের সাথে ব্যবহৃত আর্কিটেকচারের তুলনামূলক যাচাই অনেকক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা রাখে।

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

১) সামগ্রিক ডেটাসেটের বাহ্যিক গুণাবলি যাচাইকরণঃ
ডেটাসেটের বাহ্যিক গুণাবলি যাচাইকরণের জন্য ব্যবহৃত ডেটাসেটকে বিশ্লেষণ করা প্রয়োজন। অবিচ্ছিন্ন (continuous) ডেটার ক্ষেত্রে সম্ভাব্য রেঞ্জ ও পারিসংখ্যানিক বণ্টন(Statistical Distribution) আর বিচ্ছিন্ন (discrete) ডেটার ক্ষেত্রে সম্ভাব্য ডেটাভ্যালুর সেট নিরূপণ করে সেই মোতাবেক ডেটাসেট ভ্যালিডেশন স্ক্রিপ্ট প্রস্তুত করা যেতে পারে। এই স্ক্রিপ্টের কাজ হবেঃ

> ডেটাভ্যালুর টাইপ চেকিং করা,
> অবিচ্ছিন্ন ডেটাভ্যালুর রেঞ্জ ও পারিসংখ্যানিক গুণাবলি যাচাই করা,
> ডেটাসেটে নির্দিষ্ট সীমার বাইরে অগ্রহণযোগ্য ডেটার (anomaly/outlier) উপস্থিতি পরীক্ষা করা,
> বিচ্ছিন্ন ডেটাভ্যালু একটি নির্দিষ্ট সেটের মধ্যে আছে কিনা দেখা,
> যেসব ডেটাভ্যালু ইউনিক হওয়া প্রয়োজন, সেখানে পুনরাবৃত্তি আছে কিনা অর্থাৎ ইউনিক কন্সট্রেইন্ট (Unique Constraint) মেনে চলা হয়েছে কিনা যাচাই করা,
> যেসব ডেটাভ্যালু আবশ্যিক সেখানে কোন ভ্যালু মিসিং আছে কিনা যাচাই করা,
> ডেটাসেটের স্বাভাবিকতা যাচাই করা, যেমনঃ ইংরেজি টেক্সটের ডেটা স্যাম্পলে 'The' শব্দের ফ্রিকুয়েন্সি বেশি হবে, আর অ্যালফাবেট হিসাবে 'A', 'E', 'T' এগুলোর ফ্রিকুয়েন্সি বেশি থাকবে
> ব্যবহৃত ডেটাসেট ক্লিন কিনা সেটা নিশ্চিত করতে হবে অর্থাৎ কোন ডেটাভ্যালু মিসিং অথবা ব্যবহারের অনুপযোগী বিকৃত ডেটা (Bad Data) আছে কিনা

২) ট্রেইনিং ও ভ্যালিডেশন ডেটাসেটের পারিসংখ্যানিক গুণাবলি যাচাইকরণঃ
সাধারণভাবে ট্রেইনিং ও ভ্যালিডেশনের জন্য সামগ্রিক ডেটাসেটকে ৮০ঃ২০ বা ৭৫ঃ২৫ অনুপাতে ভাগ করা হয়ে থাকে। অনুপাত যাই হোক না কেন, ট্রেইনিং ও ভ্যালিডেশন উভয় ডেটাসেটের পারিসংখ্যানিক গুণাবলি সমান হওয়া প্রয়োজন যেটা নিশ্চিত করে তারা একই ডেটাসেটের প্রতিনিধিত্ব করে। ট্রেইনিং ও ভ্যালিডেশন ডেটাসেটের পারিসংখ্যানিক গুণাবলি যদি সমতুল না হয়, তাহলে প্রস্তুতকৃত মডেলটি র‍্যান্ডম ইউজার ডেটার উপর ভাল কাজ করবে বলে আশা করা যায় না। এজন্য K-fold ক্রস ভ্যালিডেশন পদ্ধতি অনেক নিরাপদ যা একই সঙ্গে ওভারফিটিং-আন্ডারফিটিং সমস্যার সমাধান করে।


মডেলের পারফরমেন্স ভ্যালিডেশনঃ

প্রস্তুতকৃত মডেলের কার্যকারিতা যাচাইকরণ ভ্যালিডেশন টেস্টিংয়ের সবথেকে গুরুত্বপূর্ণ কাজ। এর জন্য মডেলটিকে টেস্ট ডেটার উপর ব্যবহার করে মডেলের আউটপুট যাচাই করা হয়। মডেলের পারফরমেন্স যাচাইয়ের জন্য টেস্ট ডেটাসেটের প্রয়োজন পড়ে। টেস্ট ডেটাসেটকে হতে হবে নিরপেক্ষ এবং ট্রেইনিং ও ভ্যালিডেশনে ব্যবহৃত ডেটাসেটের সাথে পারিসংখ্যানিক সম্পর্কবিহীন(Statistically Independent)। শুধু তাই নয়, টেস্ট ডেটাসেট হবে ইউজার ডোমেন ওরিয়েন্টেড যা অবশ্যই বাস্তব জীবনের ইউজার ডেটাকে প্রতিনিধিত্ব করবে। অনেকক্ষেত্রে মডেল ট্রেইনিং ও ভ্যালিডেশনের জন্য ডেটাসেট সংগ্রহ করাই কষ্টকর হয়ে পড়ে, সেক্ষেত্রে টেস্ট ডেটাসেট পাওয়া দুষ্কর এবং এসব ক্ষেত্রে টেস্টিং টীম নিজ দায়িত্বে টেস্ট ডেটাসেট প্রস্তুত করতে পারে, যা একটি চ্যালেঞ্জিং কাজ। চাইলে সামগ্রিক ডেটাসেটকে ৬০%-২০%-২০% অনুপাতে ভাগ করে ট্রেইনিং, ভ্যালিডেশন ও টেস্ট ডেটাসেট পাওয়া যেতে পারে।

মেশিন লার্নিং মডেল অনেকটা ফাংশনের মত কাজ করে। একটি ফাংশনের যেমন ইউনিট টেস্ট করা হয়, তেমনি টেস্ট ডেটাসেট ব্যবহার করে প্রতিটি মেশিন লার্নিং মডেলের একটি টেস্টোপযোগী ভার্সনের (Testable Version) কার্যকারিতা পরিমাপ করা হয়। উদাহরণস্বরূপ - ডেটা ভ্যালিডেটর মডেলের ক্ষেত্রে আমরা একটি লেবেলকৃত টেস্ট ডেটাসেট ব্যবহার করবো, যেহেতু মডেলটি সুপারভাইজড। একটি ফাংশন কলের মত প্রতিটি টেস্ট ইনপুটের জন্য মডেলের আউটপুট নির্ণয় করে এভাবে সকল টেস্ট ইনপুটের জন্য মডেলের সঠিকতার শতকরা হার পরিমাপ করবো। চাইলে অন্যান্য পরিমাপক ব্যবহার করা যায়, যেমনঃ প্রিসিশন, সেন্সিটিভিটি, F1 স্কোর ইত্যাদি। প্রাপ্ত পারফরমেন্সের মান যদি গ্রহণযোগ্য না হয়, টেস্টিং টীমের দায়িত্ব হবে উপযুক্ত ফরম্যাটে ডেভেলপমেন্ট টীমের কাছে মডেলটির পারফরমেন্সের রিপোর্ট প্রেরণ করা। যেমনঃ

টেস্টিং টীমের কাছ থেকে মডেলের পারফরমেন্সের রিপোর্ট পাওয়া মাত্র ডেভেলপমেন্ট টীম রিপোর্টে উল্লেখিত মডেলের পারফরমেন্সের পরিমাপকসমূহ এবং ব্যবহৃত টেস্ট ডেটাসেটকে যাচাই করে। এরপর ইটারেশন ফেজে সংশ্লিষ্ট মডেলটি ডিবাগ (debug) করে পারফরমেন্সের উন্নতি সাধন করা হয় এবং পুনরায় টেস্টিংয়ের জন্য পাঠানো হয়।


মেটামরফিক টেস্টিংঃ  

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

উদাহরণস্বরূপ - আমাদের ডেটা অ্যানালাইটিক্স মডেলটির কথা চিন্তা করি। এই মডেলটি একটি নিউজ আর্টিকেলের সাথে সকল ইউজারের ইন্টার‍্যাকশনের ডেটা বিশ্লেষণ করে নিউজটির পাবলিক রিভিউ রেটিং প্রদান করে। যেমন, কতজন ইউজার নিউজটিকে স্কিপ/হাইড করছে, রিঅ্যাকশন (আপ/ডাউন ভোটিং) দিচ্ছে, কমেন্ট করছে, নিউজটির বিরুদ্ধে রিপোর্ট করছে  এসব ডেটা আমাদের কাছে  আছে।

ধরে নেই, একটি নির্দিষ্ট আর্টিকেলের জন্য আমাদের কাছে সর্বমোট ১০০০ জন ইউজারের ডেটা আছে। এবারে আমরা মডেলটির মেটামরফিক টেস্টিংয়ের জন্য কিছু টেস্টকেস ডিজাইন করতে পারিঃ

টেস্টকেস ১ঃ ১০০০ জন ইউজারের সবাই আপ ভোট দিয়েছে এবং পজেটিভ কমেন্ট করেছে। ধরা যাক, প্রাপ্ত মডেলের আউটপুট রেটিং = ১.০। এই আউটপুটকে আমরা যাচাই করতে পারছি না। কিন্তু এই আউটপুটকে স্ট্যান্ডার্ড ধরে আমরা মেটামরফিক টেস্টিং করবো।

টেস্টকেস ২ঃ ৮০০ জন আপ ভোট দিয়েছে, ৩০ জন নেগেটিভ কমেন্ট করেছে এবং বাকিরা স্কিপ করেছে। প্রথম টেস্টে প্রাপ্ত স্ট্যান্ডার্ড অনুযায়ী এই টেস্টে মডেলের আউটপুট রেটিং অবশ্যই ১ম টেস্টে প্রাপ্ত রেটিং ১.০ থেকে কম হওয়া উচিত।

টেস্টকেস ৩ঃ ৯০০ জন আপ ভোট দিয়েছে, ১০ জন নেগেটিভ কমেন্ট করেছে এবং বাকিরা স্কিপ করেছে। এই টেস্টে প্রাপ্ত মডেলের আউটপুট রেটিং অবশ্যই ২য় টেস্টে প্রাপ্ত রেটিং থেকে বেশি হওয়া উচিত।

টেস্টকেস ৪ঃ ৯০০ জন আপ ভোট দিয়েছে, ৩০ জন নেগেটিভ কমেন্ট করেছে, ৫ জন রিপোর্ট করেছে এবং বাকিরা স্কিপ করেছে। এই টেস্টে প্রাপ্ত মডেলের আউটপুট রেটিং অবশ্যই ৩য় টেস্টে প্রাপ্ত রেটিং থেকে কম হওয়া উচিত।

টেস্টকেস ৫ঃ ৯০০ জন আপ ভোট দিয়েছে, ২০ জন নেগেটিভ কমেন্ট করেছে, ১ জন রিপোর্ট করেছে এবং বাকিরা স্কিপ করেছে। এই টেস্টে প্রাপ্ত মডেলের আউটপুট রেটিং অবশ্যই ৪র্থ টেস্টে প্রাপ্ত রেটিং থেকে বেশি কিন্তু ৩য় টেস্টে প্রাপ্ত রেটিং থেকে কম হওয়া উচিত।

এভাবে আরও অনেক টেস্টকেস তৈরি করা যেতে পারে যা টেস্ট ডেটাসেটের প্রয়োজন ছাড়াই অনেকাংশে মডেলের নির্ভুলতা পরীক্ষা করে।


মডেল ইন্টিগ্রেশন টেস্টঃ

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

ইন্টিগ্রেশন টেস্টের জন্য প্রতিটি মডেলের পারফরমেন্স ভ্যালিডেশন ও অন্যান্য সাব-সিস্টেমগুলোর ইউনিট টেস্ট হওয়া প্রয়োজন। এরপর সকল সাব-সিস্টেমসহ সমগ্র সিস্টেমটির ফাংশনাল টেস্ট করা যেতে পারে, যা ফুল সিস্টেম ইন্টিগ্রেশন টেস্টিং (Full System Integration Testing) নামে পরিচিত। তবে এর চাইতে ভাল হয় রেজিস্ট্রেশন পোর্টাল থেকে শুরু করে ধাপে ধাপে সাব-সিস্টেমগুলো যোগ করে টেস্ট করা। এভাবে টপ মডিউল থেকে শুরু করে সর্বশেষ মডিউল পর্যন্ত ক্রমান্বয়ে ইন্টিগ্রেশন টেস্টের পদ্ধতিকে টপ-ডাউন ইনক্রিমেন্টাল ইন্টিগ্রেশন টেস্টিং (Top-down Incremental Integration Testing) বলা হয়। এ পদ্ধতিতে আমাদের সিস্টেমের ইন্টিগ্রেশন টেস্টের ক্রমগুলো হবে এরকমঃ

১) রেজিস্ট্রেশন + ডেটা ভ্যালিডেটর
২) রেজিস্ট্রেশন + ডেটা ভ্যালিডেটর + লগইন
৩) রেজিস্ট্রেশন + ডেটা ভ্যালিডেটর + লগইন + নিউজ পোর্টাল
৪) রেজিস্ট্রেশন + ডেটা ভ্যালিডেটর + লগইন + নিউজ পোর্টাল + রিকমেন্ডেশন মডেল
৫) রেজিস্ট্রেশন + ডেটা ভ্যালিডেটর + লগইন + নিউজ পোর্টাল + রিকমেন্ডেশন মডেল + ডেটা অ্যানালাইটিক্স মডেল


মডেলের রিসোর্স ব্যবহার অ্যানালাইসিসঃ  

প্রস্তুতকৃত মেশিন লার্নিং মডেল কি পরিমাণ রিসোর্স ব্যবহার করে তার বিশ্লেষণ জরুরি। মেশিন লার্নিং মডেলের ব্যবহৃত কম্পিউটেশনাল রিসোর্সের মধ্যে মডেলের ফিজিক্যাল সাইজ, প্রেডিকশন টাইম, CPU ব্যবহার এগুলো গুরুত্বপূর্ণ।

মডেলের সাইজ নির্ভর করে মডেলটির প্রস্তুতির উপর - কোন আর্কিটেকচারে মডেলটি বানানো হয়েছে, মডেলটি কি টাইপের ডেটা (টেক্সট, ইমেজ বা ভিডিও) প্রসেস করে ইত্যাদি। স্বাভাবিকভাবে ডিপ আর্কিটেকচারে প্রস্তুতকৃত মডেলের সাইজ শ্যালো আর্কিটেকচারে প্রস্তুতকৃত মডেলের সাইজ থেকে বেশি হয়। তবে মেশিন লার্নিং মডেলের সাইজের ক্ষেত্রে ১ MB - ১ GB লিমিটটি মেনে চলা উচিত। মোবাইল ডিভাইসের ক্ষেত্রে মডেলের সাইজ যতটা সম্ভব মিনিমাম রাখা শ্রেয়।

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


মডেলের রিগ্রেশন টেস্টিংঃ

নতুন আর্কিটেকচার হোক বা নতুন ডেটাসেটের উপর পুনঃট্রেইনিং হোক, পারফরমেন্স অপটিমাইজেশন হোক বা কোন বাগ ফিক্স - ডেভেলপমেন্ট টীম প্রতিনিয়ত মডেল আপডেটের কাজ করে থাকে। তাই প্রতিটি আপডেটের সাথে সাথে টেস্টিং টীমকেও আপডেটেড থাকতে হবে। লাস্ট ভার্সনের পর থেকে মডেলের প্রতিটি আপডেট উপযুক্ত ডকুমেন্টেশন সহকারে টেস্টিং টীমকে অবহিত করা হয়। আপডেট ডকুমেন্টেশনের উপর ভিত্তি করে টেস্টিং টীম সিদ্ধান্ত নেয় কিভাবে মডেলটি পুনঃটেস্টিং করা হবে। যেমনঃ

১) যদি মডেলটি নতুন আর্কিটেকচার বা নতুন ডেটাসেটের উপর ট্রেইন করানো হয়ে থাকে, তাহলে নতুন করে মডেলটির পারফরমেন্স যাচাই করতে হবে। এক্ষেত্রে পুরনো ভার্সনের মডেলের পারফরমেন্স পরিমাপককে একটি বেসলাইন(Baseline) ধরে নতুন মডেলের পারফরমেন্স পরিমাপ করা হয়। এটা প্রত্যাশিত যে, আপডেটেড মডেলটির পারফরমেন্স বেসলাইন পারফরমেন্স থেকে কম হবে না। অন্যথায়, মডেলটি পুনরায় ইটারেশনে পাঠানো হয়।

২) যদি মডেলটির অপটিমাইজেশনের কাজ হয়ে থাকে সেক্ষেত্রে মডেলের রিসোর্স ব্যবহার অ্যানালাইসিসের কাজটি পুনরায় করতে হয়।

৩) মডেলটির যেকোনো বাগ ফিক্স করা হলে মডেলটির আশেপাশের সাব-সিস্টেমগুলো ঠিকমত কাজ করে কিনা যাচাই করা প্রয়োজন। এটি নেইবারহুড ইন্টিগ্রেশন টেস্ট (Neighborhood Integration Test) নামে পরিচিত।

৪) মডেলটি যদি ইতোমধ্যে প্রোডাকশনে রিলিজ করা হয়ে থাকে, সেক্ষেত্রে আপডেটেড মডেলের পারফরমেন্স টেস্টের জন্য টেস্ট ডেটাসেটকে অবশ্যই আপডেট করতে হবে। এজন্য প্রোডাকশন ডেটা দিয়ে টেস্ট ডেটাসেট আপডেট করা যেতে পারে।


ডাইনামিক মেশিন লার্নিং মডেল টেস্টিংঃ

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


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