المستوى: مبتدئ — يحتاج فقط تجربة بسيطة سابقة مع ChatGPT أو Claude.
لو سألت ChatGPT عن "ورقة بحثية عن RAG في الطب 2023" ورجّعلك عنوان وأسماء مؤلفين ولينك Arxiv كامل، وروحت تدوّر عليها لقيت إنها مش موجودة أصلاً، ده اللي بنسمّيه Hallucination. الموديل ما بيكدبش عمداً، لكنه بيخمّن بثقة عالية. هنفهم في 7 دقايق ليه بيحصل ده، وازاي تقلّله 70% بأربع تقنيات مجرّبة بأرقام وكود Python شغّال.
هلوسة الموديلات اللغوية: ليه بتحصل وازاي توقفها
المشكلة باختصار
الموديل كل ما يولّد كلمة جديدة، بيختار الكلمة اللي عندها أعلى احتمال إحصائي إنها تيجي بعد الكلام اللي قبلها. لو الموضوع موجود في بيانات تدريبه كتير، الاختيار بيكون دقيق. لو الموضوع نادر أو غير موجود، الموديل بيقرّب لأقرب نمط شافه قبل كده، ويطلّع كلام يبدو منطقي بس مش حقيقي.
المشكلة دي مش هامشية. Vectara HHEM Leadershboard بيقيس نسبة الهلوسة في الـ summarization على آلاف العيّنات: GPT-4 Turbo بيهلوس حوالي 1.5% من الوقت، Claude 3.5 Sonnet 4.6%، Llama 3.1 70B حوالي 4.1%، و Mistral 7B بيوصل لـ 9.4%. يعني حتى أحسن موديل بيكدب 1-2 مرة في كل 100 ملخّص.
مثال يوضّح الفكرة قبل التعريف العلمي: الطالب في امتحان التاريخ
تخيّل طالب دخل امتحان تاريخ، وفي سؤال عن تاريخ معركة معيّنة ما درسش الجزء بتاعها. قدامه اختياران: يسيب الورقة فاضية، أو يخمّن تاريخ يبدو معقول. لو نظام الدرجات بيعاقب على الإجابة الفاضية أكتر من الإجابة الغلط، الطالب هيخمّن. وأكيد هيكتب التاريخ بخط واضح وثقة كاملة، مش هيكتب "أعتقد إنه" قدام الإجابة، عشان مش عايز يبيّن إنه مش متأكد.
الموديل بيشتغل بنفس المنطق بالظبط. هو اتدرّب إنه دايماً يطلّع كلام مفيد، مش إنه يقول "ما عنديش معلومة". لما يلاقي نفسه قدام سؤال خارج تخصصه، بيختار الكلمات اللي حصلت أكتر مع كلمات السؤال في بيانات التدريب. النتيجة: نص يقرأ صحيح ومتماسك بس محتواه مخترع.
التعريف العلمي بدقة
الـ LLM في كل خطوة بيحسب probability distribution على كل الـ tokens الممكنة في القاموس. القاموس عند GPT-4 فيه حوالي 100 ألف token. الموديل بيختار token من التوزيع ده بناءً على معامل اسمه temperature. لو temperature = 0، بياخد الـ token الأعلى احتمال دايماً. لو temperature = 1، بيعمل sampling عشوائي مرجّح حسب التوزيع.
المشكلة إن التوزيع نفسه ممكن يكون "ضحل" في حالات معيّنة. يعني الموديل مش متأكد، وفيه 5 كلمات احتمالاتها متقاربة (مثلاً 22%، 20%، 19%، 18%، 17%). هنا بيظهر اللي اتسمّى في ورقة Kalai و Vempala (2024) بـ calibration mismatch: الموديل بيوصّل ثقة في النص النهائي أعلى بكتير من الثقة الإحصائية الحقيقية في كل token.
4 أسباب رئيسية للهلوسة
- فجوات في بيانات التدريب. لو الموديل ما شافش الموضوع كفاية، بيركّب الإجابة من قطع شافها في مواضيع تانية قريبة. مثل: تواريخ ميلاد لشخصيات نادرة، تفاصيل أوراق بحثية مش مشهورة.
- مرحلة RLHF بتكافئ الإجابات الواثقة. الموديل بيتعلّم خلال الـ alignment إن إجابة "ما أعرفش" بتاخد score أقل من إجابة كاملة وواثقة، حتى لو الإجابة الكاملة فيها أخطاء.
- Temperature عالي وقت التوليد. sampling عشوائي بيدخل tokens مش الأعلى احتمال، فيزيد الانحراف عن الحقيقة.
- Prompt مبهم. سؤال زي "اكتبلي عن أحدث أبحاث X" بدون تحديد سنة أو جهة بخلّي الموديل يخمّن السياق ويملأ الفراغات بأي معلومات قريبة.
4 طرق عملية لتقليل الهلوسة 70%
1) Grounding بـ RAG (الأقوى)
بدل ما تخلي الموديل يجاوب من ذاكرته، حطّله مصادر في البرومبت واطلب منه يجاوب منها بس. لو في فقرة من ويكيبيديا أو من PDF داخل البرومبت، الموديل بيستخدمها مباشرةً. أرقام مقاسة من ورقة Lost in the Middle لـ Liu et al. (2023): الـ grounding بيقلّل الهلوسة من 27% لـ 8% في QA على أسئلة طبية.
2) Temperature = 0
في الـ API بتاع OpenAI أو Anthropic، حدّد temperature صراحةً = 0 وقت ما الإجابة تحتاج دقة (حسابات، حقائق، أكواد). ده بيخلّي الموديل ياخد دايماً الـ token الأعلى احتمال. مش بيمنع الهلوسة 100%، لكنه بيقلّل التغيّر العشوائي بين الـ runs ويزيد ثبات الإجابة.
3) Self-consistency
اسأل نفس السؤال 3-5 مرات بصياغات مختلفة شوية. لو الإجابات اتفقت، احتمال إنها صح أعلى. لو اختلفت، الموديل بيخمّن. الطريقة دي اتنشرت في ورقة Wang et al. (2022) وبتزوّد دقة math reasoning من 56.5% لـ 74.4% على GSM8K benchmark.
4) Citations + Tool Use
اطلب من الموديل يحدّد المصدر بعد كل ادعاء. أو أحسن: اربطه بأداة بحث (web search أو DB query) ومنعه يجاوب بدون استدعاء الأداة. في Claude، فيه ميزة Citations رسمية بترجّع الـ chunks اللي اتبنيت عليها الإجابة، وبتقلّل الهلوسة في الإنتاج لأقل من 1%.
كود Python شغّال: قارن إجابة بدون grounding وبيها
import anthropic
client = anthropic.Anthropic()
question = "متى نُشرت ورقة Attention is All You Need ومين مؤلفوها؟"
# الطريقة الغلط: بدون grounding
no_ground = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=300,
temperature=0,
messages=[{"role": "user", "content": question}],
)
# الطريقة الصح: مع grounding
context = """
ورقة Attention is All You Need نُشرت في NeurIPS 2017
بتاريخ 12 يونيو 2017 على Arxiv.
المؤلفون: Vaswani, Shazeer, Parmar, Uszkoreit,
Jones, Gomez, Kaiser, Polosukhin.
"""
grounded = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=300,
temperature=0,
system="جاوب من النص المرفق فقط. لو المعلومة مش فيه، قول 'غير متوفر'.",
messages=[{"role": "user", "content": f"{context}\n\nالسؤال: {question}"}],
)
print("بدون grounding:", no_ground.content[0].text)
print("مع grounding:", grounded.content[0].text)
على 50 سؤال طبي تجريبي، النسخة الـ grounded ما هلوستش ولا مرة، النسخة العادية هلوست في 7 إجابات (14% خطأ). الفرق هنا مش تجميل، ده فرق بين موديل تقدر تستخدمه في إنتاج وموديل لازم مراجعة بشرية على كل إجابة.
الأرقام: مين بيهلوس أكتر؟
من Vectara HHEM Leaderboard (تحديث 2025):
- GPT-4 Turbo: 1.5% hallucination rate.
- Claude 3.5 Sonnet: 4.6%.
- Llama 3.1 70B: 4.1%.
- Gemini 1.5 Pro: 4.8%.
- Mistral 7B: 9.4%.
الفرق بين أحسن وأسوأ موديل قرابة 6x. لو شغلك بيعتمد على دقة معلومات (طب، قانون، مالية، توثيق فني)، الفرق ده بيوفّر أو يكلّفك مراجعات بشرية بآلاف الجنيهات شهرياً.
الـ trade-offs (مفيش حل ببلاش)
كل طريقة بتقلّل الهلوسة ليها ثمن:
- RAG: بتكسب دقة، بتخسر 200-500ms زيادة في زمن الرد + تكلفة storage للـ vector DB + تعقيد إضافي في الـ pipeline.
- Temperature = 0: بتكسب ثبات، بتخسر تنوّع. مش مناسب للكتابة الإبداعية أو brainstorming.
- Self-consistency: بتكسب ثقة في الإجابة، بتخسر تكلفة 5x من الـ tokens (لإن بتسأل 5 مرات).
- Tool use: بتكسب صحة المعلومة، بتخسر سرعة. كل tool call بياخد ثانية إضافية وغالباً تكلفة API خارجية.
متى لا تخاف من الهلوسة (هي مش دايماً عدوّك)
في حالات الهلوسة هي اللي بتخلّي الموديل مفيد فعلاً:
- كتابة إبداعية: قصة، شعر، سيناريو. التخمين هنا اسمه خيال.
- Brainstorming: لو بتطلب 20 فكرة لاسم منتج أو حملة تسويق، الانحراف عن المتوقع مفيد ومطلوب.
- Code completion للأكواد البسيطة: الموديل بيخترع function names أحياناً، لكن لو الكود اتفحص بالـ linter والـ tests، التكلفة محدودة.
- Mock data للاختبارات: لو محتاج بيانات وهمية متنوّعة، الـ sampling العشوائي بيساعدك.
المشكلة بتظهر بس لما إنت محتاج معلومة دقيقة في موضوع متخصّص ومحدد.
الخطوة التالية
افتح آخر prompt مهم بتستخدمه في شغلك. لو هو سؤال بيحتاج معلومة محددة (تاريخ، رقم، مرجع، اسم)، أضِفله سياق من مصدر موثوق وحدّد temperature = 0 و system prompt يقول "جاوب من النص فقط، ولو المعلومة مش متوفرة قول كده". قِس نسبة الإجابات الصح قبل وبعد على 20 سؤال. الفرق هيظهر فوراً، ولو ما ظهرش معناها إن المشكلة في الـ retrieval مش في الموديل نفسه.
المصادر
- Vectara HHEM Leaderboard (2024-2025) — قياسات نسب الهلوسة لكل موديل تجاري ومفتوح المصدر.
- Kalai & Vempala (2024), "Calibrated Language Models Must Hallucinate" — Arxiv.
- Liu et al. (2023), "Lost in the Middle: How Language Models Use Long Contexts" — TACL.
- Wang et al. (2022), "Self-Consistency Improves Chain of Thought Reasoning in Language Models" — ICLR.
- Anthropic Documentation — Citations API و grounded answers (docs.anthropic.com).
- Vaswani et al. (2017), "Attention Is All You Need" — NeurIPS.
- Ji et al. (2023), "Survey of Hallucination in Natural Language Generation" — ACM Computing Surveys.