যা যা আছে

একটু গল্পগাছা - 2

আমরা আগের পোস্টে অল্প বুঝেছি, যে মেশিন-লার্নিং কি করে। আজ প্রথমে আরেকটু তলিয়ে ব্যাপারটা বোঝা যাক। আমরা আগেই দেখেছি, Data আর label বা result (উত্তর) দিয়ে দেওয়া হ’লে শিক্ষিত (learned) মেশিন সেই rule গুলো খুঁজে বের করতে পারে, যা data পেলে সঠিক label দিতে পারে। তাহ’লে একটা ঠিকঠাক মেশিন-লার্নিং করাতে আমাদের কি কি দরকার?



  • Input Data: বোঝা সহজ – ছবি, শব্দ, ধ্বনি, সংখ্যা – input data যা ইচ্ছে হতে পারে। (আমাদের এই data কে সামান্য পরিবর্তন করে tensor বানিয়ে নিতে হবে, কিন্তু সে নিয়ে আলোচনা পরে।)
  • Expected Output: লক্ষ্য যদি হয় ছবি দেখে বোঝা, যে ছবিটা কিসের, তবে ছবিটাকে সঠিক label দিতে হবে, যেমন কুকুরের ছবির label হবে ‘কুকুর’।
  • Measurement of Performance: মেশিনের কর্মক্ষমতা, অর্থাৎ মেশিন ঠিক শিখেছে কিনা, অর্থাৎ output যা হওয়া উচিত ছিলো, আর মেশিন যা predict করছে, তার পার্থক্য কতটা। এই পার্থক্যের একটা মাপ যদি আমরা বের করতে পারি, তবে সেটা ব্যবহার করে মেশিন তার algorithm সেইমতো বদলে ফেলতে পারে, যাতে মোট পার্থক্যটা কমে আসে।

যে কোন মেশিন-লার্নিং algorithm এর এই কর্মক্ষমতা নির্ভর করে input এর representation এর উপরে। representation কি? ভাবা যেতে পারে, এ হলো data কে নানারকম ভাবে দেখার রাস্তা। কম্পিউটারে রঙিন ছবিকে দু’রকম ভাবে দেখা যেতে পারে। একটা হলো RGB format (Red-Green-Blue; যে কোন রঙকে এই তিন রঙের মিশ্রণ হিসেবে দেখা), অন্যটা হলো HSV format (hue-saturation-value; analog যুগে monochrome ছবির ওপর রঙের পরিমাণ মাপতে এই format এর উদ্ভব)। যে কোন রঙিন ছবিকে যদিও এই দুই formatএই প্রকাশ করা সম্ভব, কিন্তু বিভিন্ন প্রশ্নের উত্তরে এদের কোন একজন বেশি ভাল perform করে। “ছবির সমস্ত red pixel সরিয়ে দাও” নির্দেশের উত্তরে যেমন নির্ঘাৎ RGB বেশি ভাল কাজ করবে, তেমনি, “ছবির saturation কমিয়ে দাও” নির্দেশে HSV এককথায় জয়ী। 

HSV format (Wikipedia)
আমাদের লক্ষ্য যদি input data থেকে কোন মেশিনকে সহজে বিশেষ কোন একধরনের কাজ শেখানো হয়, তবে অনেক সময়েই এই representation টা কি হবে সেটাই মোদ্দা প্রশ্ন হয়ে দাঁড়ায়। Goodfellowর বইয়ের একখান উদাহরণ ধার করা যাক। Logistic Regression হলো একধরনের shallow (মানেটা একটু পরেই পরিষ্কার হবে) মেশিন-লার্নিং algorithm এর নাম। কোন গর্ভবতীর cesarean delivery প্রয়োজন কিনা জানতে আমরা সোজাসুজি রোগিণীকে মেশিনের সামনে দাঁড় করিয়ে দিই না। ডাক্তারবাবু প্রথমে কিছু বিশেষ তথ্য মেশিনকে দেন, যেমন, গর্ভাশয়ে কোন ক্ষতস্থান (scar) আছে কিনা। এই প্রতিটি প্রয়োজনীয় তথ্যের টুকরো, যারা একসাথে মিলে একটা representation তৈরি করে, এদের বলে একেকটা feature। লার্নিং-এর সময় logistic regression শেখে কিভাবে এইসব feature, প্রয়োজনীয় output এর সঙ্গে সম্পর্কিত, আর তার ফলে সঠিক feature এর সমষ্টি দেখতে পেলেই ও নির্দেশ করতে পারে যে মহিলার cesarean প্রয়োজন কিনা। আবার, কানের গোড়ায় বন্দুক ধরলেও ওর পক্ষে কিন্তু ওইসব feature মহিলার MRI scan এর ছবি দেখে বের করে আনা সম্ভব না। 
Cartesian
Polar

