مرحبًا بكم. هذا نموذج ذكاء اصطناعي، ولكنه ليس أي نموذج ذكاء اصطناعي عادي، هذا نموذج ذكاء اصطناعي خاص بي وحدي. لقد علمته ودربته ليكون بمثابة محامٍ، أزوده بملفات قضايا وهو يجيبني على أسئلة متخصصة جدًا بناءً على القضية التي لديه.
يستخدم الكثير من الناس “شات جي بي تي” أو نماذج الذكاء الاصطناعي المتاحة حاليًا، ويحصلون منها على الردود التي يحتاجونها. ولكن ماذا لو أردت أن أجعل الذكاء الاصطناعي يجيبني بردود متخصصة بالفعل في مجال معين؟
أول ما سيتبادر إلى ذهنك هو بناء نموذج خاص بك. ولكن المشكلة هي أنك لكي تبني نموذجًا قويًا مثل “شات جي بي تي”، فإنك ستحتاج إلى إنفاق ملايين الدولارات حرفيًا، ناهيك عن الوقت والجهد المبذول لإنتاج شيء كهذا. إذًا، ما الحل؟ هذا هو موضوع مقال اليوم.
لماذا لا نبني نموذجًا من الصفر؟
لندخل في صلب موضوع المقال مباشرة، وهو كيفية بناء نموذج ذكاء اصطناعي خاص بك، قادر على تقديم إجابات متخصصة في مجال معين أنت من يحدده.
مقدمة لا غنى عنها: قبل الخوض في الشرح العملي، من الضروري فهم السياق النظري، فتخطي هذه المقدمة قد يفوتك معلومات أساسية لفهم الخطوات التالية.
لكي تبني نموذجًا من الصفر، فأنت بحاجة لتعلم ما يسمى بـ “معالجة اللغات الطبيعية” (NLP)، ناهيك عن مقدمة في تعلم الآلة والذكاء الاصطناعي التي تحتاج إلى تعلمها أولاً، بالإضافة إلى الرياضيات، وحساب التفاضل والتكامل، والإحصاء، وغيرها من العلوم ذات الصلة.
لنفترض أنك درست كل هذه العلوم وأصبحت متمكنًا منها تمامًا. هل ستكون قادرًا على بناء نموذج يقدم إجابات قوية جدًا مثل “شات جي بي تي” أو “جيمناي” أو النماذج الموجودة حاليًا، بل وأكثر من ذلك، متخصص في مجال معين؟ الإجابة هي نعم ولا.
- نعم، لأنك تعلمت العلوم اللازمة التي تمكنك من بناء هذا النموذج.
- ولكن لا، لأنك لا تملك الميزانية الكافية لشراء الموارد (Resources)، حيث تحتاج إلى أجهزة، وبطاقات رسومية، وبناء بيئة متكاملة تؤهلك لإنتاج نموذج قوي جدًا.
فالمسألة ليست مجرد مهارة تقنية، بل هي معادلة ذات طرفين: مهارة تقنية وتمويل. فإذا وفرت العلم التقني، فسينقصك التمويل، لأنك ستحتاج لبناء نموذج مُدرَّب على ملايين بل مليارات من البيانات التي جمعتها من مصادر متعددة.
الحل: تبني وتدريب نموذج موجود
الآن قد تقول: “إذًا، هل يعني هذا أنني لا أستطيع بناء نموذج؟ لقد أثرت حماسنا ثم أوضحت أن الأمر معقد”. لا، أقول لك إن الأمر اختلف عن الماضي. الآن لدينا النماذج اللغوية الكبيرة (Large Language Models) مثل “شات جي بي تي” وعلم الذكاء الاصطناعي التوليدي الذي دخلناه الآن، وأصبح الأمر أسهل بكثير من ذي قبل.
فكرتنا إذن هي أننا لن نبني نموذجًا من الصفر، بل سنأخذ نموذجًا موجودًا ونتبناه، ونبدأ في تدريبه ليتخصص في مجال معين.
لدينا نوعان من النماذج:
- النماذج مغلقة الوصول (Closed Access Models): هذه مثل “شات جي بي تي” و”جيمناي” والنماذج القوية جدًا التي نراها. هذه نماذج لا يمكن أخذ شيفرتها المصدرية أو التغيير فيها أو تعديلها أو تدريبها، لأن أصحابها يعتبرونها عملاً تجاريًا لهم. إذا لاحظت، فإن “شات جي بي تي” يتطلب اشتراكًا شهريًا مدفوعًا ويقدم لك أداءً قويًا جدًا يمكنك الاعتماد عليه.
- النماذج مفتوحة المصدر (Open Access Models): في المقابل، لدينا نماذج مفتوحة المصدر مثل Llama, Qwen, Mistral, DeepSeek، وغيرها من النماذج التي ظهرت لاحقًا.
لذا، بدلاً من بناء نموذج من الصفر وفي النهاية يكون ضعيفًا وعديم الفائدة، سآخذ نموذجًا مفتوح الوصول - كأنني أتبنى طفلاً - وأبدأ في إعطائه البيانات وتغذيته وتعليمه. وهو سيجيبني بإجابات عبقرية جدًا لأنني علمته المزيد والمزيد وجعلته متخصصًا في مجال معين. وهذا ما سنفعله في شرح اليوم.
لقد قررت العمل على نموذج Llama 3، ولكن يمكنك اختيار أي نموذج آخر مفتوح المصدر. سنستخدم مكتبة (library) تسمى Unsloth
. سنستدعي هذه المكتبة باستخدام لغة بايثون وسنبدأ بكتابة شيفرات برمجية قصيرة جدًا تمكننا من عملية تدريب النموذج، أو ما يسمى بعملية “الضبط الدقيق” (Fine-tuning). لنركز على هذا المصطلح جيدًا.
الخطوة الأولى: إعداد البيانات (Dataset)
أولاً، أنت بحاجة للبحث عن مجموعة بيانات (Dataset) لتدريب نموذجك عليها. فإذا كنت صاحب شركة أو عمل تجاري، فمن المحتمل أن يكون لديك بالفعل ملفات Excel، أو Word، أو JSON، أو أي نوع آخر من الملفات. كل هذه الملفات يمكنك تغذيتها للنموذج مفتوح المصدر وتدريبه ليكون متخصصًا في مجالك.
ملاحظة مهمة: من الضروري التأكد من صحة البيانات التي ستغذي بها النموذج. فلا يصح مثلاً أن تغذي نموذجًا ببيانات تتعلق بالهندسة، وتجد في وسط جداولك بيانات عن مرضى السكري أو القلب. لا يجب أن تحتوي بياناتك على قيم شاذة (Outliers) أو مشكلات، لأن هذه المشكلات ستظهر في إجابات النموذج لاحقًا، وستجد أن نموذجك “يهلوس” ويقدم إجابات غير دقيقة.
نصيحتي لك هي التأكد من أن بياناتك مرتبة جيدًا ولا تحتوي على أي شيء خارج عن التخصص الذي تريد تدريب نموذجك عليه. في حالة هذا المقال، سأستخدم مجموعة بيانات جاهزة تحتوي على أسئلة في القانون والقضاء. سأحصل على هذه البيانات من موقع Hugging Face.
الخطوة الثانية: إعداد بيئة العمل (Google Colab)
أمر آخر مهم هو أننا لكي نجري عملية الضبط الدقيق وتنجح بشكل ممتاز، فإننا نحتاج إلى جهاز ذي مواصفات قوية. إذًا، ما الحل إذا كان جهازي متواضعًا أو لا يحتوي على موارد عالية وبطاقة رسومية وذاكرة وصول عشوائي (RAM) كبيرة؟ سنتجه لاستخدام منصة Google Colab.
منصة Google Colab تمكننا جوجل من خلالها من الحصول على موارد سحابية قوية مثل معالج، وبطاقة رسومية، وذاكرة وصول عشوائي، ومساحة تخزين، كل ذلك على شكل سحابة (Cloud). أي أنه ليس جهاز الكمبيوتر الخاص بك، بل هو جهاز سحابي. هذا الجهاز يمكنك من كتابة شيفرة بايثون وتشغيلها تلقائيًا داخل ما يسمى بـ “دفتر الملاحظات” (Notebook).
إذًا، لنبدأ الشرح العملي بالانتقال إلى Google Colab. بعد فتحه، اضغط على زر “New notebook” لإنشاء دفتر ملاحظات جديد لكتابة الشيفرة الخاصة بك.
عندما يفتح دفتر الملاحظات، سيكون يعمل باستخدام المعالج فقط (CPU). لتفعيل بطاقة الرسوميات (GPU)، اتبع الخطوات التالية:
- انقر على السهم بجانب كلمة
Connect
. - اختر
Change runtime type
. - اختر
T4 GPU
من القائمة المنسدلة. - انقر على
Save
.
بهذا نكون جاهزين لبدء عملية الضبط الدقيق.
الخطوة الثالثة: التنفيذ العملي (كتابة الشيفرة)
لقد اخترت إجراء الضبط الدقيق لنموذج Llama-3.1-8B
. يمكنك اختيار أي نموذج آخر مفتوح المصدر مثل Qwen
أو Mistral
، ولكن تأكد من أنه مدعوم من مكتبة Unsloth
.
1. تثبيت المكتبات:
أولاً، ضع مؤشر الكتابة في أول خلية شيفرة واكتب أمر التثبيت التالي، ثم انقر على أيقونة التشغيل (أو اضغط Ctrl + Enter
) لتشغيله.
# امر التثبيت هنا
2. تحميل النموذج: بعد ذلك، أنشئ خلية جديدة وأضف الشيفرة التالية. سأشرح أهم الأجزاء باختصار:
# الكود هنا
model_name = "unsloth/llama-3.1-8b-Instruct-bnb-4bit"
max_seq_length = 2048
load_in_4bit = True
model_name
: هنا نحدد النموذج الذي نريد تدريبه. في حالتي، اخترتLlama-3.1-8B
، ولكن يمكنك اختيار غيره.max_seq_length
: هنا نحدد أقصى طول للتسلسل ليكون2048
“توكن” (Token).- ما هي التوكنز (Tokens)؟ التوكنز تحدد طول استجابة النموذج وقدرته على كتابة النصوص. كلما زاد الرقم، حصلت على ردود أطول، ولكن هذا يزيد من وقت التدريب وقد يسبب مشكلات إذا لم يتم التعامل معه بشكل صحيح. قيمة
2048
أكثر من كافية لمعظم الاحتياجات. الذكاء الاصطناعي لا يقرأ الكلمات أو الحروف مباشرة، بل يتعامل مع “التوكنز”، حيث يكون لكل توكن معرف فريد (Token ID). قد يمثل التوكن كلمة كاملة، أو جزءًا من كلمة، أو حتى حرفًا واحدًا.
- ما هي التوكنز (Tokens)؟ التوكنز تحدد طول استجابة النموذج وقدرته على كتابة النصوص. كلما زاد الرقم، حصلت على ردود أطول، ولكن هذا يزيد من وقت التدريب وقد يسبب مشكلات إذا لم يتم التعامل معه بشكل صحيح. قيمة
load_in_4bit
: سنجعل قيمتهاTrue
لتقليل استهلاك الذاكرة.
بمجرد تشغيل الشيفرة، ستلاحظ عرض رسم لحيوان الكسلان (Sloth) مع شريط تقدم. عندما يصل الشريط إلى 100%، فهذا يعني أن النموذج قد تم تحميله بنجاح. (اسم المكتبة Unsloth
مستوحى من هذا الحيوان).
3. تحديد معدل الضبط الدقيق (LoRA Adapter):
الخطوة التالية هي تحديد معدل الضبط الدقيق باستخدام ما يسمى بـ LoRA Adapter. هدفنا هنا هو إعادة تدريب جزء صغير فقط من النموذج (5-10%) وليس النموذج بأكمله. انسخ الشيفرة الجاهزة من Unsloth
والصقها في خلية جديدة ثم قم بتشغيلها.
لماذا نستخدم LoRA؟ إذا لم نقم بهذه الخطوة، سيقوم النموذج بإعادة تدريب نفسه بالكامل، مما سيكلفنا وقتًا وموارد ضخمة، خاصة وأننا نستخدم Google Colab المجاني الذي يوفر موارد محدودة. لذا، إعادة تدريب 5-10% فقط هي أكثر من كافية لإنتاج نموذج جيد.
الخطوة الرابعة: تجهيز مجموعة البيانات (Dataset)
هذه هي الخطوة الأكثر أهمية. لكل مجموعة بيانات شكلها الخاص، فقد تكون في أعمدة، أو نصوص، أو ملفات وورد، إلخ. يجب علينا تهيئة هذه البيانات لتكون مفهومة للنموذج الذي سنقوم بتدريبه.
فهم تنسيقات البيانات: كل نموذج يفهم تنسيقًا معينًا من البيانات. على سبيل المثال:
- ChatML: هو التنسيق الذي يفهمه
ChatGPT
، ويعتمد على بنيةمفتاح: قيمة
(key: value). - Alpaca Format: هو التنسيق الذي تفهمه نماذج مثل
Llama
(الذي نستخدمه).
بما أننا نستخدم نموذج Llama
، يجب أن نهيئ بياناتنا القانونية لتتوافق مع تنسيق Alpaca.
بنية تنسيق Alpaca: يتكون تنسيق Alpaca من الحقول التالية:
instruction
: التعليمات أو سياق المشكلة (ماذا تريد من النموذج أن يفعل).input
: المدخل أو السؤال المحدد الذي تطرحه.response
: الإجابة أو الرد الذي يجب أن يقدمه النموذج.explanation
: (اختياري) شرح للسبب وراء الإجابة المقدمة.
ربط بياناتنا بتنسيق Alpaca:
مهمتنا هي ربط أعمدة مجموعة البيانات الخاصة بنا بحقول Alpaca. في حالة مجموعة البيانات القانونية التي سأستخدمها من Hugging Face، أجد فيها ثلاثة أعمدة: question
, response
, reasoning
.
question
-> سيتم ربطه بـinput
.response
-> سيتم ربطه بـresponse
(تطابق الأسماء هنا مجرد صدفة).reasoning
-> سيتم ربطه بـexplanation
.instruction
-> سأقوم بتعيين تعليمة ثابتة: “Answer the legal question based on the reasoning provided in your answer”. يمكنك أيضًا ربطها بعمود متغير من بياناتك.
تنفيذ تهيئة البيانات:
- في خلية جديدة، سنستخدم دالة
load_dataset
من مكتبةdatasets
لتحميل بياناتنا. في هذا المثال، سأضع رابط مجموعة البيانات من Hugging Face. يمكنك بدلاً من ذلك توفير مسار ملف Excel أو أي ملف آخر على جهازك. - السطر التالي في الشيفرة سيقوم بربط الأعمدة بالحقول الصحيحة في تنسيق Alpaca. هذا السطر ضروري جدًا.
- قم بتشغيل الخلية.
- في خلية أخرى، يمكننا طباعة عينة من مجموعة البيانات للتأكد من أن عملية الربط تمت بشكل صحيح.
الخطوة الخامسة: تدريب النموذج (Fine-tuning)
والآن وصلنا إلى الخطوة الخامسة والأخيرة: عملية الضبط الدقيق الفعلية. سنستخدم مُدرِّبًا يسمى SFTTrainer
(Supervised Fine-tuning Trainer) من خلال بضعة أسطر بسيطة من الشيفرة.
أحضر الشيفرة وضعها في خلية جديدة. هناك العديد من المعلمات (Parameters)، ولكن من أهمها:
max_steps
: تحدد عدد خطوات التدريب. كلما زاد العدد، زاد وقت التدريب وتم تدريب طبقات (layers) أكثر، مما يؤدي إلى نموذج أفضل، ولكنه يستهلك موارد أكثر.
قم بتشغيل الشيفرة. ستلاحظ أنه يبدأ في العد وعرض جداول خاصة بالتدريب. تجاهلها وانتظره حتى ينتهي، فقد يستغرق بعض الوقت. عندما ينتهي، ستظهر رسالة تفيد بنجاح تدريب النموذج (Model trained successfully
).
الخطوة السادسة: حفظ النموذج ومشاركته
1. الحفظ المحلي (اختياري):
يمكنك كتابة شيفرة لحفظ النموذج محليًا لاستخدامه مع Ollama. تتضمن هذه الشيفرة تحديد quantization_method
(طريقة التكميم)، وهي تقنية متقدمة لضغط النموذج. طرق مثل f16
أو q4
تؤثر على حجم النموذج النهائي وأدائه. على سبيل المثال، f16
قد ينتج نموذجًا بحجم 16 جيجابايت. سنستخدم f16
في هذا المثال.
2. الرفع على Hugging Face (مستحسن): بدلاً من الحفظ المحلي، الخيار الأفضل هو مشاركة النموذج مع الآخرين. لذا، سنقوم برفعه على منصة Hugging Face.
- إنشاء مستودع (Repository):
- أنشئ حسابًا على Hugging Face.
- بعد تسجيل الدخول، انقر على صورة ملفك الشخصي واختر
New model
. - أعطِ النموذج اسمًا ثم انقر على
Create model
. بهذا تكون قد أنشأت مستودعًا جديدًا، ولكنه فارغ حاليًا.
- الحصول على توكن الوصول (Access Token):
- من Google Colab، سنحتاج إلى توكن للوصول إلى حسابك في Hugging Face.
- في موقع Hugging Face، انقر على صورة ملفك الشخصي مجددًا، ثم اختر
Settings
. - اذهب إلى
Access Tokens
. - انقر على
New token
، وامنحه صلاحيات القراءة (Read
) والكتابة (Write
)، ثم أنشئ التوكن. تحذير: التوكن الذي تم إنشاؤه سري للغاية. لا تشاركه مع أي شخص، لأنه يمنح وصولاً كاملاً إلى حسابك.
- رفع النموذج:
- انسخ التوكن.
- عد إلى Google Colab، وأنشئ خلية جديدة، واكتب الشيفرة اللازمة لرفع النموذج، والصق التوكن الخاص بك في المكان المخصص.
- قم بتشغيل الخلية. سيبدأ النموذج بالرفع تلقائيًا إلى Hugging Face.
- بعد انتهاء عملية الرفع، إذا قمت بتحديث صفحة المستودع على Hugging Face، ستجد ملفات النموذج قد ظهرت.
الخطوة السابعة: استخدام النموذج المُدرَّب
الآن بعد أن أصبح النموذج متاحًا على Hugging Face، يمكن لأي شخص استخدامه عبر Ollama. ببساطة، افتح واجهة سطر الأوامر (CMD) واكتب الأمر التالي، مع استبدال your-username/your-model-name
بالمسار الفعلي لنموذجك على Hugging Face:
ollama run your-username/your-model-name
بهذا يمكن للمستخدمين التفاعل مع نموذجك المتخصص.
نصيحة: للحصول على واجهة مستخدم رسومية شبيهة بـ ChatGPT بدلاً من سطر الأوامر، يمكنك استخدام أدوات مثل Open WebUI
مع Ollama.
اختبار النتائج: قبل وبعد
للتأكد من نجاح العملية، قمت بإجراء مقارنة:
- قبل التدريب: سألت نموذج
Llama-3.1-8B
الأصلي سؤالاً قانونيًا. كانت إجابته أنه غير قادر على المساعدة في المسائل القانونية. - بعد التدريب: سألت نموذجي المُدرَّب (المستضاف على Hugging Face) نفس السؤال. قدم النموذج إجابة متخصصة ودقيقة.
هذا يثبت أن عملية الضبط الدقيق قد نجحت.
ملاحظة أخيرة:
لن يكون النموذج مثاليًا من أول عملية ضبط دقيق. للحصول على نتائج أفضل، ستحتاج إلى تغذيته ببيانات أكثر تنوعًا (ضمن نفس التخصص)، وربما زيادة عدد خطوات التدريب (max_steps
).
خاتمة وإمكانيات مستقبلية
في هذا المقال، تعلمنا كيفية إجراء ضبط دقيق لنموذج لغوي مفتوح المصدر لجعله متخصصًا في مجال معين، مثل القانون. يمكنك تطبيق نفس المفهوم على أي مجال آخر: الهندسة، الطب، الفن، إلخ. الآن أصبح النموذج خاصًا بك بالكامل. يمكنك تطوير هذه الفكرة إلى ما هو أبعد، مثل إنشاء “شات بوت” (Chatbot) متخصص لخدمة العملاء على موقعك، قادر على الرد على استفساراتهم بدقة وكفاءة. الإمكانيات واسعة بعد تعلمك لأساسيات عملية الضبط الدقيق.