أساسيات LLM: الترميز والتدريب

أساسيات LLM: الترميز والتدريب

اكتشف الفروق الرئيسية بين الترميز والتضمين في نماذج اللغة الكبيرة (LLMs) مثل GPT. تعلم كيف يقوم الترميز بتقسيم النص إلى وحدات يمكن إدارتها، بينما يوفر التضمين تمثيلات متجهة غنية لهذه الرموز. فهم هذه العمليات أمر بالغ الأهمية لإطلاق إمكانات نماذج اللغة الكبيرة في مهام معالجة اللغة الطبيعية.

مقدمة

الترميز والتضمين هما مكونان أساسيان في نماذج اللغة الكبيرة (LLMs) مثل GPT، وهما حاسمان لفهم النص وتوليده. يتضمن الترميز تقسيم النص الخام إلى وحدات قابلة للإدارة تُسمى الرموز (tokens)، بينما يوفر التضمين تمثيلات متجهة غنية لهذه الرموز. فهم الاختلافات بين الترميز والتضمين ضروري لاستيعاب تعقيدات كيفية معالجة نماذج اللغة الكبيرة لبيانات اللغة.

ما هو الترميز

كثيرًا ما تُناقش الرموز في أبحاث الذكاء الاصطناعي، كما في ورقة Llama 2، حيث يذكر المؤلفون التدريب على 2 تريليون رمز من البيانات. تعمل الرموز كوحدة أساسية، تشبه “الذرة”، لنماذج اللغة الكبيرة (LLMs). يتضمن الترميز ترجمة السلاسل النصية (أي النص) إلى تسلسلات من الرموز والعكس صحيح.

في مجال التعلم الآلي، لا يساوي الرمز عادةً كلمة واحدة. بدلاً من ذلك، قد يمثل وحدة أصغر، مثل حرف أو جزء من كلمة، أو وحدة أكبر، مثل عبارة كاملة. يختلف حجم الرموز باختلاف نهج الترميز المستخدم.

يتم التعامل مع الترميز عادةً بواسطة مكون يُعرف باسم “Tokenizer”. يعمل هذا المكون بشكل مستقل عن نموذج اللغة الكبيرة وله مجموعة بيانات تدريب نصية خاصة به، والتي قد تختلف تمامًا عن بيانات تدريب LLM.

لماذا يهم الترميز؟

غالبًا ما يكمن الترميز وراء العديد من الخصائص الغريبة التي تُلاحظ في نماذج اللغة الكبيرة (LLMs). في حين أن بعض المشكلات قد تظهر في البداية وكأنها نابعة من بنية الشبكة العصبية أو LLM نفسها، إلا أنها يمكن أن تُعزى في الواقع إلى الترميز. فيما يلي قائمة غير شاملة بالمشكلات التي يمكن إرجاعها إلى الترميز:

  • عدم الدقة في التهجئة
  • صعوبة في مهام معالجة السلاسل النصية البسيطة، مثل عكس سلسلة نصية
  • أداء أقل في اللغات غير الإنجليزية، مثل اليابانية
  • أداء ضعيف في العمليات الحسابية الأساسية
  • تحديات في مهام البرمجة، مثل Python، التي واجهها GPT-2
  • مشكلات مثل المسافات البيضاء الزائدة
  • حالات أظهرت فيها إصدارات سابقة من GPT سلوكًا غير منتظم عند التعامل مع استفسار عن “SolidGoldMagikarp”
  • تفضيل YAML على JSON في معالجة البيانات المنظمة

سنتعمق في كيفية مساهمة الترميز في هذه المشكلات في هذه المقالة.

تفاصيل الترميز

فيما يلي نظرة عامة على الخطوات المتضمنة في الترميز. على الرغم من أن بعض هذه الخطوات قد لا تكون واضحة فورًا، إلا أننا سنتعمق فيها بمزيد من التفصيل أثناء تقدمنا في هذه المقالة.

ما قبل التدريب: إنشاء المفردات

  1. جمع بيانات التدريب: تجميع مجموعة كبيرة من البيانات النصية التي سيتعلم منها النموذج.
  2. الترميز الأولي: استخدام طرق ترميز أولية لتقسيم النص إلى وحدات أساسية، مثل الكلمات أو الأجزاء الفرعية من الكلمات أو الأحرف.
  3. إنشاء المفردات: اختيار خوارزمية ترميز، مثل Byte Pair Encoding (BPE) أو WordPiece أو SentencePiece، لإنشاء مجموعة من الرموز قابلة للإدارة والفعالية.
  4. تطبيق الخوارزمية: تنفيذ الخوارزمية المختارة على الرموز الأولية لإنتاج مجموعة من الرموز الفرعية أو الأحرف التي تلتقط الفروق اللغوية الموجودة في بيانات التدريب.
  5. تعيين المعرفات: تعيين معرف فريد من نوعه (عدد صحيح) لكل رمز في المفردات الناتجة.

