پدیده‌ی توهم (Hallucination) در LLMها: چرا اتفاق می‌افتد و چطور کنترلش کنیم؟

منتشر شده در 1405/06/11 | بازدید : 6 بار | زمان مطالعه : 15 دقیقه

تصور کنید در حال گفتگو با یک متخصص بسیار برجسته و با اعتماد به نفس بالا هستید. او به تمام سوالات حقوقی، تاریخی و علمی شما با تسلط کامل، استفاده از عبارات تخصصی و لحنی کاملاً متقاعدکننده پاسخ می‌دهد. اما ناگهان متوجه می‌شوید که این متخصص، یک واقعه تاریخی کاملاً خیالی را توصیف کرده، یک لینک خراب به عنوان منبع به شما ارائه داده یا کتابی را معرفی کرده که هرگز نوشته نشده است! این تجربه شوکه‌کننده، روبه‌رویی با پدیده توهم (Hallucination) در مدل‌های زبانی بزرگ (LLM) است.

وقتی هوش مصنوعی با قاطعیت کامل دروغ می‌گوید، کاربران احساس سردرگمی و عدم اعتماد می‌کنند. اما در واقع توهم یک خطای سیستمی تصادفی یا باگ معمولی نیست، بلکه یکی از ویژگی‌های ذاتی معماری مدل‌های احتمالی تولید متن است. در این نوشتار تخصصی و عمیق، قصد داریم ریشه‌های ریاضی و فنی این پدیده جذاب را بررسی کنیم و ابزارهایی علمی برای مهار و کنترل آن معرفی نماییم. اگر به مباحث پایه‌ای و فنی هوش مصنوعی علاقه‌مند هستید، پیشنهاد می‌کنیم مقالات قبلی وبلاگ ما شامل LLM چیست و چطور کار می‌کند؟ و تکنیک‌های کنترل خروجی در دمای مدل (Temperature)، Top-P و Top-K: چطور خلاقیت و دقت خروجی LLM را کنترل کنیم؟ را مطالعه فرمایید. درک این مفاهیم به شما کمک می‌کند برنامه‌هایی با رفتارهای پایدارتر و قابل اعتمادتر توسعه دهید.

خوابِ پریشانِ ماشین‌ها: وقتی هوش مصنوعی واقعیت را جعل می‌کند

مدل‌های زبانی بزرگ اساساً برای کپی‌برداری از پایگاه‌های داده یا جستجوی مستقیم وب طراحی نشده‌اند. آن‌ها موتورهای پیش‌بینی توکن بعدی هستند. وظیفه یک LLM این است که بر اساس میلیاردها پارامتر آموزش‌دیده، محتمل‌ترین کلمه بعدی را پس از متن ورودی شما محاسبه و تولید کند. این یعنی برای هوش مصنوعی، تفاوت ساختاری میان حقیقت تاریخی و یک دروغ کاملاً منسجم و منطقی وجود ندارد؛ هر دو صرفاً توالی‌هایی از کلمات با احتمالات ریاضی بالا هستند.

به عنوان یک مثال عینی، اگر از یک مدل زبانی بخواهید بیوگرافی کوتاهی از یک شخصیت تاریخی کمتر شناخته شده بنویسد، مدل به دلیل کمبود داده در لایه‌های پارامتری خود، ممکن است اطلاعات مربوط به سه شخصیت متفاوت با نام‌های مشابه را با هم ترکیب کرده و یک بیوگرافی منسجم اما کاملاً جعلی تولید کند. او جزئیات زندگی، اختراعات و افتخارات آن‌ها را به یک شخص موهوم نسبت می‌دهد.

توهم را می‌توان به خواب دیدن انسان تشبیه کرد. وقتی ما خواب می‌بینیم، مغز تکه‌های مختلف خاطرات، تصاویر و اطلاعات واقعی را برداشته و آن‌ها را به روش‌هایی کاملاً نو و فاقد منطق بیداری به هم متصل می‌کند. در روانشناسی شناختی انسان، این پدیده را افسانه‌سازی یا Confabulation می‌نامند که طی آن مغز تلاش می‌کند جاهای خالی حافظه را با اطلاعات ساختگی اما متقاعدکننده پر کند. مدل زبانی نیز دقیقاً همین کار را انجام می‌دهد؛ اطلاعات واقعی موجود در بردارهای خود را با هم ترکیب می‌کند و زمانی که با کمبود داده مواجه می‌شود، جاهای خالی را با کلمات به ظاهر درست پر می‌کند.

