الذكاء الاصطناعي

Tokenization في نماذج اللغة: كيف تُقسَّم الكلمات لأرقام؟

شرح تقني لتقنيات التوكينزيشن، BPE، WordPiece، SentencePiece، Tiktoken، وكيف تؤثّر على الأداء، التكلفة، ودعم اللغات (خصوصاً العربية).

فريق مقالات، قسم التقنية ٤ سبتمبر ٢٠٢٦ 5 دقيقة قراءة

Tokenization، تحويل النصّ لأرقام يفهمها النموذج، يبدو تفصيلاً هندسياً بسيطاً، لكنه يُحدّد التكلفة، السرعة، وحتى جودة الفهم اللغوي. هذا المقال يشرح لماذا يجب أن يهمّك، خصوصاً إذا كنت تعمل بالعربية.

المشكلة الأساسية

الشبكات العصبية تعمل على أرقام، لا نصوص. نحتاج تحويل "مرحباً بالعالم" إلى شيء مثل [15234, 87, 5623].

الحلول المُبكِّرة (وفشلها)

1. Character-level

كل حرف = token واحد.

الفائدة: قاموس صغير (~256 لـ ASCII، أكبر لليونيكود). المشكلة: النصّ يُصبح طويلاً جداً، "الذكاء الاصطناعي" 18 حرف = 18 token.

2. Word-level

كل كلمة = token.

الفائدة: نصوص قصيرة. المشكلة:

  • قاموس ضخم (ملايين الكلمات).
  • كلمات جديدة (نيولوجيزم، أسماء علم) = <UNK>.
  • أخطاء إملائية تكسر النظام.
  • العربية خصوصاً: تصريفات كثيرة (كتب، يكتب، كاتب، مكتوب، كتابة...)، كل واحد token منفصل.

الحلّ: Subword tokenization، بين الحرف والكلمة.

Byte-Pair Encoding (BPE)

الأشهر عالمياً. تستخدمه GPT-3, GPT-4, Llama, وأكثر النماذج.

كيف يعمل التدريب

  1. ابدأ بمفردات = كل الحروف الفردية.
  2. اعدد أزواج الحروف المتتالية في corpus كبير.
  3. ادمج الزوج الأكثر شيوعاً في token واحد جديد.
  4. كرّر حتى الوصول لحجم القاموس المستهدف (مثلاً 50k).

مثال مبسّط:

  • Corpus: "the cat sat on the mat"
  • بعد إحصاء: الزوج "th" يظهر مرّتين، الأكثر شيوعاً.
  • ادمج: مفردات جديدة تحوي "th".
  • كرّر: قد نجد "the" ثمّ "ing" ثمّ...

نتيجة نهائية على GPT-4

  • "Hello world" → ["Hello", " world"] = 2 tokens.
  • "artificial intelligence" → ["art", "ificial", " intelligence"] = 3 tokens.
  • "supercalifragilisticexpialidocious" → ~10 tokens (كلمة نادرة تُقسّم كثيراً).

كيف يُطبَّق على نصّ جديد

خوارزمية جشعة (greedy): تجد أطول match في المفردات، ثمّ تنتقل.

WordPiece

تستخدمه BERT. مشابه لـ BPE مع فرق:

  • بدل دمج الزوج الأكثر تكراراً، تدمج الزوج الذي يزيد احتماله بأقصى قدر.
  • تستخدم ## لتمييز subword في وسط كلمة: "playing" → ["play", "##ing"].

SentencePiece

من Google. مصمّم للعمل مباشرة على النصّ الخام (بدون tokenization مسبق للكلمات).

  • الميزة الكبرى: يعمل على لغات بدون فواصل واضحة بين الكلمات (الصينية، اليابانية، التايلاندية).
  • يُعامل الفضاء _ كحرف عادي.
  • تستخدمه Llama, T5, PaLM.

Tiktoken

مكتبة OpenAI مفتوحة المصدر لتشغيل tokenizers نماذجها.