عملية الترميز في الوقت الفعلي

  1. تحويل النص الوارد إلى رموز بناءً على المفردات المحددة، مع ضمان التغطية الكاملة لجميع النص.
  2. ربط كل رمز بمعرفه الصحيح (عدد صحيح) كما هو محدد في المفردات المحددة مسبقًا.
  3. دمج أي رموز خاصة أساسية في التسلسل لتلبية متطلبات معالجة النموذج.

فهم تحديات الترميز

لا تتردد في كتابة الجمل، ولاحظ كيفية إنشاء الرموز (ولاحظ الزيادة المقابلة في عدد الرموز وسعر كل طلب).

مرر الماوس فوق النص على الجانب الأيمن بعد تفعيل مربع “Show whitespace”، وستلاحظ الرموز المميزة. تتكون هذه الرموز عادةً من “أجزاء” غالبًا ما تتضمن حرف المسافة في البداية.

إليك مثال آخر:

لاحظ كيف تختلف أجزاء الرموز وتمثيلاتها الرقمية بناءً على:

  • وجود مسافة قبل الكلمة
  • وجود علامات ترقيم
  • حالة الأحرف

يجب على نموذج اللغة الكبير (LLM) أن يتعلم من البيانات الخام أنه على الرغم من هذه الاختلافات في الرموز، إلا أن الكلمات تمثل نفس المفهوم أو على الأقل متشابهة جدًا. يمكن أن يؤدي هذا التباين إلى تقليل الأداء.

لغات بشرية أخرى

عند مقارنة حجم القطعة للغة الإنجليزية مع اللغات الأخرى، غالبًا ما تلاحظ عددًا أكبر بكثير من الرموز المستخدمة للغات غير الإنجليزية. ينبع هذا الاختلاف من حقيقة أن القطع للغات الأخرى تميل إلى أن تكون أكثر تجزؤًا، مما يؤدي إلى زيادة طول التسلسل في المستندات.

في آلية الانتباه لمحولات التعلم الآلي، هناك احتمالية أعلى لنفاد السياق للغات غير الإنجليزية. حتى عند نقل نفس الرسالة، يتم استهلاك المزيد من الرموز لأن القطع أصغر. يتأثر هذا التباين بكل من مجموعة التدريب المستخدمة للمرمز والمرمز نفسه.

في النهاية، يؤدي هذا الاستخدام غير الفعال لنافذة السياق للغات غير الإنجليزية إلى أداء أضعف لنموذج اللغة الكبير (LLM) عند التعامل مع الاستفسارات غير الإنجليزية.

الترميز والكود - Python

في حالة Python، كثيرًا ما أنفق مشفر GPT-2 من OpenAI العديد من الرموز على أحرف المسافات البيضاء الفردية المستخدمة في المسافة البادئة لأجزاء كود Python. هذا السلوك، المشابه للتحديات التي تواجه اللغات غير الإنجليزية، يؤدي إلى تضخم كبير في نافذة السياق لنموذج اللغة المحدود (LLM) وبالتالي انخفاض في الأداء.

التكوين: YAML مقابل JSON

تم اكتشاف أن YAML يتمتع بكثافة أعلى مقارنة بـ JSON، حيث يتطلب رموزًا أقل لإنجاز نفس المهمة.

إليك توضيح بسيط:

JSON: 46 رمزًا

يؤدي التضخم المتزايد لـ JSON إلى:

  1. زيادة صعوبة الفهم بالنسبة لـ LLM (كثافة أقل، أكثر عرضة لتجاوز نافذة السياق).
  2. إنفاق أعلى للمستخدمين (لأنهم يدفعون أساسًا لكل رمز أثناء استدعاءات API لـ OpenAI).

مشكلات الترميز

