ভুল তথ্য ও অ্যালগরিদমিক অ্যামপ্লিফিকেশন
এই পাঠে যা শিখবেন
- কেন বেশিরভাগ ফিড/রিকমেন্ডেশন অ্যালগরিদম এনগেজমেন্ট-অপ্টিমাইজিং হিসেবে ডিজাইন করা হয়
- এনগেজমেন্ট ও সত্যতার মধ্যে পারস্পরিক সম্পর্ক কেন নিখুঁত নয় — এবং কেন এটি একটি প্রক্সি-মেট্রিক সমস্যা
- Python দিয়ে একটি প্রকৃত র্যাংকিং হিসাব — কীভাবে খাঁটি এনগেজমেন্ট-র্যাংকিং সত্যতা-নিরপেক্ষভাবে উচ্চ-এনগেজমেন্ট কনটেন্টকে উপরে তুলে আনে
- কেন এই সমস্যাটি M46-এর কনটেন্ট মডারেশনের চেয়ে ভিন্ন — মডারেশন জিজ্ঞেস করে "এটা কি থাকবে?", অ্যামপ্লিফিকেশন জিজ্ঞেস করে "এটা কতটা ছড়াবে?"
১ · এনগেজমেন্ট-অপ্টিমাইজেশন কীভাবে কাজ করে
একটি নিউজফিড বা "আপনার জন্য প্রস্তাবিত" অ্যালগরিদমকে সরাসরি "কোনটা সত্য, কোনটা গুরুত্বপূর্ণ" শেখানো কঠিন — কিন্তু "ব্যবহারকারী কোনটায় ক্লিক করলো, কতক্ষণ দেখলো, কী শেয়ার করলো" পরিমাপ করা সহজ। তাই বাস্তবে অনেক রিকমেন্ডেশন সিস্টেম এনগেজমেন্টEngagementব্যবহারকারীর সাথে কনটেন্টের মিথস্ক্রিয়ার পরিমাপ — ক্লিক, লাইক, কমেন্ট, শেয়ার, দেখার সময় ইত্যাদি একত্রে।-কে একটি ব্যবহারযোগ্য প্রক্সি মেট্রিক হিসেবে ব্যবহার করে সেই কনটেন্টকে উপরে তোলে যা এনগেজমেন্ট বেশি তৈরি করবে বলে অনুমান করা হয়। এই নকশা নিজে থেকে খারাপ উদ্দেশ্যপ্রণোদিত নয় — সমস্যাটি প্রক্সি ও প্রকৃত লক্ষ্যের মধ্যে ফাঁকে লুকিয়ে থাকে।
গবেষণা ও সাংবাদিকতায় বহুল-আলোচিত একটি পর্যবেক্ষণ হলো — চরম আবেগ (রাগ, ভয়, বিস্ময়) জাগানো কনটেন্ট গড়ে বেশি ক্লিক ও শেয়ার পেতে থাকে, আর মিথ্যা বা অতিরঞ্জিত দাবি প্রায়ই সত্য, সতর্ক, nuanced প্রতিবেদনের চেয়ে বেশি "সেনসেশনাল" হয়ে থাকে বলেই বেশি এনগেজমেন্ট পায়। এর মানে এই নয় যে সব ভাইরাল কনটেন্ট মিথ্যা, বা সব সত্য কনটেন্ট কম এনগেজমেন্ট পায় — কিন্তু গড়ে একটি পক্ষপাত (bias) তৈরি হওয়ার সম্ভাবনা থেকে যায়, যা বিশুদ্ধভাবে এনগেজমেন্ট-চালিত র্যাংকিং সিস্টেমে ধীরে ধীরে জমা হতে পারে।
২ · একটি প্রকৃত র্যাংকিং হিসাব
নিচের কোড সেলে ১৫টি সিন্থেটিক পোস্টের একটি তালিকা আছে, প্রতিটির একটি এনগেজমেন্ট-স্কোর (কাল্পনিক ইউনিটে) এবং সেটি মিথ্যা কিনা তার লেবেল সহ। কোডটি একটি বিশুদ্ধ এনগেজমেন্ট-অপ্টিমাইজিং র্যাংকার হিসেবে কাজ করে — শুধুমাত্র এনগেজমেন্ট-স্কোর অনুযায়ী পোস্টগুলো র্যাংক করে (সত্যতার কোনো তথ্য ব্যবহার না করেই), তারপর টপ-৫ র্যাংকড পোস্টে মিথ্যা পোস্টের অনুপাত পুরো তালিকার অনুপাতের সাথে তুলনা করে।
# একটি সিন্থেটিক, ইলাস্ট্রেটিভ উদাহরণ -- বাস্তব কোনো প্ল্যাটফর্মের ডেটা নয়
# প্রতিটি পোস্ট: এনগেজমেন্ট স্কোর ও এটি মিথ্যা কিনা (র্যাংকার এই দ্বিতীয় তথ্যটি কখনোই দেখে না)
posts = [
{"id": 7, "engagement": 650, "is_false": False},
{"id": 1, "engagement": 980, "is_false": True},
{"id": 12, "engagement": 360, "is_false": False},
{"id": 3, "engagement": 860, "is_false": True},
{"id": 9, "engagement": 540, "is_false": True},
{"id": 5, "engagement": 740, "is_false": False},
{"id": 15, "engagement": 180, "is_false": False},
{"id": 2, "engagement": 875, "is_false": False},
{"id": 11, "engagement": 420, "is_false": False},
{"id": 4, "engagement": 790, "is_false": True},
{"id": 13, "engagement": 300, "is_false": False},
{"id": 6, "engagement": 700, "is_false": True},
{"id": 10, "engagement": 480, "is_false": False},
{"id": 8, "engagement": 600, "is_false": False},
{"id": 14, "engagement": 240, "is_false": False},
]
def false_ratio(post_list):
if not post_list:
return 0.0
return sum(1 for p in post_list if p["is_false"]) / len(post_list)
# বিশুদ্ধ এনগেজমেন্ট-অপ্টিমাইজিং র্যাংকিং: শুধু এনগেজমেন্ট স্কোর অনুযায়ী descending sort
ranked_feed = sorted(posts, key=lambda p: p["engagement"], reverse=True)
TOP_N = 5
top_posts = ranked_feed[:TOP_N]
overall_false_ratio = false_ratio(posts)
top_false_ratio = false_ratio(top_posts)
print("টপ", TOP_N, "র্যাংকড পোস্ট (এনগেজমেন্ট অনুযায়ী):")
for p in top_posts:
label = "মিথ্যা" if p["is_false"] else "সত্য/নিরপেক্ষ"
print(f" পোস্ট #{p['id']:<3} এনগেজমেন্ট={p['engagement']:<5} ({label})")
print(f"\nপুরো তালিকায় মিথ্যা পোস্টের অনুপাত: {overall_false_ratio:.2f} ({overall_false_ratio*100:.0f}%)")
print(f"টপ {TOP_N}-এ মিথ্যা পোস্টের অনুপাত: {top_false_ratio:.2f} ({top_false_ratio*100:.0f}%)")
একটি অ্যালগরিদমের "মিথ্যা তথ্য ছড়ানোর কোনো উদ্দেশ্য" না থাকলেও, যদি সেটি এমন একটি প্রক্সি মেট্রিক (এনগেজমেন্ট) সর্বোচ্চ করতে অপ্টিমাইজ করে যা সত্যতার সাথে অসম্পূর্ণভাবে সম্পর্কিত, তাহলে সিস্টেমগতভাবে সেনসেশনাল/মিথ্যা কনটেন্ট এগিয়ে যাওয়ার একটি কাঠামোগত প্রবণতা তৈরি হতে পারে। এটি M9-এ পরে বিস্তারিত আলোচিত Goodhart's Law-এর একটি বাস্তব-জগতের উদাহরণ — একটি প্রক্সিকে সরাসরি লক্ষ্যবস্তু বানালে সেটি প্রকৃত লক্ষ্যের একটি ভালো পরিমাপক হিসেবে থাকা বন্ধ করে দিতে পারে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ উপরের কোডে র্যাংকার কি কোথাও সরাসরি "এটা মিথ্যা, তাই কম দেখাও" এই যুক্তি ব্যবহার করে?
না। sorted() কলটি শুধুমাত্র p["engagement"] অনুযায়ী সাজায় —
is_false ফিল্ডটি র্যাংকিং লজিকে কোথাও ব্যবহৃতই হয় না, শুধু পরে ফলাফল বিশ্লেষণের
জন্য গণনা করা হয়েছে। এটিই মূল বিষয় — অ্যালগরিদমকে "মিথ্যা প্রচার করো" এমন কোনো নির্দেশ না দিয়েও,
শুধু এনগেজমেন্ট অপ্টিমাইজ করার মধ্য দিয়েই এই skew তৈরি হতে পারে।
প্র ০২ এর মানে কি সব ভাইরাল/জনপ্রিয় কনটেন্টই মিথ্যা, বা এনগেজমেন্ট-ভিত্তিক র্যাংকিং ব্যবহারই একটি ভুল?
না, এটি একটি ভুল সরলীকরণ হবে। বেশিরভাগ ভাইরাল কনটেন্টই সত্য বা নিরপেক্ষ, আর এনগেজমেন্ট সংকেত (কোন কনটেন্ট মানুষের কাছে প্রাসঙ্গিক মনে হচ্ছে তা বোঝার একটি উপায়) সম্পূর্ণ অকেজো নয়। মূল বিষয়টি একটি গড়পড়তা প্রবণতা — সেনসেশনাল/মিথ্যা কনটেন্ট গড়ে সামান্য বেশি এনগেজমেন্ট পেতে পারে, যা বিশুদ্ধভাবে এনগেজমেন্ট-চালিত সিস্টেমে সময়ের সাথে জমা হতে পারে। এই কারণেই অনেক প্ল্যাটফর্ম এনগেজমেন্টের পাশাপাশি অন্যান্য সংকেত (উৎসের নির্ভরযোগ্যতা, ফ্যাক্ট-চেক ফ্ল্যাগ) যোগ করার চেষ্টা করে।
প্র ০৩
উপরের কোডে TOP_N-কে ৫ থেকে ১৫ (পুরো তালিকা) করে দিলে top_false_ratio কী
হবে, এবং কেন?
TOP_N = 15 করলে top_posts পুরো তালিকার সমান হয়ে যাবে, তাই
top_false_ratio ঠিক overall_false_ratio-এর সমান (৩৩%) হয়ে যাবে —
কারণ সাজানোর ক্রম যাই হোক না কেন, পুরো তালিকা নিলে অনুপাত অপরিবর্তিত থাকে। skew শুধুমাত্র তখনই
দেখা যায় যখন একটি সাবসেট (যেমন টপ-৫, যা বাস্তবে ব্যবহারকারী প্রথমে দেখে) আলাদাভাবে বিবেচনা
করা হয়।
অনুশীলন
-
চিন্তা করুন: একটি প্ল্যাটফর্ম কীভাবে এনগেজমেন্টের পাশাপাশি "নির্ভরযোগ্যতা" সংকেতও
র্যাংকিংয়ে যোগ করতে পারে, বাক-স্বাধীনতাকে সম্পূর্ণ উপেক্ষা না করে?
কিছু সম্ভাব্য পদ্ধতি — স্বাধীন ফ্যাক্ট-চেকারদের ফ্ল্যাগকে র্যাংকিং স্কোরে একটি নেতিবাচক ফ্যাক্টর হিসেবে যোগ করা (সরিয়ে ফেলা নয়, শুধু কম দেখানো), উৎসের ঐতিহাসিক নির্ভরযোগ্যতা বিবেচনায় নেওয়া, অথবা "দ্রুত ছড়িয়ে পড়া" কনটেন্টকে অতিরিক্ত যাচাইয়ের জন্য সাময়িকভাবে ধীর করে দেওয়া (L46-এর priority-queue ধারণার সাথে সম্পর্কিত)। প্রতিটি পদ্ধতিই নিজস্ব নতুন ট্রেড-অফ তৈরি করে।
-
পরীক্ষা করুন: উপরের কোড সেলে পোস্ট #১-এর
engagementমান ৯৮০ থেকে ২০০-এ কমিয়ে Run চাপুন —top_false_ratioকীভাবে বদলায়?পোস্ট #১-এর এনগেজমেন্ট ২০০ করলে সেটি আর টপ-৫-এ থাকবে না, কিন্তু নতুন টপ-৫ হবে #২ (৮৭৫), #৩ (৮৬০), #৪ (৭৯০), #৫ (৭৪০), #৬ (৭০০) — কারণ #৬-এর এনগেজমেন্ট #১-এর নতুন কম মানের চেয়ে বেশি, তাই খালি হওয়া জায়গাটি #৬ পূরণ করে। এই নতুন টপ-৫-এ মিথ্যা পোস্ট #৩, #৪ ও #৬ — অর্থাৎ
top_false_ratioএখনও3/5 = 60%, অপরিবর্তিত থাকবে। কারণ #১ (মিথ্যা) সরে গেলেও তার জায়গায় আরেকটি মিথ্যা-লেবেলযুক্ত পোস্ট (#৬) উঠে আসে — এটি দেখায় যে একটি একক পোস্ট বদলালেই সামগ্রিক skew পরিসংখ্যান বদলে যায় না, পুরো তালিকার গঠনের উপর নির্ভর করে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পরবর্তী পাঠ: অটোমেশন, চাকরি ও অর্থনৈতিক ব্যাঘাত L48 প্রযুক্তির সামাজিক প্রভাব নিয়ে আলোচনা চলতে থাকে — এবার শ্রমবাজারের উপর প্রভাব নিয়ে।
- M9 · Goodhart's Law in AI Systems সহোদর পাঠ এই পাঠের এনগেজমেন্ট-প্রক্সি সমস্যাটি Goodhart's Law-এর একটি বাস্তব-জগতের প্রয়োগ — সেই পাঠে মূল তত্ত্বটি বিস্তারিত।
- আগের পাঠ: বড় স্কেলে কনটেন্ট মডারেশন L46 "কোন কনটেন্ট থাকবে" বনাম "কোন কনটেন্ট কতটা ছড়াবে" — দুটি সম্পর্কিত কিন্তু ভিন্ন প্রশ্ন।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Programming Languages & Compiler Design, Software Engineering & Git, Theory of Computation, Engineering Economics, Full-Stack Web Frameworks, Mobile App Development ও Ethics in Computing & AI Safety — সব এক জায়গায়।