bayan-api / archive /phase_reports /audits /log_analysis.md
youssefreda9's picture
Cleanup pass 2: Fix .gitignore corruption, archive docs/audit + phase10 helpers, fix PROJECT_DESCRIPTION.md
6e716e3
|
Raw
History Blame Contribute Delete
4.7 kB

تحليل المشكلة (Log Analysis)

لقد قمت بتحليل الـ Logs خطوة بخطوة، واكتشفت بالضبط ما حدث. المشكلة عبارة عن سلسلة من الأحداث المعقدة (Cascade) بدأت بسبب "هلوسة" من نموذج الإملاء، وتفاعل معها نظام الـ Offset Mapper ونظام منع التداخل (Overlap Resolver).

إليك التفاصيل:

1. هلوسة نموذج الإملاء (AraSpell Hallucination)

النص الأصلي الذي أدخله المستخدم كان يبدو هكذا: "قال محمد: أننا حققنا نجاحا كبيرا في المشروع رغم الصعوباالصعوبات...."

نموذج AraSpell (الذي يعتمد على AraBERT) عندما رأى "محمد:"، قام بـ "هلوسة" كلمة "علي" من السياق، وأخرج: "قال محمد علي أننا..." (قام بحذف النقطتين وإضافة كلمة علي).

لماذا سمح النظام بهذا التغيير؟ يوجد فلتر في app.py يقيس مسافة Levenshtein لكي يمنع التعديلات الكبيرة. المسافة بين "محمد:" و "محمدعلي" هي 3 حركات (استبدال : بحرف ع، وإضافة ل، وإضافة ي). القانون في الكود هو: dist <= 3 and (dist / max_len) <= 0.5. بما أن المسافة 3 والطول الأكبر 7، فالنسبة (3/7 = 0.42) كانت أقل من 0.5، وللأسف تخطت الفلتر! لذلك تم تسجيل اقتراح إملائي: محمد: ⬅️ محمد علي (للحروف من 4 إلى 9).

2. كيف تداخل الإملاء مع الترقيم؟ (The Offset Collision)

الآن النص الذي وصل لنموذج الترقيم هو: "قال محمد علي أننا...". نموذج الترقيم قرر إضافة نقطتين بعد "علي"، فأخرج: "قال محمد علي: أننا...". الفرق هنا هو في كلمة "علي" ⬅️ "علي:".

عندما قام نظام OffsetMapper بمحاولة إرجاع مكان كلمة "علي" إلى النص الأصلي (الذي لم يكن فيه كلمة علي أصلاً، بل كان فيه "محمد:")، قام بعملية حسابية للنسبة والتناسب (Interpolation) وأرجع المؤشر إلى الحروف [7:9] في النص الأصلي (وهي حرف د والنقطتين :).

النتيجة:

  • اقتراح الإملاء أخذ المساحة [4:9].
  • اقتراح الترقيم أخذ المساحة [7:9]. حدث تداخل (Overlap) بينهما! وبما أن الترقيم (أولوية 2) أعلى من الإملاء (أولوية 1)، قام نظام Overlap Resolver بـ حذف اقتراح الإملاء وقال في الـ Log: Dropped spelling [4:9] 'محمد:' — conflicts with higher-priority span

3. لماذا تم حذف اقتراح الترقيم في آخر النص؟

في آخر النص كانت الكلمة "الصعوباالصعوبات....".

  • نموذج الجرامر (أولوية 3): قام بتصحيحها كاملة إلى "الصعوبات..." (اقتراح مساحته [47:62]).
  • نموذج الترقيم (أولوية 2): لاحظ أن الجرامر ترك 3 نقاط ... فقرر أن يضيف نقطة رابعة لتصبح "الصعوبات...." (اقتراح لنفس المساحة [47:62]).

حدث تداخل تام على نفس الكلمة! نظام الـ Overlap Resolver قام بعمله بكفاءة عالية هنا، وحذف اقتراح الترقيم لحساب اقتراح الجرامر (لأنه الأهم والأشمل)، وهذا هو سبب الـ Log الثاني: Dropped punctuation [47:62] 'الصعوباالصعوبات' — conflicts with higher-priority span


الخلاصة والحل المقترح

  1. نظام الـ Overlap Resolver يعمل بامتياز! لقد منع كارثة بصرية في الـ UI كانت ستحدث بسبب التداخل. (Log #2 طبيعي وصحيح جداً).
  2. المشكلة الحقيقية في _is_small_spelling_change: خوارزمية قياس المسافة متساهلة جداً مع الكلمات القصيرة.

الحل: تعديل الكود في app.py ليكون أكثر صرامة مع الإملاء، بحيث نرفض التغيير إذا كان سيضيف حروفاً كثيرة لكلمة قصيرة (لمنع الهلوسة). سأقوم بتعديل دالة _is_small_spelling_change لمنع هذا النوع من الهلوسات مستقبلاً.