يكمن الترميز في صميم العديد من الحالات الشاذة التي تُلاحظ في نماذج اللغة الكبيرة (LLMs). يمكن إرجاع العديد من المشكلات التي قد تبدو في البداية متعلقة ببنية الشبكة العصبية أو LLM نفسها إلى الترميز. على سبيل المثال:

  • تعاني LLMs من تهجئة الكلمات أو تنفيذ مهام معالجة سلاسل نصية بسيطة مثل عكس السلسلة.
  • يميل الأداء إلى التدهور في اللغات غير الإنجليزية.
  • تظهر LLMs أداءً ضعيفًا في التعامل مع العمليات الحسابية البسيطة.
  • واجه GPT-2 تحديات كبيرة عند تكليفه بمهام البرمجة بلغة Python.
  • قد تظهر تحذيرات غريبة بخصوص المسافات البيضاء الزائدة.
  • غالبًا ما تؤدي العبارة “Solid Gold Magikarp” إلى انحراف LLMs إلى مواضيع غير ذات صلة.
  • يُفضل YAML على JSON عند العمل مع LLMs.

الترميز في نماذج اللغة الكبيرة

في تدريب نماذج اللغة الكبيرة (LLMs)، تتضمن العملية أخذ السلاسل النصية وتحويلها إلى أعداد صحيحة من مفردات محددة مسبقًا. تُستخدم هذه الأعداد الصحيحة بعد ذلك لاسترداد المتجهات من جدول التضمين، والتي يتم إدخالها بعد ذلك في نموذج المحول (Transformer). تصبح هذه العملية معقدة لأنها لا تتطلب دعم الأبجدية الإنجليزية الأساسية فحسب، بل تتطلب أيضًا استيعاب لغات مختلفة وأحرف خاصة مثل الرموز التعبيرية (الإيموجي).

السلاسل النصية في Python ونقاط الرمز Unicode

في Python، السلاسل النصية هي متواليات غير قابلة للتغيير تتكون من نقاط رمز Unicode. يتم تعريف نقاط الرمز هذه بواسطة اتحاد Unicode ضمن معيار Unicode، الذي يشمل حاليًا حوالي 150,000 حرف عبر 161 نظام كتابة. يظل معيار Unicode قيد الصيانة النشطة، مع إصدار أحدث إصدار 15.1 في سبتمبر 2023.

لاسترداد نقطة رمز Unicode لحرف واحد في Python، يمكننا استخدام الدالة ord(). على سبيل المثال:

ومع ذلك، فإن استخدام هذه الأعداد الصحيحة لنقاط الرمز الخام للترميز ليس ممكنًا، لأن ذلك سيؤدي إلى مفردات كبيرة جدًا (أكثر من 150,000) وغير مستقرة أيضًا بسبب التطور المستمر لمعيار Unicode.

ترميزات البايت Unicode

بحثًا عن حل ترميز أكثر فعالية، نتطلع إلى ترميزات بايت Unicode مثل ASCII و UTF-8 و UTF-16 و UTF-32. تحدد هذه الترميزات طرق ترجمة نقاط رمز Unicode المجردة إلى بايتات ملموسة مناسبة للتخزين والنقل.

ترميزات بايت Unicode، ASCII، UTF-8، UTF-16، UTF-32

يحدد اتحاد Unicode ثلاثة أنواع من الترميزات: UTF-8 و UTF-16 و UTF-32. تعمل هذه الترميزات كوسائل لتحويل نص Unicode إلى بيانات ثنائية أو تيارات بايت.

من بين هذه الترميزات، UTF-8 هو الأكثر انتشارًا. يقوم بترجمة كل نقطة رمز Unicode إلى تيار بايت يتراوح من واحد إلى أربعة بايتات، اعتمادًا على نقطة الرمز. تتطلب أول 128 نقطة رمز (ASCII) بايتًا واحدًا فقط. تتطلب نقاط الرمز الـ 1,920 التالية بايتين للترميز، وهي تشمل معظم الحروف الهجائية اللاتينية. ثلاثة بايتات مطلوبة لنقاط الرمز الـ 61,440 المتبقية ضمن المستوى متعدد اللغات الأساسي (BMP). تشمل أربعة بايتات مستويات Unicode الأخرى، وتشمل أحرف CJK الأقل شيوعًا، والعديد من النصوص التاريخية، والرموز الرياضية.

سيكون استخدام بايتات UTF-8 الخام مباشرة غير فعال للغاية بالنسبة لنماذج اللغة، مما يؤدي إلى تسلسلات طويلة جدًا بحجم مفردات محدود يبلغ 256 قيمة بايت محتملة فقط. يقيد هذا القيد قدرة النموذج على الانتباه إلى سياقات طويلة بما يكفي.

