مرحبًا بك في “مقدمة A Total Noob حول Hugging Face Transformers”، وهو دليل مصمم خصيصًا لأولئك الذين يتطلعون إلى فهم الأساسيات المجردة لاستخدام تعلم الآلة مفتوح المصدر. هدفنا هو إزالة الغموض عن ماهية Hugging Face Transformers وكيف تعمل، وليس لتحويلك إلى ممارس للتعلم الآلي، ولكن لتمكين الفهم والتعاون بشكل أفضل مع أولئك الذين هم كذلك. ومع ذلك، فإن أفضل طريقة للتعلم هي من خلال الممارسة، لذلك سنستعرض مثالًا عمليًا بسيطًا لتشغيل Microsoft Phi-2 LLM في دفتر ملاحظات على مساحة Hugging Face.

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

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

دعونا نعلق في… ولكن أولا بعض السياق.

ما هو معانقة محولات الوجه؟

Hugging Face Transformers هي مكتبة Python مفتوحة المصدر توفر الوصول إلى الآلاف من نماذج Transformers المدربة مسبقًا لمعالجة اللغة الطبيعية (NLP)، ورؤية الكمبيوتر، والمهام الصوتية، والمزيد. إنه يبسط عملية تنفيذ نماذج المحولات عن طريق التخلص من تعقيد التدريب أو نشر النماذج في أطر تعلم الآلة ذات المستوى الأدنى مثل PyTorch وTensorFlow وJAX.

ما هي المكتبة؟

المكتبة هي مجرد مجموعة من أجزاء التعليمات البرمجية القابلة لإعادة الاستخدام والتي يمكن دمجها في المشاريع لتنفيذ الوظائف بشكل أكثر كفاءة دون الحاجة إلى كتابة التعليمات البرمجية الخاصة بك من البداية.

والجدير بالذكر أن مكتبة Transformers توفر تعليمات برمجية قابلة لإعادة الاستخدام لتنفيذ النماذج في أطر عمل شائعة مثل PyTorch وTensorFlow وJAX. يمكن الوصول إلى هذا الكود القابل لإعادة الاستخدام عن طريق استدعاء الوظائف (المعروفة أيضًا بالطرق) داخل المكتبة.

ما هو محور الوجه المعانق؟

The Hugging Face Hub عبارة عن منصة تعاونية تستضيف مجموعة ضخمة من النماذج ومجموعات البيانات مفتوحة المصدر للتعلم الآلي، فكر في أنها مثل Github لتعلم الآلة. يسهّل المركز المشاركة والتعاون من خلال تسهيل اكتشاف أصول تعلم الآلة المفيدة وتعلمها والتفاعل معها من مجتمع المصادر المفتوحة. يتكامل المحور مع مكتبة Transformers ويستخدم معها، حيث يتم تنزيل النماذج المنشورة باستخدام مكتبة Transformers من المركز.

ما هي مساحات الوجه المعانقة؟

Spaces from Hugging Face هي خدمة متاحة على Hugging Face Hub والتي توفر واجهة مستخدم رسومية سهلة الاستخدام لإنشاء ونشر عروض وتطبيقات ML المستضافة على الويب. تتيح لك الخدمة إنشاء عروض توضيحية لتعلم الآلة بسرعة، أو تحميل تطبيقاتك الخاصة لاستضافتها، أو حتى تحديد عدد من تطبيقات تعلم الآلة التي تم تكوينها مسبقًا لنشرها على الفور.

سننشر في البرنامج التعليمي أحد تطبيقات تعلم الآلة التي تم تكوينها مسبقًا، وهو دفتر ملاحظات JupyterLab، عن طريق تحديد حاوية عامل الإرساء المقابلة.

ما هو دفتر الملاحظات؟

