الذكاء الاصطناعي التوليدي في دائرة الضوء منذ ما يقارب العام (أُطلق StableDiffusion في أغسطس 2022 وChatGPT في نوفمبر 2022). منذ ذلك الحين وأنا أحرص على القراءة والتعلم حول هذه التقنية الجديدة، فلنستكشف معًا في هذا المقال.
من أكثر حالات الاستخدام إثارةً توظيف الذكاء الاصطناعي التوليدي في المؤسسات؛ بمعنى أن يكون الذكاء الاصطناعي مستودعًا للمعرفة يمكن توجيه الأسئلة إليه في مجالات متعددة كالموارد البشرية والمحاسبة والأعمال الجوهرية. بدأت كثير من الشركات بالفعل بطرح منتجاتها الخاصة في هذا المجال، مثل Cohere، كما أطلقت Bloomberg نموذجها BloombergGPT.
في هذا المقال أُجري تجربةً بسيطة للغاية: أجريت ضبطًا دقيقًا لنموذج Falcon 7B instruct على وثيقة لائحة CBDC الصادرة حديثًا من الاتحاد الأوروبي، ثم طرحت على النموذج مجموعةً من الأسئلة قبل الضبط وبعده وقارنت الإجابات. هذا مثال بسيط على ضبط نموذج LLM على معرفة متخصصة في مجال معين أو مؤسسة بعينها.
ما هو CBDC؟
من ويكيبيديا: العملة الرقمية للبنك المركزي (CBDC) هي عملة رقمية تُصدرها البنوك المركزية مباشرةً بدلاً من البنوك التجارية. وهي التزام على البنك المركزي مقوَّم بالعملة السيادية، كما هو الحال مع الأوراق النقدية والعملات المعدنية المادية.
بعبارة مبسّطة، هي نوع من المال الرقمي يُصدر مباشرةً من البنك المركزي إلى المستهلكين دون وسطاء من البنوك التجارية كما هو الحال مع العملات الاعتيادية.
للحفاظ على أرصدة المستهلكين أو المواطنين، كان مُقترَحًا أن تعتمد CBDC على نوع من بلوك تشين المرخَّص. غير أنه وبعد سنوات وتأمل أعمق تبيّن أن بلوك تشين غير ضروري إذ ستُديَر دفاتر الأستاذ للأرصدة مركزيًا من قِبَل البنك المركزي، فتكفي قاعدة بيانات اعتيادية.
في يونيو 2023، أصدرت المفوضية الأوروبية مسودةً تنظيمية لعملة اليورو الرقمية الأوروبية. هذه الوثيقة هي أساس المعرفة المُستخدَمة في ضبط النموذج.
ما هو Falcon LLM؟
Falcon أحد النماذج القليلة ذات الترخيص المفتوح حقًا الصالح حتى للاستخدام التجاري. احتل الإصدار 40B مرتبةً متقدمةً على قائمة HuggingFace LLM لأسابيع. الآن لدينا أيضًا LLAMA2 الذي أصدرته Meta بترخيص مفتوح المصدر بالكامل.
في هذه التجربة نستخدم نموذج Falcon 7B instruct. لن يكون الإصدار 40B ضروريًا إذ نُركّز على وثيقة واحدة كمجموعة بيانات تدريب، كما يتطلب متطلبات GPU مرتفعة للغاية. سنرى أن النموذج بـ 7 مليارات معامل كافٍ لتجربتنا. كذلك سنستخدم الإصدار instruct لأنه مُدرَّب مسبقًا على الأسئلة والأجوبة. كمنصة تدريب سنستخدم AWS SageMaker وSageMaker Studio.
نشر النموذج دون ضبط دقيق
في هذه الخطوة ننشر النموذج على SageMaker ونطرح عليه مجموعةً من الأسئلة حول لوائح CBDC الأوروبية ونُسجّل الإجابات. استعنت بمنشور من مدونة P. Schmidt لهذا الغرض.
لإصدار 7B-instruct يكفي استخدام جهاز ml.g4dn.4xlarge من SageMaker. ستحتاج إلى طلب زيادة الحصة لنوع المثيل هذا؛ اسم الحصة المطلوبة هو "ml.g4dn.4xlarge for training job usage".
الضبط الدقيق للنموذج
كود التدريب موجود في هذا النوتبوك.
نستخدم QLoRA للتدريب. QLoRA هو مزج تقنيتَين لتقليص البصمة الذاكرية للنموذج:
الكميّة (Quantisation): تقليص عدد البتات التي تُخزَّن فيها الأعداد العشرية لمعاملات النموذج. نعم يُخفّض هذا الدقة قليلاً، لكن الجودة تبقى مقبولةً مقارنةً بالوفر الهائل في استخدام الذاكرة. نتحدث هنا عن ذاكرة GPU لا CPU وهي أغلى نسبيًا.
LoRA: اختصار لـ Low Rank Adaptation في نماذج LLM. بدلاً من تدريب النموذج المُدرَّب مسبقًا بالكامل (7 مليارات معامل في حالتنا) لإجراء الضبط الدقيق على المجال الجديد، نُدرّب مجموعةً جديدة من المعاملات للمجال الجديد (معرفة لوائح CBDC في أوروبا). تُسمى هذه الطبقة الجديدة من المعاملات "المحوّلات" (Adapters). عند الاستدلال، تُدمج طبقة المعاملات الجديدة مع النموذج المُدرَّب مسبقًا. يمكنك إنشاء محوّلات LoRA مختلفة للمجالات المختلفة وتبادلها فوق النموذج الأصلي. تُبسَّط تعقيدات QLoRA باستخدام مكتبات كـ PEFT من HuggingFace.
يعتمد التدريب كله على هذا المقال من AWS وهذا النوتبوك.
ستحتاج إلى جهاز GPU كبير نسبيًا على Amazon SageMaker. أصغر ما تمكّنت من استخدامه هو ml.g5.2xlarge بـ 24 جيجابايت من ذاكرة GPU. حاولت استخدام ml.g4dn.4xlarge لكنه لم يكن كافيًا وأعطى أخطاء نفاد الذاكرة إذ تبلغ ذاكرة GPU 16 جيجابايت فقط. ستحتاج إلى طلب زيادة حصة الخدمة لـ "Studio KernelGateway Apps running on ml.g5.2xlarge instance".
تأكد من استخدام صورة DatScience 3 مع نواة Python 3 عند تشغيل النوتبوك، لأنها الصورة التي تحتوي على المتطلبات الأساسية لـ bitsandbytes وPEFT.
معالجة البيانات وتحميلها
حوّلت الصفحات التي تحتوي على نقاط اللائحة فقط من PDF إلى نص، دون صفحات السياق والمقدمة. هذا لتبسيط التدريب وتجنّب إرباك النموذج. بكود Python بسيط أضفت سطرًا فارغًا إضافيًا بين البنود. في كود تحميل البيانات، يُحمَّل كل فقرة كسجل تدريب منفصل.
dataset = load_dataset("text", data_files={"train": "euro_pages.txt"}, sample_by="paragraph")
في البداية جربت المعاملات الافتراضية لدالة load_dataset التي تُحمّل كل سطر كسجل تدريب منفصل، فكانت النتائج مخيّبةً للآمال لأن كل سطر لا يحمل المعنى والسياق الكاملَين. تحسّنت النتائج كثيرًا حين جعلت كل فقرة أو بند سجلاً منفصلاً.
التدريب
في تجربتي، بدأ التدريب بخسارة 2.46 وانتهى بعد 3 دورات بخسارة 1.55. استغرق التدريب الكامل على مجموعة البيانات المؤلفة من 86 سجلاً نحو دقيقتَين و20 ثانيةً على جهاز ml.g5.2xlarge.
طرح الأسئلة
ثمة مقاييس عديدة لتقييم النموذج قبل الضبط وبعده كـ Perplexity وROUGE وBLEU. غير أنني آثرت إبقاء هذه التجربة بسيطةً ومقارنة الإجابات بالعين المجردة.
| السؤال | الإجابة قبل الضبط الدقيق | الإجابة بعد الضبط الدقيق |
|---|---|---|
| 1. هل يجب أن يخضع اليورو الرقمي لرسوم مفرطة من مزودي خدمات الدفع؟ | نشرت المفوضية الأوروبية استشارةً حول اليورو الرقمي وتستطلع آراء الجمهور... [إجابة عامة لا تستند إلى وثيقة اللائحة] | لا، لا ينبغي أن يخضع اليورو الرقمي لرسوم مفرطة من مزودي خدمات الدفع. وفقًا للائحة (EU) 2015/751، لا يجوز لمزودي خدمات الدفع فرض رسوم تتجاوز تكاليفهم... [إجابة مستوحاة مباشرةً من وثيقة اللائحة] |
| 2. هل يمكن للقانون اليورو الرقمي أن يحمل وضع العملة الرسمية للمدفوعات دون اتصال؟ | نعم، يمكن للبنك المركزي الأوروبي أن يُصدر اليورو الرقمي بوضع العملة الرسمية... [إجابة عامة] | يمكن لليورو الرقمي أن يحمل وضع العملة القانونية للمدفوعات دون اتصال إذا قبله البنك المركزي الأوروبي بمبلغ محدد... [إجابة مستندة للوثيقة] |
| 3. هل يجب أن يكون اليورو الرقمي مالاً قابلاً للبرمجة؟ | اليورو الرقمي عملة مُقترَحة يمكن برمجتها لأداء مهام محددة... [إجابة عامة مُبسَّطة] | لا ينبغي أن يكون اليورو الرقمي مالاً قابلاً للبرمجة. القابلية للبرمجة التي من شأنها تحويل اليورو الرقمي إلى نقود رقمية أو سلعة ستتعارض مع نزاهة ووظائف النقد الأساسية... [إجابة مستندة للوثيقة] |
| 4. ما الذي يجب أن يوفّره البنك المركزي الأوروبي لمزودي خدمات الدفع لتسهيل حل النزاعات؟ | يجب أن يوفّر البنك المركزي الأوروبي إطارًا لحل النزاعات يشمل آليات واضحة... [إجابة عامة] | يجب أن يوفّر البنك المركزي الأوروبي أداةً موحدة وقابلةً للتشغيل البيني لإدارة النزاعات بما في ذلك قاعدة بيانات مركزية... [إجابة مستندة للوثيقة] |
| 5. أكمل: لمعالجة مدفوعات اليورو الرقمي عبر الإنترنت أو دون اتصال، من الضروري أن يتعاون مزودو الخدمات الأمامية لليورو الرقمي ومُصدرو المحفظة الرقمية الأوروبية | [إجابة لا صلة لها بمحتوى وثيقة اللائحة أصلاً] | ...يجب أن يتمتعوا بالوصول إلى حيازات اليورو الرقمي لحاملي الحسابات لأغراض تسوية معاملات الدفع بطريقة آمنة وفعّالة ومرنة... [إجابة مستندة للوثيقة] |
خلاصة
نرى أن النتائج بعد الضبط الدقيق أكثر صلةً وأكثر "إلهامًا" من الوثيقة التي أجرينا عليها الضبط. الإجابات قبل الضبط غير ذات صلة أحيانًا (كما في السؤال الخامس).
من المثير للاهتمام أيضًا أن النموذج امتلك بعض المعرفة المسبقة بموضوع لوائح CBDC الأوروبية، مما يُصعّب أحيانًا الجزم بما إذا كانت النتائج مُستمَدةً من بيانات الضبط الجديدة أم من بيانات التدريب المسبق. يبدو أن الأمر مزيج من الاثنين، وهو أمر مشابه تمامًا لطريقة تعلّم الإنسان موضوعًا جديدًا.
ختامًا، لا يسعني إلا الإشادة بدورة Generative AI with LLMs من Deeplearning.ai وAWS. تشرح مفاهيم معقدة كـ QLoRA بأسلوب مبسّط رائع لكل من يريد التعمق في نماذج LLM.
تابعني على LinkedIn للمزيد!