المستوى: مبتدئ — المقال ده مناسب لأي حد بيستخدم ChatGPT أو Claude API، شايف الفاتورة بتطلع أعلى من المتوقع، ومش فاهم التوكنز (tokens) دي بتتحسب إزاي. مش محتاج خلفية رياضيات، بس محتاج تعرف تشغّل أمر Python واحد.
Tokenization: إزاي الذكاء الاصطناعي بيقرأ كلامك فعلاً
النص العربي بياخد تقريبًا ضعف إلى تلات أضعاف التوكنز اللي بياخدها نفس المعنى بالإنجليزي. يعني نفس الرسالة، نفس النموذج، بتدفع فيها أكتر لمجرد إنها بالعربي. المقال ده هيوريك ليه بيحصل كده، وإزاي تقيسه بنفسك في دقيقتين، وإمتى الموضوع يستاهل تتعب فيه أصلًا.
المشكلة باختصار
النموذج زي Claude أو GPT مابيشوفش حروف ولا كلمات. بيشوف أرقام. علشان يحوّل كلامك لأرقام، بيقطّع النص لقطع صغيرة اسمها "توكنز". وانت بتدفع بالتوكن: توكنز الدخل + توكنز الخرج. هنا بالظبط بتظهر المشكلة: العربي بيتقطّع لعدد توكنز أكتر بكتير من الإنجليزي لنفس الجملة.
النتيجة العملية: chatbot عربي بيكلّفك أكتر من نفس chatbot إنجليزي، وكمان بيوصل أسرع لحد الـ context window (الحد الأقصى للنص اللي النموذج يقدر يشيله في المرة الواحدة).
يعني إيه "توكن"؟ خلينا نقطّع بيتزا الأول
تخيّل إنك طلبت بيتزا واحدة، بس صاحب المحل مابيبيعش بيتزا كاملة — بيبيع بالقطعة. البيتزا الإنجليزي بيقطّعها 4 قطع كبيرة، فتدفع 4 وحدات. نفس البيتزا بالظبط لما تكون "عربي" بيقطّعها 10 قطع صغيرة، فتدفع 10 وحدات. أكلت نفس الكمية، بس دفعت أكتر، عشان السكينة بتقطّع العربي أنعم.
السكينة دي اسمها الـ Tokenizer. القطعة الواحدة اسمها token. الفاتورة بتتحسب على عدد القطع، مش على "كمية المعنى".
دلوقتي بعد ما المثال وضّح الفكرة، نرجع للتعريف الدقيق: الـ token هو أصغر وحدة نصية بيتعامل معاها النموذج. ممكن تكون كلمة كاملة، أو جزء من كلمة، أو حتى حرف واحد. كل token بيتحول لرقم (id) موجود في "قاموس" النموذج اسمه الـ vocabulary.
ليه العربي بياخد قطع أكتر؟ الشرح العلمي
أغلب النماذج بتستخدم خوارزمية اسمها Byte Pair Encoding (BPE). الفكرة باختصار: الخوارزمية بتتدرّب على كميات ضخمة من النصوص، وبتكوّن قاموس من أكتر تتابعات الحروف تكرارًا. التتابع اللي بيتكرر كتير بياخد token واحد. التتابع النادر بيتقطّع لحروف أو بايتات.
وهنا المشكلة: أغلب بيانات التدريب إنجليزي. فكلمات إنجليزية شائعة زي "information" ممكن تبقى token أو اتنين. لكن كلمة عربية زي "المعلومات" مش متكررة بنفس الكثافة في بيانات التدريب، وكمان العربي بيتكتب بحروف Unicode بتاخد عدة بايتات لكل حرف. فبتتقطّع لكذا token. أضف على ده التشكيل والهمزات والتاء المربوطة اللي بتزوّد التقطيع.
الافتراض هنا: ده بيختلف حسب النموذج. الـ tokenizer القديم من OpenAI (cl100k_base المستخدم مع GPT-4) كان أسوأ مع العربي. الأحدث (o200k_base مع GPT-4o) حسّن الموضوع لكن الفجوة لسه موجودة.
قيسها بنفسك في 12 سطر Python
مش محتاج تصدّقني. الكود ده بيحسب التوكنز الفعلية لنفس الجملة بالعربي والإنجليزي:
# pip install tiktoken
import tiktoken
enc = tiktoken.get_encoding("o200k_base") # نفس tokenizer بتاع GPT-4o
ar = "الذكاء الاصطناعي بيغيّر طريقة شغلنا بشكل كبير"
en = "Artificial intelligence is changing the way we work a lot"
ar_tokens = enc.encode(ar)
en_tokens = enc.encode(en)
print("عربي:", len(ar_tokens), "token")
print("إنجليزي:", len(en_tokens), "token")
print("النسبة:", round(len(ar_tokens) / len(en_tokens), 2), "ضعف")
لو شغّلت الكود ده هتلاقي العربي بياخد تقريبًا 1.8 إلى 2.5 ضعف الإنجليزي على نفس المعنى. جرّبه بجمل من شغلك الحقيقي علشان تشوف نسبتك انت بالظبط.
سيناريو واقعي بالأرقام
لو عندك chatbot دعم فني بيعالج 50 ألف رسالة في اليوم، متوسط الرسالة + الرد حوالي 800 token بالإنجليزي. بالعربي نفس المحتوى ممكن يطلع 1,700 token تقريبًا.
الفرق ده مش بس فلوس. كمان بيأثر على الـ context: لو النموذج بيشيل 128 ألف token، انت فعليًا بتحصل على نص "مفيد" أقل لما تشتغل بالعربي، لأن جزء كبير من المساحة بيروح في التقطيع الزيادة. يعني ذاكرة المحادثة بتقصر أسرع.
الـ trade-off اللي لازم تعرفه
تقدر تقلّل التوكنز بإنك تكتب prompts أقصر، أو تترجم المحتوى الثابت (زي تعليمات النظام) للإنجليزي وتسيب رد المستخدم بس بالعربي. بتكسب: توفير 30–50% من توكنز الدخل. بتخسر: جزء من دقة النموذج في فهم النية لو خلطت لغتين بشكل عشوائي، وكمان صيانة أصعب للـ prompt.
بديل أنضف: استخدم prompt caching لو نفس التعليمات بتتكرر، علشان تدفع التوكنز التقيلة مرة واحدة بدل كل رسالة.
متى لا تهتم بهذا أصلًا
لو مشروعك صغير أو تجريبي، وعدد الطلبات في حدود المئات يوميًا، الفرق ده ممكن يبقى دولارات قليلة في الشهر — مش مستاهل وقتك. ركّز على إن المنتج يشتغل صح الأول. موضوع تحسين التوكنز بيبقى مهم فعلًا لما توصل لعشرات الآلاف من الطلبات يوميًا، أو لما تقترب من حد الـ context window في مهام طويلة زي تلخيص مستندات كبيرة.
الخطوة التالية
افتح terminal دلوقتي، نصّب tiktoken، وشغّل الكود اللي فوق على أطول prompt في مشروعك الحقيقي. لو لقيت النسبة فوق 2x، ابدأ فكّر تنقل تعليمات النظام للإنجليزي وتقيس الفرق في الفاتورة بعد أسبوع.
المصادر
- Petrov et al., "Language Model Tokenizers Introduce Unfairness Between Languages", NeurIPS 2023 — قياس فروق عدد التوكنز بين اللغات.
- OpenAI tiktoken — المكتبة الرسمية والـ encodings (cl100k_base و o200k_base): github.com/openai/tiktoken
- Sennrich et al., "Neural Machine Translation of Rare Words with Subword Units", ACL 2016 — الورقة الأصلية لخوارزمية BPE.
- OpenAI Tokenizer (أداة تفاعلية لرؤية التقطيع): platform.openai.com/tokenizer