বাস্তব জগতের প্রায় সবকিছুই representation এর ওপর বিচ্ছিরিরকম নির্ভরশীল। সঙ্গের প্রথম ছবিতে দেখো, Cartesian coordinate এ একটা scatter-plot এ দু’রকমের data দেওয়া আছে। একখানা সোজা লাইন টেনে এদের দুই ধরনকে আলাদা করা – অসম্ভব। কিন্তু সেই একই dataকে এবার polar coordinate এ প্রকাশ করা হ’লে, একখান খাড়া সোজা লাইন টেনেই আলাদা করে ফেলা সম্ভব। একইভাবে, পোস্টের প্রথমেই যে তিনখানা ছবি দেওয়া আছে, তাদের দেখে এবার বোঝা যাবে, কি করে একটা সাধারণ rotation এর সাহায্যে আমরা দিয়ে দেওয়া dataset এর একটা অত্যন্ত সহজ representation (x < a বা x > a) বের করে ফেলতে পারি, যার থেকে তাদের classification জলবৎ তরল হয়ে যায়।

অনেকসময়েই, data থেকে কি কি feature বের করে আনা উচিত, এই প্রশ্নের উত্তর দেওয়া মোটেই সহজ হয় না। আমাদের চেনা ImageIdentify এর কথাই ধরা যাক। কি কি feature দেখে একটা কুকুরের ছবি থেকে চেনা সম্ভব সেটা কুকুর কিনা? পাশ ফিরে থাকা (profile) ছবি আর সোজা সামনাসামনি ছবির feature নিশ্চয়ই এক নয়। দৌড়নোর আগের মুহূর্তের আর শুয়ে থাকা কুকুরের ছবির feature ই বা এক কি করে হয়? তাহলে, representation থেকে output বের করে আনার আগে আর একটা কাজ মেশিনকে দিয়ে করানো দরকার: data থেকে সঠিক representation বের করে আনা। এর নাম Representation Learning। এই দু’টো কাজ পরপর ঠিকভাবে করে ফেলতে পারলেই, মেশিন-লার্নিং-এর সময় মানুষের নাক গলানোর প্রয়োজন দুম করে অনেকটা কমে যায়।

কি করে মেশিনের পক্ষে ঠিক representation শেখা সম্ভব? আগে থেকে ঠিক করা প্রচুর ধরনের operation, যেমন coordinate transformation, linear projection, translation, non-linear operation –এই সবের অনেক combination, একসাথে যাদের আমরা বলবো hypothesis space, তার থেকে মেশিন খুঁজে বের করার চেষ্টা করে, dataর সবথেকে ভাল representation কি হতে পারে। এই রকমের representation learning এর নামকরা উদাহরণ হলো Autoencoder। এর সম্পর্কে আমরা পরে বিস্তারিত শিখবো। তাহলে বোঝা গেল, যে মেশিন-লার্নিংএর জন্যে হয় আমাদের নিজেদেরই data থেকে feature design করতে হবে, নইলে মেশিনকে দিয়েই সেই কাজটা করাতে হবে। এটা করার জন্যে আমাদের খুঁজে বের করতে হবে, কি কি ‘factor’ এর ওপর নির্ভর করে আমাদের data বদলে যেতে পারে। এই ফ্যাক্টরগুলো পার্থিব-অপার্থিব যা ইচ্ছে হতে পারে। একজন মানুষের audio recording শুনে তার স্বরূপ বোঝার চেষ্টা করার সময় বক্তার লিঙ্গ, বয়স, বলার ভাষা, সবই এই ধরনের ‘factor of variation’।
বেশ, factors of variation নির্ণয় করাই তবে আমাদের প্রধান উদ্দেশ্য, তাই না? উঁহু…, গোলমাল আছে। কখনো কখনো, এই factor গুলো স্থির করাটাই এত complex হয়ে দাঁড়ায়, যে আসল প্রবলেমটার সঙ্গে তার আর কোন পার্থক্য থাকেনা। ঠিক আগের উদাহরণের একটা খুব গুরুত্বপূর্ণ factor এর কথা ধরা যাক – বক্তার accent, অর্থাৎ, তিনি ঘটি না বাঙাল, আমেরিকান না ইংরেজ, বাঙাল হলে বরিশালী না ময়মনসিংহী ইত্যাদি। মানুষের কান জন্ম থেকে শিক্ষিত হতে হতে যেভাবে এসব আলাদা করতে পারে, মেশিনের পক্ষে তা করা তো শেষমেশ বক্তব্য বোঝার সমান কঠিনই হয়ে দাঁড়ালো, তাই না? তাহলে representation learning কিভাবে সাহায্য করবে এখানে আমাদের?

