انتقل إلى المحتوى الرئيسي

جارٍ تحميل المختبر المرئي…

#tokenizationنماذج LLM وTransformers

التقطيع وBPE: كيف يُقطِّع نموذج LLM النص.

ما ستُجرّبه

  1. مرحبًا بك في قناة #tokenization. على الشاشة، الجملة «الشبكات العصبية تتعلّم عبر ضبط أوزانها.» مُقطَّعة بواسطة مُقطِّع BPE تدرَّب على مدوَّنة عربية صغيرة، بعد 30 دمجة: كل بلاطة هي token، وهي الوحدة التي يقرأها النموذج فعليًا. على اليمين: العدّاد. لا يرى نموذج LLM حروفًا ولا كلمات، بل هذه القِطع المرقّمة في مفردات (vocabulary)، وعددها هو ما يُحدِّد ثمن الطلب وما يتّسع له داخل نافذة السياق (context window).
  2. لنبدأ بأبسط تقطيع: token واحد لكل حرف. اكتب /method chars.
  3. العكس: token واحد لكل كلمة. /method words.
  4. يبدأ BPE من الحروف ويتعلّم لصق أكثر الأزواج تكرارًا في المدوَّنة. أعِد عدّاد الدمجات إلى الصفر: /merges 0.
  5. طبِّق أوّل دمجة تعلّمتها المدوَّنة: /merge.
  6. كرِّر أربعين مرة تحصل على مُقطِّع حقيقي: /merges 40.
  7. لنختبره على جملة مليئة بكلمات دخيلة تحمل حركات لاتينية: /example accents.
  8. حوِّل ذلك إلى فاتورة: /count.
  9. دورك: /text … بجملتك الخاصة، /example code (Python أمام مُقطِّع مُدرَّب على الإنجليزية)، /language en أو /language fr (مدوَّنة إنجليزية أو فرنسية: راقب كيف يتبدّل التقطيع)، /vocabulary (أكثر 20 tokens تكرارًا)، /merges 60 لدفع BPE إلى أقصاه، /reset لإعادة البدء. المحطة التالية: قناة #attention، حيث تنظر هذه الـtokens بعضها إلى بعض لتمنح بعضها معنى.

أوامر القناة

  • /text <كلمة>يستبدل النص المُراد تقطيعه (السطر كاملًا، بحدّ أقصى 120 حرفًا).
  • /method <chars|words|bpe>يُغيِّر طريقة تقطيع النص: بالحرف أو بالكلمة أو بمقاطع BPE فرعية.
  • /merges <0..60>عدد دمجات BPE المطبَّقة على النص (يحوِّل إلى طريقة bpe).
  • /mergeيطبِّق دمجة BPE إضافية ويُبرز الزوج المُدمَج.
  • /language <ar|en|fr>المدوَّنة التي يتعلّم عليها BPE: العربية (42 جملة) أو الإنجليزية (40 جملة) أو الفرنسية (42 جملة).
  • /vocabularyحجم المفردات الحالية وأكثر 20 tokens تكرارًا في المدوَّنة.
  • /countالحروف والـtokens والنسبة والتكلفة التقديرية إذا كان 1 token = 1 وحدة فوترة.
  • /example <short|long|accents|code>يُحمِّل نصًا معدًّا مسبقًا: قصير أو طويل أو مليء بالحركات أو شيفرة.
  • /resetالعودة إلى الجملة الابتدائية وBPE و30 دمجة والمدوَّنة العربية.

المسرد