ریشه‌یابی توهم: چرا مدل‌های زبانی دروغ می‌گویند؟

دلایل متعددی در لایه‌های مختلف توسعه هوش مصنوعی وجود دارند که منجر به بروز توهم می‌شوند. بررسی این ریشه‌ها به ما اجازه می‌دهد دریابیم که چرا مهار مطلق توهم کاری بسیار دشوار است:

  • نقص و تضاد در داده‌های آموزشی (Training Data Noise): مدل‌های زبانی روی داده‌های عظیمی از اینترنت آموزش می‌بینند که شامل شایعات، اخبار دروغ، داستان‌های تخیلی و تضادهای علمی است. مدل نمی‌تواند به طور پیش‌فرض درستی این منابع را بسنجد.
  • گلوگاه اطلاعات و اتلاف فشرده‌سازی (Information Bottleneck): فشرده‌سازی صدها ترابایت متون اینترنت در قالب چند ده میلیارد پارامتر عددی (که در مقاله پارامتر و توکن توضیح داده شد)، مانند ذخیره یک ویدئوی بسیار باکیفیت به صورت یک فایل کم‌حجم MP4 است. در زمان بازپخش (استنتاج)، مدل مجبور است بخش‌های از دست رفته اطلاعات را از طریق احتمالات بازسازی کند که این فرآیند بازسازی منجر به تولید جزئیات ساختگی می‌شود.
  • تنظیمات پارامترهای دکودینگ (Decoding Strategy): همان‌طور که در مقاله Temperature توضیح دادیم، بالا رفتن مقدار دما تفاوت احتمالات توکن‌ها را کاهش می‌دهد. این کار شانس انتخاب کلمات عجیب و کم‌احتمال را بالا می‌برد که مستقیماً باعث ایجاد توهمات فکتیکال می‌شود.
  • پدیده مداهنه یا بله‌قربان‌گویی (Sycophancy): در فرآیند هم‌ترازی با بازخورد انسانی (RLHF)، مدل‌ها تمایل دارند پاسخ‌هایی تولید کنند که کاربر را خوشحال و تایید کند. اگر کاربر فرضی اشتباه را مطرح کند (مثلا بپرسد: چرا ادیسون گوشی آیفون را اختراع کرد؟)، مدل به جای اصلاح کاربر، تلاش می‌کند با جعل داستان، فرضیه کاربر را توجیه کند!
  • تضعیف توجه در بافتارهای طولانی (Attention Decay): با پر شدن پنجره زمینه مدل، وزن‌های توجه (Attention Weights) در ترنسفورمرها پخش و رقیق می‌شوند. این کار باعث می‌شود مدل جزئیات و محدودیت‌های ذکر شده در ابتدای پرامپت را فراموش کند.

پدیده توهم در مدل‌های زبانی بزرگ

انواع وهم در هوش مصنوعی: از اطلاعات جعلی تا ارجاعات خیالی

توهم‌ها در مدل‌های زبانی معمولاً به سه دسته کلی تقسیم می‌شوند که شناسایی هر کدام به ما در انتخاب استراتژی دفاعی مناسب کمک می‌کند:

  • توهمات فکتی (Factual Hallucinations): ادعاهایی که با واقعیت در تضاد هستند (مثلاً نسبت دادن یک کشف علمی به دانشمند دیگر یا ارائه تاریخ اشتباه برای یک واقعه تاریخی).
  • توهمات ارجاعی (Reference Hallucinations): تولید لینک‌های اینترنتی ناموجود، مقالات علمی جعلی که هرگز منتشر نشده‌اند، یا کدهای کتابخانه‌ای که وجود ندارند. این یکی از خطرناک‌ترین انواع توهم برای برنامه‌نویسان و محققان است.
  • توهمات متناقض داخلی (Logical Contradictions): زمانی که مدل در ابتدای پاسخ خود ادعایی مطرح می‌کند و در پاراگراف‌های بعدی، ادعایی کاملاً متناقض با آن ارائه می‌دهد. این نشان‌دهنده عدم پایداری منطقی مدل در حافظه موقت گفتگو است.

