Token
الرمز هو وحدة الإدخال التي يعالجها النموذج، مثل جزء من كلمة أو رقعة صورة. تعرّف على كيفية تقسيم مُجزِّئات الرموز للنص، والرموز المرئية، وتكاليف الرموز.
الرمز هو الوحدة الأساسية للمدخلات والمخرجات التي يعالجها نموذج الذكاء الاصطناعي: قد يكون كلمة، أو جزءاً من كلمة، أو حرفاً، أو بايتاً في النص، أو رقعة من وحدات البكسل في الصورة. قبل أن يتمكن المحوّل من قراءة جملة أو صورة، يقسم محلّل الرموز المدخل إلى رموز ويحوّل كل واحد منها إلى معرّف صحيح، ثم يبحث النموذج عن متجه تضمين لكل معرّف. ويحدد عدد الرموز ما يستطيع النموذج معالجته وما تكلفته: إذ تُقاس نافذة السياق بالرموز، وتولّد النماذج اللغوية الكبيرة (LLMs) النص رمزاً واحداً في كل مرة، وتُحاسب واجهات API التجارية على كل رمز إدخال وإخراج.
الرمز مقابل تحليل الرموز والمصطلحات ذات الصلة#
- تحليل الرموز: عملية تقسيم المدخل الخام إلى رموز. والرمز وحدة واحدة من وحدات مخرجاتها.
- المفردات ومعرّفات الرموز: مفردات محلّل الرموز هي المجموعة الثابتة من الرموز التي يعرفها، ولكل منها معرّف صحيح. يستخدم BERT عدد 30,522 رمزاً، وGPT-2 عدد 50,257، وLlama 3 عدد 128,256، وGemma 3 نحو 262,000.
- الرموز الخاصة: علامات لبنية التسلسل، مثل رموز بداية النص ونهايته والحشو، أو الرمز
[CLS]الذي يستخدم تضمينه النهائي في BERT للتصنيف. - التضمينات: المتجهات المتعلّمة التي تبحث الطبقة الأولى للنموذج عنها لكل معرّف رمز، وتحمل معنى الرمز إلى داخل الشبكة.
رموز النص#
لا يمكن لمفردات الكلمات الكاملة تغطية كل اسم وخطأ مطبعي ومصطلح جديد، كما تجعل الأحرف المفردة التسلسلات طويلة جداً. لذلك تستخدم محلّلات الرموز الحديثة وحدات الكلمات الجزئية: تتحول الكلمات الشائعة إلى رموز مفردة، وتُقسّم الكلمات النادرة إلى أجزاء قابلة لإعادة الاستخدام. تبدأ عملية ترميز أزواج البايتات (BPE)، التي طوّرها سينريش وزملاؤه لتلائم الترجمة الآلية العصبية عام 2016، من أحرف مفردة، ثم تدمج بشكل متكرر أكثر زوج متجاور شيوعاً حتى تبلغ المفردات الحجم المستهدف. تطبّق نماذج GPT عملية BPE على البايتات، لذا يمكن ترميز أي نص، بما فيه الشيفرة والرموز التعبيرية، كما تُعد WordPiece (المستخدمة في BERT) ونموذج Unigram في SentencePiece طريقتين مرتبطتين لتقسيم الكلمات. يوضح محلّل الرموز BPE في CLIP، المحمّل هنا من منصة Hugging Face، كيفية تقسيم الكلمات:
from transformers import AutoTokenizer
# Load CLIP's byte-pair-encoding (BPE) tokenizer from the Hugging Face Hub
tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
for text in ["bus", "double-decker bus", "unhappiness", "Ultralytics"]:
tokens = tokenizer.tokenize(text)
print(f"{text!r} -> {tokens} -> {tokenizer.convert_tokens_to_ids(tokens)}")تُعد "bus" رمزاً واحداً، معرّفه 2840، بينما تنقسم "unhappiness" إلى un وhappiness، وتتجزأ الكلمة النادرة "Ultralytics" إلى ثلاثة أجزاء، هي ultr وaly وtics. وتشير اللاحقة </w> إلى نهاية كلمة في مفردات CLIP المؤلفة من 49,408 رموز، كما يقرأ مرمّز النص في CLIP ما يصل إلى 77 رمزاً لكل مطالبة.
الرموز المرئية#
يقسّم محوّل الرؤية (ViT)، الذي قُدّم في الورقة البحثية الصورة تساوي 16×16 كلمة، الصورة إلى رقع ثابتة الحجم، تبلغ 16 × 16 بكسلاً في ViT-B/16، ثم يسقط كل رقعة على تضمين، بحيث تصبح الصورة ذات الأبعاد 224 × 224 مكونة من 196 رمزاً. وتسجل تضمينات المواضع مصدر كل رقعة، بينما يجمع رمز فئة إضافي المعلومات لأغراض التصنيف. وعادةً ما يُنفذ الإسقاط باستخدام عملية التفاف يكون فيها حجم الخطوة مساوياً لحجم النواة:
import torch
# ViT-B/16 patch embedding: a 16x16 convolution with stride 16 turns each patch into one 768-dim token
patch_embed = torch.nn.Conv2d(3, 768, kernel_size=16, stride=16)
for size in (224, 448):
image = torch.rand(1, 3, size, size)
tokens = patch_embed(image).flatten(2).transpose(1, 2) # (batch, tokens, dims)
print(f"{size}x{size} image -> {tuple(tokens.shape)}")تعطي صورة بأبعاد 224 × 224 عدد 196 رمزاً، يحتوي كل منها على 768 قيمة، بينما تؤدي مضاعفة الضلع إلى 448 بكسلاً إلى 784 رمزاً، أي أربعة أضعاف العدد. تقارن آلية الانتباه الذاتي كل رمز بجميع الرموز الأخرى، لذا تعني زيادة عدد الرموز أربعة أضعاف ارتفاع كلفة الانتباه إلى نحو ستة عشر ضعفاً؛ ولهذا تستخدم النماذج عالية الدقة الانتباه ضمن نوافذ، كما في محوّل Swin، أو تدمج الرموز المتشابهة باستخدام دمج الرموز.
تمرر نماذج الرؤية واللغة الرموز المرئية من مرمّز الصور إلى نموذج لغوي كبير إلى جانب رموز النص، بحيث ينتبه محوّل واحد إلى كليهما ويكتب إجابته رمزاً نصياً واحداً في كل مرة:
أهمية أعداد الرموز#
- حدود السياق: يجب أن يتسع سياق النموذج للمطالبة وأي مستندات أو صور مسترجعة والإجابة المُولّدة.
- الكلفة وزمن الاستجابة: تسعّر واجهات API رموز الإدخال والإخراج كلّاً على حدة، ويزداد زمن التوليد مع عدد رموز الإخراج، لأن كل رمز يتطلب خطوة فك ترميز تقرأ ذاكرة KV المؤقتة الخاصة بالنموذج.
- اللغات والتنسيقات: تقسّم محلّلات الرموز المدرّبة في معظمها على الإنجليزية اللغات الأخرى والشيفرات والأرقام الطويلة إلى رموز أكثر لكل كلمة، لذا تكون كلفة المحتوى نفسه أعلى، وتمتلئ نافذة السياق في وقت أقرب.
- المهام على مستوى الحروف: يرى النموذج رموزاً فرعية للكلمات، لذا تكون المهام المعتمدة على حروف فردية، مثل عدّ حروف كلمة أو عكس ترتيبها، أصعب مما تبدو عليه.
تطبيقات عملية#
- توليد النص: يعيّن نموذج لغوي كبير احتمالاً لكل رمز في مفرداته، ثم يختار رمزاً ويضيفه إلى التسلسل ويكرر العملية، مع استخدام أساليب أخذ عينات مثل أخذ عينات النواة للاختيار من بين الرموز المرجحة.
- توليد الصور: تتنبأ نماذج الصور التسلسلية ذاتياً برموز مرئية منفصلة من قاموس رموز متعلّم بُني باستخدام تكميم المتجهات، على غرار تنبؤ نموذج لغوي كبير بالكلمات.
- الكشف بمفردات مفتوحة: يعثر YOLOE-26، وهو إصدار يستند إلى YOLO26 من نموذج YOLOE الذي طورته جامعة تسينغهوا والمضمّن في حزمة Ultralytics، على الأجسام انطلاقاً من أسماء الفئات المكتوبة. وتُحلّل طريقته
set_classes()كل اسم باستخدام محلّل الرموز BPE الخاص بـ CLIP، ثم يحوّل مرمّز النص MobileCLIP2 من Apple الرموز إلى تضمين، ويطابق النموذج هذه التضمينات مع مناطق الصورة، ما يتيح له اكتشاف "حافلة بطابقين"، وهي فئة غير موجودة في مجموعة بيانات COCO، اعتماداً على الكلمات وحدها.