دفاتر الملاحظات عبارة عن تطبيقات تفاعلية تتيح لك كتابة ومشاركة تعليمات برمجية مباشرة قابلة للتنفيذ ومتداخلة مع نص سردي تكميلي. تعد دفاتر الملاحظات مفيدة بشكل خاص لعلماء البيانات ومهندسي التعلم الآلي لأنها تتيح لك تجربة التعليمات البرمجية في الوقت الفعلي ومراجعة النتائج ومشاركتها بسهولة.

  1. إنشاء حساب عناق الوجه
  • انتقل إلى hf.co، وانقر على “تسجيل” وقم بإنشاء حساب إذا لم يكن لديك حساب بالفعل

  1. أضف معلومات الفواتير الخاصة بك
  • ضمن حساب HF الخاص بك، انتقل إلى الإعدادات > الفوترة، وأضف بطاقتك الائتمانية إلى قسم معلومات الدفع

لماذا نحتاج إلى بطاقتك الائتمانية؟

لتشغيل معظم برامج LLM، ستحتاج إلى وحدة معالجة الرسومات، وهي للأسف ليست مجانية، ومع ذلك يمكنك استئجارها من Hugging Face. لا تقلق، لا ينبغي أن يكلفك ذلك الكثير. وحدة معالجة الرسومات (GPU) المطلوبة لهذا البرنامج التعليمي، وهي NVIDIA A10G، لا تكلف سوى بضعة دولارات في الساعة.

  1. قم بإنشاء مساحة لاستضافة دفتر الملاحظات الخاص بك
  • على موقع hf.co، انتقل إلى Spaces > إنشاء جديد

  1. قم بتكوين المساحة الخاصة بك
  • قم بتعيين اسم المساحة المفضلة لديك
  • حدد Docker > JupyterLab لتحديد تطبيق دفتر الملاحظات الذي تم تكوينه مسبقًا
  • حدد أجهزة الفضاء كـ “Nvidia A10G Small”
  • كل شيء آخر يمكن تركه كإعداد افتراضي
  • حدد “إنشاء مساحة”

ما هو قالب عامل ميناء؟

قالب Docker هو مخطط محدد مسبقًا لبيئة برمجية تتضمن البرامج والتكوينات الضرورية، مما يمكّن المطورين من نشر التطبيقات بسهولة وسرعة وبطريقة متسقة ومعزولة.

لماذا أحتاج إلى تحديد أجهزة مساحة GPU؟

بشكل افتراضي، تأتي مساحتنا مزودة بوحدة معالجة مركزية مجانية، وهو أمر جيد بالنسبة لبعض التطبيقات. ومع ذلك، فإن العمليات الحسابية العديدة التي تتطلبها برامج LLM تستفيد بشكل كبير من تشغيلها بالتوازي لتحسين السرعة، وهو أمر تتفوق فيه وحدات معالجة الرسومات.

من المهم أيضًا اختيار وحدة معالجة الرسومات (GPU) ذات الذاكرة الكافية لتخزين النموذج وتوفير ذاكرة عمل احتياطية. في حالتنا، A10G صغير بسعة 24 جيجابايت يكفي لـ Phi-2.

  1. تسجيل الدخول إلى JupyterLab
  • بعد الانتهاء من بناء المساحة، ستظهر لك شاشة تسجيل الدخول. إذا تركت الرمز المميز كإعداد افتراضي في القالب، فيمكنك تسجيل الدخول باستخدام “huggingface”. بخلاف ذلك، ما عليك سوى استخدام الرمز المميز الذي قمت بتعيينه

  1. إنشاء دفتر ملاحظات جديد
  • ضمن علامة التبويب “Launcher”، حدد مربع “Python 3” العلوي تحت عنوان “Notebook”، سيؤدي ذلك إلى إنشاء بيئة دفتر ملاحظات جديدة تم تثبيت Python عليها بالفعل

  1. تثبيت الحزم المطلوبة
  • ستحتاج في دفتر ملاحظاتك الجديد إلى تثبيت مكتبتي PyTorch وTransformers، حيث لا يتم تثبيتهما مسبقًا في البيئة.
  • يمكن القيام بذلك عن طريق إدخال الأمر !pip + اسم المكتبة في دفتر ملاحظاتك. انقر فوق زر التشغيل لتنفيذ التعليمات البرمجية ومشاهدتها أثناء تثبيت المكتبات (بدلاً من ذلك: اضغط على CMD + Return / CTRL + Enter)
