পাঠ ২৯ · ৫৭-এর মধ্যে · মডিউল ৭
Home / AI Courses / AI Ethics / হ্যালুসিনেশন

হ্যালুসিনেশন ও মিসইনফরমেশন রিস্ক

Hallucination & misinformation risk
১০ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • হ্যালুসিনেশন কী এবং এটি কেন LLM-এর একটি কাঠামোগত ঝুঁকি (বাগ নয়)
  • একটি সত্যিকারের, চলমান ফেইথফুলনেস-চেকিং ডেমো — সোর্স-গ্রাউন্ডেড বনাম fabricated claim
  • হ্যালুসিনেশন প্রশমনের বাস্তবসম্মত কৌশল (গ্রাউন্ডিং/retrieval, কনফিডেন্স সিগনাল, human review)
  • এই পাঠ (জেনারেশন-সাইড) বনাম L33 (অ্যামপ্লিফিকেশন-সাইড) — পার্থক্যটি স্পষ্টভাবে বোঝা

১ · হ্যালুসিনেশন কী এবং কেন এটি ঘটে

হ্যালুসিনেশনHallucinationএকটি LLM যখন সম্পূর্ণ আত্মবিশ্বাসের সাথে এমন তথ্য, উদ্ধৃতি, বা বিস্তারিত তৈরি করে যা মিথ্যা বা কোনো নির্ভরযোগ্য উৎসে সমর্থিত নয়। বলতে বোঝায় একটি LLM এমন তথ্য তৈরি করা যা শোনায় বিশ্বাসযোগ্য এবং সাবলীল, কিন্তু আসলে মিথ্যা বা কোনো নির্ভরযোগ্য উৎসে সমর্থিত নয় — একটি ভুয়া উদ্ধৃতি, একটি বানোয়াট পরিসংখ্যান, একটি অস্তিত্বহীন গবেষণাপত্রের রেফারেন্স। L27-এ আমরা দেখেছি কেন এটি ঘটে: মডেল আসলে পরবর্তী টোকেনের সম্ভাব্যতা হিসাব করে, কোনো external ground-truth ডেটাবেসের সাথে মিলিয়ে "যাচাই" করে না। যখন প্রশ্নটি এমন এলাকায় পড়ে যেখানে ট্রেনিং ডেটায় স্পষ্ট, ধারাবাহিক প্যাটার্ন নেই, মডেল তবুও ভাষাগতভাবে সাবলীল একটি continuation তৈরি করে — এবং সেটি প্রায়ই বাস্তবতার সাথে মেলে না।

এটি গুরুত্বপূর্ণ: হ্যালুসিনেশন কোনো "বাগ" নয় যা একবার প্যাচ করে সারিয়ে ফেলা যায় — এটি next-token prediction-ভিত্তিক জেনারেশনের একটি কাঠামোগত বৈশিষ্ট্য। ফাইন-টিউনিং ও RLHF (L28) হ্যালুসিনেশনের হার কমাতে পারে, কিন্তু সম্পূর্ণ নির্মূল করার কোনো গ্যারান্টি নেই।

২ · একটি সত্যিকারের ফেইথফুলনেস চেকার

নিচের কোডে একটি ছোট, ইচ্ছাকৃতভাবে সরল "ফেইথফুলনেস চেকার" তৈরি করা হয়েছে — এটি কোনো বাস্তব NLI (Natural Language Inference) মডেল নয়, বরং একটি illustrative substring/fact-membership চেক: প্রতিটি claim-এর জন্য কয়েকটি "key fact" (গুরুত্বপূর্ণ শব্দগুচ্ছ) চিহ্নিত করা আছে, এবং চেকার সেগুলো সোর্স ডকুমেন্টে সত্যিই সাব-স্ট্রিং হিসেবে আছে কি না তা যাচাই করে। একটি claim তখনই "faithful" যদি তার সব key fact সোর্সে পাওয়া যায়; একটি key fact অনুপস্থিত থাকলেই সেটি হ্যালুসিনেশন হিসেবে চিহ্নিত হয়।

