যে প্রতিবেদন ব্যর্থ হয়েও ব্যর্থতা স্বীকার করল না: এশীয় ক্রিকেটের তথ্য-পাইপলাইনে নীরব ফাঁদ
**সংক্ষিপ্ত উত্তর:** স্টেজ-১ আউটপুটটি পরিপাটি কিন্তু সম্পূর্ণ খালি একটি টেমপ্লেট; এতে একটিও তথ্যবিন্দু নেই, তাই এর ওপর বিশ্লেষণ চালানো মানে অনুমাননির্ভর তথ্য তৈরি করা। সঠিক পদক্ষেপ হলো উৎস পুনরায় সংগ্রহ করা এবং পাইপলাইনে স্পষ্ট ব্যর্থতা-ফ্ল্যাগ যুক্ত করা। **মূল তথ্য:** - নয়টি ফিল্ডের প্রতিটিই খালি বা "প্রযোজ্য নয়"; তথ্যবিন্দুর সংখ্যা শূন্য। - ডোমেইন লেবেল cricket_asia একটি ক্লাসিফায়ারের অনুমান, যাচাইযোগ্য প্রমাণ নয়। - সম্ভাব্য চার কারণ: ব্যর্থ ফেচ, ছাঁটাই, জনবসতিহীন স্কিম, ভুল ইনপুট রাউটিং। - স্টেজ-১-এ ৫–১০টি উৎস-উদ্ধৃত তথ্যবিন্দু ও ভূমিকা-ট্যাগযুক্ত সত্তা আবশ্যক। - উৎস অনুপলব্ধ হলে একমাত্র বৈধ আউটপুট STATUS: EXTRACTION_FAILED। **সূত্র উল্লেখ:** মূল সূত্র: স্টেজ-১ এক্সট্রাকশন যাচাই নথি (অভ্যন্তরীণ বিশ্লেষণ প্রতিবেদন); প্রকাশের তারিখ নথিতে উল্লেখ নেই, প্রকাশক শনাক্ত করা যায়নি। **সম্পর্কিত প্রশ্নোত্তর:** প্রশ্ন: খালি টেমপ্লেট কেন বিপজ্জনক? উত্তর: কারণ সুগঠিত ফাইল ব্যর্থতার কোনো সংকেত দেয় না, ফলে ডাউনস্ট্রিম ধাপ নীরবে অনুমানভিত্তিক তথ্য তৈরি করতে পারে। প্রশ্ন: cricket_asia লেবেল প্রমাণ হিসেবে গণ্য করা যাবে না কেন? উত্তর: যে ক্লাসিফায়ার শিরোনাম বা এক বাক্যবিশিষ্ট কনটেন্ট পায়নি, তার লেবেল ফাইলের নাম বা মেটাডেটা থেকেও আসতে পারে। প্রশ্ন: পুনরায় পাইপলাইন চালালেই কি সমাধান হবে? উত্তর: না, কারণ সমস্যাটি এক্সিকিউশনের নয়, নকশার — স্কিমায় "জানি না" লেখার ঘর না থাকাই মূল ত্রুটি।
রাত সোয়া দুইটা। ম্যানচেস্টারে জানালার বাইরে বৃষ্টি, ঘরে শুধু ল্যাপটপের নীল আলো আর ঠান্ডা হয়ে যাওয়া এক কাপ কফি। সামনে একটা ফাইল, যেটা নিজেকে "বিশ্লেষণ" বলে পরিচয় দিয়েছিল। খুললাম।
নয়টা ফিল্ড। প্রতিটা ভয়ংকর রকমের পরিপাটি। শিরোনাম — প্রযোজ্য নয়। সূত্র — প্রযোজ্য নয়। ধরন — প্রযোজ্য নয়। মূল সারসংক্ষেপ — একটা খালি স্ট্রিং, শূন্য অক্ষর। লেখকের অবস্থান — প্রযোজ্য নয়। উদ্দেশ্য — প্রযোজ্য নয়। তথ্যবিন্দু — শূন্য। সত্তা — "উপরের তথ্যবিন্দুগুলো থেকে চিহ্নিত করুন", অথচ উপরে কিছু নেই। সময়-সংবেদনশীলতা — "স্পষ্টভাবে মূল্যায়ন করা হয়নি"। সূত্রের গুণমান — "সূত্রের ফিল্ড দেখে বিচার করুন", অথচ কোনো সূত্রের ফিল্ডই নেই।
নথিটা নিজের ভেতরেই নিজেকে খণ্ডন করছে। দুটো নির্দেশ এমন ইনপুট দিয়ে কাজ করতে বলছে, যাদের অস্তিত্বই নেই।
এটা কোনো পাতলা প্রতিবেদন নয়। এটা একটা অনুপস্থিত প্রতিবেদন — যেটা উপস্থিত থাকার ভঙ্গি ধরে বসে আছে। আর ঠিক সেই ভঙ্গিটাই আমার রাতের ঘুম কেড়ে নিল।
২০১৭ সালে আমি এক্সপেক্টেড গোলসের খাতা খুলে দেখেছিলাম আরও নীরব একটা খেলা। লিগ ওয়ান আর লিগ টু থেকে ২৪০০ শট স্ক্র্যাপ করেছিলাম, লজিস্টিক রিগ্রেশন দিয়ে একটা xG মডেল দাঁড় করিয়েছিলাম, দেখেছিলাম শটের অবস্থান আর শরীরের যে অংশ দিয়ে শটটা নেওয়া হয়েছে — এই দুইয়ে গোলের ৭৮ শতাংশ ব্যাখ্যা হয়ে যায়। উইগান অ্যাথলেটিকের প্রমোশন সম্ভাবনা নিয়ে লেখা পোস্টটা চার হাজারবার শেয়ার হয়েছিল, দ্য ফুটবল টাইমসে ফ্রিল্যান্স কলামের দরজা খুলে দিয়েছিল।
ওই গল্পের যে অংশটা কেউ মনে রাখে না — আমি সপ্তাহে সপ্তাহে মডেল আপডেট করতাম, আর প্রতিটা ভেরিয়েবল পুনরুৎপাদনযোগ্য না হওয়া পর্যন্ত লিখতাম না। পদ্ধতির নোট, নমুনার আকার, ত্রুটির সীমা, পুনরুৎপাদনযোগ্য কর্মপ্রবাহ — এগুলো আমার লেখার অলংকার ছিল না, ছিল শর্ত।
আজ রাতে যে ফাইলটা সামনে আছে, তার সাথে ওই শর্তের কোনো সম্পর্ক নেই। কারণটা স্পষ্ট: ওখানে সংখ্যাটাই নেই।

