ليه الذكاء الاصطناعي بيغلط في عدّ حروف كلمة زي strawberry؟
اسأل ChatGPT: كلمة strawberry فيها كام حرف r؟ كتير بيرد بـ 2 وهي 3. ده مش غباء ولا عطل في النموذج. السبب إن النموذج أصلاً مبيشوفش الحروف زيّك. في السطور الجاية هتفهم بالظبط ليه بيحصل ده، وإمتى المشكلة تأثّر على شغلك فعلاً، وإمتى متشغلش بالك خالص.
المشكلة باختصار
النموذج اللغوي مبيتعاملش مع النص حرف بحرف. بيقسّم الكلام لوحدات اسمها توكنز (tokens)، وكل توكن ممكن يكون كلمة كاملة، أو جزء من كلمة، أو حتى علامة ترقيم. لما الحروف بتبقى "ملزوقة" جوّه توكن واحد، النموذج بيشوف القطعة كلها كوحدة، مش كحروف منفصلة. عشان كده مهمة زي "عدّ حرف معيّن" بتبقى صعبة عليه، مش لأنه ضعيف، لكن لأن المعلومة دي مش قدّامه أصلاً.
مثال بسيط الأول: كتاب اللزقات
تخيّل إنك بتقرا كتاب متكتبش بالحروف، لكن بلزقات جاهزة. كل لزقة عليها مقطع كامل زي «مدر» و«سة». إنت بتركّب الكلام من اللزقات دي، وعينك اتعوّدت عليها كوحدة واحدة.
دلوقتي حد يسألك: كلمة «مدرسة» فيها كام حرف «س»؟ هتقف شوية. ليه؟ لأنك مبصّيتش على الحروف من الأول، بصّيت على لزقتين: «مدر» + «سة». عشان تجاوب، لازم ترجع تفكّ اللزقة وتعدّ جواها، وده مجهود زيادة ممكن تغلط فيه.
النموذج بالظبط زيّك في المثال ده. بيقرا «لزقات» (توكنز)، مش حروف. فلما تطلب منه شغل على مستوى الحرف، بيبقى شغّال ضد الطريقة اللي اتبنى بيها.
التفسير العلمي: يعني إيه توكن وإزاي بيتقسّم
الكلام اللي بتكتبه بيمرّ الأول على حاجة اسمها المجزّئ (tokenizer) قبل ما يوصل للنموذج. أشهر خوارزمية بتعمل ده اسمها Byte Pair Encoding (BPE). الفكرة إنها بتبني قاموس من أكتر المقاطع تكرارًا في بيانات ضخمة، وبتدمج الأحرف المتجاورة الأكتر شيوعًا في وحدة واحدة تدريجيًا.
النتيجة إن الكلمات الشائعة بتتحوّل لتوكن واحد، والكلمات الأقل شيوعًا بتتقسّم لأجزاء. مثلًا في مجزّئ cl100k بتاع GPT-3.5 وGPT-4، كلمة strawberry بتتحوّل لـ 3 توكنز تقريبًا: str وaw وberry. حرف الـ r الأخير مدفون جوّه berry، والباقي في توكنز تانية. فالنموذج عمره ما شاف «ثلاث حروف r» في صف واحد.
جرّبها بنفسك بكود بسيط:
import tiktoken
enc = tiktoken.get_encoding("cl100k_base") # مجزّئ GPT-3.5 / GPT-4
text = "strawberry"
ids = enc.encode(text)
print(len(ids), ids) # عدد التوكنز + أرقامها
print([enc.decode([i]) for i in ids]) # كل توكن كنص