যা যা আছে

Mathematica আর Machine-Learning



Mathematic (MA) / Wolfram Language (WL) এর সাধারণ ব্যবহার, ফ্রি-তে কিভাবে হাত পাকানো যায়, সহজে পারদর্শী হয়ে ওঠার হাজার টোটকা – এ সব নিয়ে হাজার লাইন লেখা যায়, সময়-সুযোগ অনুযায়ী অন্যত্র লেখা হবে। আপাতত লক্ষ্য হলো, এই মেশিন-লার্নিং বস্তুটি MA র সাথে কিভাবে যুক্ত, কি করে, এবং কেন এ সম্পর্কে জানতে আমি MA ব্যবহার করবো, তার সপক্ষে যুক্তি। নিজের কথা না বলে StackExchange এর এক ভদ্রলোকের উক্তি টুকে দেওয়া যাক:
Here, as in most disciplines, the “best” language depends upon what you seek to accomplish. In pattern recognition and machine learning, the early stages are ones of experimentation and exploration--trying different algorithms, feature pre-processing, and such, as well as integrating different functions and visualizing preliminary results. One of the many great benefits of Mathematica is its seamless integration between different functionality, so it is easy to use statistical learning with graph-theoretic methods, and pre-processing of images, sound, financial data, etc., without the need to load libraries of special-purpose functions. I really like Mathematica's symbolics for statistical analyses, Probability, and so on. I'm not aware of any other language that comes close to its power and ease in such tasks.
MA ব্যবহার করে শুধু যে machine-learning করা যায়, তা-ই নয়; মনে রাখা দরকার, এটা যেহেতু একটা functional language, তাই machine-learning ব্যবহার করেও এতে অনেক function তৈরি করে রাখা সম্ভব, যাদের learning আগে থেকেই করে রাখা আছে, আমাদের শুধু ব্যবহার করতে হবে। মাথায় রাখা দরকার, এই function গুলো মেশিন-লার্নিং ব্যবহার করে, তার মানে তোমার-আমার কম্পিউটারে প্রথম থেকে load করা নেই। প্রথমবার চালালে আগে তার প্রয়োজনীয় resource গুলো সব Wolfram Server থেকে লোড হবে, তারপর চলবে। তার ওপর, যত MA ভার্সন বদলাবে, সময়ের সঙ্গে এগুলো বেশি ভাল কাজ করবে, তাই বিভিন্ন সময়ে এর উত্তর আলাদা আসবে। অর্থাৎ, “তোর মেশিনে ঠিক উত্তর আসছে, আমার কেন আসছে না?”-এ প্রশ্ন এ প্রসঙ্গে অর্থহীন।
  1. একটা ছবি দেখে বোঝা, যে ছবিটা কিসের, বা ছবিতে কি কি আছে। এই ধরনের সব ব্যবহারকে এক-কথায় Computer-Vision বলে। এখন, ছবিটা যদি কোন এক ধরনের জিনিসের হয়, (ধরা যাক একটা কুকুর) তবে উত্তর পাওয়া অপেক্ষাকৃত সহজ হওয়া উচিত। এর জন্যে ব্যবহার করা যায় ImageIdentify। এবার, যদি ছবিতে নানা রকমের জন্তু থাকে, তবে তাদের চারপাশে BoundingBox ব্যবহার করে তাদের আলাদা করতে হবে, তারপর তাদের চিনতে হবে। এই কাজটা একবারে করতে পারে ImageCases, ImageContents – এইসব function। এমনকি, ছবিতে বিশেষ কোন একধরনের জিনিস আছে কি না, তাও খতিয়ে দেখার জন্যে ImageContainsQ রয়েছে। এখনো অবধি এই ধরনের সব function এর লিস্ট পাওয়া যাবে এই লিঙ্কে
  2. ছাপা-অক্ষর, অর্থাৎ টেক্সট নিয়ে নানারকমের খেলাধুলো করার জন্যে, যেমন কোন ধরনের শব্দ, তাদের অর্থ কি, কোন শব্দ কতবার ব্যবহার হয়েছে, ব্যবহৃত শব্দের কোনটা কি ধরনের রাশি, এ সব বোঝার জন্যে রয়েছে TextStructure, TextCases, TextContents এর মতো function। নিচু ক্লাসে ইংরেজি পরীক্ষায় unseen passage দিয়ে প্রশ্ন করা হতো না, যার উত্তর থাকতো ওই প্যারাগ্রাফের মধ্যেই? সেরকম উত্তর মেশিন নিজে নিজেই যাতে খুঁজে বের করতে পারে, সেই function হলো FindTextualAnswer (এই দুই লিঙ্কে [ , ] আছে এ ধরনের সব)। এ তো তাও ভাল, টেক্সট পড়ে তার ভাষা কি, সেটা স্থির করে, তার অনুবাদ অবধি করে দিতে পারে MA, উদা: LanguageIdentify। ছবি থেকে লেখা পড়ে তার অর্থোদ্ধার (এমনকি বেশ খানিকটা অস্পষ্ট হলেও) করার জন্যে আছে TextRecognize
  3. ছবি বা টেক্সটের মতো, কম্পিউটারে আমরা আর যা input হিসেবে দিতে পারি, তা হলো শব্দ। মাইক্রোফোনে কথা রেকর্ড করে, সেই রেকর্ডিং থেকে শব্দ, বাক্য, মায় গোটা প্যারাগ্রাফ পর্যন্ত text এ বদলে দেওয়ার function হলো SpeechRecognize। অবশ্যই, গোটা ব্যাপারটা ইংরেজিতে হতে হবে, আর ‘উরুশ্চারণ’ বা রেকর্ডিঙের দোষে বেচারা কম্পিউটার আমাদের কথা বুঝে উঠতে না পারলে সে গুড়ে বালি। গোটা রেকর্ডিঙে কি কি ধরনের শব্দ রয়েছে, তার probability সমেত লিস্ট করার জন্যে রয়েছে AudioIdentify, সুর বা frequency বোঝার জন্যে PitchRecognize, এমন আরো গুচ্ছের function 