বাজারে এলেন Deep Learning, রক্ষাকর্তা সেজে। এসেই বললেন, “ও, representation বের করে আনা খুব কঠিন হয়ে গেছে বুঝি? এক কাজ করা যাক, খুব সহজ, ছোট ছোট representation এ ব্যাপারটা ভেঙে ফেলা যাক, তারপর তাদের combine করে আমরা আরেকটু কঠিন একগোছা representation বানাবো। তারপর তাদের জুড়ে জুড়ে আবার আরেকটু কঠিন, আরো একটু কঠিন representation… এইভাবে ততক্ষণ চালাবো, যতক্ষণ না কঠিনতম representationটাও, এমনকি যেমনটা মানুষে বোঝে, আমরা (মানে মেশিন) বুঝে ফেলতে পারি।” ঠিক কথা। boring, repetitive গুচ্ছের কাজ করা আমাদের পক্ষে ক্লান্তিকর হলেও, মেশিনের কাছে তো জলভাত! এই যে সহজ representation থেকে একটু কঠিন একটা representation বানানো, এটা algorithm এর যে অংশে হয়, তাকে যদি আমরা একটা layer বলি, তাহলে পরিষ্কার, যে আমরা layer এর পর layer জুড়ে জুড়ে এমন algorithm বানাতে পারি, যাতে কঠিন থেকে কঠিনতম সমস্যাও অনায়াসে সমাধান করা সম্ভব।



Deep Learning নামে যে ‘Deep’ শব্দটা আছে, তার উৎস হলো ওই layer। যে algorithm এ যত বেশি layer, তা ততই deep। যে সমস্ত classical machine learning algorithm এই রকম layer ভিত্তিক কাজ করেনা, তারা নিশ্চয়ই তবে shallow learning (এই কারণেই একেবারে শুরুতে logistic regression কে shallow বলা হয়েছিলো)। অতএব, মেশিন-লার্নিং এর জগত, আগের পোস্টের প্রথমে যে ছবিটা আমরা দেখেছিলাম, সেটা সামান্য বদলে গিয়ে দাঁড়ালো উপরের ছবির মতো।
আশা করা যায়, আমরা মোটামুটি বুঝেছি, যে এই learning ব্যাপারটা কিরকম। এইবার এগোতে চাইলে, আমাদের হাতে দু’টো রাস্তা আছে। 1) Classification এর সহজতম উদাহরণ Binary Classification ব্যাপারটা বোঝা, আর 2) Deep Learning সম্পর্কে একটা প্রাথমিক ধারণা তৈরি করা। আমি ব্যক্তিগত পছন্দ অনুসরণ করে দ্বিতীয় রাস্তাটা নেবো। পরের পোস্টগুলোয় আমরা প্রথমে Deep Learning আর তারপর Binary Classification সম্পর্কে ধারণা তৈরি করবো।
মনে আছে, প্রথম দিন প্রথম প্রশ্ন করেছিলাম, ‘ভবিষ্যতে AI কি সত্যিই আমাদের জীবনে ততটা গুরুত্বপূর্ণ হয়ে উঠবে, যেমনটা সর্বত্র বলা হচ্ছে?’ যেকোন সময় ভবিষ্যত সম্পর্কে জল্পনাধর্মী কোন বাক্যবিন্যাস করতে হলে সবথেকে বড় শিক্ষক হলো ইতিহাস। তাই আজ যেহেতু গল্পগাছার দ্বিতীয় দিন, একটু DL এর গোলমেলে ইতিহাসটা সামান্য ঘেঁটে দেখা যাক। সিরিয়াস বাচ্চারা সোজা পরের পোস্টে চলে যেতে পারো।

Deep Learning এর Timeline:



অতীত: এই ব্লগে এসে মেশিন-লার্নিং দেখছো মানে, নিশ্চিত DL সম্পর্কে জানার বেশিদিন হয়নি। আন্দাজ করা যায়, জানতে পেরেছো যে এ এক নতুনরকমের প্রযুক্তি, যা দিয়ে অত্যাশ্চর্য সাধন করা যায়। শুনলে অবাক হবে, এর ধারণা সেই 1940 এর দশকে তৈরি। 1940-1960 সালে একে বলা হতো cybernetics, 1980-1990 সালে connectionism, আর এই সহস্রাব্দের শুরুতে, 2006 নাগাদ, deep learning। তিন বিভিন্ন সময়ে একই ideaর এই প্রাদুর্ভাবকে 3 waves of deep learning বলা হয়। উপরের চার্টটা বানানো হয়েছে Google Books এর Ngram Viewer দিয়ে (2008 অবধি data আছে, তাই DL মাথাচাড়া দেয়নি এখনো)। উলটোদিকে, সাম্প্রতিককালের Google Search Trend অনুসরণ করলে পরিষ্কার, যে 2013র পর থেকে DL নিয়ে মানুষের উৎসাহ তীব্রবেগে বেড়েছে (চার্ট নিচে)।



একদম শুরুতে (চল্লিশের দশকে) মানব-মস্তিষ্কের biological learning এর একটা কম্পিউটার মডেল তৈরি করার চেষ্টা করা হয়েছিল। গপ্পোটা ছিল: ‘আমাদের চেনা intelligence তো এই আমাদের হাতের কাছেই আছে – human intelligence, অতএব একে মডেল করে ফেলতে পারলেই এক ঢিলে দুই পাখি মারা যাবে – মস্তিষ্কের কার্যপ্রণালীর একটা ধারণা পাওয়া যাবে, আবার তাকে মেশিনে কপিও করা যাবে।’ এই লক্ষ্যে প্রথম linear model তৈরি হয় 1943 সালে। হাতে করে বানানো কিছু weight আর input দিয়ে দিলে এরা দুই ধরনের input আলাদা করে ফেলতে পারতো।

1960 এর কাছাকাছি, Perceptron বলে এক ধরনের linear নেটওয়ার্ক তৈরি করা হয়, যাদের প্রথম training করানো সম্ভব হয়। এরাই আধুনিক Artificial Neural Network (ANN) এর পূর্বসূরী। বেশ চলছিলো, বাদ সাধলেন Minsky আর Papert (হ্যাঁ, সেই Minsky, যিনি এর বদলে symbolic AI নিয়ে গলা ফাটানো শুরু করেন)। Linear model এর নানারকম সীমাবদ্ধতার দিকে আঙুল দেখিয়ে ওঁরা যা বলেন, তার মূল কথা, “ও রাস্তায় লাভ নেই।” ব্যস, হয়ে গেলো, একদিকে বিশেষজ্ঞদের মতামত, AI কিছুদিনের মধ্যেই দুনিয়া জয় করবে, অন্যদিকে neural network তেমন কাজ করেনা – এই দুইয়ের মাঝে গোটা বিষয়টাই তার জনপ্রিয়তা হারালো, আর ANN এর ওপর রিসার্চ ঝিমিয়ে পড়লো।
1980র দশকে ‘আবার সে আসিল ফিরিয়া’, এবং সেই একই অজুহাতে। এবার তার নাম connectionism, আর যে সাবজেক্টের প্রয়োজনে তার প্রাদুর্ভাব, তার নাম cognitive science। এই যুগে হওয়া রিসার্চ থেকে আমরা যা শিখেছি, তা সত্যিই অনেক। তার একটার নাম distributed representation (সুযোগ অনুযায়ী পরে আলোচনা হবে), আর একটা, ANN training এর জন্যে backpropagation এর ব্যবহার (একে নিয়ে আলোচনা হবেই)। আজও এদের গুরুত্ব কমেনি। 1989এ Yann LeCun পুরনো convolutional neural network (CNN) এর ধারণা ব্যবহার করে তৈরি করলেন ‘LeNet’, আর তা USAর ডাকবিভাগ ব্যবহার করা শুরু করলো চিঠির খামের ZIP কোড (আমাদের দেশের PIN কোডের ভায়রাভাই) মেশিন দিয়ে পড়ানোর কাজে।