جعبه ابزار مهار توهم: تکنیک‌های کاربردی برای مهندسان هوش مصنوعی

خوشبختانه توسعه‌دهندگان می‌توانند با استفاده از الگوهای زیر، نرخ توهم را در برنامه‌های خود به حداقل برسانند و قابلیت اطمینان سیستم را افزایش دهند:

  • به‌کارگیری RAG (بازیابی افزوده تولید): قوی‌ترین سلاح علیه توهم! به جای اینکه از مدل بخواهید پاسخ را از حافظه خود تولید کند، اسناد و داکیومنت‌های تایید شده را در پرامپت قرار دهید و از مدل بخواهید تنها با اتکا به این متون پاسخ دهد. البته باید توجه داشت که RAG نیز در صورت بازیابی اسناد نامربوط (Garbage In, Garbage Out) می‌تواند توهم‌های جدیدی ایجاد کند؛ بنابراین کیفیت سیستم جستجو و بازیابی بردار بسیار حیاتی است.
  • پرامپت‌نویسی ساختاریافته (Factual Prompting): مشخص کردن مرزها در پرامپت. برای مثال نوشتن عباراتی مانند: «اگر پاسخ را در سند پیدا نکردی، بنویس نمی‌دانم و داستان‌سرایی نکن».
  • کاهش دما (Zero Temperature): تنظیم Temperature روی ۰.۰ یا ۰.۱ مدل را وادار می‌کند تا همواره مطمئن‌ترین توکن‌ها را انتخاب کند که تکرارپذیری را بالا و توهم را کاهش می‌دهد.
  • تکنیک زنجیره اندیشه (Chain-of-Thought): وادار کردن مدل به نوشتن گام‌به‌گام استدلال‌ها قبل از ارائه پاسخ نهایی. این کار به مدل اجازه می‌دهد تا تناقض‌های منطقی خود را در طول نگارش اصلاح کند.
  • مکانیزم خودسازگاری (Self-Consistency): در این روش، مدل به صورت همزمان چندین مسیر استدلال متفاوت برای حل مسئله ایجاد می‌کند و در نهایت، پرتکرارترین و متقاعدکننده‌ترین پاسخ را به عنوان خروجی نهایی انتخاب می‌کند. این کار نرخ خطاهای محاسباتی و توهمات ریاضی را تا ۵۰ درصد کاهش می‌دهد.

نقش حیاتی پرامپت سیستم در کنترل رفتارهای موهم

پرامپت سیستم (System Prompt) مانند قوانین بنیادین فیزیک در جهان هوش مصنوعی عمل می‌کند. شما با تعریف دقیق نقش مدل، لحن و محدودیت‌های رفتاری آن در پرامپت سیستم، دیوارهای محکمی در اطراف جنگل احتمالات مدل می‌کشید. مدل‌های مدرن امروزی تعهد بسیار بالایی به پرامپت سیستم دارند و این لایه، اولین خط دفاعی در کنترل توهم به شمار می‌رود. شما می‌توانید با نوشتن کدهای اعتبارسنجی در ورودی پرامپت سیستم، احتمال انحراف مدل را به حداقل برسانید.

یک کلاس پایتون برای سنجش پایداری پاسخ و کاهش خطا

یکی از الگوهای پیشرفته برای کاهش توهم، اجرای یک لایه خودارزیابی (Self-Evaluation) است. در کادر زیر، یک کلاس نمونه پایتون طراحی شده است که با استفاده از کتابخانه‌های پیش‌فرض، ابتدا پاسخ اولیه را از مدل دریافت کرده و سپس در یک درخواست مجزا، خود مدل را وادار به نقد و بررسی فکت‌های موجود در پاسخ خود می‌کند تا در صورت وجود ادعای نامربوط، آن را اصلاح کند:

import urllib.request
import json