এ সব খুবই আনন্দজনক হলেও, সিরিয়াস বাচ্চারা প্রশ্ন করবে, “কিন্তু কাজের কাজে কি এ সব লাগবে?” উত্তর: আলবৎ! আপাতত একটাই উদাহরণ দিই, বাকি ক্রমশঃ প্রকাশ্য। প্রায় সব ধরনের রিসার্চে প্রায়শই যে সমস্যাটার সম্মুখীন আমাদের হতে হয়, তা হলো, বেশ কিছু সংখ্যা (numeric data) হাতে আছে, তা সে 1-D, 2-D, যা-ই হোক না কেন, আমাদের খুঁজে বের করতে হয়, যে ওই dataর distribution খানা কেমন দেখতে। প্রথম কাজ হলো, dataকে bin করে ফেলা, অর্থাৎ histogram বানিয়ে ফেলা, সেটিকে normalize করা, এবং তারপর দেখা, যে এটা কোন distribution এর PDF (probability density function) এর থেকে আসতে পারে। যদি কেউ বলে দেয়, যে ওটা Normal বা Gaussian distribution ই হবে, তবে নানা উপায় আছে তার mean আর standard deviation বের করার। কিন্তু যদি না বলে দেয়? MA তে আছে FindDistribution, যা শুধু খুঁজে দেয় distribution তা-ই নয়, সংখ্যা বলে দিলে, আর model selection criteria বলে দিলে, সবচেয়ে বেশি সম্ভাব্য distribution এর একখান লিস্টিও ধরিয়ে দেয়।