النماذج الشائعة:

  • cl100k_base: GPT-3.5-turbo, GPT-4.
  • o200k_base: GPT-4o.
  • p50k_base: Codex, GPT-3 المبكّر.

استخدام Python:

import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")
tokens = enc.encode("مرحباً بالعالم")
print(len(tokens)) # سيُظهر عدد tokens

مشكلة العربية

مثال مباشر:

جملة: "الذكاء الاصطناعي يُغيّر العالم"

  • بالإنجليزية "Artificial intelligence changes the world" = ~7 tokens في GPT-4.
  • بالعربية = ~14-18 tokens.

السبب:

  1. tokenizer دُرِّب على corpus 90%+ إنجليزي.
  2. الحرف العربي في UTF-8 يأخذ 2 بايت غالباً، أحياناً كل حرف token منفصل.
  3. الاشتقاق العربي الغني (السوابق واللواحق) لا يُلتقط جيّداً.
  4. علامات التشكيل تضيف tokens إضافية.

الأثر العملي:

  • تكلفة API أعلى (تدفع per token).
  • context window يُستنزَف أسرع (100k token عربي = 25k-50k token إنجليزي).
  • جودة أدنى أحياناً، الاستبيان قد يُقسّم كلمة "المتحف" لـ ["ال", "مت", "حف"] ما يفقد معنى الجذر.

Tokenizers محسَّنة عربياً

ALLaM (السعودية، SDAIA)

  • نموذج سعودي بتوكينايزر خاص.
  • مبني على SentencePiece مع corpus عربي غالب.
  • كفاءة أعلى بكثير من tiktoken على العربية.

Jais (الإمارات، G42 + Cerebras)

  • تدريب على 116B token عربي + إنجليزي.
  • tokenizer مخصّص بمفردات 84k.

AraBERT / MARBERT

  • نماذج بحثية بتوكينايزر WordPiece عربي.

Command R+ من Cohere

  • ادّعى دعم عربي محسَّن، النتائج جيّدة نسبياً.

قياس كفاءة Tokenizer

Fertility = متوسط عدد tokens لكل كلمة.

| النموذج | إنجليزي | عربي | |---|---|---| | GPT-4 (cl100k) | 1.3 | 4.5 | | GPT-4o (o200k) | 1.2 | 2.8 | | ALLaM | 1.9 | 1.5 | | Jais | 1.7 | 1.4 |

ملاحظة: GPT-4o حسّن العربي كثيراً عن GPT-4 السابق.

Special Tokens

كل tokenizer له tokens خاصّة بأغراض محدّدة:

  • <|endoftext|>: نهاية النصّ.
  • <|im_start|>, <|im_end|>: بداية/نهاية رسالة (ChatML).
  • <s>, </s>: بداية/نهاية جملة.
  • <PAD>: للحشو.
  • <UNK>: كلمة غير معروفة.

هجمات وطرائف

Glitch Tokens

بعض tokens نادرة جداً في التدريب تجعل النموذج يتصرّف غريباً.

قصّة شهيرة: token SolidGoldMagikarp في GPT-3 كان يجعل النموذج يُنتج نصوصاً عشوائية أو يرفض الاستجابة. أُصلح في GPT-4.

Prompt Injection عبر Tokens

تقنيات تستغلّ طريقة الـ tokenization لتخريب النموذج (مثل إخفاء تعليمات في tokens غير مرئية).

متى يهمّ Tokenization في مشروعك؟

1. حساب التكلفة

API prices بـ tokens. نصّ عربي طويل = فاتورة أعلى.

2. Context Window

Claude 3.5 Sonnet = 200k tokens. عربي طويل قد يتخطّى الحدّ بسرعة.

3. جودة اللغات

إذا كان تطبيقك عربياً/متعدد اللغات، اختر نموذجاً بـ tokenizer محسَّن.

4. تدريب نموذج مخصّص