কিন্তু এই হইহইয়ের বাজারে এমন একটা ঘটনাও ঘটে, যার ফলাফল থেকে আজ আমাদের শিক্ষা নেওয়া উচিত। 1990র দশকের মাঝ অবধি চলে ANN এর রমরমা। এতটাই, যে নানা ANN-ভিত্তিক প্রোজেক্ট আর কোম্পানি দাবী করতে থাকে যে কিছু সময় আর কিছু টাকা পেলেই তারা অসাধ্যসাধন করে ফেলতে পারবে নানাবিধ সমস্যা সমাধান করে। একই সময়ে, গোটা পৃথিবী বিশ্বাস করতো AI এই এলো বলে। 1985 নাগাদ বছরে আনুমানিক 1 Billion $ খরচা হতো AI research খাতে। 1990 এর মাঝামাঝি, কোন প্রতিশ্রুতিই যখন পূর্ণ হলো না, যথারীতি কিশোরের সঙ্গে গলা মিলিয়ে, আশাও রইলো না, (AI এর প্রতি) ভালবাসাও রইলো না। শুরু হলো দ্বিতীয় AI Winter।

বর্তমান: 2010 সাল নাগাদ, মোটামুটি গোটা দুনিয়া যখন neural network শুনলেই নাক কুঁচকোয়, প্রায় সবধরনের মেশিন-লার্নিং সমস্যার যখন সমাধান হচ্ছে, হয় Kernel Method (উদাহরণ, support vector machine (SVM)) বা graphical method (উদাহরণ random forest আর gradient boosted decision tree (BDT)) দিয়ে, তখনো ANN নিয়ে উৎসাহ আর রিসার্চের কাজ জিইয়ে রেখেছিলো Canadian Institute for Advanced Research (CIFAR)। এদের উদ্যোগে University of Torontoর Geoffrey Hintonএর দল, University of Montrealএর Yoshua Bengio, আর New York Universityর Yann LeCun (LeNet-খ্যাত) এর সম্মিলিত চেষ্টায় তখনো computer vision এ ANN এর ব্যবহার নিয়ে অনবরত রিসার্চ চলছিলো। এদের বিরুদ্ধে একটাই অভিযোগ তখনো বলবৎ: এই পদ্ধতি অবলম্বন করতে হলে প্রচুর computation ক্ষমতা প্রয়োজন হয়।
অন্য কথা:
Photo: Philip Montgomery (Source)

মেশিন-লার্নিংএর জন্যে সবথেকে বেশি দরকার সাজানো-গোছানো, দরকারে label দেওয়া, curated data। তেমন data না বানিয়ে algorithm তৈরি করতে থাকা আর ঢাল-তলোয়ার ছাড়া নিধিরাম সর্দারের যুদ্ধ করতে যাওয়া একই ব্যাপার। উলটোদিকে, সাজানো, জটিল dataset থাকলে তা ব্যবহার করা সম্ভব algorithmদের তুলনামূলক পর্যালোচনায়। দরকারে প্রতিযোগিতার আয়োজনও করা সম্ভব, যেখানে সেরা algorithm জিতবে তার কর্মক্ষমতার ভিত্তিতে। 2006 সালে University of Illinois Urbana-Champaign এর নব্য অধ্যাপিকা Fei-Fei Li (অধুনা Google Cloud এর Chief Scientist) এই সত্যটাই অনুধাবন করে বানাতে শুরু করলেন একখান অশ্রুতপূর্ব visual object recognition dataset, যার নাম ImageNet। 2009 সালে প্রথম তার ঘোষণা হলো একটি পেপারের মাধ্যমে, কিন্তু এতই জনপ্রিয় হলো একবছরের মধ্যে, যে 2010 থেকে বার্ষিক প্রতিযোগিতা চলে ImageNet dataset নিয়ে, যুযুধান algorithmদের মধ্যে। তা, কেমন এই dataset? 14 million এর ওপর হাতে করে label করা ছবি, 20000এর ওপর category, অন্তত 1 million ছবিতে objectএর চারপাশে bounding-box দিয়ে আলাদা করা। এককথায়, dataর ডাল-ভাতের জগতে বিরিয়ানির আবির্ভাব। ImageNet নিয়ে খাসা একখানা লেখা পড়তে চাইলে এইখানে চলে যাও

Add caption

