Tokenization
التقطيع اللغوي (Tokenization) Tokenization
Tokenization يحوّل نص إلى قطع (tokens) يعالجها النموذج — WordPiece (BERT)، SentencePiece/Unigram (T5)، BPE (GPT). كل نموذج له مميّز يختلف عن غيره.
Tokenization الخطوة الأولى في NLP: تحويل نص خام إلى أرقام (token IDs) يمررها النموذج. تختلف الخوارزميات حسب عائلة النموذج:
- GPT-2 يستخدم byte-level BPE (Byte Pair Encoding يعمل على مستوى البايت، فيدمج أكثر الـ subwords تكرارًا تدريجيًا). - BERT و mBERT يستخدمان WordPiece (subword يعتمد على تكرار subwords في بيانات التدريب). - T5 يستخدم SentencePiece مع Unigram (نموذج احتمالي يختار أفضل تقسيم).
لا تعمّم tokenizer عبر كل إصدارات عائلة معيّنة: GPT-2 و GPT-3 و GPT-4 و GPT-5 و LLaMA 1 و LLaMA 2 و LLaMA 3 كلها قد تستخدم تكوينات مختلفة. كل إصدار له tokenizer مخصّص يُحمَّل معه (مثل AutoTokenizer.from_pretrained في Hugging Face) — تحقّق من الـ tokenizer المرفق بنقطة الفحص (checkpoint) الفعلية قبل الاعتماد على سلوك معيّن.
للعربية: Tokenization تحدّي حقيقي لأن الكلمة الواحدة قد تتغير صورتها (بادئات، لواحق، تشكيل). مميّز BERT متعدد اللغات (mBERT) قد يُقطّع كلمات عربية لقطع صغيرة جدًا أحيانًا — يؤثر على عدد الـ tokens وزمن المعالجة. لا تعتمد على أرقام token counts لعينات عربية بدون تجريب فعلي على النموذج نفسه.
الصياغة
# واجهة Hugging Face الموحّدة
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("bert-base-uncased")
ids = tok("Hello, world!")["input_ids"]
# [101, 7592, 1010, 2088, 999, 102]📄 مثال
from transformers import AutoTokenizer
# BERT → WordPiece
bert_tok = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
ids = bert_tok("الذكاء الاصطناعي")["input_ids"]
print(f"BERT tokens: {ids}")
# T5 → SentencePiece (Unigram-family)
t5_tok = AutoTokenizer.from_pretrained("t5-small")
ids = t5_tok("machine learning")["input_ids"]
print(f"T5 tokens: {ids}")
# GPT-2 → BPE
gpt_tok = AutoTokenizer.from_pretrained("gpt2")
print(f"GPT vocab size: {gpt_tok.vocab_size}")أهم النقاط
| النقطة | الوظيفة |
|---|---|
| WordPiece | subword learning — BERT, mBERT, DistilBERT |
| BPE | Byte Pair Encoding — GPT-2, RoBERTa |
| SentencePiece (Unigram) | Sentence-level tokenization — T5, XLNet. LLaMA تستخدم SentencePiece أيضًا لكن بخوارزمية BPE-style وليس Unigram، وإصدارات/نقاط الفحص المختلفة قد تستخدم tokenizers مختلفة |
| Vocab size | حجم قاموس الـ tokens — يحدّ حجم طبقة Embedding |
💡 نصائح عملية
- استخدم دائمًا AutoTokenizer.from_pretrained مع tokenizer_name نفسه للنموذج — لا تخلط tokenizers بين نماذج مختلفة
- حين ترسل نصًا عربيًا لنموذج غير مدرب عليه، tokenize أولاً لمعرفة عدد الـ tokens — بعض الكلمات قد تتقطع إلى عدة subwords
⚠️ أخطاء شائعة
- افتراض أن كل النماذج تستخدم نفس Tokenizer — GPT-2 و BERT و T5 كلها مختلفة، خلطها ينتج IDs غير متوافقة
- القول "كل نماذج LLaMA تستخدم SentencePiece" — عائلات LLaMA المختلفة لها tokenizers متفاوتة
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: Hugging Face Documentation