لو فاتورتك على OpenAI أو Anthropic بقت ضعف اللي توقعتها رغم إن طول النصوص اللي بتبعتها هو نفسه، السبب غالبًا مش الموديل ولا عدد الـ requests. السبب إن النص العربي بياكل توكنز أكتر بكثير من نفس الكلام بالإنجليزي، في المتوسط 3 إلى 5 أضعاف. وده مش عيب في الـ API، ده نتيجة طبيعية لطريقة اسمها BPE Tokenization.
المستوى: مبتدئ — هذا المقال يفترض إنك سمعت عن ChatGPT أو Claude، وعرفت إن في حاجة اسمها "توكنز" بتتحاسب عليها، لكن مش متأكد ليه نفس الجملة بتكلفك مختلف بالعربي والإنجليزي. لو إنت محترف وعارف الـ BPE من ورقة Sennrich، المقال ده مش ليك.
Tokenization: المفهوم الخفي اللي بيحدد فاتورتك على ChatGPT
المشكلة باختصار
لو بعتت لـ GPT-4 جملة I love programming، الموديل بيشوفها 4 توكنز فقط. لو بعتته نفس المعنى بالعربي أنا أحب البرمجة، بيشوفها 11 توكن. نفس الفكرة، فاتورة 2.75x أعلى. ولو الجملة فيها كلمات قليلة الاستخدام في بيانات التدريب زي استبشر أو اقشعرّ، الكلمة الواحدة لوحدها ممكن تاكل 5 توكنز.
الـ trade-off هنا واضح: أنت بتستخدم نموذج اتبنى أساسًا على نصوص إنجليزية، فبتدفع ضريبة لغوية على كل request. الافتراض إن فاتورتك بتعدّي $100 شهريًا — لو أقل من كده، الفرق مش هيستاهل وقتك أصلًا.
تخيّل آلة فرز العملة المعدنية أولاً
تخيّل صندوق عملات معدنية فيه فئات مختلفة: 1 جنيه، 5 جنيه، 10 جنيه، 20 جنيه. وعندك ماكينة فرز قديمة عارفة الفئات الشائعة وبتفرزها بسرعة. لو حطيت فيها 200 جنيه على شكل عملات 20، الماكينة بتفرزهم في 10 خطوات بس. لو حطيت نفس المبلغ على شكل عملات 1 جنيه، نفس النتيجة بس بـ 200 خطوة.
الـ Tokenizer في GPT أو Claude شغال بالظبط زي الماكينة دي. عنده "قاموس فئات" حجمه حوالي 100,000 إلى 200,000 قطعة. الكلمات الإنجليزية الشائعة زي the، love، code موجودة في القاموس كقطعة واحدة (توكن واحد). الكلمات العربية مش موجودة كاملة في القاموس، فبيقسّمها لقطع أصغر. أحيانًا الحرف الواحد بيتقسّم لاثنين بايت لو ما كانش في الترميز الأساسي.
التعريف العلمي بدقة: Byte Pair Encoding
الـ Byte Pair Encoding (اختصارًا BPE) خوارزمية ضغط نشرها Philip Gage سنة 1994 لاستخدامات عامة في الضغط. فريق OpenAI طوّعها سنة 2019 في موديل GPT-2 لتقطيع النص. الفكرة في 3 خطوات:
- الانطلاق من الحروف: ابدأ بقاموس فيه كل حرف منفرد (a, b, c, …، أ, ب, ت, …).
- دمج الأزواج الأكثر تكرارًا: امسح الـ corpus، وحدّد أكثر زوج بايتات متجاورة شيوعًا، وضمّه كقطعة واحدة. مثلاً
t + hبيبقىthلأنه شائع جدًا. - كرّر العملية: لمدة 50,000 إلى 200,000 مرة، لحد ما يكون عندك قاموس بحجم ثابت.
الـ corpus اللي اتدرّب عليه GPT-2 و GPT-3 كان حوالي 95% إنجليزي. النتيجة المنطقية: القاموس النهائي بيكون منحاز لتمثيلات إنجليزية. الكلمة العربية استبشر ما ظهرتش كافي في الـ corpus، فالـ tokenizer بيقسّمها على الأرجح لـ أو حتى لبايتات منفردة. النتيجة المؤلمة: 4 إلى 5 توكنز لكلمة واحدة.