উৎস ডকুমেন্ট (source document) জেনারেটেড claim + key facts তালিকা faithfulness checker প্রতিটি key fact কি সোর্সে আছে? ✅ FAITHFUL সব key fact উৎসে পাওয়া গেছে ❌ HALLUCINATION কমপক্ষে একটি fact উৎসে নেই
একই check_faithfulness() ফাংশন প্রতিটি claim-এর জন্য আলাদাভাবে গণনা করে — কোনো hardcoded লেবেল নেই।
Python
source_document = (
    "২০২৩ সালে কোম্পানি X ৫০০ কোটি টাকা রাজস্ব আয় করেছে। "
    "কোম্পানির প্রধান কার্যালয় ঢাকায় অবস্থিত। "
    "কোম্পানিটি ২০১০ সালে প্রতিষ্ঠিত হয়েছিল এবং বর্তমানে ১,২০০ জনেরও বেশি কর্মী কাজ করে।"
)

claims = [
    {
        "text": "কোম্পানি X-এর প্রধান কার্যালয় ঢাকায় অবস্থিত।",
        "key_facts": ["প্রধান কার্যালয়", "ঢাকায়"],
    },
    {
        "text": "কোম্পানি X ২০২৩ সালে ৫০০ কোটি টাকা রাজস্ব আয় করেছে।",
        "key_facts": ["২০২৩ সালে", "৫০০ কোটি টাকা"],
    },
    {
        # fabricated -- সোর্সে এই তথ্য কোথাও নেই
        "text": "কোম্পানি X-এর ২,৫০০ জন কর্মী আছে এবং এর প্রধান কার্যালয় সিঙ্গাপুরে।",
        "key_facts": ["২,৫০০ জন", "সিঙ্গাপুরে"],
    },
    {
        # আংশিক fabricated -- ঢাকায় সত্য, কিন্তু ২০০৫ সাল ভুল (সোর্স অনুযায়ী ২০১০)
        "text": "কোম্পানি X ঢাকায় অবস্থিত এবং এটি ২০০৫ সালে প্রতিষ্ঠিত হয়েছিল।",
        "key_facts": ["ঢাকায়", "২০০৫ সালে"],
    },
]

def check_faithfulness(claim, source):
    missing = [fact for fact in claim["key_facts"] if fact not in source]
    return len(missing) == 0, missing

for claim in claims:
    faithful, missing = check_faithfulness(claim, source_document)
    verdict = "FAITHFUL (গ্রাউন্ডেড)" if faithful else "HALLUCINATION (উৎসে অনুপস্থিত তথ্য)"
    print(f"দাবি: {claim['text']}")
    print(f"  → {verdict}")
    if missing:
        print(f"  → উৎসে পাওয়া যায়নি: {missing}")
    print()

    
লক্ষ্য করুন — চতুর্থ claim-টি আংশিক সত্য ("ঢাকায় অবস্থিত" ঠিক আছে) কিন্তু একটি fabricated অংশও ("২০০৫ সালে প্রতিষ্ঠিত" — সোর্স অনুযায়ী প্রকৃত সাল ২০১০) রয়েছে। যেহেতু check_faithfulness() সব key fact-কেই আলাদাভাবে যাচাই করে, একটি মাত্র fabricated অংশও পুরো claim-টিকে হ্যালুসিনেশন হিসেবে চিহ্নিত করার জন্য যথেষ্ট — এটি বাস্তব-জীবনের একটি গুরুত্বপূর্ণ প্যাটার্নও প্রতিফলিত করে: হ্যালুসিনেশন প্রায়ই সত্য ও মিথ্যা তথ্যের একটি মিশ্রণ হিসেবে আসে, যা এটিকে চিহ্নিত করা আরও কঠিন করে তোলে।

৩ · এই সরলীকৃত ডেমোর সীমাবদ্ধতা

সততার সাথে বলা দরকার — উপরের substring-ম্যাচিং পদ্ধতিটি একটি illustrative সরলীকরণ, বাস্তব NLI (Natural Language Inference) মডেল নয়। বাস্তব-বিশ্বের ফেইথফুলনেস-চেকিং সিস্টেমকে সামলাতে হয়: প্যারাফ্রেজিং ("ঢাকায় অবস্থিত" বনাম "রাজধানীতে হেডকোয়ার্টার"), সংখ্যাগত রূপান্তর (৫০০ কোটি বনাম ৫ বিলিয়ন), এবং implicit যুক্তি (সোর্সে সরাসরি বলা নেই কিন্তু যৌক্তিকভাবে অনুসিদ্ধ হয় এমন দাবি)। এই সবকিছু সঠিকভাবে ধরতে বাস্তব সিস্টেমে আরও জটিল semantic-similarity বা NLI মডেল ব্যবহার করা হয় — কিন্তু মূল নীতিটি একই থাকে: generation থেকে verification আলাদা করে, স্বাধীনভাবে যাচাই করা।