স্কিমায় একটাই সংকেত বেঁচে ছিল — ডোমেইন লেবেল: cricket_asia। এশীয় প্রেক্ষাপটে ক্রিকেট। কিন্তু ওই লেবেলটা একটা ক্লাসিফায়ারের অনুমান, প্রমাণ নয়। যে ক্লাসিফায়ার একটা শিরোনাম খুঁজে পায়নি, একটাও বাক্য খুঁজে পায়নি, তার দেওয়া লেবেলও ততটাই অবিশ্বাস্য। লেবেলটা ফাইলের নাম থেকে আসতে পারে, মেটাডেটা থেকে আসতে পারে, নয়তো আগের কোনো সূত্রের ইঙ্গিত থেকেও আসতে পারে।
এখানেই আমার চেনা একটা কনস্ট্রেইন্ট ফিরে আসে। ঢাকার প্রেসবক্স থেকে লন্ডনের নিউজরুম — দুই জায়গায় তথ্য একইভাবে তৈরি হয় না। বাংলাদেশ ক্রিকেট বোর্ডের অনেক বিজ্ঞপ্তি আসে পিডিএফ-এ, কখনো ছবিতে, কখনো দুই ভাষায় মেশানো। ওসব ফেচ করে খালি স্ট্রিং পাওয়া খুব সহজ। ভারত, পাকিস্তান, শ্রীলঙ্কা — একই গল্প। বিশ্লেষণ তখনই যাত্রা করে, যখন ডেটা তৈরির প্রক্রিয়াটাই মেলে। পাইপলাইনের ক্ষেত্রেও ঠিক একই কথা খাটে: জেনেরিক এক্সট্রাকশন স্কিম উপমহাদেশের প্রেস বিজ্ঞপ্তিতে বসিয়ে দিলে যা ফেরে, সেটা তথ্য নয়, তথ্যের ছায়া।
এই ছায়াটা কীভাবে তৈরি হয়, তার চারটা চেনা রাস্তা আছে। একটা — খালি বা ব্যর্থ ফেচ; প্রতিবেদনের মূল অংশ স্টেজ-১ পর্যন্ত পৌঁছায়ইনি, পেওয়াল বা জাভাস্ক্রিপ্টে রেন্ডার হওয়া পৃষ্ঠা বা ব্লক করা ক্রলার আটকে দিয়েছে। আরেকটা — পার্সারের আগেই ছাঁটাই, কনটেন্ট পাঠানো হয়েছে খালি স্ট্রিং বা নাল হিসেবে। তৃতীয়টা — স্কিম নির্গত হয়েছে জনবসতিহীন অবস্থায়; মডেল বৈধ একটা টেমপ্লেট ফিরিয়ে দিয়েছে ডিফল্ট মান দিয়ে, ব্যর্থতা স্বীকার করার বদলে। চতুর্থটা — ভুল ইনপুট রাউট হয়েছে; স্টাব, ইনডেক্স পাতা, নয়তো কোনো ক্যাপশনের টুকরো।
তৃতীয় কারণটাই সবচেয়ে ভয়ংকর। যে পাইপলাইন সুগঠিত খালি ফাইল বের করতে পারে, সে সেগুলো নীরবে পরের ধাপে পাঠিয়ে দেবে। লাইনটা মসৃণ থাকবে। ড্যাশবোর্ড সবুজ থাকবে। আর নিচের কেউ একটা ফাঁকা ঘর পূরণ করতে বসবে।
আগে ঠিক করে নিতে হবে, স্টেজ-১ শেষ পর্যন্ত কী ধরবে। প্রতিবেদনের ইউআরএল, প্রকাশক, লেখকের নাম, ডেটলাইন আর প্রকাশের সময়। প্রতিবেদনের ধরন — রিপোর্ট, বিশ্লেষণ, মতামত, প্রেস রিলিজ, নাকি সংকলন — এবং সেই সিদ্ধান্তের পক্ষে লেখার ভেতর থেকে টেক্সটুয়াল প্রমাণ। অন্তত পাঁচ থেকে দশটা পরমাণু তথ্যবিন্দু, প্রতিটার গায়ে লেখার ভেতরকার নিজস্ব সূত্র। ভূমিকা-ট্যাগ দেওয়া নামযুক্ত সত্তা — ব্যক্তি, সংস্থা, ঘটনা, ভেন্যু। উদ্ধৃত আর বর্ণিত অংশের পার্থক্য থেকে অনুমিত অবস্থান ও উদ্দেশ্য। আর একটা স্পষ্ট নাল ফ্ল্যাগ, যাতে পরের ধাপগুলো চলতে অস্বীকার করতে পারে।
এশীয় ক্রিকেটের বীটটা কেন সবচেয়ে বিপজ্জনক, সেটা আলাদা করে ভাবতে হয়। এই বীট নামযুক্ত বোর্ডে ভরা — বিকেবি, বিসিসিআই, পিসিবি, এসএলসি, এসিসি। ভরা কর্মকর্তায়, ভরা বিবাদে। ধরা যাক ডোমেইন লেবেলটা দেখে মডেল সিদ্ধান্ত নিল, বিষয়টা "এশিয়া কাপের সূচি নিয়ে বোর্ডগুলোর টানাপোড়েন"। এখন খালি ঘরগুলো ভরবে কী দিয়ে? একটা বিশ্বাসযোগ্য বোর্ডের নাম, একটা বিশ্বাসযোগ্য কর্মকর্তার নাম, একটা বিশ্বাসযোগ্য তারিখ।
এখানেই ক্ষতিটা অসম। স্কোরকার্ডে একটা ভুল তারিখ ধরা পড়ে, কারণ পাঠকের হাতে মিলিয়ে দেখার জায়গা থাকে। কিন্তু "এক কর্মকর্তা নাম প্রকাশ না করার শর্তে বলেছেন" — এই বাক্যে হাত দেওয়ার জায়গা নেই। পাঠক মূল উৎসে না গেলে বুঝতেই পারবেন না যে উৎসটা কখনো ছিলই না। বানানো তথ্য যখন ডোমেইনের ভাষায় দক্ষ হাতে লেখা হয়, তখন সেটা মিথ্যার মতো শোনায় না — সাংবাদিকতার মতো শোনায়। আর সেটাই সবচেয়ে খারাপ ব্যর্থতা: আত্মবিশ্বাসী, ডোমেইনের গন্ধমাখা উদ্ভাবন।
২০১৮ সালে রাশিয়ায় ইংল্যান্ডের সেট পিস নিয়ে কাজ করার সময় এই শিক্ষাটা পাকা হয়। ৬৮টা কর্নার আর ফ্রি কিক কোড করেছিলাম — ব্লকার, রান, ডেলিভারির জোন, চাপ। ইংল্যান্ড টুর্নামেন্টে ১২টা গোল করেছিল, তার ৯টাই ডেড বল থেকে। রিপোর্টে দেখিয়েছিলাম, হ্যারি ম্যাগুইয়ারের নিয়ার-পোস্ট রান ম্যাচপ্রতি ২.৪টা সুযোগ তৈরি করছিল। প্রতিটা টেপ দুইবার দেখেছি, তারপর একটা পুনর্ব্যবহারযোগ্য ট্যাক্সোনমি দাঁড় করিয়েছি। ওখান থেকে শেখা একটাই: গোলকে প্রশংসা করা, আর যে পুনরাবৃত্তি গোলটা তৈরি করেছে তাকে বর্ণনা করা — দুটো আলাদা পেশা।
২০২০ সালে স্টেডিয়ামের নীরবতা মাপতে গিয়ে ৯১৮টা কোভিড-পূর্ব বুন্দেসলিগা ম্যাচ আর ৮৩টা দর্শকশূন্য ম্যাচ জোড়া লাগিয়েছিলাম। ঘরের সুবিধা ম্যাচপ্রতি ০.৩৬ গোল থেকে নেমে ০.১৯-এ এসেছিল, ঘরের দলের হলুদ কার্ড কমেছিল ১২ শতাংশ। ১২০০ সেট পিস ট্র্যাক করেছিলাম, রেফারি পক্ষপাত পরীক্ষা করতে। রিপোর্টটা প্রজেক্ট রিস্টার্টের প্রস্তুতি নেওয়া একটা চ্যাম্পিয়নশিপ ক্লাবকে দিয়েছিলাম, ওরা অ্যাওয়ে ম্যাচের রুটিন বদলেছিল।
ওই কাজের সবচেয়ে দামি কলামটা কোনো সংখ্যা ছিল না। ছিল "অজানা" কলামটা। যেখানে লিখে রাখতাম — এই ম্যাচে ভিড়ের তথ্য নেই, আবহাওয়ার রিডিং নেই, ভ্রমণের সময়সূচি পাওয়া যায়নি। একটা ফাঁকা ঘর নিজেও ডেটা, যদি সেটাকে ফাঁকা বলে স্বীকার করা হয়।
এখন কেউ বলতে পারেন, সমাধান সহজ — পাইপলাইনটা আবার চালাও।
আবার চালালে সমস্যা মিটবে না, কারণ সমস্যাটা এক্সিকিউশনে নয়, নকশায়। পাইপলাইনগুলো এখনো সম্পূর্ণতার ভিত্তিতে বিচার করা হয়, সততার ভিত্তিতে নয়। যে মডেল প্রতিটা ফিল্ড পূরণ করতে পারল, সে পুরস্কার পায়। যে মডেল তেরোটা ঘর ফাঁকা রাখল, সে ব্যর্থ। ফলে মডেলকে শেখানো হয় চুপচাপ ভরাট করার কৌশল।

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

তাহলে সামনের রাউন্ডে কোন সংকেতটা দেখবেন? একটা শুধু — ব্যর্থতার ফ্ল্যাগ। কোনো ভেন্ডর বা টিম যদি দেখাতে না পারে যে ওদের পাইপলাইন ফাঁকা হাতে ফিরলে কীভাবে চিৎকার করে, তবে বুঝবেন ওটা ব্যর্থতার জন্য ডিজাইন করা হয়নি। ডেমোয় একটা ফিল্ডও যদি STATUS: EXTRACTION_FAILED না থাকে, তবে ওই সিস্টেম আজ না কাল একটা নীরব মিথ্যা জন্ম দেবে।
আর আমার নিজের প্রশ্নটা হলো এই — কালকের প্রথম পাতার ঠিক ওপরে, স্টেজ-১ থেকে স্টেজ-২-এর পথে, কতগুলো "প্রযোজ্য নয়" নথি ইতিমধ্যেই নীরবে যাত্রা করছে?