يكمن الحل في استخدام خوارزمية ترميز أزواج البايت (BPE) لضغط هذه التسلسلات البايتية بشكل متغير. يتيح هذا النهج تمثيل النص بكفاءة بحجم مفردات أكبر ولكن قابل للتعديل.

ما الفرق بين الترميز والتضمين؟

الترميز والتضمين هما عمليتان منفصلتان ولكنهما مترابطتان ضمن نماذج اللغة الكبيرة (LLMs) مثل GPT، تساهمان في كيفية فهم هذه النماذج للنص وتوليده. فيما يلي نظرة عامة مختصرة على كل منهما والاختلافات بينهما:

ترميز LLM

الهدف: يهدف الترميز إلى تحويل النص الخام إلى تسلسل من الرموز، والتي يمكن أن تشمل كلمات أو أجزاء فرعية من الكلمات أو أحرفًا، اعتمادًا على نهج الترميز المختار.

الإجراء: يتضمن تقسيم النص إلى أجزاء قابلة للإدارة يمكن للنموذج تفسيرها. قد يستلزم ذلك تقسيم النص مبدئيًا بناءً على المسافات وعلامات الترقيم، يليه تقسيم إضافي إلى أجزاء فرعية من الكلمات أو أحرف إذا كانت غائبة عن المفردات المحددة مسبقًا للنموذج.

النتيجة: النتيجة هي تسلسل رموز يمثل النص الأصلي بتنسيق مناسب لمعالجة النموذج. يتم تعيين معرف فريد (عدد صحيح) لكل رمز يتوافق مع مفردات النموذج.

التضمين

الهدف: التضمينات هي تمثيلات متجهة مستمرة، منخفضة الأبعاد، ومدمجة للرموز. تقوم بتشفير المعاني الدلالية والنحوية، مما يسهل فهم النموذج للفروق اللغوية.

الإجراء: بعد الترميز، يتم ربط كل رمز (ممثل بمعرفه العددي) بمتجه تضمين. يتم اكتساب هذه المتجهات خلال مرحلة تدريب النموذج ويتم تخزينها في مصفوفة أو جدول تضمين.

النتيجة: تعمل التضمينات كمدخل لطبقات الشبكة العصبية لـ LLM، مما يمكن النموذج من إجراء العمليات الحسابية على الرموز وتمييز العلاقات والأنماط داخل مجموعة البيانات.

اعثر على معلومات أكثر تفصيلاً حول تضمين LLM في مدونتنا: ما هو تضمين LLM: كل ما تحتاج إلى معرفته

جاري الرفع، 0

السمات المميزة

مرحلة المعالجة: يعمل الترميز كخطوة معالجة أولية، تحول النص إلى تنسيق مفهوم للنموذج (الرموز)، بينما يحدث التضمين بعد الترميز، ويترجم الرموز إلى تمثيلات متجهة مفصلة.

الوظيفة: يتضمن الترميز بشكل أساسي تفكيك النص وتمثيله بنيويًا، بينما يركز التضمين على التقاط واستغلال المعاني الدلالية والنحوية المضمنة في الرموز.

التمثيل: ينتج الترميز تمثيلات متقطعة (منفصلة) قائمة على الأعداد الصحيحة لمكونات النص، بينما يحول التضمين هذه الأعداد الصحيحة إلى متجهات مستمرة تشفر المعلومات اللغوية.

الخلاصة

في الختام، يلعب الترميز والتضمين أدوارًا محورية في عمل نماذج اللغة الكبيرة. بينما يقوم الترميز بتنظيم النص إلى رموز، يوفر التضمين معاني دلالية ونحوية لهذه الرموز من خلال تمثيلات متجهة. من خلال فهم هذه العمليات، نكتسب نظرة ثاقبة حول كيفية تفسير نماذج اللغة الكبيرة للنص وتوليده، مما يساهم في التقدم في معالجة اللغة الطبيعية.

novita.ai، المنصة الشاملة للإبداع غير المحدود التي تمنحك الوصول إلى أكثر من 100 واجهة برمجة تطبيقات. من توليد الصور ومعالجة اللغة إلى تحسين الصوت ومعالجة الفيديو، بنظام الدفع حسب الاستخدام الرخيص، يحررك من متاعب صيانة وحدة معالجة الرسومات أثناء بناء منتجاتك الخاصة. جربه مجانًا.

قراءة موصى بها

ما الفرق بين LLM و GPT

تنبؤات لوحة متصدرة LLM لعام 2024 كُشِف عنها

محرك استدلال Novita AI LLM: أكبر إنتاجية وأرخص استدلال متاح