গ্রাউন্ডিং / Retrieval
মডেলকে উত্তর দেওয়ার আগে নির্ভরযোগ্য সোর্স ডকুমেন্ট খুঁজে দেওয়া (RAG) — যাতে জেনারেশন সেই সোর্সের উপর ভিত্তি করে হয়, শুধু প্যারামেট্রিক "মেমরি" থেকে না আসে।
কনফিডেন্স সিগনাল
মডেলকে তার নিজের অনিশ্চয়তা প্রকাশ করতে উৎসাহিত করা ("আমি নিশ্চিত নই") — যদিও এটি নির্ভরযোগ্যভাবে বাস্তবায়ন করা কঠিন একটি সক্রিয় গবেষণা ক্ষেত্র।
Human review
উচ্চ-স্টেক প্রেক্ষাপটে (মেডিকেল, লিগ্যাল, আর্থিক) মানুষের যাচাই ছাড়া LLM আউটপুট সরাসরি ব্যবহার না করা — বিশেষভাবে ফ্যাক্ট-নির্ভর দাবির ক্ষেত্রে।
L33 (মিসইনফরমেশন অ্যামপ্লিফিকেশন)-এর সাথে পার্থক্য

এই পাঠ কভার করে জেনারেশন-সাইড ঝুঁকি — একটি মডেল নিজে থেকে ভুল তথ্য তৈরি করা। M8-এর L33 পাঠ কভার করবে সম্পূর্ণ ভিন্ন একটি সমস্যা — ডিস্ট্রিবিউশন-সাইড ঝুঁকি: engagement-অপ্টিমাইজড রিকমেন্ডেশন অ্যালগরিদম কীভাবে (এমনকি মানুষের তৈরি) সেনসেশনাল/মিথ্যা কনটেন্টকে বেশি ছড়িয়ে দিতে পারে। দুটো সমস্যা সম্পর্কিত কিন্তু আলাদা — একটি হলো "ভুল তথ্য তৈরি হওয়া", অন্যটি হলো "ভুল তথ্য ছড়িয়ে পড়া"।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের ডেমোর চতুর্থ claim-টি আংশিক সত্য, তবুও পুরোপুরি "HALLUCINATION" হিসেবে চিহ্নিত হয়েছে। এটা কি ন্যায্য?

বাস্তবতার নিরিখে এটি ন্যায্য একটি নকশা সিদ্ধান্ত — একটি claim-এ যদি একটিও fabricated অংশ থাকে, পাঠক পুরো claim-টিকে "নির্ভরযোগ্য" ভেবে ভুল সিদ্ধান্ত নিতে পারেন (যেমন ২০০৫ সালকে সঠিক প্রতিষ্ঠা-সাল ধরে নেওয়া)। তাই "সব key fact ভেরিফায়েড হলে তবেই faithful" — এই কঠোর মানদণ্ডটি বাস্তব-বিশ্বের ফ্যাক্ট-চেকিং সিস্টেমেও সাধারণ, কারণ আংশিক-ভুল তথ্য প্রায়ই সম্পূর্ণ-ভুল তথ্যের চেয়েও বেশি বিভ্রান্তিকর হতে পারে (সত্য অংশ বিশ্বাসযোগ্যতা তৈরি করে)।

প্র ০২ check_faithfulness() ফাংশনটি সরাসরি substring ম্যাচিং করে। বাস্তব-বিশ্বে এই পদ্ধতি কোথায় ব্যর্থ হতে পারে বলে আপনার ধারণা?

যদি claim একই তথ্য ভিন্ন শব্দে বলে (প্যারাফ্রেজ) — যেমন "ঢাকায় হেডকোয়ার্টার" বনাম "প্রধান কার্যালয় ঢাকায়" — তাহলে exact substring না মিললেও তথ্যটি আসলে সঠিক হতে পারে, কিন্তু আমাদের সরল চেকার সেটাকে ভুলভাবে "hallucination" হিসেবে চিহ্নিত করবে (false positive)। উল্টোভাবে, সংখ্যাগত রূপান্তরেও (৫০০ কোটি বনাম ৫ বিলিয়ন) একই সমস্যা হতে পারে। এই কারণেই বাস্তব সিস্টেম semantic similarity/NLI ব্যবহার করে, শুধু exact string match নয়।