Token (رمز)
الوحدة التي يقرأها ويُنتجها نموذج اللغة: قطعة نصّية (حرف، جزء كلمة، كلمة كاملة، رمز) مُرقَّمة في مفردات. لا يرى LLM حروفًا ولا كلمات، بل تسلسلًا من أرقام الـtokens. ثمن الطلب وحجم نافذة السياق يُحتسبان بالـtokens.
التقطيع (Tokenization)
الخطوة التي تحوِّل نصًا إلى تسلسل من tokens قبل دخول النموذج، وتُلصقها معًا لتُخرِج نصًا عند الخروج. بالحرف: تسلسلات طويلة جدًا؛ بالكلمة: مفردات مفتوحة ومجاهيل؛ بالمقاطع الفرعية (BPE، WordPiece): المقايضة التي اعتمدها كل نموذج LLM.
BPE (byte-pair encoding)
خوارزمية تقطيع بالمقاطع الفرعية: تبدأ من الحروف (أو البايتات)، تعدّ كل زوج من الرموز المتجاورة في المدوَّنة، تدمج الأكثر تكرارًا، وتعيد الكرّة عددًا محدّدًا من المرّات. تُطبَّق الدمجات المُتعلَّمة بعد ذلك بالترتيب نفسه على أي نص جديد. تستخدمها GPT وLlama وMistral.
المفردات (Vocabulary)
جدول كل الـtokens التي يعرفها النموذج، لكلٍّ رقمه. حجمه اختيار تصميمي (32,000 إلى 200,000 مدخل في نماذج LLM الحديثة): كلّما كبر، قصُرت النصوص بالـtokens، لكن ثَقُلت جداول التضمين وطبقة الخروج.
مقطع فرعي (Sub-word)
token أصغر من الكلمة: جذر، بادئة، نهاية («re»، «er»، «ing·»). الكلمة الشائعة مقطع فرعي واحد، والنادرة أو المُختَلَقة تُقسَّم إلى عدّة: يستطيع النموذج قراءة أي كلمة دون أن يصطدم بمجهول.
Token مجهول (UNK)
رمز نائب يُصدره مُقطِّع مستوى الكلمة عن كل كلمة غائبة عن مفرداته: المعلومة ضائعة. تتجنّبه مُقطِّعات المقاطع الفرعية بالرجوع إلى الحروف، وتزيله المُقطِّعات على مستوى البايت كليًا (256 بايت تكفي لكتابة أي شيء).
نافذة السياق (Context window)
أقصى عدد من الـtokens يمكن للنموذج أن يأخذها بالحسبان دفعةً واحدة (السؤال والوثائق المُقدَّمة والجواب مشمولة): 8,000 أو 128,000، وأحيانًا أكثر من المليون. تُقاس بالـtokens، لا بالكلمات: نص مُقطَّع رديئًا (لغة نادرة، شيفرة، حركات) يستهلك منها أكثر.
علامة نهاية الكلمة
رمز خاص يُلحَق بآخر حرف من كل كلمة قبل تعلّم BPE («» في Sennrich، تُعرَض «·» هنا). تُميّز «es» في وسط الكلمة عن «es» في آخرها، وتسمح بلصق النص من جديد دون تخزين المسافات. يفعل SentencePiece العكس بعلامة بداية الكلمة «▁».
WordPiece / SentencePiece
قريبان لـBPE. WordPiece (BERT) يختار الدمجة التي تزيد أرجحية المدوَّنة أكثر بدل الأكثر تكرارًا، ويسبق المقاطع الفرعية الداخلية بـ«##». SentencePiece (T5، Llama) يعامل النص الخام، بالمسافات، بوصفه تسلسلًا من الرموز: لا يحتاج إلى تقطيع مسبق إلى كلمات، وهو ما يناسب اللغات التي لا مسافات فيها.
تكلفة الـtokens
ما يستهلكه النص، مقيسًا بالـtokens: وحدة الفوترة لواجهات LLM البرمجية، وما يملأ نافذة السياق. نسبة حرف/token (≈ 4 في الإنجليزية، أقل في الفرنسية أو في الشيفرة) تُخبِرك بتكلفة نص للطول نفسه: المُقطِّع المُدرَّب على الإنجليزية أساسًا يجعل اللغات الأخرى أغلى.

قنوات أخرى في نماذج LLM وTransformers

  • #tokenizationالتقطيع وBPE: كيف يُقطِّع نموذج LLM النص.
  • #attentionالانتباه الذاتي: كل كلمة تنظر إلى الأخريات.
  • #transformer-blockكتلة المحوّل: الانتباه، الوصلات التجاوزية، التسوية، شبكة FFN.
  • #generation-temperatureالتوليد: الحرارة وtop-k وtop-p.
  • #ragRAG: الإجابة انطلاقًا من وثائقك.
  • #alignment-rlhfالمحاذاة وRLHF: تعلّم ما يفضّله البشر.