!pip install torch
!pip install transformers

ما هو! تثبيت النقطة؟

!pip هو أمر يقوم بتثبيت حزم Python من Python Package Index (PyPI)، وهو مستودع ويب للمكتبات المتاحة للاستخدام في بيئة Python. فهو يسمح لنا بتوسيع وظائف تطبيقات Python من خلال دمج مجموعة واسعة من الوظائف الإضافية التابعة لجهات خارجية.

إذا كنا نستخدم المحولات، فلماذا نحتاج إلى Pytorch أيضًا؟

Hugging Face هي مكتبة مبنية على أطر عمل أخرى مثل Pytorch وTensorflow وJAX. في هذه الحالة نحن نستخدم Transformers مع Pytorch ولذلك نحتاج إلى تثبيته للوصول إلى وظائفه.

  1. قم باستيراد فئتي AutoTokenizer وAutoModelForCausalLM من Transformers
  • أدخل الكود التالي في سطر جديد وقم بتشغيله
from transformers import AutoTokenizer, AutoModelForCausalLM

ما هي الدرجة؟

فكر في الفئات كوصفات برمجية لإنشاء هذه الأشياء التي تسمى الكائنات. إنها مفيدة لأنها تسمح لنا بحفظ الكائنات بمجموعة من الخصائص والوظائف. وهذا بدوره يبسط عملية البرمجة حيث يمكن الوصول إلى جميع المعلومات والعمليات اللازمة لموضوعات معينة من نفس المكان. سنستخدم هذه الفئات لإنشاء كائنين: أ model و أ tokenizer هدف.

لماذا أحتاج إلى استيراد الفصل مرة أخرى بعد تثبيت المحولات؟

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

  1. حدد النموذج الذي تريد تشغيله
  • لتفصيل النموذج الذي تريد تنزيله وتشغيله من Hugging Face Hub، يتعين عليك تحديد اسم نموذج الريبو في الكود الخاص بك
  • نقوم بذلك عن طريق تعيين متغير يساوي اسم النموذج، وفي هذه الحالة نقرر استدعاء المتغير model_id
  • سنستخدم جهاز Phi-2 من Microsoft، وهو نموذج صغير ولكنه قادر بشكل مدهش ويمكن العثور عليه على https://huggingface.co/microsoft/phi-2. ملحوظة: Phi-2 هو نموذج أساسي وليس نموذجًا مضبوطًا للتعليمات وبالتالي سوف يستجيب بشكل غير عادي إذا حاولت استخدامه للدردشة
model_id = "microsoft/phi-2"

ما هو نموذج ضبط التعليمات؟

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

  1. قم بإنشاء كائن نموذج وتحميل النموذج
  • لتحميل النموذج من Hugging Face Hub إلى بيئتنا المحلية، نحتاج إلى إنشاء كائن النموذج. نقوم بذلك عن طريق تمرير “model_id” الذي حددناه في الخطوة الأخيرة إلى وسيطة الأسلوب “.from_pretrained” في فئة AutoModelForCausalLM.
  • قم بتشغيل الكود الخاص بك واحصل على مشروب، قد يستغرق تنزيل النموذج بضع دقائق
model = AutoModelForCausalLM.from_pretrained(model_id)

ما هي الحجة؟

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

ما هي الطريقة؟