প্র ০৩ যদি একটি claim-এর key_facts তালিকা খালি ([]) হয়, উপরের কোড অনুযায়ী এর ফলাফল কী হবে এবং এটি কি একটি সমস্যা?

missing = [fact for fact in [] if ...] সবসময় খালি লিস্ট রিটার্ন করবে, তাই len(missing) == 0 সত্য হবে এবং claim-টি (ভুলভাবে) "FAITHFUL" হিসেবে চিহ্নিত হবে — এমনকি সেটি সম্পূর্ণ fabricated হলেও, কারণ কোনো key fact-ই যাচাই করার জন্য দেওয়া হয়নি। এটি দেখায় এই পদ্ধতির গুণমান সম্পূর্ণভাবে নির্ভর করে key_facts কতটা সম্পূর্ণ ও সঠিকভাবে চিহ্নিত করা হয়েছে তার উপর — একটি গুরুত্বপূর্ণ সীমাবদ্ধতা যা যেকোনো বাস্তব ফেইথফুলনেস-চেকিং সিস্টেমেও থেকে যায়।

অনুশীলন

  1. চিন্তা করুন: যদি source_document-এ "১,২০০ জনেরও বেশি কর্মী" এর বদলে শুধু "কর্মী কাজ করে" (সংখ্যা ছাড়া) লেখা থাকত, তৃতীয় claim-টির (২,৫০০ জন কর্মী দাবি করা) ফলাফলে কি কোনো পরিবর্তন হতো?

    না, কোনো পরিবর্তন হতো না — তৃতীয় claim ইতিমধ্যেই "২,৫০০ জন" এবং "সিঙ্গাপুরে" উভয় কারণেই হ্যালুসিনেশন হিসেবে চিহ্নিত হয়েছিল ("সিঙ্গাপুরে" কখনোই সোর্সে ছিল না)। তবে এটি একটি গুরুত্বপূর্ণ পয়েন্ট দেখায় — সংখ্যা সরিয়ে ফেললে "২,৫০০ জন" key fact-টিও আর মিলত না, তাই সেই দিক থেকেও ফলাফল অপরিবর্তিত (এখনও হ্যালুসিনেশন) থাকত।

  2. পরীক্ষা করুন: উপরের কোডে একটি নতুন claim যোগ করুন যার সব key fact সত্যিই সোর্সে আছে, কিন্তু বাক্যটি সোর্সের চেয়ে ভিন্ন শব্দক্রমে লেখা — Run চেপে দেখুন এটি সঠিকভাবে "FAITHFUL" হিসেবে ধরা পড়ে কি না।

    যতক্ষণ আপনার বেছে নেওয়া key_facts-এর প্রতিটি এন্ট্রি সোর্স টেক্সটে ঠিক সেই বানানে (exact substring হিসেবে) উপস্থিত থাকে, ততক্ষণ এটি সঠিকভাবে "FAITHFUL" হিসেবে চিহ্নিত হবে — বাক্যের বাকি অংশের শব্দক্রম যাই হোক না কেন, কারণ চেকার শুধু key_facts তালিকার এন্ট্রিগুলো পরীক্ষা করে, পুরো বাক্য গঠন নয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ নৈতিক ফ্রেমওয়ার্ক, বায়াস-ফেয়ারনেস, প্রাইভেসি, ট্রান্সপারেন্সি, AI অ্যালাইনমেন্ট, জেনারেটিভ AI/LLM এথিক্স, সামাজিক প্রভাব, গভর্নেন্স ও রেগুলেশন, সেক্টর-স্পেসিফিক এথিক্স ও এক্সিস্টেনশিয়াল রিস্ক বিতর্ক।
  • LLM কীভাবে কাজ করে L27 হ্যালুসিনেশন কেন ঘটে তার মূল কারণ — next-token prediction ও ট্রেনিং ডেটার ফ্রিকোয়েন্সি-ভিত্তিক আচরণ।
  • Ethics in Computing & AI Safety কোর্স সহোদর কোর্স সাধারণ কম্পিউটিং এথিক্স ও সেফটি-ক্রিটিক্যাল কেস স্টাডির একটি বিস্তৃত সার্ভে।
আগের পাঠ
RLHF ও ভ্যালু অ্যালাইনমেন্ট — কার মূল্যবোধ?