مستوى المقال: مبتدئ
لو لاحظت إن إرسال 100 كلمة عربية لـ Claude أو GPT بيكلّف ضِعف ما تكلّفه نفس 100 كلمة إنجليزية، المشكلة مش في حساب الفاتورة ولا في الموديل. المشكلة في خطوة بتحصل قبل ما الموديل يشوف الكلام أصلاً، اسمها Tokenization. المقال ده هيفهّمك إيه اللي بيحصل بالظبط، وإزاي تقلّل تكلفتك بدون ما تقلّل المحتوى.
Tokenization: المفهوم اللي بيحدد فاتورتك مع الـ AI
المشكلة باختصار
الموديلات اللغوية مش بتقرأ النص كحروف. بتحوّله الأول لأرقام صغيرة اسمها tokens، وكل token بيمثّل قطعة من النص. وبما إن أغلب الموديلات التجارية (Claude, GPT, Gemini) اتدرّبت في الأساس على نصوص إنجليزية، الـ tokenizer بتاعها بيعرف الإنجليزي أحسن من العربي بكتير. النتيجة المباشرة: نفس الجملة بالعربي ممكن تطلع 2 إلى 4 أضعاف الـ tokens مقارنة بالإنجليزي، وأنت بتدفع على كل token دخل وكل token خرج.
مثال بسيط جداً قبل ما نعرّفه علميًا
تخيّل إن عندك خطّاط شغّال في مطبعة قديمة. الخطّاط ده مش بيكتب بإيده — عنده دُرج فيه قصاصات حروف وأجزاء كلمات شائعة محفوظة جاهزة. لمّا تطلب منه يكتب كلمة "Hello"، بيلاقيها كقصاصة واحدة جاهزة في الدُرج، فبيلصقها مرة واحدة. لكن لمّا تطلب منه يكتب "مرحبًا"، الكلمة دي مش موجودة كقصاصة واحدة عنده، فبيقطّعها لـ "م" + "ر" + "ح" + "ب" + "ًا" — 5 قصاصات بدل قصاصة واحدة. وأنت بتتحاسب على عدد القصاصات.
ده بالظبط اللي بيعمله الـ tokenizer. الفرق إن الدُرج بتاعه (بنسمّيه vocabulary) بيتم بناؤه إحصائيًا من نصوص حقيقية أثناء تدريب الموديل. لو النصوص دي إنجليزية في الغالب، الكلمات الإنجليزية الشائعة بتاخد قصاصات كاملة، والكلمات العربية بتتقسّم لقصاصات أصغر بكتير.
التعريف العلمي الدقيق
الـ Tokenization هو عملية تحويل نص إلى تسلسل من الـ tokens، حيث كل token هو وحدة من vocabulary مغلق الحجم (عادة بين 32K و 256K token). الخوارزمية الأشهر اسمها Byte Pair Encoding (BPE)، وهي اللي بتستخدمها GPT-4 و Claude و Llama. الـ BPE بيبدأ من البايتات الفردية، وبيدمج أكتر زوجين متجاورين بيتكرّروا في بيانات التدريب، وبيكرّر الدمج لحد ما يوصل لحجم vocabulary مستهدف. النتيجة: أنماط النصوص الشائعة في بيانات التدريب بتتمثّل بـ token واحد، والأنماط النادرة بتتفكّك لعدة tokens. ورقة Sennrich et al. 2016 هي المرجع الأساسي للخوارزمية دي.
ليه العربي بالذات بيتكلّف أكتر
- UTF-8 encoding: الحرف اللاتيني بياخد بايت واحد، الحرف العربي بياخد بايتين. ده ضِعف الحجم في البداية حتى قبل أي tokenization.
- توزيع بيانات التدريب: أكتر من 80% من بيانات تدريب الموديلات الكبيرة كانت إنجليزية، والعربية كانت أقل من 1% في بعض الحالات (راجع ورقة Common Crawl statistics). النتيجة: الكلمات العربية الشائعة مش لاقية مكان كقصاصات كاملة في الـ vocabulary.
- التشكيل والإعراب: "كَتَبَ" و "كتب" بيتعاملوا كـ tokens مختلفة لأن الحركات بتغيّر تمثيل البايت تمامًا.
- التنوع المورفولوجي: اللغة العربية اشتقاقية. الفعل "كتب" بيتفرّع لمئات الصيغ (يكتب، اكتب، كتبتم، سيكتبون...) كل واحدة منهم بتاخد tokens مختلفة.