Transformers documentation

خوارزميات الترميز

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

خوارزميات الترميز

يدعم Transformers ثلاثة خوارزميات لتجزئة الكلمات الفرعية: Byte pair encoding (BPE)، وUnigram، وWordPiece. تقوم هذه الخوارزميات بتقسيم النص إلى وحدات تقع بين الكلمات والحروف، مما يحافظ على حجم المفردات مضغوطاً مع التقاط المقاطع ذات المعنى في الوقت نفسه. تبقى الكلمات الشائعة سليمة كرموز مفردة، بينما تتفكك الكلمات النادرة أو المجهولة إلى كلمات فرعية.

على سبيل المثال، قد يُقسَّم annoyingly إلى ["annoying", "ly"] أو ["annoy", "ing", "ly"] اعتمادًا على المفردات. ويتيح تقسيم الكلمات الفرعية للنموذج تمثيل الكلمات غير المرئية من خلال الكلمات الفرعية المعروفة.

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

ترميز أزواج البايت

يُعدّ ترميز الأزواج البايتية (BPE) خوارزمية التقطيع الأكثر شيوعاً في Transformers، حيث تستخدمه نماذج مثل Llama وGemma وQwen2 وغيرها.

  1. يقوم مُجزِّئ ما قبل الرموز (pre-tokenizer) بتقسيم النص على أساس المسافات البيضاء أو قواعد أخرى، مما ينتج عنه مجموعة من الكلمات الفريدة وتكراراتها.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
  1. يُنشئ خوارزمية BPE مفردات أساسية، ["b", "g", "h", "n", "p", "s", "u"]، من جميع الأحرف.
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)
  1. تبدأ BPE من الأحرف الفردية وتدمج بشكل متكرر أكثر زوج مجاور تكراراً. يظهر "u" و"g" معاً بشكل متكرر في "hug" و"pug" و"hugs"، لذا تدمج BPE بينهما لتكوين "ug" وتضيفه إلى المفردات.
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)
  1. أكثر زوج شيوعاً بعد ذلك هو "u" و"n"، الذي يظهر في "pun" و"bun"، لذا يتم دمجها لتصبح "un".
("h" "ug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("h" "ug" "s", 5)
  1. أصبح المفردات الآن ["b", "g", "h", "n", "p", "s", "u", "ug", "un"]. يستمر خوارزمية BPE في تعلّم قواعد الدمج حتى تصل إلى حجم المفردات المستهدف، وهو يساوي حجم المفردات الأساسية مضافًا إليه عدد عمليات الدمج. يستخدم GPT خوارزمية BPE بحجم مفردات يبلغ 40,478 (478 رمزًا أساسيًا + 40,000 عملية دمج).

تُرمَّز أيّ شخصية غير موجودة في المفردات الأساسية إلى رمز مجهول مثل "<unk>". في الممارسة العملية، تغطي المفردات الأساسية جميع الشخصيات التي شوهدت أثناء التدريب، لذا فإن الرموز المجهولة نادرة الحدوث.

BPE على مستوى البايت

لن يؤدي تضمين جميع أحرف يونيكود إلى جعل المفردات الأساسية ضخمة. يستخدم BPE على مستوى البايت 256 قيمة بايت كمفردات أساسية بدلاً من ذلك، مما يضمن إمكانية تقسيم كل كلمة إلى رموز دون الحاجة إلى رمز "<unk>". يستخدم GPT-2 BPE على مستوى البايت بحجم مفردات يبلغ 50,257 (256 رمز بايت + 50,000 دمج + رمز خاص لنهاية النص).

Unigram

يُعدّ Unigram ثاني خوارزميات التقطيع شيوعاً في مكتبة Transformers، حيث تستخدمه نماذج مثل T5 وBigBird وPegasus وغيرها.

  1. يبدأ Unigram بمجموعة كبيرة من المرشحات الفرعية، ويحصل كل مرشح على درجة احتمال بناءً على تكرار ظهوره.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "pu", "bu", "gs", "hug", "pug", "pun", "bun", "ugs", "hugs"]
  1. تقيس Unigram مدى جودة ترميز المفردات الحالية لبيانات التدريب في كل خطوة.

  2. لكل رمز، يقيس Unigram مقدار الزيادة في إجمالي الخسارة الناتجة عن إزالة ذلك الرمز. على سبيل المثال، لا تؤثر إزالة "pu" بشكل كبير على الخسارة، لأن "pug" و"pun" يمكن ترميزهما على شكل ["p", "ug"] و["p", "un"] على التوالي.

    لكن إزالة "ug" ستزيد من مقدار الخسارة بشكل كبير لأن "hug" و"pug" و"hugs" تعتمد جميعها عليه.

  3. تزيل Unigram الرموز التي تسبب أقل زيادة في الخسارة، وعادةً ما تكون أدنى 10-20%. تبقى الأحرف الأساسية دائمًا حتى يمكن تقسيم أي كلمة إلى رموز. يتم حذف رموز مثل "bu" و"pu" و"gs" و"pug" و"bun" لأنها ساهمت بأقل قدر في الاحتمالية الإجمالية.