আরো আছে। এইসব ফ্যাশনেবল inputএর বদলে অধিকাংশ সময়েই আমাদের দরকার হয় একগাদা String বা number কে সাজানো, বা এমন কিছু বানানো, যা কোন ধরনের input দিলে তাকে কোন একটা শ্রেণীতে সাজিয়ে দেবে। যেমন, High Energy Physics এ এক ধরনের বড় কাজ হলো, কোন একটা event (পার্টিকলরা নিজেদের মধ্যে গুঁতোগুঁতি করার সময় একটা ধাক্কার সব information) signal না background সেটা আলাদা করা। অথবা, টিউমারের স্ক্যানের ছবি দিয়ে বোঝা, সেটা malignant কিনা, এমন হাজারো ব্যবহার। কিন্তু এই বিষয়গুলো তো আর কুকুর বেড়ালের ছবি নয়, যে রাশিরাশি উদাহরণ internet ঘাঁটলেই পেয়ে যাবো - এর জন্যে আমাদের নিজেদের special curated dataset ব্যবহার করার প্রয়োজন। তা, এইরকম ডেটাসেট যদি বানিয়েও ফেলি, তার থেকে মেশিনকে train করাবো কি করে, যাতে সে আমার বিশেষ দরকারটা মেটাতে পারে? এর জন্যে এর পরে আমরা neural network বলে একধরনের জিনিস নিয়ে বহু ত্যানা পেঁচাবো, কিন্তু ঝট করে কিছু করে ফেলার জন্যে automated function MA-তেই রয়েছে, তার নাম Classify

অন্য আরেক ধরনের সমস্যাও ঘনঘন আসে আমাদের সামনে। ধরা যাক, গত ১০ বছর ধরে ভারতের বিভিন্ন জেলায় যত অপরাধ সঙ্ঘটিত হয়েছে, তার ডেটা আছে আমাদের হাতে। সঙ্গে আছে সেই সব জেলার সাক্ষরতা, জনঘনত্ব, গড় বয়স, নারী-পুরুষের অনুপাত –মানে গোটা আদম-সুমারির খবর। এবার, এক বছর পরে কোন জেলার এই সব জিনিসের সংখ্যা বলে দিলে মেশিন কি মোটামুটি ভবিষ্যদবাণী করতে পারবে, যে তার মাসিক অপরাধের হার কত হবে? বা আরো সোজা একটা উদাহরণ, কোন কোম্পানির স্টক-মার্কেটের ওঠা-পড়ার ডেটা থেকে ভবিষ্যদবাণী? যেমনটা করার জন্যে নাকি মোটা টাকা পান অনেক বিশেষজ্ঞ? আবারো, ভাল করে এসব কাজ করতে চাইলে, সময় লাগবে, কিন্তু automated function? আছে, তার নাম Predict
যা বলা হলো, তার থেকে না-বলা function এর সংখ্যা অনেক বেশি। কিন্তু মেশিন-লার্নিং মানে তো আর বসে বসে মুখস্থ করা নয়, যে কোন function কি করতে পারে, বদলে আমরা নিজেরাই সেই ধরনের function তৈরি করতে চাইবো। হুম্‌, সে ব্যবস্থার জন্যেই তো এই ব্লগ… কিন্তু এও মনে রাখা দরকার, ছোট্ট কোন কাজের জন্যে গুচ্ছের সময় নষ্ট না করে একটু খুঁজেই যদি বেশ ভালো কোন উত্তর পাওয়া যায়, তবে আর মশা মারতে কামান দাগা কেন?
আজ এ পর্যন্তই, পরের ব্লগ-পোস্টে চলে যাওয়ার আগে একটু উপরে দেওয়া লিঙ্কগুলো ঘেঁটে ফেললে ভালো। কিছু নাম হালকা মনে থাকলে পরে চট করে খুঁজে পাওয়া যাবে। শুধুই গল্পকথা না শুনে, যাতে হাতেকলমে কিছু করে দেখা যায়, তাই সঙ্গে একখান MA notebook দেওয়া থাকলো (নিচের button)। Download করে নিজে চালিয়ে দেখো, শুধুই কিছু উদাহরণ রয়েছে।



No comments