class FactCheckerLLM:
    def __init__(self, ollama_url="http://localhost:11434/api/generate"):
        self.url = ollama_url
        self.model = "llama3:8b-instruct-q4_K_M"

    def _query(self, prompt):
        payload = {
            "model": self.model,
            "prompt": prompt,
            "stream": False
        }
        req = urllib.request.Request(
            self.url,
            data=json.dumps(payload).encode('utf-8'),
            headers={"Content-Type": "application/json"},
            method="POST"
        )
        try:
            with urllib.request.urlopen(req, timeout=10) as response:
                res = json.loads(response.read().decode('utf-8'))
                return res.get("response")
        except Exception as e:
            return f"Error: {e}"

    def generate_grounded_response(self, context, question):
        # گام اول: تولید پاسخ اولیه بر اساس زمینه
        prompt_1 = f"Context: {context}\nQuestion: {question}\nWrite a detailed answer based only on the context."
        raw_answer = self._query(prompt_1)
        
        # گام دوم: خودارزیابی و بررسی حقیقت
        prompt_2 = f"Context: {context}\nAnswer: {raw_answer}\nCheck if any fact in the Answer is NOT supported by the Context. Rewrite the answer to fix any unsupported claims."
        grounded_answer = self._query(prompt_2)
        
        return grounded_answer

# نمونه شبیه‌سازی برای تست کلاس حقیقت‌سنج
# checker = FactCheckerLLM()
# print(checker.generate_grounded_response("پایتخت ایران تهران است و بزرگترین شهر کشور است.", "پایتخت ایران کجاست؟"))

آیا توهم‌ها همواره زیان‌بار هستند؟

پاسخ کوتاه خیر است. توهم و خلاقیت دو روی یک سکه هستند. در واقع، همان مکانیسم تصادفی که باعث می‌شود مدل در یک گزارش مالی ارقام اشتباه تولید کند، به آن اجازه می‌دهد تا شعرهای زیبا بنویسد، داستان‌های فانتزی خلق کند و در طوفان‌های فکری ایده‌های شگفت‌انگیز بدهد. اگر ما توهم را به طور ۱۰۰ درصد نابود کنیم، هوش مصنوعی را به یک دیتابیس ساده تبدیل کرده‌ایم. راز کار در این است که بدانیم برای هر مسئله، چه میزان از این تصادفی‌بودن (دما) را فعال کنیم. در کارهای خلاقانه و هنری، توهم یک ویژگی مثبت (Feature) است، در حالی که در کارهای داده‌محور و استنتاجی، یک باگ بزرگ (Bug) محسوب می‌شود.

به سوی هوش مصنوعیِ حقیقت‌محور

در نهایت، جنگ با توهم هوش مصنوعی با توسعه مدل‌های بزرگتر و روش‌های بازیابی پیشرفته‌تر همچنان ادامه دارد. امروز در سال ۲۰۲۶، شرکت‌ها برای بهینه‌سازی روند آموزش از روش‌های یادگیری تقویت‌شده بر اساس بازخورد هوش مصنوعی (RLAIF) استفاده می‌کنند که طی آن مدل‌های ارزیاب بزرگ به طور خودکار کیفیت فکت‌های تولید شده توسط مدل‌های کوچک‌تر را قضاوت کرده و توهمات آن‌ها را جریمه می‌کنند. این فرآیند خودکار، هزینه بالای RLHF دستی را به شدت کاهش داده و دقت مدل‌ها را ارتقا می‌دهد.

به عنوان یک توسعه‌دهنده، وظیفه ما طراحی سیستم‌هایی است که با درک دقیق این رفتارهای احتمالی، امنیت اطلاعات کاربران را حفظ کنند. مهار توهم گام بزرگی برای پذیرش گسترده‌تر هوش مصنوعی در صنایع حساس است. آیا شما تا به حال با توهم‌های عجیب مدل‌های زبانی مواجه شده‌اید؟ تجربیات خود را در بخش نظرات با ما به اشتراک بگذارید تا راه‌حل‌های مهار آن را با هم بررسی کنیم.

دوره‌های آنلاین برنامه‌نویسی لیست دوره‌ها