ImageNet এর প্রথম দু’বছরের (2010) প্রতিযোগিতায় সব অংশগ্রহণকারীই অন্তত 25% data ভুলভাবে চিহ্নিত করেছিল (সঙ্গের চার্ট)। 2011র সেরা প্রতিযোগীর top-five accuracy ছিল 74.3%, আর সবাই ব্যবহার করছিলো classical machine learning algorithm। তদুপরি, এ সব মডেল ব্যবহার করার আগে প্রবল চাপ নিয়ে feature learning করতে হতো HOG, SIFT এর মত algorithm এর সাহায্য নিয়ে। 2012 সালে Alex Krizhevsky আর Geoffrey Hinton এর দল প্রথম CNN ব্যবহার করে accuracy বাড়িয়ে করলেন 83.6% - পাশা উলটে গেলো। Computer Vision AI কোম্পানি Clarifaiএর CEO Matthew Zeiler এর ভাষায়:
This Imagenet 2012 event was definitely what triggered the big explosion of AI today. There were definitely some very promising results in speech recognition shortly before this (again many of them sparked by Toronto), but they didn't take off publicly as much as that ImageNet win did in 2012 and the following years.
DL এর বিরুদ্ধে প্রধান যে অভিযোগ, computationally expensive হওয়া, তাও মিলিয়ে গেল এই সময়েই: Graphical Processing Unit (GPU) ব্যবহার করে একধাক্কায় CPU এর ওপর চাপ কমে গেলো, আর সময়ও কমে গেলো অনেকটাই। 2015র মধ্যে ImageNet বিজেতা 96.4% accuracy অর্জন করলেন। High Energy Physics এর experiment এর বর্তমান পীঠস্থান, European Organization for Nuclear Research, CERN এর সব particle detectorই এতদিন ব্যবহার করতো BDT, তারাও deep ANN ব্যবহার শুরু করে দিল পুরোদমে। Image classification, speech recognition, handwriting transcription, autonomous driving – সব বিষয়েই DL প্রায় মানুষের সমান কর্মক্ষমতা অর্জন করলো। ঢাক-ঢোল পিটিয়ে শুরু হলো DL এর তৃতীয় যুগ।

অন্য কথা:
একটা যুগ ছিলো, যখন Google এর Translate নিয়ে আমরা সবাই হাসাহাসি করতাম। শুধু খারাপ না, শিশুসুলভও নয়, translate ভিনগ্রহীর মতো অনুবাদ করতো। আর আমরা করুণাপরবশ হয়ে বলতাম, “আহা, বেচারা, মানুষ তো নয়…”। তারপর Google Translate 2016 সালে neural net ব্যবহার করা শুরু করলো। এরপর কি হলো জানতে NY Times এই খাসা লেখাটা থেকে একটা উদ্ধৃতিই যথেষ্ট:
As dawn broke over Tokyo, Google Translate was the No. 1 trend on Japanese Twitter, just above some cult anime series and the long-awaited new single from a girl-idol supergroup. Everybody wondered: How had Google Translate become so uncannily artful?

সামান্য সাবধান-বাণীর সময় এসেছে। আর কিছু না হোক, DL এর ওঠাপড়ার ইতিহাস অন্তত আমাদের এইটুকু শিখিয়েছে, এই নয়া প্রযুক্তির সাহায্যে কি করা সম্ভব, আর কি সম্ভব নয়, তা ঠাণ্ডা মাথায় না ভেবে দুম করে উত্তেজিত হলে বিপদ আছে। DL এমন অনেক কিছু করতে পারে, যা আপাতদৃষ্টিতে ম্যাজিক। কিন্তু তার মানে এই নয়, যে এই রাস্তায় হেঁটেই মানুষ বা মানুষের থেকে উন্নত AI আমরা তৈরি করে ফেলতে পারি। সে দিল্লি ‘দূর অস্ত’। এমনও নয় যে DL এর এই তুবড়ির মতো ছড়িয়ে পড়া চলতেই থাকবে। তাই অল্প সময়ের মধ্যে কিছু অবিমৃশ্যকারী ভবিষ্যদবাণী না করাই ভাল। তবে তার সঙ্গে এও ঠিক, যে এটা খুবই গুরুত্বপূর্ণ এক প্রযুক্তি, যার ধরণধারণ সময়ের সঙ্গে বদলে গেলেও, গোটা ব্যাপারটা লম্বা রেসের ঘোড়া।
আজ এ পর্যন্তই, পরের দিন থেকে গল্প কম, কাজ বেশি হবে…

No comments