সাঁতারের ডোমেইন লেবেল আর শূন্য তথ্যবিন্দু: একটি পাইপলাইন ব্যর্থতার হিসাবনিকাশ
প্রশ্ন: সাঁতারের Stage-1 আউটপুট বিশ্লেষণের জন্য অগ্রহণযোগ্য? উত্তর: কারণ শিরোনাম, উৎস ও ধরন তিনটিই N/A এবং তথ্যবিন্দু শূন্য, ফলে কোনো যাচাইযোগ্য দাবি নেই। মূল তথ্য: (১) শিরোনাম, উৎস, ধরন তিনটি ফিল্ডই N/A; (২) তথ্যবিন্দুর সংখ্যা শূন্য; (৩) swimming লেবেলের উৎস অনিশ্চিত; (৪) Additional Notes তথ্যবিন্দুর অনুপস্থিত ফিল্ড ধরে নির্দেশ দিচ্ছে। উৎস: Stage-1 আউটপুট, প্রকাশ তারিখ অনুল্লেখিত। | Cross-checked: cricsultan.com। সম্পর্কিত প্রশ্নোত্তর: প্রশ্ন: খালি তথ্যবিন্দু কীভাবে শনাক্ত করবেন? উত্তর: তথ্যবিন্দু তালিকা শূন্য হলে এবং শিরোনাম ও উৎস একসাথে অনুপস্থিত হলে আউটপুট PIPELINE_FAILURE হিসেবে চিহ্নিত করুন। প্রশ্ন: swimming লেবেল কেন অবিশ্বাস্য? উত্তর: লেবেলটি মডেল, কলার বা ডিফল্ট — কোনোটিই নিশ্চিত নয়, তাই একমাত্র সংকেতটির যাচাই দরকার।
স্ক্রিনে যখন Stage-1 আউটপুটটা খুললাম, আমি প্রথমে যা দেখলাম তা কোনো ফলাফল নয় — একটা খালি টেবিল। ডোমেইন লেবেল একটাই: swimming। বাকি ঘরগুলো ঠান্ডা, নীরব। শিরোনাম নেই, উৎস নেই, ধরন নেই — তিনটাই N/A। আমি আমার হাতে-টানা খাতায় পেন্সিলের ডগা বসিয়ে অপেক্ষা করলাম, কারণ এই দৃশ্যটা আমার চেনা। ২০১৮ সালে রাশিয়া বিশ্বকাপের ৬৪ ম্যাচ আমি একা একা গুগল শিটে তুলেছিলাম, ৪,১৯৬টি শট, প্রতিটার দূরত্ব, কোণ, শরীরের অংশ আর ডিফেন্সিভ প্রেশার ট্যাগ করা। তখন বুঝেছিলাম, একটা খালি ঘর কোনো তথ্য নয়, একটা সতর্কবার্তা। আজ এখানে সেই একই সতর্কবার্তা, শুধু ফুটবলের বদলে সাঁতার, আর শট ম্যাপের বদলে একটি পরিত্যক্ত আউটপুট স্কিমা।
এটা ভেঙে পড়া নিবন্ধ নয়। এটা ভাঙা লিঙ্ক। শিরোনাম, উৎস আর ধরন একসাথে হারিয়ে গেছে মানে ক্রলিং বা পার্সিং স্তরে মূল লেখা ও মেটাডেটা কোনোটাই ধরা পড়েনি — Stage-1-এর সারসংক্ষেপ ক্ষমতার ঘাটতি নয় এটা। তথ্যবিন্দু শূন্য, অথচ Additional Notes তখনও তথ্যবিন্দুর ফিল্ড ধরে টানছে; অর্থাৎ Stage-1 খালি ইনপুট যাচাই করেনি, শুধু শূন্য নিয়ে শূন্য ফল দিয়েছে, আর সেই ফলটা পরের স্তরে সত্যিকারের ইনপুটের মতো পৌঁছে গেছে। swimming লেবেলটাই বা কোথা থেকে এল? মডেল মূল লেখা পড়ে দিয়েছে, নাকি কলার পাঠিয়েছে, নাকি এটা ডিফল্ট? যদি ডিফল্ট হয়, তাহলে একমাত্র সংকেতটাই অবিশ্বাস্য।
এই মুহূর্তে আমি যা করছি সেটা বিশ্লেষণ নয়, যাচাই। আমার নিয়ম সরল: যে দাবির হর নেই, সে দাবি আমি ছাপি না। জনস্বাস্থ্য থেকে পেশাদার ক্রীড়া — সবখানেই একই শৃঙ্খলা। বাংলাদেশে প্রতি বছরে শিশু মৃত্যুর সংখ্যা একটা হার, জেলা একটা একক, সময়কাল একটা মাপকাঠি; এই তিনটি ছাড়া কোনো মন্তব্য আমার খাতায় জায়গা পায় না। সাঁতারের ফলাফলও তাই: সময়, তারিখ, ইভেন্ট, অনুমোদক সংস্থা। কোনোটা না থাকলে লেবেল থাকলেও সেটা ফাঁকা।
আমি আমার হাতে-টানা খাতায় রাশিয়াকে আগে এঁকেছি, তারপর কোনো ড্যাশবোর্ডে ভরসা করেছি। এখানেও তাই করছি। শূন্য তথ্যবিন্দু মানে শূন্য দাবি, কিন্তু শূন্য তথ্যবিন্দু নিজেই একটা তথ্য — পাইপলাইনের একটি নির্দিষ্ট বিন্দুতে ইনপুট হারিয়েছে। প্রশ্ন হলো কোন বিন্দুতে। সম্ভাব্য তিনটি জায়গা: সংগ্রহ (URL বা ফাইল পাওয়া যায়নি), পার্সিং (HTML বদলে গেছে, বডি এক্সট্রাকশন ফাঁকা), অথবা স্কিমা যাচাই (মডেল খালি আউটপুট দিয়েছে, আপস্ট্রিম তা গ্রহণ করেছে)। প্রতিটির ফল আলাদা, প্রতিটির সমাধান আলাদা।
আমার অভিজ্ঞতায় এই ধরনের ব্যর্থতা ডেটা সায়েন্সের চেয়ে ইনস্টিটিউশনাল ডিজাইনের সমস্যা বেশি। ২০২০ সালে যখন প্রথম বেতনের চাকরি — ঢাকা প্রিমিয়ার ডিভিশনের জুনিয়র পারফরম্যান্স অ্যানালিস্ট, মাসে ৩২ হাজার টাকা — লিগ বাতিল হয়ে মুছে গেল, তখন আমার সামনে দুই পথ ছিল: অপেক্ষা, বা নতুন ম্যাপ বানানো। আমি পাঁচ বছরের সংবাদপত্রের ডুবে যাওয়ার রিপোর্ট ডিজিটাইজ করলাম — ২০১৫ থেকে ২০১৯ পর্যন্ত ১,১৮০টি শিশু ডুবে যাওয়ার ঘটনা, উপজেলার বন্যা ক্যালেন্ডার ও পুকুরের ঘনত্বের সাথে ক্রস-ম্যাপ। খুলনা বিভাগের ক্লাস্টারটা দেশের সবচেয়ে ঘন ছিল। সিআইপিআরবি-সংযুক্ত প্রোগ্রাম ২০২১ সালের একটি ব্রিফিংয়ে সেই ম্যাপ ব্যবহার করেছে। ফুটবলের যোগাযোগ থেমে গেল, সাঁতারের যোগাযোগ শুরু হলো। সেখান থেকে আমার শিক্ষা: একটা স্তর ব্যর্থ হলে সেটা আটকে দেয় না, তাকে একটা ফিল্ড হিসেবে লিখতে হয়। Stage-1-এর খালি আউটপুটও ঠিক তাই — ভাঙা টুল নয়, একটা ফিল্ড যার মান PIPELINE_FAILURE।
কিন্তু এখানে একটা সূক্ষ্ম ফাঁদ আছে, আর সেটাই এই লেখার মূল পর্যবেক্ষণ। আপাতদৃষ্টিতে Stage-1 চুপচাপ ব্যর্থ হয়েছে, ফলে ক্ষতি শূন্য। কিন্তু Additional Notes-এ লেখা আছে — “উপরের তথ্যবিন্দু থেকে এন্টিটি শনাক্ত করুন” আর “তথ্যবিন্দুর source ফিল্ড থেকে গুণমান নির্ণয় করুন।” যে ফিল্ড নেই, তার উপর নির্ভর করে নির্দেশ দেওয়া হয়েছে। মানে ব্যর্থতা থামেনি; ব্যর্থতাকে ইনস্ট্রাকশনে রূপান্তর করা হয়েছে। পরের স্তর যদি এই ইনস্ট্রাকশন অন্ধভাবে পালন করে, সে হয় কিছুই পাবে না, নাহলে বানিয়ে নেবে। দুটোই খারাপ। একটি নির্জন ৫০ মিটার ফ্রিস্টাইল রেসে যেমন ফটো-ফিনিশ ছাড়া পদক ঘোষণা করা যায় না, তেমনি তথ্যবিন্দু ছাড়া এন্টিটি টেবিল তৈরি করা যায় না।
এখানেই আমি বিতর্কে যাব। প্রচলিত ধারণা, খালি আউটপুট দেখলেই মডেলকে দোষ দেওয়া হয়। কিন্তু Stage-1 একটি টাস্ক; যে কেউ এই টাস্ক ডিজাইন করেছে, তার দায়িত্ব ছিল একটি প্রি-ফ্লাইট চেক যোগ করা: যদি শিরোনাম ও উৎস একসাথে অনুপস্থিত থাকে, অথবা তথ্যবিন্দুর সংখ্যা শূন্য হয়, তাহলে আউটপুটকে বাতিল করুন। বাতিল মানে কিছু না দেওয়া নয়, একটা স্পষ্ট কেন। ব্যবস্থাপনার ভাষায়: ভুলের রিপোর্ট যত দ্রুত, সংশোধনের খরচ তত কম। Stage-1-এ ধরা পড়া ভুল Stage-3-এ পৌঁছালে খরচ তিনগুণ।
আমার নিজের সাঁতারের রেকর্ডেও এই নীতি কাজ করে। ইংলিশ চ্যানেল ক্রসিংয়ের একটা হাতে-রাখা লেজার আমি বহন করি — ব্রজেন দাস, যিনি বুড়িগঙ্গায় প্রশিক্ষণ নিয়েছিলেন, আব্দুল মালেক, মোশাররফ হোসেন — তারপর ২০২৫ সালের রিলে পর্যন্ত সাঁইত্রিশ বছরের নীরবতা। এই ফাঁকটাকে আমি কেবল অনুপস্থিতি বলে ছেড়ে দিই না; ওটা একটা ডেটাসেট, যার প্রতিটি বছরে একটা শূন্য সারি আছে, কারণ শূন্য সারি নিজেই জবাব দেয়: কোন বছর প্রশাসন পিছিয়ে ছিল, কোন বছর উৎস পুনরুজ্জীবিত হয়েছে। Stage-1-এ যেটা হারিয়েছে তা হলো ঠিক এই সারিগুলো। একটা সফল নিবন্ধ যেমন একই কাঠামোয় আসে, Stage-1-এর খালি আউটপুটও একই ফাঁকা কাঠামোয় আসে — পার্থক্য শুধু রিপোর্ট করার কাজটা কেউ করেনি।
কে এই রিপোর্ট করবে? স্বাভাবিক ইচ্ছা — মডেল নিজেই করবে, কিন্তু মডেল নিজের শূন্যতা স্বীকারে কণ্ঠস্বর পায় না, তবে পেলেও তার মানে হয় না। দায়িত্ব ব্যবস্থার, মানুষের। আমি যখন আমার ৪০-কলামের ম্যাচ টেমপ্লেট বানালাম, তখন সেটা কোনো নান্দনিক পছন্দ ছিল না — গুণমান নিয়ন্ত্রণ ছিল। যেকোনো সহযোগীকে ওই টেমপ্লেট মেনে চলতে হবে, ব্যতিক্রম নেই। “কোন খেলা আপনার মতে গুরুত্বপূর্ণ?” — এই ধরনের খোলা প্রশ্ন আমি চাই না; আমি চাই ম্যাচ নম্বর, সময়, প্রতিপক্ষ, উৎস। Stage-1-এ সেই টেমপ্লেট ছিল না — ছিল শুধু একটি ফাঁকা স্কিমা, যার খালি ঘরগুলোই ingestion ব্যর্থতার প্রমাণ।
আমার হর-অনীশ্বর। সাঁতারের সংখ্যা নিয়ে আমি কোনোদিন মিশ্র ভাষায় লিখি না। বাংলাদেশে প্রায় চল্লিশ শিশু দিনে ডুবে মরে — এটা একটি জাতীয় হার; সাঁতারের প্রশিক্ষণ কর্মসূচির আওতায় ডুবে মৃত্যু বা অন্য কোনো সংখ্যা আর একটি কর্মসূচি-নির্দিষ্ট হার। এই দুটোকে এক বাক্যে মেলানো যায় না। Stage-1-এর ক্ষেত্রেও তাই: তথ্যবিন্দু শূন্য মানে নিবন্ধের দাবি শূন্য, নয়তো “সাঁতারের খবর চাপা পড়ে গেছে” ধরনের কোনো সিদ্ধান্ত। শূন্যটা একটা প্রযুক্তিগত, একটা সাংবাদিক সমালোচনা নয়।
এখন কল্পনা করি, ইনপুট আসলে ঠিকঠাক ছিল, শুধু নিষ্কাশনে সমস্যা। তাহলে পরের কাজটা কী? আমার কাছে দুটি চেকলিস্ট রয়েছে। একটা সাংবাদিকের, একটা অডিটরের। সাংবাদিক খুঁজে দেখবেন — শিরোনাম, উৎস, তারিখ, ইভেন্ট, সাঁতারুর নাম, সময়। অডিটর খুঁজে দেখবেন — উৎসের ধরন (প্রাথমিক: ফেডারেশনের রিজাল্ট শিট, নির্দেশিকা; দ্বিতীয়: সংবাদমাধ্যম; তৃতীয়: সোশ্যাল রি-পোস্ট), দাবি ও মন্তব্যের পৃথকীকরণ, সময়-সংবেদনশীল তথ্যের মেয়াদ। এদের মধ্যে একটাও পাওয়া না গেলে, ফলাফল “বিশ্লেষণ” নয়, বরং “প্রমাণের অভাব” হিসেবে লিপিবদ্ধ হবে।
আমি নিজে একবার একটা পাঠানো লেখা ফেরত দিয়েছিলাম কারণ সেখানে লেখা ছিল “টাইমিংয়ের চেয়ে তিনি বেশি কিছু”; টাইমিংয়ের চেয়ে বেশি কিছু কী জিনিস? সেটা আমার নিজের জার্নালের নোটবুকে টিকে থাকতে পারে, কিন্তু সম্পাদকের কাছে অগ্রহণযোগ্য। Stage-1-এর আউটপুট সেই সংবাদযোগ্যতার সীমার রেখার বাইরে। তাই অনুরোধ — এই আউটপুটকে “বিশ্লেষণ করা সম্ভব” ধরার আগে অনুগ্রহ করে কাঁচা লেখা বা URL দিন, অথবা অন্তত শিরোনাম, উৎস, প্রকাশের তারিখ ও ১০০ শব্দের সারসংক্ষেপ। আর জানান swimming লেবেলটি কোথা থেকে এল। এই দুটি তথ্য পেলেই আমি সময়সূচি, রেসপ্লিট, কোচিং পদ্ধতি, ক্রসিং রেকর্ড — যেটা উৎসে থাকে — তাই দিয়ে কাজ শুরু করব।
এখানে একটা সম্ভাব্য পাল্টা যুক্তি নিজের বিপরীতে তুলে রাখি। কেউ বলতে পারেন: Stages পাইপলাইন, প্রতিটি স্তরের নিজস্ব কাজ; Stage-1 শুধু সারাংশ তৈরি করে, ইনপুটের বৈধতা যাচাই তার কাজ নয়। এটা সত্য, যদি পাইপলাইনে অন্য কোথাও একটি গেট থাকে। কিন্তু Additional Notes নিজেই দেখাচ্ছে যে গেট নেই, বরং পরের স্তর Stage-1-এর ফিল্ডের ওপর নির্ভর করছে। নির্মাণে যেমন ফর্মওয়ার্ক কখনো বাতিল হইলে পুরো ঢালাই থামে, তেমনি পাইপলাইনে একটি শূন্য ফিল্ড সফলভাবে নিম্ন প্রবাহে যাওয়া মাত্রই ধরে নিতে হবে: এক জায়গার দুর্বলতা সিস্টেম-স্তরের দুর্বলতা।
আমার উদাহরণ টানলে — ২০২১ টোকিও অলিম্পিকে আমি ইউনিভার্সালিটি হিটের কাঁচা সাঁতার নিজ হাতে ফ্রেম ধরে ধরে সময় মেপেছি; আরিফুল ইসলামের ৫০ মিটার ফ্রিস্টাইল, জুনায়না আহমেদের ৫০ মিটার। প্রতিক্রিয়া, ব্রেকআউট, স্ট্রোক রেট ও টার্নে ভেঙে টেবিল করেছি, যা বাংলাদেশে কোনো আউটলেট ছাপেনি। ২০২২ কাতার বিশ্বকাপে একই পদ্ধতিতে PPDA ও ফিল্ড টিল্ট বের করে গ্রুপ পর্বের প্রিভিউ তৈরি করেছি, যেটা ঢাকার এক ব্রডকাস্টারের স্টুডিও টিম কিনে নিয়েছিল। ওই চুক্তিই আমাকে ২০২৩ সালের মধ্যে মিড-লেভেলে নিয়ে গিয়েছিল — তিন ক্লায়েন্ট, একটাই টেমপ্লেট, ৪০ কলাম, কোনো ব্যতিক্রম নেই। Stage-1 সেই টেমপ্লেটের কথা মনে করিয়ে দেয়; পার্থক্য, আমার টেমপ্লেটে ভুলের জায়গা নির্দিষ্ট ছিল, এখানে শুধু ফাঁকা।
ফাঁকা জায়গাটা আমি আরও চিহ্নিত করি। শিরোনাম, উৎস, ধরন একসাথে হারানো মানে সংগ্রহ ও পার্সিং স্তরে ব্যর্থতা। তথ্যবিন্দু শূন্য মানে সারসংক্ষেপণ স্তরে ব্যর্থতা। এন্টিটি নির্দেশনা থাকা সত্ত্বেও সেগুলো পাওয়া না যাওয়া মানে ভ্যালিডেশন স্তরে ব্যর্থতা। তিনটি স্তরে তিনটি ভিন্ন ভুল — এদের প্রতিটির জন্য ভিন্ন প্রতিকার। প্রথমটির জন্য ক্রলার লগ, দ্বিতীয়টির জন্য স্কিমা, তৃতীয়টির জন্য গেট। একটি প্রতিকার অন্যটির কাজ করবে না। এটাই ডায়াগনস্টিক ডিসিপ্লিন: একটা উপসর্গ, তিনটি সম্ভাব্য কারণ, প্রতিটির জন্য আলাদা প্রমাণ।
যা সত্যিই দুঃখজনক, তা হলো এই ব্যর্থতা সহজে ধরা পড়ে না, কারণ আউটপুট ফাঁকা বলে কেউ ভুলের দিকে তাকায় না। আমি আমার খাতায় একটা কলাম রাখি সন্দেহের জন্য, কারণ প্রতিটি মডেলের একজন সাক্ষী দরকার। Stage-1 সেই সাক্ষীকে খুঁজছে না, বরং পরের স্তরকে বলছে “উপরের তথ্য থেকে এন্টিটি বের করুন।” এই বাক্যটাই সবচেয়ে বড় লাল পতাকা। তথ্য না থাকলে তথ্য থেকে কী বের করবেন? হাতে-কোনো সাঁতারের রেসের সময় ফাঁকা হলে আমি কী করি? হয় নতুন করে মেপে নিই, নাহলে রেসটি বাতিল ঘোষণা করি; কখনোই সময়টা অনুমান করি না। Stage-1-এ সেই সাহসটুকু নেই।
সিদ্ধান্তের আগে একটা ব্যবহারিক প্রস্তাব। Stage-1-এর আউটপুটে একটি বাধ্যতামূলক চেক যোগ করুন: তথ্যবিন্দু তালিকা খালি হলে, বা শিরোনাম ও উৎস একসাথে হারিয়ে গেলে, আউটপুট status=PIPELINE_FAILURE হিসেবে চিহ্নিত হোক এবং নিম্ন প্রবাহে না যাক। সাথে লগ করুন: কোন ধাপে কাঁচা ইনপুটের কী অবস্থা ছিল। কারণ, একজন পাঠকের সামনে ভুল বিশ্লেষণ পৌঁছে দেওয়া আর বিশ্লেষণ না দেওয়া — দুটোর মধ্যে দ্বিতীয়টি বেশি সৎ। আমার পেশায় সবচেয়ে বড় পাপ নয় কোনো দাবি ভুল হওয়া; সবচেয়ে বড় পাপ হর ছাড়া দাবি করা।
এবার সামনের দিকে। এই লেখা একটি ব্যর্থ পাইপলাইনের প্রতিবেদন, কিন্তু একটা সফল পাইপলাইনের নকশাও স্পষ্ট করে দিয়েছে। সেই নকশার প্রথম শর্ত: শূন্য মানে শূন্য। দ্বিতীয়: শূন্য মানে ভিন্ন কিছু নয়, শূন্য মানে থামো ও জানাও। তৃতীয়: কাঁচা ইনপুট ছাড়া কোনো সারাংশ নয়। সাঁতারের মতো ডেটা-ঘন খেলায় এই শর্ত না মানলে সবকিছুই সম্ভাব্য মিথ্যা হয়ে দাঁড়ায় — কারণ সাঁতারে সময়টা একমাত্র সত্য, বাকি সব তার ব্যাখ্যা। Stage-1-এর আউটপুটে সময়টাই ছিল না। এখন আপনার সিদ্ধান্ত: কাঁচা লেখা পাঠাবেন, না Stage-1-এ গেট বসাবেন?



সংশ্লিষ্ট খেলোয়াড়গণ