الطريقة هي اسم آخر لوظيفة تستخدم معلومات من كائن أو فئة معينة على وجه التحديد. في هذه الحالة .from_pretrained تستخدم الطريقة معلومات من الفصل و model_id لإنشاء جديد model هدف.

  1. قم بإنشاء كائن الرمز المميز وقم بتحميل الرمز المميز
  • لتحميل أداة الرمز المميز، تحتاج الآن إلى إنشاء كائن رمز مميز. للقيام بذلك مرة أخرى، قم بتمرير model_id كحجة في .from_pretrained الطريقة في فئة AutoTokenizer.
  • لاحظ أن هناك بعض الوسائط الإضافية، لأغراض هذا المثال، ليس من المهم فهمها، لذا لن نقوم بشرحها.
tokenizer = AutoTokenizer.from_pretrained(model_id, add_eos_token=True, padding_side='left')

ما هو الرمز المميز؟

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

  1. قم بإنشاء المدخلات للنموذج المراد معالجته
  • تحديد متغير جديد input_text سيستغرق ذلك الموجه الذي تريد تقديمه للنموذج. في هذه الحالة سألت “من أنت؟” ولكن يمكنك اختيار ما تفضله.
  • قم بتمرير المتغير الجديد كوسيطة إلى كائن الرمز المميز لإنشاء ملف input_ids
  • قم بتمرير وسيطة ثانية إلى كائن الرمز المميز، return_tensors="pt"، وهذا يضمن تمثيل token_id كنوع المتجه الصحيح لإصدار النموذج الذي نستخدمه (أي في Pytorch وليس Tensorflow)
input_text = "Who are you?"
input_ids = tokenizer(input_text, return_tensors="pt")
  1. تشغيل التوليد وفك تشفير الإخراج
  • الآن نحتاج إلى الإدخال بالتنسيق الصحيح لتمريره إلى النموذج، ونقوم بذلك عن طريق استدعاء .generate الطريقة على model object تمرير input_ids كوسيطة وتعيينها لمتغير جديد outputs. لقد وضعنا أيضًا حجة ثانية max_new_tokens يساوي 100، وهذا يحد من عدد الرموز المميزة التي سينشئها النموذج.
  • المخرجات ليست قابلة للقراءة من قبل الإنسان بعد، لإعادتها إلى النص يجب علينا فك تشفير المخرجات. يمكننا أن نفعل هذا مع .decode طريقة وحفظ ذلك للمتغير decoded_outputs
  • وأخيراً اجتياز decoded_output يتيح لنا المتغير في وظيفة الطباعة رؤية مخرجات النموذج في دفتر ملاحظاتنا.
  • اختياري: قم بتمرير outputs المتغير في وظيفة الطباعة لمعرفة كيفية مقارنتها بـ decoded outputs
outputs = model.generate(input_ids["input_ids"], max_new_tokens=100)
decoded_outputs = tokenizer.decode(outputs[0])
print(decoded_outputs)

لماذا أحتاج إلى فك التشفير؟

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

لماذا يُقرأ الإخراج كقصة؟

تذكر أن Phi-2 هو نموذج أساسي لم يتم ضبط التعليمات لاستخدامات المحادثة، وبالتالي فهو نموذج ضخم للإكمال التلقائي. واستنادًا إلى مدخلاتك، فإنه يتنبأ بما يعتقد أنه من المرجح أن يأتي بعد ذلك استنادًا إلى جميع صفحات الويب والكتب والمحتويات الأخرى التي شاهدها سابقًا.

تهانينا، لقد قمت بإجراء الاستدلال على أول شهادة ماجستير في القانون (LLM) لك!

آمل أن يكون العمل من خلال هذا المثال قد ساعدك على فهم عالم تعلم الآلة مفتوح المصدر بشكل أفضل. إذا كنت ترغب في مواصلة رحلة تعلم تعلم الآلة، فإنني أوصي بدورة Hugging Face الأخيرة التي أصدرناها بالشراكة مع DeepLearning AI.

شاركها.
اترك تعليقاً