إذا تُدرّب نموذجاً على مجال متخصّص (طبّي، قانوني، برمجي)، درّب tokenizer جديداً:

  • من مكتبة tokenizers من Hugging Face.
  • يُقلّل عدد الـ tokens 20-40% على المجال المحدّد.

أدوات مفيدة

المستقبل

  • Byte-level models (مثل MegaByte): تعمل مباشرة على البايتات، بلا tokenizer. جذّاب فكرياً، لكن لم يُثبت جدواه على المقياس الكامل.
  • Token-free models: Byte Latent Transformer، بديل ناشئ.
  • Multilingual tokenizers أفضل: كل جيل جديد يُحسّن العربية والصينية والهندية.

توصيات عملية

للاستخدام العام:

  • GPT-4o أو Claude 3.5+ للعربية (تحسين ملحوظ).
  • تجنّب النماذج القديمة إذا كان مشروعك عربياً، 4x تكلفة زائدة.

للأبحاث/التطوير:

  • ALLaM أو Jais للعربية النقية.
  • Llama 3 + fine-tune للأداء المفتوح المصدر.

للاختيار الاستراتيجي:

  • احسب تكلفة نموذجيّة على نصوصك الفعلية باستخدام tokenizer الفعلي، لا تعتمد على "عدد الكلمات".

اقرأ أيضاً:

هل أفادك هذا المقال؟

كن أول من يقيّم

الأسئلة الشائعة

الوحدة الأساسية التي يُعالجها النموذج، قد تكون كلمة كاملة، جزء كلمة، حرف، أو رمز خاص. النصّ 'مرحباً بالعالم' قد يُقسّم لـ ['مرحباً', ' بال', 'عالم'] بحسب الـ tokenizer المستخدم.
لأن المفردات ستكون ضخمة جداً (ملايين الكلمات + كلمات جديدة تُخترع باستمرار + أخطاء إملائية). BPE وأخواتها تجد توازناً بين حجم القاموس والقدرة على تمثيل أي نصّ.
Byte-Pair Encoding، خوارزمية تبدأ بالحروف كـ tokens، ثم تدمج تكراراً الأزواج الأكثر شيوعاً حتى نصل لحجم قاموس مستهدف. مثلاً 'th' يُدمج ثم 'the' ثم 'ing'. تُستخدم في GPT وأكثر النماذج.
معظم الـ tokenizers دُرِّبت على بيانات إنجليزية غالبة. الحرف العربي أحياناً يأخذ 2-3 tokens بسبب UTF-8، والكلمة الواحدة قد تُقسّم لأجزاء كثيرة. النتيجة: نصّ عربي = 2-4× tokens نفس النصّ بالإنجليزية.
يعتمد على النموذج: GPT-3.5 حتى 16k، GPT-4 Turbo حتى 128k، GPT-4o حتى 128k، Claude 3.5 Sonnet حتى 200k، Gemini 1.5 Pro حتى 2M. هذا يشمل السؤال والرد معاً.
OpenAI Tokenizer (platform.openai.com/tokenizer) للعرض الفوري لـ GPT. Anthropic Tokenizer counter لـ Claude. مكتبة tiktoken في Python للحساب البرمجي. Hugging Face tokenizers لأي نموذج مفتوح المصدر.
نعم، تدريب tokenizer على corpus عربي غالب يُخفّض عدد الـ tokens 40-60%. نماذج مثل ALLaM السعودية و AraBERT و Jais الإماراتية تستخدم tokenizers مُحسَّنة عربياً بدلاً من tiktoken العام.

مقالات ذات صلة

نشرة مقالات الأسبوعية

اشترك تصلك أحدث المقالات + مختارات نادرة كل أحد. بلا سبام، ألغي الاشتراك بضغطة.

لا نشارك بريدك مع أي طرف ثالث. راجع سياسة الخصوصية.

التعليقات

بريدك لن يظهر ولن يُرسل إليه شيء — يُستخدم فقط لمنع الإزعاج.

لا تعليقات بعد — كن أول من يكتب.