["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "hug", "pun", "ugs", "hugs"]
  1. تتكرر الخطوات من 2 إلى 4 حتى يصل حجم المفردات إلى الحجم المستهدف.

أثناء الاستدلال، يمكن لـ Unigram تقسيم كلمة إلى وحدات بعدة طرق. فقد تتحول "hugs" إلى ["hug", "s"] أو ["h", "ug", "s"] أو ["h", "u", "g", "s"]. يختار Unigram التقسيم الذي يحمل أعلى احتمال. وعلى عكس BPE الذي هو حتمي ويعتمد على قواعد الدمج، فإن Unigram احتمالي ويمكنه أخذ عينات من تقسيمات مختلفة أثناء التدريب.

SentencePiece

SentencePiece هي مكتبة لتجزئة النصوص تطبّق BPE أو Unigram مباشرةً على النص الخام. تفترض خوارزميتا BPE وUnigram القياسيتان أن المسافات الفارغة تفصل بين الكلمات، وهو ما لا يناسب لغات مثل الصينية واليابانية التي لا تستخدم المسافات.

  1. يعامل SentencePiece النص المُدخل كتيار خام من البايتات أو الأحرف، ويشمل حرف المسافة، المُمثَّل بـ "▁"، في المفردات.
("▁hug", 10), ("▁pug", 5), ("▁pun", 12), ("▁bun", 4), ("▁hugs", 5)
  1. ثم يطبّق SentencePiece خوارزمية BPE أو Unigram على النص.

عند فك الترميز، يجمع SentencePiece جميع الرموز ويستبدل "▁" بمسافة.

WordPiece

WordPiece هو خوارزمية التقطيع المستخدمة في نماذج عائلة BERT مثل DistilBERT وElectra.

يُشبه BPE ودمج الأزواج بشكل تكراري من الأسفل إلى الأعلى، لكنه يختلف في طريقة اختيار الأزواج.

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

يجمع WordPiece أزواجًا تعظّم احتمال بيانات التدريب.

score("u", "g") = frequency("ug") / (frequency("u") × frequency("g"))
زوجالترددالنتيجة
"u" + "g"2020 / (36 × 20) = 0.028
"u" + "n"1616 / (36 × 16) = 0.028
"h" + "u"1515 / (15 × 36) = 0.028
"g" + "s"55 / (20 × 5) = 0.050

تميل النتيجة إلى دمج "g" و"s" عندما يظهر الرمز المدمج أكثر من المتوقع بناءً على ترددات الرموز الفردية. يدمج BPE ببساطة أي زوج يظهر بأعلى تكرار. بينما يقيس WordPiece مدى معلوماتية كل عملية دمج. يتم دمج الرمزين اللذين يظهران معًا بشكل أكبر بكثير مما تتوقعه الصدفة أولاً.

التجزئة على مستوى الكلمة

يقوم التقطيع على مستوى الكلمات بتقسيم النص إلى رموز بناءً على المسافات أو علامات الترقيم أو قواعد محددة لكل لغة.

["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."]

تصبح حجم المفردات ضخماً للغاية لأن كل كلمة فريدة تتطلب رمزاً خاصاً بها، بما في ذلك جميع صيغها ("love"، "loving"، "loved"، "lovingly"). يؤدي ذلك إلى مصفوفة تضمين هائلة الحجم، مما يزيد من استهلاك الذاكرة والحساب. كما أن الكلمات غير الموجودة في المفردات تُخضع لرمز "<unk>"، مما يمنع النموذج من التعامل مع الكلمات الجديدة.

التجزئة على مستوى الأحرف

يقوم التقطيع على مستوى الأحرف بتقسيم النص إلى أحرف فردية.

["D", "o", "n", "'", "t", "y", "o", "u", "l", "o", "v", "e"]

المفردات صغيرة الحجم ويمكن تمثيل كل كلمة، لذا لا يوجد مشكلة "<unk>". لكن تصبح التسلسلات أطول بكثير. فحرف مثل "l" يحمل معنى أقل بكثير من "love"، مما يؤدي إلى تدهور الأداء.

الموارد

  • يتعلّم الفصل 6 من دورة LLM كيفية تدريب مُجزِّئ (tokenizer) من الصفر، ويشرح الفروق بين خوارزميات BPE وUnigram وWordPiece.
Update on GitHub