لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 03/11/25 في كل الموقع
-
في الحقيقة انا مترردد في شراء كورس الذكاء الاصطناعي لاسيما انه لا يوجد مقاطع مجانية لمراجعة اسلوب الشرح ولهجة المتحدث وايضا لا اعلم ان كانت تغطي المواضيع المتقدمة جدا في الذكاء الاصطناعي مثل fine tuning و rag وغيرها. هل يمكنني مشاهدة اي فيديو من فيدوخات اادورة للاطلاع على اسلوب الشرح واللغة3 نقاط
-
السلام عليكم لدي مشكلة اثناء زيارة صفحة تظهر فارغة Route::get('Department', [DepartmentController::class, 'index'])->name('Department'); Route::get('Department/create', [DepartmentController::class, 'create']); Route::get('Department/{id}', [DepartmentController::class, 'show']); Route::post('Department', [DepartmentController::class, 'store']); Route::get('Department/{id}/edit', [DepartmentController::class, 'edit']); Route::put('Department/{id}',[DepartmentController::class, 'update']); Route::delete('Department/{id}',[DepartmentController::class, 'destroy']); كود صفحة index @extends('layouts.master'); @section('title') الاقسام @stop @section('css') @stop @section('title_page1') لوحة التحكم @stop @section('title_page2') الأقسام @stop @section('content') <div class="box"> <div class="box-header"> <h4> <a href="/department/create">إضافة قسم</a></h4> </div> <!-- /.box-header --> <div class="box-body no-padding"> <table class="table direction table-striped"> <th>#</th> <th>اسم القسم</th> <th>تاريخ الانشاء</th> @foreach ($departments as $index => $department) <tr> <td>{{ $department->id_dept }}</td> {{-- <td>{{ $department->Name_dept }}</td> --}} <td><a href="/department/<?=$department->id_dept ?>"><?=$department->Name_dept ?></a></td> <td>{{ $department->created_at }}</td> </tr> @endforeach </table> </div> <!-- /.box-body --> </div> @endsection @section('scripts') @stop دوال داخل controller <?php namespace App\Http\Controllers; use App\Models\Department; use Illuminate\Http\Request; class DepartmentController extends Controller { public function index() { $departments = Department::all(); return view('department.index', compact('departments')); } public function show() { } public function create() { return view ('department.create'); } public function store() { } public function edit($id) { return view ('department.edit'); } public function update($id) { } public function destroy($id) { } } صفحة create @extends('layouts.master'); @section('title') الاقسام @stop @section('css') @stop @section('title_page1') الاقسام @stop @section('title_page2') اضافة قسم @stop @section('content') <form action="/Department" method="post"> <div class="form-group"> <label for="name">اسم القسم</label> <input type="text" name="name" id="name" class="form-control"> </div> <div class="form-group"> <button class="btn btn-primary">حفظ</button> </div> </form> @stop @section('scripts') @stop لماذا عندما ازور صفحة create يظهر 4042 نقاط
-
السلام عليكم. ادرس في دورة "تطوير التطبيقات بإستخدام بايثون". انا الآن في مسار "تطبيقات عملية بإستخدام بايثون" و اريد حل مسائل برمجية بالتزامن مع دراسة المسار ، و اريد المسائل ذو مستوى متوسط او متقدم، بحكم انني في المسار الأول قمت بتأسيس نفسي بشكل جيد حيث كنت اقوم بحل مشكلات من موقع Hackerrank و من Chatgpt و قمت بعمل مشروع بسيط و ربطه بسطر الاوامر CLI و هوا تطبيق ادارة مدرسة حيث كانت الوظائف هي : اضافة طالب ، حذف طالب ، اضافة درجات الى المواد الدراسية الخاصة بطالب معين ، البحث عن طالب ، عرض قائمة بالطلاب العشر المتفوقين بناء على متوسط الدرجات ، وغيرها.... (طبعا لا زلت اضيف شيء جديد من الحين للآخر). _ما هي افضل المصادر لحل مشكلات برمجية متوسطة او متقدمة؟ ._ما هي افضل النصائح للدراسة او بزيادة الإنتاجية في التعلم ؟2 نقاط
-
السلام عليكم. الرجاء المساعدة. بعد تثبيت الاسكربت تظهر رسالة الخطأ التالية: Fatal error: Uncaught Error: Undefined constant "sql108" in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/classes/SystemSettings.php:247 Stack trace: #0 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/config.php(9): require_once() #1 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/index.php(2): require_once('/home/vol17_1/i...') #2 {main} thrown in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/classes/SystemSettings.php on line 2472 نقاط
-
تستعمل العديد من الشركات اليوم كلًا من وحدة المعالجة المركزية CPU ووحدة المعالجة الرسومية GPU لتحسين أداء طيف واسع من التطبيقات بداية من مراكز البيانات Data centers وصولًا إلى الأجهزة المحمولة وغيرها من الاستخدامات المفيدة، وسنشرح في هذا المقال كل وحدة معالجة وآلية عملها ونوضح أهم أوجه التشابه والاختلاف بينهما، وحالات الاستخدام المناسبة لكل منهما، لنساعدكم على تقرير الوحدة الأفضل لمشروعكم أو نشاطكم التجاري. تطور المعالجات الحاسوبية أصبحت وحدة المعالجة المركزية Central Processing Unit -أو CPU اختصارًا- مكونًا أساسيًا في أنظمة الحواسيب منذ بداية سبعينيات القرن الماضي، فتطورت من مجرد آلات بسيطة لإجراء الحسابات والمعالجات الرياضية إلى معالجات متعددة النواة وبالغة التعقيد. فكان إصدار إنتل لمعالجها 4004 في عام 1971علامة فارقة لبداية حقبة وحدات المعالجات المركزية الحديثة ومهد الطريق للتطورات المتسارعة في قدرات المعالجة، ومع مرور الزمن أصبحت وحدات المعالجة المركزية CPUs أكثر تخصصًا وتعقيدًا حيث ظهرت ابتكارات مثل خطوط أنابيب تجزئة تنفيذ التعليمات Instruction pipelining ومتنبئ التعليمات التفرعية Branch Predictor و تقنية خيوط المعالجة الفائقة Hyper-threading وقد دفعت هذه التقنيات بحدود المعالجة الحاسوبية العامة إلى الأمام. ثم ظهرت وحدة المعالجة الرسومية Graphics Processing Unit -أو GPU اختصارًا- في بداية التسعينيات لتلبي الطلب المتزايد على المعالجة الرسومية في ألعاب الفيديو ورسوميات الحواسيب. وعلى النقيض من وحدات المعالجات المركزية CPUs التي كانت مصممة لتنفيذ التعليمات على التسلسل sequential فقد صممت المعالجات الرسومية GPUs للتعامل مع الحسابات والعمليات على التوازي parallel من أجل تنفيذ المهام الرسومية المعقدة، وكان تقديم نيفيديا لمعالجها جيفورس GeForce 256 في عام 1999 بداية حقبة جديدة للعتاد المخصص للرسوميات القادر على تخفيف الحمل الحاسوبي عن وحدات المعالجات المركزية CPUs في مهام المعالجة الرسومية. صُممت وحدات المعالجة المركزية والرسومية في البداية لأغراض مختلفة، لكن في السنوات الأخيرة بدأت قدراتهما وأدوارهما تتداخل مع بعضها البعض، فأصبحت وحدات المعالجة المركزية CPUs مدمجة مع قدرات المعالجة على التوازي، وصارت وحدات المعالجة الرسومية GPUs أكثر شمولًا وتنوعًا وظهرت لها تطبيقات أخرى غير الرسوميات مثل حل المسائل العلمية المعقدة وتطبيقات تعلم الآلة، كما حظت المعالجات الرسومية بشعبية كبيرة في السنوات الأخيرة نتيجة أدائها المبهر في أداء مهام الذكاء الاصطناعي وبالتحديد قدرتها على المعالجة المتوازية parallel computing فكانت الأداة المثالية لتدريب شبكات التعلم العميق وإجراء العمليات الحسابية على المصفوفات الضخمة التي تلعب دورًا أساسيًا في العديد من خوارزميات الذكاء الاصطناعي، مما دفع إلى اكتشافات علمية متقدمة في مجالات بحثية وتطبيقية مختلفة مثل الرؤية الحاسوبية Computer Vision ومعالجة اللغات الطبيعية Natural Language Processing والذكاء الاصطناعي التوليدي Generative AI. ما هي وحدة المعالجة المركزية CPU وحدة المعالجة المركزية CPU هي المكون الرئيسي في أجهزة الحواسيب، فهي تقوم بأغلب العمليات والمعالجة، ويشار إليها في سياقات كثيرة بعقل الحاسوب، وتنفذ وحدة المعالجة المركزية CPU التعليمات والحسابات وتنظم الأنشطة المختلفة للعتاد الحاسوبي. وتسود اليوم معالجات متعددة الأنوية multi-core processors قادرة على تنفيذ العديد من المهام في نفس الوقت مستغلة قدرات المعالجة المتوازية والمعماريات المتقدمة. وقد تحتاج بعض الشركات لاستخدام أنظمة شديدة الاعتماد على استهلاك وحدة المعالجة المركزية CPU-intensive لإجراء تحليل متقدم للبيانات، مثل معالجة مجموعات من البيانات الكبيرة الخاصة بالعملاء لاكتشاف أنماط شرائهم، وتوقع اتجاهات السوق المستقبلية. آلية عمل وحدة المعالجة المركزية CPU تعمل وحدة المعالجة المركزية CPU من خلال حلقة من العمليات معروفة باسم دورة تنفيذ التعليمات وتتكون من ثلاث خطوات وهي الجلب Fetch و فك التشفير Decode ثم التنفيذ Execute، وتكون هذه الخطوات معًا أساس جميع عمليات وحدة المعالجة المركزية CPU. والآن لنستكشف المكونات الرئيسية والخطوات المرتبطة بمعالجة التعليمات وتنفيذها لنفهم كيفية عمل وحدة المعالجة المركزية CPU: وحدة التحكم Control unit تعد وحدة التحكم بمثابة مركز القيادة الخاص بوحدة المعالجة المركزية CPU، فهي تدير وتنسق كل العمليات الخاصة بوحدة المعالجة المركزية CPU. وحدة الحساب والمنطق ALU تجري في وحدة الحساب والمنطق Arithmetic Logic Unit -أو ALU اختصارًا- كل العمليات الحسابية والمنطقية مثل الجمع والطرح والمقارنة، فهي تشكل أساس القدرات الحسابية لوحدة المعالجة المركزية CPU. السجلات Registers هي وحدات تخزين فائقة السرعة توجد بداخل شريحة وحدة المعالجة المركزية CPU، حيث تحتفظ هذه السجلات Registers بالبيانات التي تعمل عليها وحدة المعالجة المركزية CPU حاليًا، مما يسمح بسرعة الوصول لها والتعديل عليها. الذاكرة المخبئية Cache الذاكرة المخبئية Cache هي ذاكرة مؤقتة صغيرة الحجم مبنية بداخل وحدة المعالجة المركزية وهي تتميز بسرعتها وتستخدم لتخزين البيانات والتعليمات التي يُحتمل استخدامها بشكل متكرر لتسريع المعالجة، ولكنها أقل سرعة من السجلات Registers وأكبر منها في الحجم. الجلب Fetch تجلب وحدة المعالجة المركزية CPU في هذه الخطوة التعليمات من الذاكرة، ويحدد عداد البرنامج program counter موقع التعليمة الذي ستفذ حاليًا، فعداد البرنامج هو عبارة عن سجل مخصص لمتابعة وتعقب التعليمات المطلوب تنفيذها، ويحدّث نفسه تلقائيًا ليشير للتعليمة التالية. فك التشفير Decode تأتي هذه الخطوة بعد جلب fetching التعليمة حيث يجري تفسيرها بواسطة وحدة المعالجة المركزية CPU، وتعمل وحدة التحكم Control Unit على فك تشفير العمليات وتحديد ما هي العمليات التي ينبغي تنفيذها، وما هي البيانات التي تحتاجها هذه العملية. التنفيذ Execute تنفذ وحدة المعالجة المركزية CPU التعليمة، وقد يتطلب التنفيذ عمليات حسابية أو منطقية باستخدام وحدة الحساب والمنطق ALU، أو نقل بيانات خلال السجلات المختلفة، أو التفاعل مع أجزاء مختلفة من الحاسوب. التخزين Store إن كانت العملية المُنفذَّة تعيد نتيجة فسوف تحفظ هذه النتيجة في سجل register أو في الذاكرة، ويُحَدَّث عداد البرنامج program counter ليشير للتعليمة القادمة، لتبدأ نفس الحلقة في التكرار مجددًا. ما هي وحدة المعالجة الرسومية GPU تعد وحدة المعالجة الرسومية GPU دارة إلكترونية مخصصة ومصممة للتعديل على الذاكرة بسرعة، وتسريع إنشاء الصور في ذاكرة مخصصة لعرض ولإخراج المعلومات على أجهزة العرض تسمى frame buffer، وقد طُوّرت في البداية لأغراض عرض الرسوميات ثلاثية الأبعاد في ألعاب الفيديو، ثم تطورت لتصبح معالجات متوازية قووية قادرة على التعامل مع العمليات الحسابية المعقدة على التزامن. وتحتوي وحدات المعالجة الرسومية GPUs على آلاف من الأنوية cores الصغيرة وعالية الكفاءة المصممة للتعامل مع مهام متعددة على التوازي، مما يجعلها الخيار المثالي لمهام المعالجة المتوازية التي تتجاوز التطبيقات الرسومية. تستخدم الشركات اليوم قدرات وحدات المعالجة الرسومية GPUs لتطوير وتشغيل نماذج تعلم الآلة الضخمة على نطاق واسع، وهذا يتيح لها تحقيق تقدم متسارع في تخصيص وتشخيص تجربة أنظمة التوصية الخاصة بها، وتستخدم أيضًا في تطوير تقنيات المركبات ذاتية القيادة وفي خدمات الترجمة الفورية في الوقت الحقيقي وغيرها من التطبيقات الذكية. آلية عمل وحدة المعالجة الرسومية GPU تعمل وحدات المعالجة الرسومية GPUs بمبادئ مشابهة لتلك التي تتبعها وحدات المعالجة المركزية CPUs ولكنها مصممة ومحسنة لمهام المعالجة المتوازية، وهذا يجعلها الخيار الأنسب لعرض الرسوميات ولأنواع معينة من المهام. وسنشرح تاليًا آلية عمل وحدة المعالجة الرسومية GPU: المعالجات متعددة التدفق SMs تكافئ المعالجات متعددة التدفق Streaming Multiprocessors -أو SMs اختصارًا- الأنوية cores المستخدمة في وحدات المعالجة المركزية ولكن يحتوي كل معالج متعدد التدفق SM على وحدات معالجة أصغر ومتعددة ما يكسبه القدرة على التعامل مع تدفق كبير من البيانات حيث تُمكّن هذه المعمارية وحدات المعالجة الرسومية GPUs من التعامل مع العديد من المهام بنفس الوقت. أنوية كودا CUDA Cores تقع هذه الأنوية بداخل وحدات معالجة التدفق SM، وهي المسؤولة عن المعالجة بداخلها، وهي أبسط من أنوية وحدة المعالجة المركزية CPU ولكنها توجد بأعداد أكبر بكثير، حيث قد يوجد في وحدة المعالجة الرسومية GPU آلاف منها. وحدات رسم الخامة TMUs تعمل وحدة رسم الخامة Texture Mapping Unit أو TMU اختصارًا على رسم الخامة أو السطح الخارجي للنماذج ثلاثية الأبعاد بسرعة كبيرة، وهي وظيفة فريدة توجد فقط في وحدات المعالجة الرسومية GPUs وليست موجودة في وحدات المعالجة المركزية CPUs. ذاكرة الفيديو VRAM تتشابه ذاكرة الفيديو Video Memory في الوظيفة مع ذاكرة الوصول العشوائي الخاصة بوحدة المعالجة المركزية CPU، ولكنها محسنَّة لمهام المعالجة الرسومية، وهي في الغالب أسرع وتمتلك معدل نقل بيانات أكبر من الذي تملكه ذاكرة RAM. الجلب Fetch تمتلك وظيفة مماثلة لتلك الخطوة الخاصة بجلب التعليمات في وحدة المعالجة المركزية CPU، ولكنها مصممة بشكل أفضل لتنفيذ العديد من التعليمات المتشابهة على التوازي بذات الوقت. فك التشفير Decode تشابه هذه الوظيفة نظيرتها في وحدة المعالجة المركزية CPU والاختلاف بينهما هو تحسين هذه الوظيفة في GPU لتناسب مع المهام المتعلقة بمعالجة الرسوميات. التنفيذ Execute تختلف هذه الخطوة بشكلٍ جذري عن نظيرتها في وحدة المعالجة المركزية CPU، حيث تُنفِّذ وحدات المعالجة الرسومية GPUs العديد من التعليمات المتشابهة بشكل متزامن من خلال عدد كبير من أنوية كودا CUDA cores في عملية تسمى Single instruction Multiple Data -أو SIMD اختصارًا- والتي تعني إمكانية تنفيذ نفس التعليمة على عدة بيانات في نفس الوقت. التخزين Store تُحفظ النتائج عادة في ذاكرة الفيديو Video Random Access Memory -أو VRAM اختصارًا- ويسمح المستوى العالي من التوازي الذي توفره وحدات المعالجة الرسومية GPUs بتحقيق معدل نقل بيانات كبير جدًا من أجل تنفيذ المهام المتعلقة بالرسوميات. مقارنة بين وحدة المعالجة المركزية CPU ووحدة المعالجة الرسومية GPU تعد كلتا وحدتي المعالجة المركزية والرسومية مكونات ضرورية في أنظمة الحوسبة الحديثة، وقد صُمّمت كل وحدة معالجة منهما بأولويات ومسؤوليات مختلفة وهدف تصميمي مختلف، لذا من الضروري فهم الفروقات بينهما لتحديد المناسب لنا من بينهما. الوظيفة الأساسية صُمّمت وحدات المعالجة المركزية CPUs لتكون شاملة ومتعددة الأغراض وقادرة على التعامل مع طيف واسع من المهام بكفاءة عالية، فهي تتميز في المعالجة المتسلسلة sequential processing، كما أنها مُحسّنة لاتخاذ القرارات المعقدة، وتتحكم وحدة المعالجة المركزية CPU في العتاد الحاسوبي والتنسيق بين البرامج المختلفة لتشغيلها. بنما كانت وحدات المعالجة الرسومية GPUs متخصصة في البداية في عرض الرسوميات graphics rendering، ولكنها تطورت مع الوقت لتصبح معالجات فائقة لها القدرة على المعالجة المتوازية parallel processors. وهي اليوم تشغّل التعليمات تمامًا كوحدات المعالجة المركزية CPUs ولكنها محسنة للتعامل مع الكثير من العمليات الحسابية المتزامنة. فوحدات المعالجة المركزية CPU متنوعة القدرات وشاملة المهام، في حين أن وحدات المعالجة الرسومية تتميز بالتخصص والتفوق في تنفيذ المهام القابلة للتقسيم إلى مهام كثيرة جدًا والتي تتميز بكونها مهام متشابهة ويمكن حسابها بشكل مستقل عن بعضها البعض. المعالجة تُنفِّذ وحدات المعالجة المركزية CPUs العمليات بشكل متتابع أو متسلسل، حيث تُنفِّذ التعليمات المعقدة واحدة تلو الأخرى وتستخدم تقنيات مخصصة مثل التنبؤ بالتعليمات المتفرعة أو الشرطية branch prediction أو التنفيذ غير المراعي للترتيب Out-of-Order Execution الذي يسمح بتنفيذ التعليمات بترتيب مختلف عن ترتيبها الأصلي في البرنامج لتحسين عملية المعالجة المتسلسلة، حيث تشبه وحدات المعالجة المركزية CPUs المدير المنظم فهي تنسق وتتعامل مع مهام متنوعة وتتخذ القرارات المعقدة بسرعة. من ناحية أخرى، تعالج وحدات المعالجة الرسومية GPUs المهام بالتوازي، فتنفّذ العديد من التعليمات البسيطة بشكل متزامن عبر عدد ضخم من الأنوية، وتحتوي هذه الأنوية على عدد ضخم من الخيوط threads البسيطة التي يمكنها تنفيذ عمليات بسيطة للغاية ولكن عددها الضخم يمكِّنها من معالجة كمية بيانات أكبر بنفس الوقت، فبينما تشبه وحدة المعالجة المركزية CPU المدير، تشبه وحدة المعالجة الرسومية GPU خط التجميع في المصانع حيث يوكل لكل عامل أو آلة جزء معين من العمل، وبهذا يمكن لهذه الوحدة معالجة كميات ضخمة من البيانات المتشابهة في وقت واحد. تصميم الهيكلية تمتلك وحدات المعالجة المركزية CPUs في الغالب من 2 إلى 64 نواة معقدة التركيب ومزودة بذاكرة مخبئية Caches ووحدات تحكم Control units مخصصة ومعقدة، حيث صممت هذه المكونات لتحقق أقل معدل تأخير في الاستجابة low latency، فتستطيع كل نواة التعامل مع مهام متنوعة بشكل مستقل، فتولي هذه الهيكلية أهمية للتنوع في القدرات وسرعة الاستجابة لعدد واسع ومتنوع من المهام. بينما تجمع وحدات المعالجة الرسومية GPUs مئات أو آلاف الأنوية البسيطة فيما يعرف بمعالجات متعددة التدفق streaming multiprocessors أي يمكنها معالجة عدة تدفقات من البيانات في وقت واحد، وعلى عكس وحدات المعالجة المركزية CPUs فإن أنوية وحدات المعالجة الرسومية GPUs تتشارك في وحدات التحكم والذاكرات المخبئية بداخل كل معالج متعدد، وتختلف هذه المعمارية عن وحدات المعالجة المركزية CPUs بحيث تسمع لوحدات المعالجة الرسومية GPUs بمعالجة كميات ضخمة من البيانات من خلال عمليات متشابهة عليها، فهي لا تعتمد أنوية معقدة كما في وحدات المعالجة المركزية بل تستخدم أنوية بسيطة وصغيرة تكمن قوتها وتفوقها بقدرتها في العمل على التوازي على عدد كبير من البيانات. حالات الاستخدام تبرز أهمية وحدات المعالجة المركزية CPUs في المهام التي تطلب اتخاذ قرارات معقدة، وتنفيذ عمليات متنوعة، أو تغيرات متكررة في تدفق تنفيذ العمليات. فتشغل هذه الوحدات أنظمة التشغيل والمتصفحات. وتعد الخيار الأول لمهام مثل إدارة قواعد البيانات وتشغيل برامج الإنتاجية والتنسيق بين عمليات النظام المختلفة. في حين تبرز أهمية وحدات المعالجة الرسومية GPUs في الحالات التي تتضمن إجراء العديد من العمليات الحسابية في نفس الوقت عبر عدد كبير من البيانات المتجانسة أي البيانات المتشابهة أو المتطابقة من حيث الهيكل أو النوع، فهي تتشارك مع وحدات المعالجة المركزية CPUs في القدرة على القيام بالعمليات الحسابية لكنها تتفوق بشكل جليّ في المهام التي تطلب عرض رسومات ثلاثية الأبعاد وكثيرة التفاصيل، أو في تدريب نماذج تعلم الآلة أو تنفيذ عمليات محاكاة لظواهر علمية تتطلب حسابات ضخمة، ففي كل هذه التطبيقات تتفوق وحدات المعالجة الرسومية GPUs على وحدات المعالجة المركزية CPUs عشرات المرات وربما مئات المرات من حيث الأداء، مما يعطيها دورًا لا غنى عنه في مجالات مثل رسوميات الحاسوب، والذكاء الاصطناعي والحوسبة عالية الأداء. دمج وحدة المعالجة المركزية CPU مع وحدة المعالجة الرسومية GPU تستخدم الأنظمة الحاسوبية الحديثة كلًا من وحدة المعالجة المركزية CPU ووحدة المعالجة الرسومية GPU لتحسين التطبيقات والمهام. ويعرف هذا النهج بالحوسبة الهجينة، حيث تسمح هذه الطريقة لكل معالج بالتركيز على الأمور التي يتفوق فيهل، فتتعامل وحدات المعالجة المركزية CPUs مع المهام المعقدة المتسلسلة، وتتولى وحدات المعالجة الرسومية GPUs الحسابات المتوازية، ويعزز هذه الدمج في التقنيات أداء الأنظمة ويساعد في العديد من المجالات بداية من المحاكاة العلمية والذكاء الاصطناعي وصولًا إلى إنشاء المحتوى، ولنستعرض بعض الأمثلة على حالات يمكننا فيها دمج CPU مع GPU. لنفترض أن شركة ناشئة تطور نظامًا لاكتشاف الكائنات في الوقت الحقيقي من أجل المركبات ذاتية القيادة، فيمكن للشركة في هذه الحالة أن تستخدم وحدة المعالجة المركزية CPU في معالجة البيانات المتدفقة من المستشعرات واتخاذ قرارات سريعة، بينما تستخدم وحدة المعالجة الرسومية GPU في تشغيل نظام من الشبكات العصبية الاصطناعية Artificial Neural Networks المعقدة للتعرف على الكائنات في البيئة المحيطة بالمركبة. مثال آخر، لنفترض أن شركة تقنيات مالية تريد تطوير منصة تداول وتتوقع ورود طلبات تداول كثيرة في نفس الوقت، فيمكنها أن تستخدم وحدات المعالجة المركزية CPUs لإدارة عملية التداول وتشغيل الخوارزميات المعقدة، بينما تستفيد من وحدات المعالجة الرسومية GPUs في تحليل بيانات السوق بسرعة وتقييم المخاطر التسويقية من خلال عمليات حسابية تنفذ على التوازي. أخيرًا، لنفترض أن لدينا استوديو تطوير ألعاب ونريد صناعة لعبة عالم مفتوح متعددة الشخصيات واللاعبين، فيمكننا في هذه الحالة استخدام وحدات المعالجة المركزية CPUs في تنفيذ منطق اللعب وإضافة سلوك الذكاء الاصطناعي للعبة، بينما نعتمد على وحدات المعالجة الرسومية GPUs في عرض الرسومات المعقدة ثلاثية الأبعاد ومحاكاة الظواهر الطبيعية ومحاكاة الفيزياء لإنشاء تجربة لعب مبهرة بصريًا. ترجمة وبتصرف لمقالة ?What is the Difference Between CPU and GPU. اقرأ أيضًا تعدد المهام Multitasking في الحواسيب وحدة المعالجة المركزية تعرف على وحدة المعالجة المركزية وعملياتها في معمارية الحاسوب استكشف مصطلحات الذكاء الاصطناعي التوليدي توليد النصوص باستخدام النماذج اللغوية الكبيرة LLMs1 نقطة
-
عمل رائع ومفيد للغاية 😍👏🏻 بالطبع سأجرب تلك الأداة1 نقطة
-
هذه الرسالة تعني أن الكود يحاول استخدام ثابت باسم sql108 دون تعريفه أو بدون وضعه بين علامات اقتباس، مما يجعل PHP يعتبرها اسم ثابت وليس نصا فإذا كان المقصود هو استخدام النص "sql108"، فيجب وضعه بين علامات اقتباس مزدوجة أو مفردة أي "sql108" أو 'sql108' أما إذا كان من المفترض أن يكون ثابتا معرفا سابقا مثلا عبر define("sql108", "قيمة معينة"))، فتأكد من تعريفه قبل استخدامه. لذا لحل المشكلة افتح ملف classes/SystemSettings.php وتوجه إلى السطر 247 وتحقق من استخدام sql108 بدون علامات اقتباس إذا كان المقصود نصا، فقم بتعديل السطر ليصبح كالتالي: $variable = "sql108"; وإذا كنت تريد تعريف ثابت، فاستخدم: define("sql108", "القيمة المطلوبة"); مع تغيير أي إعدادات تابعة في الملف config.php بعد تطبيق هذه التعديلات، قم بحفظ الملف وإعادة تشغيل السكريبت.1 نقطة
-
يوجد ثابت constant باسم sql108 يتم استخدامه في ملف SystemSettings.php عند السطر 247، لكنه غير معرف في الكود، أي ليس معرفًا باستخدام الدالة define(). تفقد ملف SystemSettings.php وما سبب وجود sql108 في الملف وأين يتم استخدامه وما الغرض منه، ربما تحتاج إلى وضعه بين علامتي إقتباس " " في حال تستخدمه كقيمة وليس متغير، مثلاً لتمريره كاسم لسيرفر قاعدة البيانات في ملف config.php.1 نقطة
-
أصبحت أدوات الذكاء الاصطناعي من الأساسيات التي لا غنى عنها للمبرمجين اليوم، حيث تساعد هذه الأدوات في زيادة الإنتاجية، والتخلص من المهام التكرارية، والتفرغ لحل المشكلات البرمجية الأكثر أهمية، وقد اخترنا لكم في هذه المقالة واحدة من أدوات الذكاء الاصطناعي القوية والمفيدة لأي مبرمج وهي المساعد الذكي GitHub Copilot الذي أصبح يوفر خطة استخدام مجانية من خلال دمجه مع محرر الأكواد Visual Studio Code، حيث سنوضح أهم الميزات التي يوفرها هذا المساعد الذكي، ونوضح حالات استخدامه المختلفة لكتابة أكواد محسنة وموثقة جيدًا واكتشاف الأخطاء وحلها بكفاءة من داخل المحرر مباشرة دون الحاجة لنسخ فقرات الكود ولصقها في نماذج الذكاء الاصطناعي الخارجية. المتطلبات نحتاج قبل بدء استكشاف المساعد البرمجي GitHub Copilot إلى التأكد من تجهيز بيئة عملنا بإعداد الأمور التالية: تنزيل محرر الأكواد فيجوال ستوديو كود VS Code إنشاء حساب على منصة GitHub تنزيل إضافة GitHub Copilot و GitHub Copilot Chat لمحرر الأكواد VS Code ملاحظة: قد تكون الإضافات المطلوبة محمّلة بالفعل في محرر الأكواد، وفي هذا الحالة سنتخطى خطوة تنزيلها. خطوات ربط GitHub Copilot بمحرر أكواد VS code يمكننا من خلال محرر الأكواد VS code الاستفادة من تجربة وصول محدودة لاستخدام GitHub Copilot حيث تُمنح لنا خمسون محادثة لاستخدامها في الاستفسار من المساعد البرمجي و 2000 مرة لإكمال الكود البرمجي تجدد شهريًا، وسنتطرق في نهاية المقال لكيفية الحصول على الخطة المميزة pro بالمجان للطلبة والمعلمين والمساهمين في المشاريع مفتوحة المصدر بما يتوافق مع بعض الشروط التي تضعها منصة GitHub. بمجرد أن نفتح محرر أكواد VS code سنجد أيقونة بها شعار Github Copilot، نضغط عليها أو نفتح القائمة المنسدلة حيث سنجد خيار باسم Use AI features with Copilot for Free وباختياره تفتح نافذة جانبية ترحيبية وتطالبنا بالموافقة على الشروط والأحكام من خلال الضغط على زر Use Copilot for Free، وننصح بالاطلاع عليها قبل الموافقة. كي نتمكن من فتح نافذة الحوار مع المساعد البرمجي يمكننا استخدام الأيقونة أو اختصار الوصول السريع من لوحة المفاتيح Ctrl+ALT+I. وفي حال لم نتمكن من العثور على هذه الأيقونة أو وجدناها غير مفعلة فعلينا تسجيل الدخول إلى حساب Github الخاص بنا وربطه بمحرر الأكواد، من خلال أيقونة الحسابات Accounts الموجودة أسفل يسار الصفحة في محرر الأكواد فوق أيقونة الإعدادات، فمن خلالها نصادق على وصول محرر الأكواد VS code لحسابنا على Github والذي تحتاجه إضافة Github Copilot للعمل. اختيار نموذج الذكاء الاصطناعي يوفر Github Copilot لمستخدميه في الخطة المجانية إمكانية اختيار نموذج الذكاء الاصطناعي المشغِّل لمساعد الذكاء الاصطناعي، حيث يتاح حاليًا نموذجان فقط هما GPT 4o و Claude 3.5 sonnet. بينما تتيح الخطط المميزة المدفوعة الوصول إلى نماذج أقوى مثل OpenAI o1 و OpenAI o1-mini. ملاحظة: قد تتغير هذه النماذج بمرور الوقت وتطور إلى نماذج أخرى، من الأفضل حاليًا استخدام GPT4o أو Claude Sonnet 3.5 في تعديل ملفات الكود، بينما يفضل استخدام o1 لفهم وشرح الكود، وقد يختلف الأمر حسب حالة الاستخدام التي نتعامل معها لذا يمكن التبديل بين النماذج المتاحة ومقارنة نتائجها لنقرر الأنسب حسب كل حالة. حالات استخدام Github Copilot ضمن محرر الأكواد بعد ربط أداة الذكاء الاصطناعي بمحرر الأكواد، يمكننا الاستفادة من هذه الأداة في العديد من حالات الاستخدام العملية التي تسهل عملنا البرمجي وتزيد إنتاجيتنا. لنسعرض في الفقرات التالية أهم الحالات التي يمكننا الاستفادة منها من دمج مساعد الذكاء الاصطناعي GitHub Copilot مع محرر الأكواد. اقتراح إكمال الكود البرمجي لننشئ مجلدًا جديدًا و نفتحه في المحرر VS code، ثم ننشئ ملفًا باسم binary_search.py لنكتب خوارزمية البحث الثنائي وهي خوازرمية بحث مشهورة بكفاءتها، لنجرب أولًا كتابة تعريف دالة تستقبل مجموعة من الأرقام في مصفوفة Array، ونرى كيف سيقترح علينا المساعد البرمجي الكود المناسب للبحث ضمنها. بمجرد أن نكتب تعريف الدالة البرمجية سنلاحظ ظهور كود بلون رمادي خافت، هذا الكود هو اقتراح المساعد البرمجي ويمكننا الوقوف عليه بالمؤشر ورؤية شريط به بعض عناصر التحكم، فمثلًا قد نرى 1/2 والتي تعني أن هذا هو أحد اقتراحين، ويمكن أن نتجاهل الاقتراحات بمتابعة الكتابة أو يمكننا قبول الاقتراحات بالضغط على زر Accept أو على مفتاح Tab على لوحة المفاتيح، وكذلك يمكننا التحكم بمقدار ما نريد قبوله من الاقتراح باستمرار الضغط على زر Ctrl مع أحد أزرار الأسهم. يمكننا أيضًا كتابة تعليق يصف ما نريد وبمجرد النزول سطرًا سيقترح المساعد البرمجي كود ينفذ التعليق. تعديل عدة ملفات بأوامر مكتوبة وصوتية يتميز مساعد Github Copilot عن باقي أدوات الذكاء الاصطناعي الخارجية في وصوله للسياق البرمجي وقاعدة الأكواد التي نعمل عليها، وقدرته على التعديل على الملفات في الوقت الفعلي، ولا يقتصر الأمر على تعديل ملف واحد فيمكننا تعديل عدة ملفات بذات الوقت. لنجرب ميزة تعديل عدة ملفات معًا من خلال تطبيق خوارزميات ترتيب مشهورة سنكتبها في نفس ملف binary_sort كما في الصورة التالية: يمكننا بالطبع توليد هذه الدوال بمساعدة Github Copilot، كما نلاحظ هنا فإن اسم الملف لا يعبر عن الخوارزمية المطبقة -وهذا خطأ مقصود- لنرى كيف سيتعامل معه المساعد في خطوة لاحقة. لنفتح الآن نافذة الحوار ونكتب الموجّه prompt المناسب لطلب تعديل الملفات ويمكن استخدام أيقونة الميكروفون لتوجيه أمر صوتي. سيقترح Github Copilot التعديلات المناسبة وسيظهر لنا الاختلافات بين الملفات القديمة والتي أنشئت حديثًا، سنرى الأكواد التي حذفت مظللة بلون أحمر والتي أضيفت بلون أخضر، ولكن لن تطبق أو تضاف هذه التعديلات حتى نقبلها بالضغط على زر Accept. تحسين الكود البرمجي يمكننا مناقشة المساعد البرمجي Github Copilot في آلية كتابة كودنا البرمجي وكيفية تحسينه أو حل مشكلاته من خلال نافذة الحوار والتي تعد واحدة طرق متعددة للتواصل مع المساعد البرمجي، حيث يمكننا التواصل معه أيضًا من خلال محرر الأكواد بشكل مباشر وتفاعلي، أو من خلال سطر الأوامر أو الطرفية terminal المدمجة بمحرر أكواد VS code، أو من خلال واجهة VS code المحسنة لنجعل تجربة الاستخدام أكثر سلاسة. بملاحظة المثال السابق في تعديل الملفات سنجد عدة مشاكل واضحة، تحتاج لتصحيح بشري، ولهذا من المهم جدًا أن لاتسلم بصحة الكود المولد من أدوات الذكاء الاصطناعي دون مراجعته وتعديله، فأداة Github Copilot شأنها شأن أي أداة ذكاء اصطناعي آخرى فهي مفيدة لزيادة إنتاجيتك إن كنت بالفعل على دراية بالكود والمنطق المراد تنفيذه. تتمثل الأخطاء التي قام بها المساعد الذكي في حذف الدوال الأخرى من الملف الأول فقط، وبالتالي سنحتاج تصحيح هذا الخطأ بالإضافة لتحديث وتصحيح تسمية الملف الأول binary_sort إلى binary_seach فهو ليس خوارزمية ترتيب إنما خوارزمية بحث وهو خطأ مقصود نريد أن نختبر قدرته على اكتشافه. سنجد أن المساعد اكتشف المشكلات بالفعل ووضحها لنا في قائمة مرقمة، كما في الصورة التالية، ويمكننا أن نطلب منه تطبيقها. سيطبق المساعد الذكي هذه التعديلات، ولكن بتصفح الملفات نلاحظ أنه يقترح علينا كمُراجِع للكود code reviewing تعديل أو تصحيح بعض الأشياء، وهذه قد تكون ميزة مفيدة لاكتشاف الأخطاء أو المشاكل. يمكننا النقاش أيضًا حول تطبيق خوارزمية معينة وكيفية تحسينها كما في المثال التالي. كتبنا بداية الكود التالي بلغة بايثون والذي يتضمن تنفيذ لخوارزميتي الترتيب بالإدراج Insertion Sort والترتيب بالدمج Merge Sort من أجل ترتيب العناصر داخل قائمة وذلك قبل المناقشة والتحسين: def insertion_sort(arr): for i in range(1, len(arr)): key = arr[i] j = i - 1 while j >= 0 and arr[j] > key: arr[j+1] = arr[j] j -= 1 arr[j+1] = key def merge_sort(arr): if len(arr) > 1: mid = len(arr) // 2 left_half = arr[:mid] right_half = arr[mid:] merge_sort(left_half) merge_sort(right_half) i = j = k = 0 while i < len(left_half) and j < len(right_half): if left_half[i] < right_half[j]: arr[k] = left_half[i] i += 1 else: arr[k] = right_half[j] j += 1 k += 1 while i < len(left_half): arr[k] = left_half[i] i += 1 k += 1 while j < len(right_half): arr[k] = right_half[j] j += 1 k += 1 وفيما يلي الكود بعد التحسين واستخدام أسلوب يدمج بين خوارزميتي الترتيب لجمع ميزاتهما معًا: # This file contains implementation of merge sort algorithm. def insertion_sort(arr): for i in range(1, len(arr)): key = arr[i] j = i - 1 while j >= 0 and arr[j] > key: arr[j+1] = arr[j] j -= 1 arr[j+1] = key def merge_sort(arr, threshold=10): if len(arr) <= threshold: insertion_sort(arr) return arr if len(arr) > 1: mid = len(arr) // 2 left_half = arr[:mid] right_half = arr[mid:] merge_sort(left_half, threshold) merge_sort(right_half, threshold) i = j = k = 0 while i < len(left_half) and j < len(right_half): if left_half[i] < right_half[j]: arr[k] = left_half[i] i += 1 else: arr[k] = right_half[j] j += 1 k += 1 while i < len(left_half): arr[k] = left_half[i] i += 1 k += 1 while j < len(right_half): arr[k] = right_half[j] j += 1 k += 1 return arr # test the merge_sort function with some test cases sample = [5, 2, 9, 1, 5, 6] merge_sort(sample) print(sample) تخصيص تجربة الاستخدام قد نرغب في بعض الأحيان بأن يتبع المساعد البرمجي أسلوبًا معينًا نستخدمه في كتابة أكوادنا ولذلك نكثر في تفصيل التعليمات وتوضيحها له، ولكن هناك طريقة أفضل حيث يمكن أن نوضح للمساعد البرمجي أسلوبًا معينًا نطبقه على كامل المشروع ضمن ملف تعليمات بحيث لا نكون مضطرين لتوضيح تعليمات التخصيص في كل أمر نطلبه منه. للقيام بذلك سننشئ مجلدًا باسم github. ثم نضيف له ملفًا باسم copilot-instructions.md حيث سنكتب في هذا الملف التعليمات اللازمة والأسلوب الذي نحب كتابة الكود به كي يتبعها مساعدنا البرمجي. لاحظ المثال التالي حيث نوضح بداية كيف سيكتب لنا Github Copilot الجمل الشرطية بصيغة مختصرة تسمى العامل الثلاثي Ternary operator، ثم نوضح أسلوب توثيق الكود البرمجي الذي نرغب باستخدامه. لنختبر المخرجات بعض إضافة هذا التعديل. نلاحظ أن توثيق الكود بهذه الطريقة سيمكننا من معرفة معلومات عن الدالة عند تحديدها أو استخدامها في أي مكان آخر كما في المثال التالي. مراجعة وتدقيق الكود يمكننا استخدام Github Copilot لتدقيق ومراجعة الكود أو تلخيص التغيرات قبل طلب سحب Pull request الكود لمستودع الأكواد على Github فهذا يقلل الأخطاء البرمجية ويحسن جودة الأكواد المرفوعة. سنتبع الخطوات التالية لاستخدام هذه الميزة : نتوجه لمستودع الأكواد على Github ونطلب سحب Pull جديد أو نستخدم طلب موجود بالفعل نفتح قائمة Reviewers ونختار منها Github Copilot سيراجع المساعد الكود ويدققه لنا ثم يقدم اقتراحاته يمكننا التعامل مع التعليقات والمراجعات التي يوفرها Github Copilot كالمراجعة البشرية بقبولها أو رفضها سنجرب هذه الميزة عن طريق إنشاء مستودع أكواد Repository جديد على منصة Github ونضيف ملف بايثون math_utils.py يحتوي على دالة برمجية لقسمة رقمين، ولكن بها خطأ حيث لم نأخذ بعين الاعتبار الحالة التي يكون المقسوم عليه صفر، وسنفترض أن أحد المساهمين لاحظ هذه المشكلة وقام بطلب اشتقاق Fork لمستودع الأكواد ليصلح المشكلة، وبعد ذلك طلب سحب الملف Pull Request إلى المستودع الأصلي. في حال كنت صاحب مستودع الأكواد، فلا حاجة لاشتقاق المستودع Forking حيث يمكن إنشاء تفريعة Branch ثم طلب سحبها Pull Request. لنصحح الدالة بإضافة حالة شرطية عند كون المقسوم عليه صفرًا ونطبع رسالة الخطأ لتنبيه المستخدم. ثم نطلب سحب Pull هذا التفريع Branch الذي يحتوي التصحيح للفرع الأصلي والرئيسي. نلاحظ أنه Github Copilot قد لا يظهر لدينا في قائمة Reviewers ولكن يمكننا استخدامه لتلخيص طلب السحب Pull Request وهذا ما سنقوم به، حيث أن هذه الميزة لاتزال تجريبية وليست متاحة لدى الجميع. استخدام GitHub Copilot كخبير برمجي يتميز Github Copilot بميزة أخرى تجعله من أدوات الذكاء الاصطناعي البرمجية الفريدة، حيث يمكنه أن يعمل كخبير متخصص نستدعيه عند الوقوع في مشكلة أو عندما نرغب في معرفة آلية تنفيذ شيء ما، وهذا من خلال واجهة الحوار حيث يمكننا استدعاء الخبير من خلال رمز @ الذي يتيح قائمة من الخبراء الافتراضيين لنسألهم، مثلًا vscode@ يمكننا أن نسأله عن أي شيء يخص محرر الأكواد. نرى في هذا المثال كيف طلبنا من الخبير أن يوضح لنا كيفية تغير مظهر وتنسيق محرر الأكواد، فأخرج لنا زرًا عندما نضغط عليه يقودنا لقائمة اختيارات يمكننا من خلالها اختيار المظهر الذي نريده. @vscode how to change the Theme? لا يتوقف الأمر عند محرر الأكواد فيوجد أكثر من خبير، مثل خبير سطر الأوامر Terminal، لنفترض أننا نريد أن ننشئ في مجلد للمحاضرات Lectures، عشرة مجلدات فرعية منه وبكل منها ملف نصي فارغ برقم المحاضرة، والتي سنملؤها لاحقًا بملاحظات عن هذه المحاضرة، يمكن بالطبع محاولة فعل هذا بشكل يدوي لكن قد يستغرق الأمر وقتًا طويلًا لذا من الأفضل استخدام سطر الأوامر لتنفيذ هذه العملية بمساعدة Github Copilot. @terminal I want to create 10 folders names Lecture{i}, i the number of lecture, and for each lecture it would contain a text file named as lecture{i}_notes.txt لنفتح واجهة سطر الأوامر من خلال أحد الأزار السريعة من نافذة الحوار أو من قائمة View ثم نختار Terminal لنتمكن من وضع الأمر المولد وتشغيله، نلاحظ أن الأمر مكتوب باستخدام Powershell لأننا في حالتنا نستخدم نظام تشغيل ويندوز Windows ولكن يمكن أن نطلب استخدام Bash في حال استخدام نظام لينكس، وكما نرى فقد استطاع الأمر إنشاء الملفات التي طلبناها دون أية مشكلات، وهذه الميزة مفيدة للغاية عندما نرغب في تنفيذ بعض الأوامر من الطرفية ولكننا لا نتذكر الكلمات المفتاحية أو طريقة كتابة الأمر. حالات استخدام إضافية لمساعد Github Copilot استعرضنا في الفقرات السابقة أبرز حالات استخدام مساعد Github Copilot في محرر الأكواد، لكن في الواقع تتخطى حالات استخدام مساعد Github Copilot ملفات الكود العادية التي نتعامل معها في تخصصات البرمجة الشائعة كتطوير الواجهات الأمامية أو الخلفية، لتصل إلى البيئات المخصصة لمهندسي البيانات وتعلم الآلة المتمثلة في jupyter notebook، ولتجربة هذه الميزات سنستخدم مجموعة بيانات بسيطة وهي مجموعة بيانات لبعض ركاب سفينة تايتنك الغارقة والتي يمكنك العثور عليها في موقع كاجل Kaggle. لنعرض بضعة صفوف من مجموعة البيانات import pandas ad pd # حمل مجموعة بيانات تيتانيك titanic_df = pd.read_csv('titanic.csv') # اطبع الصفوف الأولى من البيانات titanic_df.head() باختيار زر التوليد Generate يمكننا طرح أسئلة أو توجيه أوامر بشكل كتابي أو من خلال الصوت ثم الموافقة على الاقتراح المولد أو طلب تعديله ليناسب حالة الاستخدام. فور الموافقة على الاقتراح بالضغط على قبول وتشغيل Accept & Run سنجد الرسم البياني التالي كمخرج. يوحي الرسم البياني بمعلومة هامة بخصوص نسب النجاة، فكما نرى نسبة النجاة في النساء أكبر، ونسبة الهلاك في الرجال أكبر، قد يكون هذا عائدًا بنسبة كبيرة للأولوية المعطاة للنساء والأطفال في قوارب النجاة ولكن هل يمكن للمساعد البرمجي فهم الرسومات البيانية وتلخيص الملاحظات الخاصة بها، لنختبر هذا. كما نلاحظ في السؤال الأول استطاع مساعدنا الذكي أن يستنتج ما يدل عليه الرسم البياني من نسبة نجاة أعلى للنساء، وكذلك بعد سؤاله عن سبب هذه قد استطاع توضيح السبب، وكما نلاحظ أيضًا فعند سؤاله باللغة العربية سيجيب باللغة العربية. لنوضح ميزة أخرى من خلال استخدام خلية كود يمكننا استخدام الرمز :q وطرح سؤال ثم سيجيب عنه المساعد البرمجي في نفس الخلية برمز مشابه به الإجابة :a كما في الصورة التالية. titanic_df.head(3) q: what does SibSp mean? الحصول على الخطة المميزة من Github Copilot مجانًا يمكن للطلبة أو المعلمين أو المساهمين في مشاريع مفتوحة المصدر الحصول على الخطة المميزة من Github Copilot بالمجان، فبالنسبة للطلبة يمكنهم رفع ما يثبت هذا من خلال هذه الصفحة التابعة لمنصة Github، أما المعلمون فيمكنهم من خلال هذه الرابط معرفة المميزات التي توفرها المنصة للمعلمين. يختلف الأمر قليلًا بالنسبة للمساهمين في المشاريع مفتوحة المصدر حيث ينبغي أن يصلوا لبعض الشروط التي تحددها المنصة ولا توجد طريقة للتقديم بشكل مباشر إنما ترسل إشعارات من خلال منصة Github للمساهمين الذين تجدهم مستحقين للخطة المميزة. بمجرد الحصول على الخطة المميزة كطالب برفع الإثباتات المطلوبة مثل الإيميل الجامعي وبطاقة الطالب التعريفية، سيعالج الطلب في بضعة أيام، وفي حال قبوله ستفتح ميزات متعددة لا تقتصر على الوصول لمساعد Github Copilot فقط، وإنما لمزايا أخرى يمكنك الاطلاع عليها من هنا، ولتفعيل الحساب المميز يجب تسجيل الخروج من حساب Github المحفوظ على محرر أكواد VS code وتسجيل الدخول إلى الحساب الذي جرى تفعيل الخطة المميزة عليها. للتأكد من تفعيل النسخة المميزة Pro يمكن مراجعة النماذج المتاحة للاستخدام، من خلال واجهة الحوار. الخاتمة تعرفنا في هذه المقالة عن أبرز الميزات التي توفرها أداة الذكاء الاصطناعي كوبايلوت Github Copilot للمبرمجين والمطورين عند دمجها في محرر الأكواد فيجوال ستوديو كود، حيث يمكنها مراجعة وتحسين الأكواد التي نعمل عليها، أو إكمال وتوقع الأكواد التي نريد كتابتها وغيرها من الفوائد الأخرى التي تساعدنا في توفير وقتنا وتعزيز إنتاجيتنا كمطورين، وتطرقنا في ختام المقال لكيفية الحصول على الخطة المميزة Pro بالمجان والتي تسمح لنا بالوصول لمزيد من المميزات والنماذج القوية، هل جربتم دمج هذه الأداة مع محرر الأكواد؟ شاركونا تجربتكم في التعليقات أسفل المقال. اقرأ أيضًا تعرف على منصة تنسرفلو TensorFlow للذكاء الاصطناعي فهم نظام التحكم بالإصدارات Git وأهمية استخدامه في مشاريع بايثون الإشراف على مشاريع البرمجيات مفتوحة المصدر عبر غيت هب GitHub الدليل المرجعي للعمل على نظام غيت Git1 نقطة
-
تعد تنسرفلو TensorFlow أحد الأدوات الأساسية في جعبة مطوري نماذج الذكاء الاصطناعي، فهي توفر بيئة متكاملة تساعد على تدريب نماذج الذكاء الاصطناعي وتشغيلها واستخدامها في الاستدلال والتنبؤ القرارات المستقبلية بمرونة وكفاءة، سنتعرف في هذه المقالة على أداة تنسرفلو TensorFlow ومميزاتها في تطوير تطبيقات الذكاء الاصطناعي وتعلم الآلة. ما هي تنسرفلو TensorFlow تنسرفلو TensorFlow هي منصة مفتوحة المصدر توفر للمطورين وعلماء البيانات الأدوات التي يحتاجونها لبناء نماذج تعلم الآلة، بداية من معالجة البيانات وتجهيزها، إلى التدريب وحتى التشغيل، وتدعم تنسرفلو العديد من لغات البرمجة عن طريق مكتبات مخصصة لكل لغة مثل بايثون و جافاسكريبت وسي و جافا وغيرها من اللغات، وإن كانت لغة بايثون هي اللغة الأكثر استخدامًا والأكثر دعمًا. طورت شركة جوجل منصة تنسرفلو TensorFlow عن طريق فريقها Google Brain في عام 2015 كي تكون بديلًا مفتوح المصدر للنظام السابق الذي كان يُستخدم في تدريب خوارزميات تعلم الآلة والمعروف باسم ديست بليف DistBelief، ومن أبرز مميزات تنسرفلو TensorFlow دعم مبدأ توزيع التدريب على عدة أجهزة لتعزيز كفاءة الأداء، وسهولة تعلمها، وكونها منصة مفتوحة المصدر مما يسمح للجميع بالمساهمة في تحسينها واستخدامها في مختلف المشاريع. كما تتميز تنسرفلو TensorFlow بقدرتها على استغلال مختلف العتاد الحاسوبي مثل وحدة المعالجة المركزية CPU ووحدة المعالجة الرسومية GPU ومسرعات التدريب المختلفة، وهذا يجلعها تتفوق على بعض المكتبات التقليدية مثل ساي كيت ليرن Scikit learn الشهيرة التي توفر العديد من خوارزميات تعلم الآلة التقليدية ولكنها لا تدعم استخدام وحدات المعالجة الرسومية GPU، ناهيك عن التدريب الموزع، فمن غير الممكن تدريب نماذج ذكاء اصطناعي واسعة النطاق باستخدام مكتبات لا تدعم هذه الإمكانيات المتقدمة مثل التدريب الموزع أو المسرعات. معنى Tensors تُشتق تسمية تنسرفلو TensorFlow من العمليات التي تنفذها الشبكات العصبية على بيانات متعددة الأبعاد تعرف باسم تنسورات Tensors حيث تتدفق هذه البيانات Flow عبر الشبكات العصبية. لذا من الضروري توضيح معنى كلمة تنسور Tensor أو ما يعرف أيضًا باسم مُوتِّر فهو هيكل بيانات فالتنسور Tensor هو مفهوم أكثر شمولًا من المصفوفات Matrices والمتجهات Vectors وحتى القيم المفردة أو المضاعفات Scalars. المضاعف Scalar: عدد مفرد مثل العدد 5 وهو يُعد موترًا من الرتبة صفر. ونسميه مضاعف ضربه في موتر آخر سيضاعف القيم داخله المتجه Vector: مجموعة من الأرقام منظمة في صف واحد أو عمود واحد من القيم، ويُعد موترًا من الرتبة الأولى المصفوفة Matrix: مجموعة من الأرقام منظمة في صفوف وأعمدة، وتُعد المصفوفة موتر من الرتبة الثانية ويمكن للتنسورات أن تمتد إلى رتب Ranks أعلى، فكلما علت الرتبة كلما احتوى التنسور على بيانات متعددة الأبعاد تُستخدم في النماذج المعقدة على سبيل المثال يمكن استخدام تنسور Tensor من الرتبة الرابعة لتمثيل دفعة بيانات batch مكونة من مجموعة من الصور كما يلي: عدد الصورة في الدفعة: 4 صور ارتفاع الصورة: 64 بكسل عرض الصورة: 64 بكسل قنوات الألوان: ثلاثة هي الأحمر، الأخضر، الأزرق وبالتالي يمكننا التعبير عن هذه المعلومات باستخدام تنسور Tensor من 4 أبعاد، حيث يعبر البعد الأول عن ترتيب الصورة في الدفعة، ويعبر البعد الثاني عن الارتفاع، والثالث عن العرض، والرابع عن عدد قنوات الألوان كما في الصورة التالية: وبالتالي يمكن استخدام هذا التنسور Tensor لتعريف مدخلات الشبكات العصبية الالتفافية CNN التي تتعامل مع الصور، فهو يمكننا من معرفة عدد الصورة المدخلة بالدفعة وأبعادها وعدد قنوات الألوان بسهولة. استخدامات تنسرفلو TensorFlow شاع استخدام منصة تنسرفلو TensorFlow في مختلف مجالات الذكاء الاصطناعي، مثل تعلم الآلة وتحليل البيانات وتصنيف الصور والتعرف على الكائنات بالصور ومعالجة اللغات الطبيعية وتطبيقات الذكاء الاصطناعي التوليدي Generative AI. على سبيل المثال اعتمدت منصة X على تنسرفلو TensorFlow لترتيب التغريدات حسب الأهمية والصلة، فقد يتابع صاحب حساب مئات بل آلاف الأشخاص لذلك يصبح ترتيب التغريدات أمرًا محوريًا في تجربة الاستخدام، كما استخدمت باي بال PayPal خوارزميات مطورة بتنسرفلو TensorFlow لتستطيع كشف المعاملات الاحتيالية ومنعها. النظام المتكامل لتنسرفلو TensorFlow Ecosystem توفر تنسرفلو TensorFlow نظام بيئي متكامل لمطوري الذكاء الاصطناعي إو إطار شامل يوفر كل ما يلزم لتطوير نماذج الذكاء الاصطناعي وتشغيلها على مختلف الأجهزة سواء الحواسيب الشخصية أو الخوادم الخاصة أو الخوادم السحابية، إلى جانب استخدام نماذج مسبقة التدريب من خلال مكتبة متنوعة من النماذج وهو يوفر أدوات للتعامل مع كل من المراحل التالية: تدريب النموذج Training توزيع التدريب Distribution strategy التشغيل Deployment الاستدلال Inference لنشرح كل مرحلة من هذه المراحل بمزيد من التفصيل. التدريب Training تدريب النموذج هو الخطوة الأولى في بناء أي تطبيق ذكاء اصطناعي، ويتطلب الوصول لخطوة التدريب معالجة البيانات preprocessing حيث توفر تنسرفلو العديد من الأدوات لمعالجة البيانات وإعدادها لتدريب النماذج، كما توفر طريقة سهلة لبناء وتدريب الشبكات العصبية الاصطناعية Artificial Neural Networks من خلال مكتبة كيراس keras وهي مكتبة مختصة داخل الإطار الشامل لتنسرفلو TensorFlow. توزيع التدريب Distribution strategy يوفر إطار عمل تنسرفلو ميزة توزيع مهمة تدريب النموذج على عدة أجهزة من خلال الوحدة tf.distribute فبدلاً من تدريب النموذج على جهاز واحد فقط، يمكننا تقسيم عملية التدريب كي تنجز عبر معالجات متعددة. من الأفضل العمل في وضع شبكة العقد الحسابية Computational Graph mode لأنه مُصمم خصيصًا ليعمل بشكل أكثر كفاءة مع التدريب الموزع. أما إذا كنا نرغب في التجربة والتعديل للوصول إلى نموذج قابل للتطبيق على نطاق واسع، فيمكننا استخدام وضع التنفيذ الفوري Eager execution mode. هنالك العديد من التفاصيل المتقدمة التي علينا الانتباه لها عند تحديد استراتيجية توزيع التدريب، مثل كيفية مشاركة معاملات النموذج عبر الأجهزة المختلفة وكيفية توزيع المهام، ولكن من الأفضل للمبتدئين البدء بتعلم التدريب على جهاز واحد أولاً للسهولة. وبمجرد إتقان مهمة تطوير نموذج فعّال على جهاز واحد، يمكن العمل على توزيع التدريب على نطاق أوسع لتسريعه وتحسين أداءه. التشغيل Deployment يعد الانتقال من مرحلة تطوير وتدريب النموذج إلى مرحلة تشغيل النموذج وطرحه للمستخدمين تحديًا للكثيرين، فنحن بحاجة لعتاد حاسوبي يستضيف النموذج ويستقبل طلبات المستخدمين، ويمكننا توفيره من خلال موفري الخدمات السحابية Cloud provider، حيث يمكنن استئجار موارد حاسوبية لتشغيل النموذج الخاص بنا، وكما ذكرنا سابقًا فإن تنسرفلو TensorFlow هو إطار عمل متكامل لا يتوقف دوره عند تطوير النموذج فحسب، فيمكننا استخدام TensorFlow Serving لإدارة النماذج التي نحتاج لتشغيلها ونجري تحديث مستمر لها كلما توفرت لنا بيانات جديدة لتدريب النموذج عليها، وغيرها من المميزات العديدة الأخرى. الاستدلال Inference ما نعنيه باستدلال نموذج الذكاء الاصطناعي التنبؤ والتوقع المستقبلي باستخدام البيانات المعطاة، برمجيًا يمكن الاستدلال باستخدام الدالة model.predict في مكتبة Keras المدمجة ضمن TensorFlow فهذه الدالة البرمجية تأخذ البيانات كمدخلات، وتعطينا التوقع المنتظر بناء عليها، يتعرض النموذج أثناء التشغيل لآلاف أو ربما ملايين الطلبات من المستخدمين من أجل الاستدلال بناء على بعض البيانات المعطاة وينتظرون نتيجة سريعة لطلباتهم، لذا تعد سرعة استدلال النموذج عاملًا مهمًا في نجاح تشغيله. تساعدنا تنسرفلو TensorFlow في تحسين سرعة الاستدلال بعدة أدوات مثل: تحسين العمليات الحسابية باستخدام شبكة العقد الحسابية Computational graph تحسين تشغيل النماذج على مختلف أنواع العتاد كوحدات المعالجة المركزية CPUs، أو وحدات معالجة الرسومات GPUs، أو وحدات معالجة الموترات Tensor Processing Units TPUs استخدام المعالجة على التوازي Parallelism وهي طريقة لتقسيم الحسابات على أكثر من جهاز تقسيم الطلبات لدفعات Batching لتحسين استخدام سعة شبكات الانترنت Throughput فمع ملايين من الطلبات بنفس الوقت مرفقة بالبيانات قد تصبح سعة الشبكة غير قادرة على التعامل مع كل الطلبات ومعالجتها بسرعة كافية لذا علينا تقسيمها لدفعات أصغر النسخة الخفيفة من تنسرفلو TensorFlow light في بعض الحالات، قد نحتاج لتشغيل النماذج على أجهزة محدودة الإمكانيات كالأجهزة المحمولة. على سبيل المثال، تُعد تطبيقات التعرف على البصمة أو الوجه باستخدام كاميرا الهاتف نماذج ذكاء اصطناعي مخصصة للعمل على الهواتف محدودة الموارد. أو نحتاج لاستخدام نماذج الذكاء الاصطناعي غلى الشرائح الإلكترونية في مجالات إنترنت الأشياء IoT والروبوتات بهدف التعرف على الأشخاص أو التحكم في الآلات أو التنقل بشكل آلي دون الحاجة لتوجيه مباشر. لكن هذه المهام لن تكون ممكنة من دون القدرة على تشغيل النماذج على أجهزة منخفضة الموارد، وهنا يأتي دور النسخة الخفيفة من تنسرفلو TensorFlow Lite، وهي إطار عمل مفتوح المصدر للتعلم العميق يفيدنا في تقليص حجم النماذج وجعلها أسرع، دون التأثير الكبير على دقة التوقعات. كيف نستخدم TensorFlow مع مختلف لغات البرمجة تدعم تنسرفلو TensorFlow تشغيل النماذج في لغات برمجة متعددة كما ذكرنا سابقًا وتعد لغة بايثون Python هي اللغة الأساسية والأكثر استخدامًا لتطوير النماذج وبناء الحلول باستخدام تنسرفلو TensorFlow. لكن يمكننا استخدام تنسرفلو مع مختلف لغات البرمجة من خلال حفظ النموذج بصيغة موحدة تتيح التعامل معه في لغات مختلفة مثل C و Go و Java وغيرها. كما تحظى تطبيقات الويب Web Applications بدعم خاص في منصة تنسرفلو، إذ يمكننا تشغيل وتطوير نماذجنا باستخدام JavaScript، مما يتيح لنا تطوير تطبيقات الذكاء الاصطناعي وتشغيلها مباشرة على المتصفح من خلال المكتبة TensorFlow.js. مستودع النماذج مسبقة التدريب TensorFlow Hub توفر TensorFlow مكتبة واسعة من النماذج مسبقة التدريب Pre-trained عبر مستودعها TensorFlow Hub، حيث يمكننا استخدام هذه النماذج وتشغيلها مباشرة دون الحاجة لتطويرها من الصفر. تتميز هذه النماذج بتوفير ميزة الصقل fine-tuning وتخصيصها باستخدام بيانات مخصصة للمشكلة التي نسعى لحلها. وما يجعل هذه النماذج ذات قيمة كبيرة هو أنها تحتوي على معرفة مسبقة اكتسبتها من تدريبها على مجموعات بيانات ضخمة. لذا، يعد صقلها حلاً مثاليًا في العديد من التطبيقات، حيث يمكننا الحصول على نتائج دقيقة وفعالة بسرعة كبيرة بالاعتماد عليها. التمثيل المرئي للبيانات Visualization في تنسرفلو يحتاج مطور نماذج الذكاء الاصطناعي إلى مراقبة النماذج وملاحظة تطور أدائها مع مرور الوقت، لذا سيفيدهم تعزيز مشاريع الذكاء الاصطناعي برسومات بيانية لتحقيق هذا الهدف. توفر تنسرفلو TensorFlow هذه الإمكانية من خلال أداة تسمى Tensorboard توفر رسومات بيانية ومخططات توضيحية لتوضح معنى الأرقام ودلالتها، وتسهل اكتشاف الأنماط ونقاط الاهتمام. توفر Tensorboard إمكانية عرض العديد من الرسومات البيانية المفيدة مثل: رسم بياني لدقة النموذج accuracy وتغيرها بمرور الوقت رسم شبكة العٌقد الحسابية Computational graphs توفير رسومات بيانية لدراسة توزيع الأوزان والمعاملات التي تتغير مع الوقت عرض الصور والنصوص والصوتيات دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن طريقة استخدام تنسرفلو TensorFlow تحتاج منصة تنسرفلو TensorFlow إلى إجراء العديد من العمليات الحسابية على البيانات الممثلة في التنسورات Tensors. وبالتالي، تصبح مهمة تنسرفلو هي تحسين هذه العمليات الحسابية التي تتدفق إليها التنسورات، بهدف استغلال الموارد الحاسوبية المتاحة بأفضل طريقة ممكنة. فبعض الخوارزميات قد تستغرق أيامًا أو حتى أشهر لإتمام تدريبها بسبب حجم البيانات الهائل التي تتدفق خلالها في العمليات الحسابية المعقدة. لنتعرف على طريقة القيام بالتمثيل الرياضي للعمليات الحسابية التي علينا القيام بها أثناء تدريب النموذج أو استدلاله. التعامل مع شبكة العقد الحسابية Computational graph شبكة العٌقد الحسابية Computational graph هي الوسيلة التي تستخدمها تنسرفلو TensorFlow لتمثيل العمليات والخوارزميات التي تنفذها، يمكننا التفكير بها على أنها خطة مرسومة لتنفيذ الخوارزميات، إذ تتكون الشبكة من عدة عقد متصلة تتدفق خلالها التنسورات أو البيانات في اتجاه واحد، وتمثل العقدة عملية حسابية مثل الضرب أو الجمع أو غيرها من العمليات. يكتب المطور الأكواد البرمجية بلغة برمجة مثل بايثون، ثم يأتي دور تنسرفلو TensorFlow بتجهيز شبكة العٌقد الحسابية computational graph التي تتضمن جميع الخطوات لتنفيذ هذه الأكواد، ولتحسينها يجري تبسيط الخطوات المتكررة التي يمكن اختزالها، أو التخلص من الخطوات التي يمكن حذفها لتوفير الموارد الحاسوبية. كما تستخدم تنسرفلو طريقة تسمى الحساب المسبق للثوابت Constant folding، تتعامل هذه الطريقة مع المتغيرات المعلومة أو التي يمكن حساب قيمتها بشكلٍ مباشر، فتحولها إلي قيمة ثابتة أثناء بناء شبكة العٌقد الحسابية Computational graph، حيث لا نحتاج لحساب هذه القيم وقت التنفيذ. على سبيل المثال إذا كان a=2 ، b=3 و c=a+b فيمكننا إيجاد قيمة المتغير c=5 وعدم إجراء العملية الحسابية أينما وجد هذا المتغير مجددًا وقت التنفيذ، فهذا المتغير لا يعتمد سوى على ثوابت معلومة. كما تعتمد أيضًا على عملية إعادة استخدام الحدود المتكررة Common Subexpression Elimination لتبسيط شبكة العٌقد الحسابية Computational graph بحساب العمليات التي تتكرر مرة واحدة وتستخدم الناتج أينما وجد تكرار للعملية الحسابية. على سبيل المثال: إذا كان a=x+y، و b=x+y فإن a=b لذا نقوم بالعملية x+y مرة واحدة ونعوض عنها عندما نجد a أو b. أخيرًا يمكننا استخدام متغيرات أقل دقة في تنسرفلو TensorFlow كأن نستخدم متغير من نوع float16 بدلًا من float32 لتسريع الحسابات وتقليل استهلاك الموارد، ويجدر الذكر أن هذه الميزة لا تعمل إلا مع وحدات المعالجة الرسومية GPUs. لاحظ المثال التالي: import tensorflow as tf # قم بتعريف رقم عشري number = 123.456 # حدد حجم المتغير الذي تريد أن تحفظ الرقم به ليكون 32 float32 = tf.constant(number, dtype=tf.float32) # حدد حجم المتغير الذي تريد أن تحفظ الرقم به ليكون 16 float16 = tf.constant(number, dtype=tf.float16) # لنرى الاختلاف في الدقة بين الرقمين print("float32: ", float32.numpy()) print("float16: ", float16.numpy()) # حجم التخزين print("Size of float32: ", float32.numpy().nbytes, "bytes") print("Size of float16: ", float16.numpy().nbytes, "bytes") ''' output float32: 123.456 float16: 123.44 Size of float32: 4 bytes Size of float16: 2 bytes ''' قد يصل عدد المتغيرات والمعاملات في نماذج الذكاء الاصطناعي لملايين بل مليارات في بعض الأحيان، لذا من الضروري الاعتماد على تغيير دقة المتغيرات لتسريع عملية التدريب وتقليص حجم النماذج، فأداء النموذج قد يتأثر بنسبة جيدة من هذا التغير. ملاحظة: تجدر الإشارة إلى أن استخدام أسلوب تغيير دقة المتغيرات يستخدم في تقليص حجم نماذج الذكاء الاصطناعي لتعمل على الحافة on Edge أي على الأجهزة محدودة الموارد، مثل الأجهزة المحمولة أو الشرائح الحاسوبية البسيطة، التي قد لا تتسع إلا لبضعة آلاف من البايتات. استخدام شبكة العقد الحسابية لتنفيذ العمليات تفيدنا شبكة العٌقد الحسابية Computational graphs في جعل عملية تدريب النماذج أكثر مرونة وكفاءة عبر عدة منصات وأجهزة حاسوبية مختلفة، فهي محسنة لتتعامل مع العتاد الحاسوبي بشكل أفضل، كما يمكن نقل شبكة العقد الحسابية بعد تدريب النموذج ليصبح قابلًا للاستخدام على منصات وأجهزة متنوعة ولغات برمجة مختلفة فهي مجرد قالب لتنفيذ مجموعة من الأوامر التي تعطي نتيجة أو توقع في النهاية. كانت هذه الطريقة هي الوحيدة في الإصدار الأول من تنسرفلو TensorFlow 1.x ، ولكنها عانت من بعض العيوب، فقد كان علينا كمطورين كتابة الأكواد البرمجية بشكل مثالي دون أن نرى نتائج الخطوات الوسيطة، ثم ننتظر تحويل الأكواد المثالية إلي شبكة عقد حسابية محسنة، وهذا يستغرق الكثير من الوقت، بالطبع لن نحصل على النتيجة التي نرجوها من أول محاولة، فالبرمجة عملية تحسن تكرارية وتراكمية، وخاصة عند تطوير نماذج الذكاء الاصطناعي التي تحتاج إلى تجربة العديد من المعاملات حتى نجد التوليفة المناسبة من تلك المعاملات. لاحظ الكود التالي الذي يوضح كيفية تعريف دالة ConcreteFunction في تنسرفلو وكيفية تحديد المدخلات والمخرجات للعمليات الحسابية حيث سنحول العمليات البرمجية البسيطة مثل الجمع بين متغيرين إلى شبكة عُقد حسابية يمكن تنفيذها بكفاءة على أجهزة مختلفة. import tensorflow as tf @tf.function # لجعل تنسرفلو يستخدم شبكة العٌقد الحسابية def add_numbers(a, b): return a + b # نعرف ثابتين a = tf.constant(5) b = tf.constant(3) # لنقم بعملية الجمع بطريقة شبكة العٌقد الحسابية result = add_numbers(a, b) # لنحصل على الخطوات التي قام بها تنسرفلو graph_steps = add_numbers.get_concrete_function(a, b) print("الخطوات") print(graph_steps) print("الخطوات بشكل مفصـل ومبسـط") for op in graph_steps.graph.get_operations(): print(op.name) الخطــوات ConcreteFunction Input Parameters: a (POSITIONAL_OR_KEYWORD): TensorSpec(shape=(), dtype=tf.int32, name=None) b (POSITIONAL_OR_KEYWORD): TensorSpec(shape=(), dtype=tf.int32, name=None) Output Type: TensorSpec(shape=(), dtype=tf.int32, name=None) Captures: None الخطـوات بشكـــل مفصـل ومبسـط a b a d d I d e n t i t y تقنية التنفيذ الفوري للعمليات الحسابية Eager execution كانت عملية تطوير النماذج غير تفاعلية في الإصدار الأول من تنسرفلو TensorFlow 1.x، كما ذكرنا في الفقرة السابقة، حيث كان المطورون يكتبون الأكواد ثم ينتظرون لفترة طويلة لتحويل الأكواد إلى شبكة عُقد حسابية محسّنة، هذا جعل من الصعب اكتشاف الأخطاء وتحسين الأداء في الوقت الفعلي. لهذا السبب، وجدت طريقة التنفيذ الفوري للعمليات الحسابية Eager Execution في TensorFlow 2.x لتجعل عملية التطوير أكثر تفاعلية وسهولة. حيث يمكننا من خلال التنفيذ الفوري Eager Execution بناء العمليات الحسابية بشكل مباشر. على سبيل المثال، عندما نجمع رقمين، سنحصل على النتيجة على الفور دون الحاجة للانتظار لإكمال البرمجة أو إنشاء شبكة العُقد الحسابية. وبالتالي تسهل علينا هذه الطريقة اكتشاف الأخطاء، واختبار التعديلات، وتحسين أداء النموذج بشكل فوري وتفاعلي. لاحظ الكود التالي لاستخدام التنفيذ الفوري Eager Execution في تنسرفلو: import tensorflow as tf # Eager Mode مفعل بشكل افتراضي a = tf.constant(5) b = tf.constant(3) c = a + b print("ناتج العملية الفورية:", c.numpy()) # ناتج العملية الفورية: 8 الخاتمة وصلنا لختام مقالنا الذي شرحنا فيه بالتفصيل إطار العمل الشهير تنسرفلو TensorFlow، وأوضحنا العديد من الأدوات والتقنيات التي تُمكّن المطورين من تطوير نماذج الذكاء الاصطناعي عبر مختلف المراحل، من التدريب وحتى التشغيل. كما قمنا بتطبيق أمثلة عملية بسيطة توضح كيفية استخدام هذه الأدوات بشكل تفصيلي، بدءًا من بناء الشبكات الحسابية حتى التنفيذ الفوري للعمليات الحسابية. ننصح بتجربة هذه المنصة والاستفادة من أدواتها لتحسين وتبسيط عملية تطوير تطبيقات الذكاء الاصطناعي. اقرأ أيضًا ما هي منصة Hugging Face للذكاء الاصطناعي تعلم الذكاء الاصطناعي كل ما تود معرفته عن دراسة الذكاء الاصطناعي بناء شبكة عصبية للتعرف على الأرقام المكتوبة بخط اليد باستخدام مكتبة TensorFlow تعرف على أهم مشاريع الذكاء الاصطناعي تعرف على مكتبة المحوّلات Transformers من منصة Hugging Face1 نقطة
-
يمر أغلب مهندسي الذكاء الاصطناعي و تعلم الآلة أثناء تعلمهم للعديد من الخوارزميات الأساسية والتقليدية في تعلم الآلة بمكتبة ساي كيت ليرن Scikit Learn التي توفر هذه الخوارزميات وتوثيقًا جيدًا لها، في هذه المقالة سوف نستكشف هذه المكتبة القوية واستخداماتها ومميزاتها، وما الخوارزميات التي يوفرها، ونستعرض بعض الأمثلة العملية على حالات الاستخدام. ما هي مكتبة ساي كيت ليرن Scikit Learn تعد ساي كيت ليرن Scikit Learn أحد أشهر مكتبات أو أطر عمل لغة بايثون وأكثرها استعمالًا خاصة في مجالات علوم البيانات وتعلم الآلة، فهي توفر مجموعة من خوارزميات الذكاء الاصطناعي المبنية بكفاءة، وتتيح لنا استخدامها بسلاسة حيث تمتلك جميع خوارزميات التعلم المبنية بها طريقة شبه موحدة للتعامل معها، فاستخدام خوارزمية أخرى لنفس الغرض يتطلب ببساطة تغيير سطر واحد من الكود، وتوفر هذه المكتبة إمكانيات كبيرة عند بناء النماذج ومعالجة البيانات وتجهيزها، وحفظ النماذج في صيغة يمكن إعادة استخدامها لاحقًا. مميزات مكتبة ساي كيت ليرن Scikit Learn تسهل مكتبة ساي كيت ليرن Scikit Learn تطوير نماذج تعلم الآلة على المبتدئين والراغبين باختبار الأمور بسرعة، وتوفر لهم العديد من المميزات التي سنسردها ونتعرف عليها مثل: التوثيق الجيد: تتميز المكتبة بوجود توثيق مفصل وأمثلة استخدام كثيرة تساعدنا في البدء بتطوير واستخدام الخوارزميات المختلفة ومعرفة المعاملات التي يمكن ضبطها لتغير أداء النموذج وطريقة تدريبها القيم الافتراضية لمعاملات التحكم : لا داعي للقلق إن كنا نتعلم خوارزمية جديدة ونرغب في تجربتها دون الدخول في جميع التفاصيل وتأثيرات ضبط قيم معاملات التحكم أوالمعاملات الفائقة hyperparameters حيث تضبط المكتبة أغلب العوامل بقيم افتراضية مناسبة لأغلب الاستخدامات، لذا يمكننا التركيز على العوامل الأهم وفهمها بشكل أفضل أدوات للمفاضلة بين النماذج: مع تنوع الخوارزميات المبنية في المكتبة التي يمكنها القيام بنفس المهمة بطرق مختلفة يكون من الصعب على المبتدئ تقرير أي الخوارزميات هو الأفضل للمهمة التي يحاول إنجازها، لذلك توفر لنا المكتبة أدوات للمقارنة بين الخوارزميات المختلفة وعوامل التحكم المختلفة بسلاسة مكتبة غنية بالخوارزميات والأدوات: توفر المكتبة أغلب خوارزميات تعلم الآلة التقليدية، مما يغنينا عن عناء بناء هذه الخوارزميات من الصفر، إذ تتوفر عشرات الخوارزميات التي يمكن تطبيقها من خلال سطور معدودة من الكود، فيمكننا التركيز على تحسين معالجة البيانات وتحسين جودتها واختيار النموذج الأنسب للمشكلة التي لدينا التوافق مع المكتبات الأخرى: تعمل المكتبة بشكل سلس مع المكتبات الأخرى مثل باندا Pandas و نمباي NumPy التي توفر هياكل بيانات وعمليات تسهل اكتشاف أنماط البيانات وتحليلها ومعالجتها لتصبح جاهزة للنموذج الذي نحتاج لتدريبه معالجة البيانات باستخدام ساي كيت ليرن توفر ساي كيت ليرن Scikit Learn العديد من الأدوات الجيدة لمعالجة البيانات وتجهيزها لتدريب النماذج عليها، وكما نعرف تٌعد البيانات وجودتها العامل الأهم في تحسين دقة توقعات النماذج المستخدمة، لذلك هنالك بعض الخطوات التي نحتاج للقيام بها لمعالجة البيانات فمثلًا إذا كانت هناك قيم غير رقمية فنحن بحاجة لتحويلها إلى أرقام فنماذج تعلم الآلة هي نماذج رياضية ولن نستطيع القيام بعمليات حسابية على النصوص أو الصور بشكلها الأصلي. أمثلة على معالجة البيانات الترميز Encoding: هو عملية تبديل بعض البيانات بأرقام يسهل إجراء عمليات رياضية عليها، مع إمكانية إرجاعها لأصلها، يمكن ترميز البيانات في مكتبة Scikit Learn باستخدام الكود التالي: from sklearn.preprocessing import LabelEncoder # ترميز البيانات الوصفية city = ["القاهرة", "الرياض", "دمشق", "القاهرة"] # نعرف المٌرمز الذي يعوض عن اسمٍ برقم يعبر عنه encoder = LabelEncoder() # تقوم هذه الدالة بتجهيز المٌرمز # حيث سيمكننا أن نستخدمه أكثر من مرة بعد هذه الخطوة لترميز البيانات المدخلة له بناءً على أول بيانات أعطت له encoder.fit(city) # الآن يمكننا استخدامه على أي بيانات أخرى لترميزها city_encoded = encoder.transform(city) print(city_encoded) # Output: [1 0 2 1] print(encoder.transform(["الرياض"])) # Output: [0] # عكس الترميز print(encoder.inverse_transform(city_encoded)) # Output: ['القاهرة' 'الرياض' 'دمشق' 'القاهرة'] print(encoder.inverse_transform([2, 1, 0, 0, 1])) # Output: ['دمشق' 'القاهرة' 'الرياض' 'الرياض' 'القاهرة'](city_encoded) التعامل مع القيم المفقودة : قد تتضمن البيانات بعض القيم المفقودة ويمكن التعامل معها في مكتبة Scikit Learn بسهولة من خلال حذف الصفوف التي تحتوي قيمًا مفقودة إن كانت قليلة للغاية، أو التعويض عنها باستخدام المعلومات الإحصائية كالمتوسط الحسابي للقيم، أو بناء نموذج لتوقعها بحسب القيم الموجودة بالفعل. خوارزميات تعلم الآلة في مكتبة Scikit Learn تتضمن مكتبة Scikit Learn العديد من خوارزميات تعلم الآلة التي تساعدنا على تنفيذ مهام متنوعة، وفيما يلي نبذة عن أهم هذه الخوارزميات: أولًا: خوارزميات التعلم الخاضع للإشراف التعلم الخاضع للإشراف Supervised Learning هو نوع من التعلم الآلي يصف المهام التي تكون فيها البيانات المراد توقعها معلوم مخرجاتها الممكنة مسبقًا وتوجد بيانات تحتوي على ملاحظات سابقة تتضمن الوسوم Labels المراد تعليم النموذج توقعها، وسنوضح تاليًا أبرز الخوازرميات التي تندرج تحت هذه النوع. خوارزميات توقع الانحدار Regression توقع الانحدار هو نوع من المهام التي يمكننا القيام بها باستخدام خوارزميات مضمنة في ساي كيت ليرن Scikit Learn، يتوقع هذا النوع من الخوارزميات الحصول على أمثلة سابقة يتعلم منها العلاقة بين المدخلات المعطاة والوسم المراد توقعه، والذي يكون قيمة عددية مستمرة continuous مثل توقع درجة الحرارة أو توقع أسعار المنازل. أمثلة على خوارزميات توقع الانحدار: توقع الانحدار الخطي Linear Regression توقع الانحدار بالدوال متعددة الحدود Polynomial Regression خوزارزميات التصنيف Classification يصنف البشر كل شيء حولهم من الحيوانات والجمادات إلى أنواع الأفلام والروايات، وتتوفر خوارزميات تستطيع محاكاة البشر وتتعلم تصنيف الأشياء المختلفة بإعطاء نماذج وملاحظات سابقة لتصنيفات قام بها البشر من قبل حتي تستطيع الآلة تعلم التصنيف، يمكن الاستفادة من التصنيف في أتمتة العديد من المهام المرجو فيها تصنيف عدد ضخم من العناصر في وقت قليل بالتالي توفير الوقت وزيادة الكفاءة، عملية التصنيف تخرج لنا قيمًا منفصلة discrete. من الأمثلة على استخدام هذه الخوارزميات توقع حالة الطقس هل هو مشمس أم غائم أم ماطر أم حار ...إلخ. وتصنيف الصور، وتوقع تقييمات الأفلام. أمثلة على خوارزميات التصنيف الانحدار اللوجستي Logistic Regression مٌصنّف الجار الأقرب Nearest Neighbors Classification شجرة القرار Decision Tree خوارزميات تجميع النماذج Models Ensemble تتيح لنا ساي كيت ليرن Scikit Learn القدرة على دمج أكثر من نموذج تعلم آلة ليشكلوا نموذجًا أقوى، يمكن تشبيه الأمر بلجنة أو فريق من الأصدقاء كل منهم خبير في مجال معين وعند جمع خبرتهم معًا يغطون على نقاط الضعف الخاصة بهم. يمكن تجميع النماذج باستخدام التصويت Voting حيث نجري تدريب لعدد من النماذج ثم نأخذ بتوقع الأغلبية في حالة كون المشكلة تصنيفية، أما أن كانت المشكلة توقع انحدار يمكن أن تأخذ متوسط التوقعات، لنلاحظ الكود التالي: from sklearn.ensemble import VotingClassifier # التصنيف اللوجيستي model1 = LogisticRegression() # شجرة القرارات model2 = tree.DecisionTreeClassifier() # مٌصنف أقرب الجيران model3 = KNeighborsClassifier(n_neighbors=3) # تجميع لتوقعات النماذج باستخدام التصويت model = VotingClassifier(estimators=[('lr', model1), ('dt', model2), ('knn', model3)], voting='hard') # تدريب النموذج # لاحظ أن مدخلات هذه الدالة هي الخواص المطلوب من النموذج تعلم الأنماط بها # بالإضافة إلى الوسم المٌراد توقعه # تمثل هذه المدخلات التجارب المٌراد للنموذج التعلم منها # يمكنك أن تستخدم هذه الدالة في تدريب أي نموذج في ساي كيت ليرن model.fit(X_train, y_train) # استخدام النموذج في التوقع # البيانات المدخلة للنموذج لم يرها من قبل # ولكنها تحتوي نفس الخواص والأعمدة التي تم تدريب النموذج عليها # نرغب في تدريب النموذج على التعميم لبيانات لم يرها من قبل y_pred = model.predict(X_test) جمعنا في الكود أعلاه عدد من النماذج الضعيفة ومحدودة المعرفة حيث يتدرب كل نموذج على جزء من البيانات، وجمعنا معرفتهم معًا للخروج بتوقع واحد مثال على هذا النوع هو خوارزمية الغابة العشوائية Random Forest وهي تجميع لنماذج من شجرة القرارات Decision Tree البسيطة. تقلل هذه الطريقة من فرص حفظ النموذج للبيانات وتمنحه مرونة أكثر لتعلم الأنماط الحقيقية التي تمكنه من توقع الإجابات الصحيحة عند تعرضه لبيانات جديدة عند تشغيل النموذج. خوارزميات التعلم غير الخاضع للإشراف التعلم غير الخاضع للإشراف Unsupervised Learning هو نوع من تعلم الآلة تكون فيه البيانات غير موسومة، ومهمة النموذج تعلم الأنماط بين البيانات ليكتشف الفروقات بينها، مثلًا إن كانت المدخلات صور فتكون المهمة معرفة أي الصور يمكن اعتبارها تابعة لنفس الشيء دون إعطاء وسم للبيانات في عملية التدريب، ما يعرفه النموذج هو الخواص المُراد للنموذج التعلم منها فقط للتميز بين الصور بناء عليها، وسنوضح تاليًا أبرز الخوازرميات التي تندرج تحت هذه النوع. خوزارميات العنقدة أو التصنيف العنقودي Clustering لا نوفر للنموذج في هذه الحالة التصنيفات والوسوم المتوقع انتماء البيانات لها على غرار التصنيف العادي، ففي العنقدة Clustering على النموذج أن يكتشف هذا بنفسه من خلال تعلم الأنماط الموجودة بالبيانات للتمييز بينها. تستخدم خوزارميات العنقدة في أنظمة التوصية Recommendation systems لتقديم اقتراحات شخصية للمستخدمين تناسب اهتماماتهم، أو فصل عناصر الصورة Image segmentation من خلال تحديد البكسلات التي تنتمي لنفس العنصر Object في الصورة بالتالي تفريقها عن باقي العناصر. أمثلة على خوارزميات العنقدة: العنقدة حول عدد من نقاط التمركز k-means العنقدة الهرمية Hierarchical clustering خوارزميات اختزال البيانات نحتاج لاختزال البيانات Data Reduction في كثير من الحالات بسبب محدودية القدرة الحاسوبية وعدم تأثير كل هذه البيانات بشكل ملحوظ على أداء النموذج، ونجري اختزال البيانات عادة من خلال تقليل أبعادها بدمج بعض الأعمدة أو الخواص بدون خسارة المعلومات الهامة قدر الإمكان، فمثلًا يمكننا تقليل أبعاد الصورة مع الاحتفاظ بملامحها ودقتها قدر الإمكان، أو تقليل عدد الأعمدة من 100 إلى 10 مع احتفاظ الأعمدة العشرة بأغلبية المعلومات التي تؤثر على التوقعات. من أمثلة خوارزميات اختزال البيانات خوارزمية تحليل العنصر الأساسي Principal Component Analysis التي تمكننا من اختزال عدد الأعمدة أو الأبعاد بالبيانات مع الاحتفاظ بأكبر قدر ممكن من المعلومات. # تساعدنا هذه المكتبة على صنع هياكل بيانات مصفوفة # والقيام بالعديد من العمليات الحسابية import numpy as np # هذه الخوارزمية التي سنستخدمها لاختزال البيانات from sklearn.decomposition import PCA # في البداية لنصنع بيانات عشوائية لنقوم بالتجربة # يضمن لنا هذا السطر ثبات القيم العشوائية عند إعادة تشغيل هذا الكود np.random.seed(0) # نعرف مصفوفة عشوائية التوليد، تتكون من 10 صفوف و100 عمود X = np.random.rand(10, 100) # لنعرف الخوارزمية التي استوردناها pca = PCA(n_components=10) # نضع هنا عدد الأعمدة التي نرغب أن تصبح البيانات عليها # لنقم بتشغيل الخوارزمية على البيانات التي معنا x_pca = pca.fit_transform(X) # هذا السطر يقوم بتدريب الخوارزمية على اختزال البيانات وفي نفس الوقت يقوم باختزال البيانات المدخلة # لنرى النتائج print("حجم البيانات قبل الاختزال", X.shape) print("حجم البيانات بعد الاختزال", x_pca.shape) ''' المـــــــــخــرجـــــــــــــات ------------------------------------- حجم البيانات قبل الاختزال (10, 100) حجم البيانات بعد الاختزال (10, 10) ''' خوارزميات كشف الشذوذ كشف الشذوذ Anomaly Detection هو عملية ملاحظة الغير مألوف والخارج عن الأغلبية في البيانات. يستخدم في حالات عددية مثل اكتشاف المعاملات الاحتيالية في البنوك، واكتشاف الأنماط غير المعتادة في تدفق الشبكات مما قد يساعد على منع هجمات إغراق الشبكة بالطلبات، واكتشاف المنتجات المعيبة في خطوط الإنتاج واكتشاف الأنماط غير المعتادة للمؤشرات الحيوية لجسم الإنسان التي تستخدمها تطبيقات الساعات الذكية التي تجمع هذه المؤشرات. من الخوارزميات التي تطبق كشف الشذوذ خوارزمية غابة العزل Isolation Forest، وفيما يلي مثال على طريقة استخدامها: # استيراد نموذج كشف كشف الشذوذ from sklearn.ensemble import IsolationForest # سنستخدمها لتوليد بعض البيانات import numpy as np # نولد البيانات لتجربة النموذج X = np.array([[10, 10], [12, 12], [8, 8], [9, 9], [200, 200]]) # يمكنك ملاحظة أن النقطة الأخيرة شاذة عن باقي النقاط # لنقم بتعريف وتدريب النموذج clf = IsolationForest(contamination=0.2) # %يفترض هذا المعامل أن نسبة شذوذ 20 # لاحظ أن التدريب يتم بدون استخدام وسوم حيث أن هذا النموذج غير خاضع للإشراف clf.fit(X) # في حالة اكتشاف شذوذ سيتم وسمه بسالب واحد لتميزه predictions = clf.predict(X) print(predictions) # Output: [ 1 1 1 1 -1] خوارزميات التعلم الخاضع لإشراف جزئي يستخدم التعلم الخاضع لإشراف جزئي Semi-supervised Learning بيانات تتكون من خليط من البيانات الموسومة Labeled data والبيانات غير الموسومة Unlabeled data أثناء التدريب، يمكن أن يصبح هذا الأسلوب مفيدًا للغاية عندما يكون من الصعب الحصول على بيانات موسومة كافية أو يحتاج الحصول عليها إلى وقت ومجهود ضخم. يستخدم عادة في ترشيح المحتوى في أنظمة التوصية فبعض البيانات قد تكون متوفرة بشكل صريح مثل تقييمات المستخدم للمنتجات والتي يمكن الاستدلال بها لاقتراح المزيد من العناصر، ولكن يمكن أيضًا الاستفادة من المعلومات غير الموسومة والمعروفة ضمنية من خلال تفاعلات المستخدم. كما يستخدم في تدريب نماذج التعلم على الصور ومقاطع الفيديو حيث يمكن وسم بعض الصور أو العناصر فيها بشكل بشري لكن لا يمكن حصر جميع العناصر المختلفة التي قد تكون بداخل صورة ووسمها لذا سنستفيد من دمج الجزء الموسوم من البيانات مع الجزء غير الموسوم في توفير كمية أكبر من البيانات لتدريب نماذج أكثر دقة، وسنوضح تاليًا أبرز الخوازرميات التي تندرج تحت هذه النوع. خوراززميات التعلم الذاتي Self Training يمكننا استخدام التعلم الذاتي Self Training في ساي كيت ليرن Scikit Learn لتحويل أي نموذج تصنيف تقليدي إلى نموذج يمكنه التدريب على البيانات الموسومة وغير الموسومة معًا، شريطة أن يكون النموذج قادرًا على توقع التصنيفات كاحتمالات، ونحتاج لاستخدام نموذج يسمى SelfTrainingClassifier لتحويل النماذج العادية لنماذج خاضعة لإشراف جزئي، لاحظ الكود التالي: from sklearn.tree import DecisionTreeClassifier from sklearn.semi_supervised import SelfTrainingClassifier # نعرف أي مصنف ليكون نموذج الأساس base_classifier = DecisionTreeClassifier() # نقوم بإحاطة نموذج الأساس ليصبح قادرًا على التعلم الذاتي self_training_model = SelfTrainingClassifier(base_classifier) # نقوم بتدريب النموذج مثل أي نموذج تقليدي self_training_model.fit(X_train, y_train) ملاحظة: عند تجهيزنا لبيانات التدريب نحتاج لوسم البيانات غير الموسومة بقيمة 1- حيث أننا لا نستطيع أن نمرر البيانات خلال النموذج وهي غير موسومة. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن اختيار النموذج المناسب قد يبدو اختيار النموذج المناسب في مكتبة ساي كيت ليرن معقدًا، إذ يمكن استخدام أكثر من خوارزمية لحل نفس المشكلة. ولكل خوارزمية معاملات تحكم مختلفة، لذلك يجب علينا استخدام أدوات تساعدنا في مقارنة النماذج وقياس أدائها. فيما يلي بعض المعايير الرئيسية التي يمكن استخدامها: الدقة Accuracy: عدد التوقعات الصحيحة التي توقعها النموذج مقسومًا على إجمالي البيانات. كلما كانت النسبة أعلى، كان النموذج أفضل خطأ المتوسط التربيعي Mean Squared Error: الفرق بين القيمة الفعلية التي نريد التنبؤ بها والقيمة التي توقعها النموذج، ثم تربيع هذا الفرق. وهو يساعد في تحديد مدى دقة التوقعات بحث مصفوفة المعاملات GridSearch: يستخدم لاختبار عدد من المعاملات أو إعدادات النماذج المختلفة دفعة واحدة والعثور على أفضل مجموعة معاملات تحقق أفضل أداء. تستهلك هذه الطريقة وقتًا وموارد حاسوبية كبيرة خاصة إذا كانت المعاملات كثيرة جدًا مقارنة بين ساي كيت ليرن Scikit Learn و تنسورفلو TensorFlow يكمن الفرق الرئيسي بين تنسورفلو TensorFlow وبين ساي كيت ليرن Scikit Learn في تخصص الاستخدام، حيث أن ساي كيت ليرن مكتبة متخصصة بخوارزميات تعلم الآلة التقليدية Traditional Machine Learning بينما تنسورفلو TensorFlow إطار عمل شامل لتطوير وتشغيل نماذج التعلم العميق Deep Learning المبنية على الشبكات العصبية الاصطناعية. وعلى الرغم من إمكانية تدريب شبكات عصبية اصطناعية باستخدام ساي كيت ليرن فهي ليست محسنة لأجل هذا الغرض، إذ لا تستطيع المكتبة الاستفادة من وحدات المعالجة الرسومية GPUs التي تستطيع تسريع تدريب النماذج العميقة بشكل أفضل من وحدات المعالجة المركزية CPUs، بينما لا يقف دعم تنسورفلو TensorFlow عند استخدام GPU واحد، حيث يمكن توزيع التدريب على عدة أجهزة على التوازي وهو شيء صعب التحقيق باستخدام ساي كيت ليرن. الخلاصة تعرفنا في هذه المقالة على مكتبة الذكاء الاصطناعي الشهيرة ساي كيت ليرن Scikit Learn وأبرز مميزاتها ووضحنا بعض التطبيقات الواسعة لخوارزميات التعلم المبنية بها، وكذلك تعرفنا على الفرق بينها وبين إطار العمل تنسورفلو TensorFlow.ننصح بتعلم استخدام هذه المكتبة وتجربتها في بناء وتطبيق نماذج تعلم آلة مخصصة، فهي توفر أدوات قوية ومرنة تمكنكم من تنفيذ حلول مبتكرة في مختلف مجالات الذكاء الاصطناعي. اقرأ أيضًا الذكاء الاصطناعي: دليلك الشامل بناء مصنف بالاعتماد على طرق تعلم الآلة بلغة البايثون باستخدام مكتبة Scikit-Learn العمل مع ملفات CSV وبيانات JSON باستخدام لغة بايثون استخدام التدريب الموزع ومكتبة Accelerate لتسريع تدريب نماذج الذكاء الاصطناعي1 نقطة
-
تتدرب نماذج التعلم الآلي على مجموعات من البيانات الضخمة حيث توسم نقاط الاهتمام في البيانات -أي الأجزاء المهمة في التي نريد التركيز عليها والتعلم منها- لإعطائها معنى وسياق. نتعمق في هذه المقالة في وصف طرق بناء أنظمة وسم البيانات data labeling من الصفر مركزين على تدفق البيانات في النظام وكيفية تأمينها وضمان جودتها. ما معنى وسم البيانات ينتج الذكاء المتأصل في الذكاء الاصطناعي من تعرضه لكميات من البيانات التي تتدرب عليها نماذج تعلم الآلة، ومع التقدم الحالي في النماذج اللغوية الضخمة مثل GPT-4 وجيمناي Gemini التي يمكنها معالجة تريليونات الوحدات اللغوية الصغيرة التي تسمى tokens، ولا تتكون هذه البيانات المستخدمة في التدريب من معلومات أولية مستخلصة من الإنترنت فقط فهي تتضمن أيضًا وسومًا حتى يكون التدريب فعالًا. وسم البيانات data labeling هو عملية تحويل البيانات الأولية والمعلومات غير المعالجة إلى بيانات موسومة أو بيانات معنونة لإضافة سياق ومعنى واضح لها، وتحسّن هذه العملية من دقة تدريب النموذج، فأنت توضح وتشير إلى ما ترغب للنظام أن يتعرف عليه، وتتضمن الأمثلة على وسم البيانات مهام مثل تحليل المشاعر في النصوص حيث توسم النصوص في هذه الحالة بمشاعر معينة مثل إيجابي أو سلبي أو محايد، ومهام التعرف على الكائنات في الصور إذ يوسم كل كائن في الصورة بتصنيف معين. وكذلك تستخدم في تنصيص الكلام المنطوق في الملفات الصوتية، أو وسم الأفعال في مشاهد الفيديو. تلعب جودة البيانات دورًا هائلًا في تدريب البيانات، فالمدخلات الرديئة تؤدي إلى مخرجات رديئة فلا يمكننا توقع أداء مبهر من نموذج لم يُدرّب إلا على بيانات رديئة الجودة، فالنماذج التي تتدرب على بيانات بها أخطاء وتناقض في الوسوم ستواجه صعوبة في محاولة التأقلم مع البيانات الجديدة التي لم تراها في التدريب وربما تكون متحيزة في توقعاتها مسببة أخطاء في المخرجات، ويمكن أن يؤدي تراكم البيانات الرديئة في المراحل المختلفة إلى تأثير مركب مما يؤثر على كل الخطوات والنماذج التي تعتمد عليها. يهدف هذا المقال لتوضيح طرق تعزيز جودة البيانات واكتساب أفضلية تنافسية في كافة مراحل وسم البيانات. وللسهولة سنركز على المنصات والأدوات التي تستخدم في عملية وسم البيانات ونقارن بين مميزات ومحدوديات كل تقنية وأداة، وبعد ذلك ننتقل إلى اعتبارات أخرى لا تقل أهمية مثل تقليل التحيز، وحماية الخصوصية، وزيادة دقة وسم البيانات. دور وسم البيانات في سير عمل تطبيقات تعلم الآلة يقسم تدريب نماذج تعلم الآلة إلى ثلاثة تصنيفات عامة وهي التعلم الخاضع للإشراف Supervised learning والتعلم غير الخاضع لإشراف Unsupervised learning والتعلم المعزز Reinforcement learning. يعتمد التعلم الخاضع للإشراف على البيانات الموسومة labeled training data، والتي تحتوي نقاط الاهتمام في البيانات بها على وسوم بالتوقع أو العنوان الصحيح، فيتعلم النموذج أن يربط بين خواص المدخلات والوسوم أو التسميات الصحيحة المرتبطة بها مما يعطيه القدرة على تخمين وسوم البيانات الجديدة التي لم يتدرب عليها من قبل ولا يعرف ما وسمها الحقيقي، من جهة أخرى يحلل التعلم غير الخاضع للإشراف البيانات غير الموسومة بحثًا عن الأنماط المخفية أو التجميعات الموجودة في البيانات، وأما في التعلم المعزز فتكون عملية التدريب بالتجربة والخطأ ويمكننا التدخل في مرحلة التقييم والمراجعة لتوجيه عملية التعلم. تُدرّب معظم نماذج التعلم الآلي باستخدام أسلوب التعلم الخاضع للإشراف supervised learning. ونظرًا لأهمية البيانات عالية الجودة فينبغي اعتبارها في كل خطوة من عملية التدريب لذلك يلعب وسم البيانات دورًا حيويًا في هذه العملية. إن تحضير وجمع البيانات هي العملية التي تسبق وسم البيانات، حيث تُجمع البيانات الأولية أو الخام من مصادر متنوعة مثل المستشعرات الإلكترونية sensors، وقواعد البيانات، وسجلات العمليات logs، وواجهات برمجة التطبيقات APIs، وفي الغالب لا تخضع هذه البيانات لهيكل أو تنسيق ثابت وقد تحتوي على تناقضات وشوائب مثل قيم مفقودة أو قيم شاذة outliers أي قيما غير مألوفة وتختلف بشكل كبير عن باقي البيانات، أو قيم متكررة، لذا في عملية المعالجة تُنظّف البيانات وتُنسَّق وتُحوّل لتكون جاهزة لوسمها labeling، وتستخدم استراتيجيات عديدة للتعامل مع معالجة البيانات مثل حذف الصفوف المكررة، أو حذف الصفوف التي تحتوي على قيم مفقودة أو التعويض عن هذه القيم باستخدام نماذج تخمين إحصائية، كما يمكننا إحصائيًا اكتشاف القيم الشاذة outliers ومعالجتها. تلي معالجة البيانات في الخطوات عملية وسم البيانات لتوفير المعلومات التي يحتاجها نموذج التعلم الآلي كي يتعلم، وتختلف استراتيجيات وسم البيانات باختلاف نوع هذه البيانات والغرض من النموذج، فوسم الصور يتطلب أساليب مختلفة عن وسم النصوص، وعلى الرغم من وجود أدوات وسم آلية ولكن التدخل البشري يحسن بشكل كبير من عملية الوسم خاصة عندما يتعلق الأمر بالدقة أو تفادي التحيز الذي قد يوجد في الأدوات الآلية، وبعد أن توسم البيانات تاتي مرحلة تأكيد الجودة والتي تضمن الدقة والتناسق واكتمال الوسوم، ويعمل فريق تأكيد الجودة على توظيف أسلوب الوسم المزدوج إذ يقوم أكثر من شخص بوسم عينة من البيانات بشكل مستقل ويقارنون نتائجهم لحل أي اختلاف في الآراء. الخطوة التالية هي خضوع النموذج للتدريب باستخدام البيانات الموسومة ليتعلم الأنماط والعلاقات بين المدخلات والوسوم المرتبطة بها، حيث تعدل معاملات النموذج في عملية تكرارية من التخمين وتقييم الخطأ حتى تتحسن الدقة بالنسبة للوسوم المعلومة، ولتقييم فعالية النموذج يختبر على بيانات موسومة لم يرها من قبل، وتقاس صحة تخميناته وتوقعاته باستخدام معايير رقمية مثل نسبة الصواب accuracy والدقة precision والاستذكار Recall أو الحساسية sensitivity، فإذا كان أداء النموذج ضعيفًا تُعدل بعض الأشياء قبل إعادة التدريب مثل تحسين جودة بيانات التدريب بتقليل الضوضاء بالبيانات data noise أو تقليل التحيز وتحسين عملية وسم البيانات، وفي النهاية بعد إعادة التدريب وتحسين النموذج يصبح جاهزًا للتشغيل deployment ويمكنه التفاعل مع البيانات في العالم الحقيقي. وأخيرًا من المهم مراقبة أداء النموذج لكشف وتحديد أي مشكلات قد تتطلب تحديث النموذج أو إعادة تدريبه. تحديد أنواع وطرق وسم البيانات تَسبق عملية تحديد نوع البيانات مرحلةَ تصميم وبناء معمارية وسم البيانات، حيث توجد البيانات في تنسيقات وهياكل متنوعة تشمل النصوص والصور ومقاطع الفيديو والملفات الصوتية، وكل نوع من البيانات يأتي بمجموعة من التحديات المميزة التي تتطلب طريقة خاصة في التعامل معها لتحقيق تناسق ودقة في عملية وسم البيانات، بالإضافة لذلك فبعض البرمجيات المستخدمة في وسم البيانات تتضمن أدوات مصممة للتعامل مع أنواع معينة من البيانات، وكذلك تتخصص فرق الوسم في وسم نوع محدد من البيانات، لذلك يعتمد اختيار البرمجيات والفريق المناسب بشكلٍ كبير على المشروع. على سبيل المثال، قد تطلب عملية وسم بيانات للرؤية الحاسوبية computer vision تصنيف الصور الرقمية ومقاطع الفيديو وإنشاء مستطيلات التحديد bounding boxes لعنونة الكائنات الموجودة داخلها. وتحتوي مجموعة بيانات وايمو المفتوحة waymo's open dataset مثلًا على مجموعة بيانات موسومة لمهام الرؤية الحاسوبية computer vision للسيارات ذاتية القيادة، وقد وُسمت هذه البيانات بجهود مجموعة من الأفراد عبر الإنترنت مع مساهمات واسمين فرديين. ومن التطبيقات الأخرى للرؤية الحاسوبية computer vision التصوير الطبي، والاستطلاع الجوي، والمراقبة، والتأمين، والواقع المعزز augmented reality. ويمكن وسم النصوص ومعالجتها باستخدام خوارزميات معالجة اللغات الطبيعية Natural Language processing بمجموعة متنوعة من الطرق، تشمل تحليل المشاعر sentiment analysis من النصوص مثل المشاعر الإيجابية والسلبية، واستخلاص الكلمات المفتاحية مثل العبارات ذات الصلة، وكذلك التعرف على الكيانات الموجودة في النص مثل الأشخاص والأماكن والتواريخ، يمكن أيضًا تصنيف النصوص القصيرة. على سبيل المثال، يمكن تحديد فيما إذا كانت رسالة بريد إلكتروني رسالة مزعجة spam أم لا، ويمكن التعرف على لغة النص كالعربية أو الانجليزية، وتستخدم نماذج معالجة اللغات الطبيعية في تطبيقات مثل أنظمة المحادثة chatbots والمساعدات البرمجية coding assistants والمترجمات translators ومحركات البحث search engines. كما تستخدم البيانات الصوتية في تطبيقات متنوعة تشمل تصنيف الصوتيات، والتعرف على الصوت، والتعرف على الكلام، والتحليل الصوتي، ويمكن وسم الملفات الصوتية للتعرف على كلمات معينة مثل "يا سيري" أو "Hey Siri"، وحتى تصنيف أنواع مختلفة من الأصوات، أو تحويل الكلام المنطوق إلى كلمات مكتوبة. إن العديد من نماذج التعلم الآلي هي نماذج متعددة multimodal أي أنها نماذج قادرة على تفسير والتعامل مع البيانات من مصادر مختلفة بشكل متزامن، فيمكن للسيارات ذاتية القيادة جمع معلومات بصرية مثل إشارات المرور والمارين في الطريق وتجمع بيانات صوتية مثل صوت أبواق السيارات، مما يتطلب وسمًا متعددًا multimodal labeling حيث يقوم الواسمون البشريون بجمع ووسم أنواع مختلفة من البيانات بطريقة تراعي العلاقات والتفاعلات بين تلك الأنواع. من المهم اختيار الطريقة الأنسب لوسم البيانات قبل الشروع في بناء النظام الخاص بنا، وقد كان الوسم البشري للبيانات سابقًا هو الطريقة المتبعة، ولكن مع التقدم الهائل في التعلم الآلي ازدادت إمكانيات الأتمتة مما جعل العملية أكثر كفاءة وأقل تكلفةً، ولكن تجدر الإشارة أنه وعلى الرغم من تحسن دقة أدوات الوسم الآلية فإنها لاتزال غير قادرة على مواكبة الدقة والاعتمادية التي يوفرها البشر. لذا يلجأ المختصون عادة لأسلوب مختلط يتضمن مشاركة البشر والبرامج الآلية في عملية وسم البيانات، حيث تستخدم برامج آلية لتوليد الوسوم الأولية ثم تجري مراجعتها وتدقيقها وتصحيحها بواسطة الواسم البشري، وتضاف الوسوم المصححة إلى مجموعة بيانات التدريب لتحسين دقة وأداء البرنامج الآلي، وهذا يضمن الحفاظ على مستوى جيد من الدقة والتناسق وهو أكثر الاستراتيجيات شيوعًا في وسم البيانات. اختيار مكونات نظام وسم البيانات تبدأ عملية وسم البيانات بخطوة تجميع البيانات وتخزينها، حيث تجمع البيانات إما بشكل يدوي باستخدام أساليب مثل المقابلات الشخصية والاستبيانات واستطلاعات الرأي أو بشكل آلي مثل استخلاص البيانات من الإنترنت web scraping. في حال عدم امتلاكك للموارد الكافية لجمع البيانات على نطاق واسع فيمكن الاعتمدا على مجموعات البيانات مفتوحة المصدر المتوفرة على منصات مثل كاجل Kaggle أو مستودع مجموعات البيانات الخاص بجامعة كاليفورنيا ايفرين UCI repository أو بحث جوجل لمجموعات البيانات Google dataset search أو جت هاب GitHub فكلها مصادر جيدة، بالإضافة لمصادر البيانات المصنعة باستخدام نماذج رياضية لتحاكي البيئات الحقيقة، ولتخزين هذه البيانات يمكنك تأجير مساحات تخزينية من مزودي خدمات سحابية مثل جوجل أو مايكروسوفت حتى تتوسع حسب احتياجاتك، فبشكل نظري يمكنهم توفير مساحة تخزين غير محدودة مع توفير ميزات مدمجة تزيد من التأمين، ولكن إذا كنت تعمل مع بيانات شديدة السرية وتحتاج للامتثال لقوانين وأنظمة معينة مثل مثل قانون حماية البيانات العامة GDPR فحلول التخزين المحلية هي الخيار المناسب. يمكنك أن تبدأ في وسم البيانات فور أن تنتهي من تجميعها، وتعتمد عملية الوسم بشكل رئيسي على نوع البيانات، ولكن في العموم تحدد كل نقاط الاهتمام في البيانات وتصنف باستراتيجية إبقاء الإنسان مشاركًا في العملية، وتوجد العديد من المنصات المتاحة التي تبسط هذه العملية المعقدة، وبعضها مفتوح المصدر مثل Doccano و LabelStudio و CVAT ومنصات تجارية مثل scale data engine و labelbox و Supervisely. تُراجَع الوسوم بعد إنشائها بواسطة فريق ضمان الجودة لضمان الدقة والتناسق وحل أي تناقضات موجودة في الوسوم أو اختلافات في تقرير الوسم من خلال الطرق اليدوية مثل تقرير الأغلبية أو اللجوء للمعايير أو استشارة خبراء في هذا التخصص، ويمكن تخفيف التناقضات بطرق آلية مثل استخدام نماذج إحصائية مثل Dawid-Skene لجمع الوسوم المختلفة من عدة مصادر في وسم واحد معتمد أكثر، فور الاتفاق على الوسوم بواسطة ذوي الصلة تعد الحقائق مطلقة يمكن استخدامها لتدريب نماذج التعلم الآلي، بعد التأكد من أن الوسوم دقيقة ومتسقة، تصبح هذه الوسوم حقائق ثابتة يمكن استخدامها لتدريب نماذج تعلم الآلة. هنالك أيضًا أدوات مفتوحة المصدر وأخرى تجارية تساعدنا في مراجعة الوسوم والتحقق من الجودة وتدقيق البيانات، قد تكون الأدوات التجارية أكثر تطورًا وتوفر ميزات إضافية مثل التدقيق الآلي، ونظام إدارة المراجعات، والموافقة عليها أو رفضها وأدوات تعقب لمعايير الجودة. مقارنة بين أدوات وسم البيانات تُعد الأدوات مفتوحة المصدر نقطة بداية جيدة، فعلى الرغم من محدودية وظائفها وميزاتها مقارنة بالأدوات التجارية فإن غياب رسوم الترخيص يمثل ميزة مهمة للمشاريع الصغيرة، وتقدم الأدوات التجارية وسم أولي مدعوم بالذكاء الاصطناعي ويمكن تعويض هذه الميزة في الأدوات مفتوحة المصدر عن طريق دمجها مع نموذج تعلم آلي خارجي. الاسم أنواع البيانات المدعومة إدارة سير العمل تأكيد الجودة دعم التخزين السحابي ملاحظات إضافية استديو الوسم النسخة العامة Label Studio Community Edition نصوص، صور، صوتيات، مقاطع فيديو، بيانات زمنية نعم لا التخزين السحابي لجوجل، التخزين السحابي لمايكروسوفت أزور تحتوي النسخة المجانية على مجموعة واسعة من الميزات، ولكن النسخة المدفوعة الخاصة بالشركات أكثر احترافية سي في أيه تي CVAT صور ومقاطع فيديو نعم نعم التخزين السحابي لجوجل، التخزين السحابي لمايكروسوفت أزور يدعم LiDAR وهو نظام لقياس المسافات ووسم المجسمات المكعبة ثلاثية الأبعاد 3D Cuboid، بالإضافة إلى وسم الأوضاع المختلفة لهيكل مبسط من نقاط مفصلية في جسد الإنسان ويمكن استخدامه لتخمين وقفته أو حركته دوكانو Doccano نصوص وصور وملفات صوتية نعم لا التخزين السحابي لجوجل مصمم لوسم النصوص ڤيا VIA (VGG Image Annotator) صور وملفات صوتية ومقاطع فيديو لا لا لا يعتمد على المتصفح ميك سينس MakeSense.AI صور لا لا لا يعتمد على المتصفح توفر المنصات مفتوحة المصدر العديد من الميزات المطلوبة لمشاريع وسم البيانات ولكن المشاريع المعقدة لتعلم الآلة تتطلب ميزات متقدمة مثل الأتمتة والقابلية للتوسع وتتاح هذه الميزات الإضافية في المنصات التجارية، بالإضافة لمزايا تأمينية والدعم الفني ومزايا مٌسّاعدة في عملية الوسم باستخدام نماذج التعلم الآلي وشاشة التقارير والرسومات البيانية التحليلية كل هذه الميزات تجعل المنصات التجارية تستحق الزيادة في التكلفة. الاسم أنواع البيانات المدعومة إدارة سير العمل تأكيد الجودة دعم التخزين السحابي ملاحظات إضافية Lablbox نصوص، صور، مقاطع فيديو، ملفات صوتية، HTML نعم نعم التخزين السحابي لجوجل، التخزين السحابي لمايكروسوفت أزور توفر المنصة فرقًا متخصصة في الوسم وفي المجالات المرتبطة بالبيانات من خلال خدمة Boost Supervisely صور، مقاطع فيديو، بيانات ثلاثية الأبعاد مجمعة من عدة مستشعرات 3D sensor fusion، الصور الطبية بصيغة DICOM نعم نعم التخزين السحابي لجوجل، التخزين السحابي لميكروسوفت أزور بيئة متكاملة مفتوحة للدمج مع مئات التطبيقات المبنية على محرك التطبيقات الخاص بهم، يدعم LiDAR و RADAR وهي أنظمة لقياس البعد واكتشاف الأجسام بالإضافة إلى الصور الطبية متعددة الشرائح أو المستويات Scale AI Data Engine النصوص، الصور، ملفات الصوت، مقاطع الفيديو، البيانات ثلاثية الأبعاد المجمعة من عدة مستشعرات 3D sensor fusion، الخرائط نعم نعم التخزين السحابي لجوجل، التخزين السحابي لمايكروسوفت أزور يوفر أدوات متخصصة في قطاعات وصناعات محددة SuperAnnotate النصوص، الصور، الملفات الصوتية، مقاطع الفيديو، PDF ،HTML نعم نعم التخزين السحابي لجوجل، التخزين السحابي لميكروسوفت أزور يوفر فرق وسم متعددة اللغات وخبراء متخصصين في مجالات مختلفة وإذا كنا بحاجة لميزات خاصة لا تتوفر في الأدوات المتاحة فيمكننا في هذه الحالة بناء منصة وسم محلية نقرر من خلالها ما هي البيانات التي سندعمها وما هي تنسيقاتها ونحديد أنوع الوسوم المستخدمة، كما يمكننا تصميم وبناء ميزات مثل الوسم الأولي ومراجعة الوسوم وتأكيد الجودة وأدوات لإدارة سير العمل، ولكن تكلفة بناء وتشغيل منصة تضاهي المنصات التجارية تكلفة باهظة لأغلب الشركات. يعتمد الاختيار في النهاية على عدة عوامل، مثلًا إن لم تكن الأدوات المتاحة من خلال الأطراف الخارجية تناسب متطلبات المشروع أو إذا كانت البيانات سرية فحينها سيكون بناء منصة مخصصة محليًا هو الحل الأمثل، بينما يمكن لمشاريع أخرى أن تستفيد من نظام مختلط فالمهام الأساسية للوسم تُنفَّذ بواسطة الأدوات التجارية بينما الميزات المخصصة يمكن تطويرها محليًا ودمجها مع المنصات الخارجية. ضمان الجودة والأمان في أنظمة وسم البيانات يشمل نظام وسم البيانات العديد من المكونات التي تجعله معقدًا فهو يتعامل مع كميات هائلة من البيانات ومستويات مختلفة من البنية التحتية الحاسوبية وسياسات مختلفة وأنظمة سير عمل متعددة الطبقات والمستويات، كل هذا يجعل من عملية تشغيل هذه المكونات معًا بشكل سلسل مهمة مليئة بالتحديات وقد تؤثر على جودة وسم البيانات وفعاليته بالإضافة لمخاطر الأمان والخصوصية الموجودة في كل المراحل التي تمر بها العملية. تحسين دقة وسم البيانات تسرع الأتمتة من عملية الوسم ولكن الاعتماد المفرط على الأدوات المؤتمتة لوسم البيانات يمكن أن يقلل من دقة العملية التي تتطلب وعيًا بالسياق والمجال أو قدرة على الحكم الموضوعي وهذه قدرات لا يستطيع حاليًا أي نظامٍ برمجي تقديمها، لذا من المهم وضع توجيه لعملية الوسم بشكل بشري واكتشاف الاخطاء ومعالجتها لضمان جودة وسم البيانات. كما يمكن تقليل الأخطاء في عملية الوسم بتوفير مجموعة من التوجيهات والإرشادات الشاملة، فمثلًا ينبغي أن تعرف كل التصنيفات الممكنة والتنسيقات المتعامل معها، وينبغي أن تكون هذه الإرشادات مفصلة خطوة بخطوة وتتضمن حلولًا للحالات المتطرفة أو الخاصة، كما ينبغي أن تتوفر مجموعة من الأمثلة التي توضح كيفية التعامل مع نقاط الاهتمام الواضحة وغير الواضحة في البيانات. يمكننا أيضًا تجميع آراء عدد من الواسمين المستقلين عن نفس نقطة الاهتمام في البيانات ومقارنة نتائجهم فهذا من شأنه أن يؤدي إلى درجة أعلى من الدقة. فالاتفاق بين الواسمين Inter-annotator-agreement أو ما يعرف بمعيار IAA اختصارًا هو معيار مستخدم لقياس درجة الاتفاق هذه، أي أن نقطة الاهتمام في البيانات التي تحصل على أرقام منخفضة لهذا المعيار تتطلب عملية مراجعة لتقرير الوسم الأنسب لها. كما يساهم تتبع واكتشاف الأخطاء بشكل كبير في تحسين دقة الوسوم، وكشف الأخطاء وهذا يمكن أن ينفذ آليًا باستخدام برامج مثل كلين لاب Cleanlab حيث تجري مقارنة للبيانات الموسومة باستخدام القواعد المعرفة مسبقًا لإكتشاف أي أخطاء أو اختلافات، فبالنسبة للصور يمكن اكتشاف التداخل بين مستطيلات التحديد bounding boxes آليًا، بينما في النصوص يمكن اكتشاف الوسوم المفقودة أو التنسيقات الخاطئة، وتجري مراجعة جميع الأخطاء بعد ذلك من قبل فريق ضمان الجودة، كما يمكن الاستعانة بالذكاء الاصطناعي الذي توفره العديد من المنصات التجارية لاكتشاف الأخطاء التي تحدد الأخطاء المحتملة باستخدام نماذج تعلم آلي مدربة مسبقًا على بيانات موسومة، بعد تحديد ومراجعة نقاط الاهتمام في البيانات وتقرير الوسم الأصح يضاف لبيانات التدريب الخاصة بالنموذج لتحسين دقته من خلال عملية التعلم. يوفر تتبع الأخطاء تقييمًا في غاية الأهمية ويُحسّن عملية الوسم من خلال التعلم المستمر الذي يجري بتتبع عدة معايير مفتاحية مثل دقة الوسم ودرجة الإجماع بين الواسمين، فإن كان هناك مهام معينة تكثر فيها أخطاء الواسمين فينبغي تحديد الأسباب المؤدية لهذه الأخطاء، وتوفر العديد من المنصات التجارية أدوات مبنية بها تساعد على المراقبة والتقييم من خلال الرسومات البيانية التفاعلية التي توضح سجل الوسم وتوزيع الأخطاء، ويمكن تحسين الأداء بتعديل المعايير والإرشادات لتوضيح كيفية التعامل مع الإرشادات غير الواضحة وتحسين القواعد التي تساعد في اكتشاف الأخطاء. التعامل مع التحيز وضمان العدالة تعتمد عملية وسم البيانات بشكل مكثف على الحكم والتفسير الشخصي، مما يشكل تحديًا على الواسمين ليقومو بوسم البيانات بشكل عادل وغير متحيز حتى عندما تكون البيانات غير واضحة، فمثلًا عند تصنيف النصوص يمكن أن تكون بعض العبارات والمشاعر مزاحًا أو سخرية ومن السهل أن يساء فهمها، ومثالٌ آخر في تصنيف تعابير الوجه التي يمكن أن يصنفها البعض على أنه وجه حزين والبعض الآخر يراه وجه يشعر بالملل، لذا فنسبية التصنيف أو الوسم تفتح الباب أمام التحيز أو الخطأ، ويمكن أن تكون مجموعة البيانات نفسها منحازة اعتمادًا على المصدر أو التركيب السكاني أو وجهة نظر جامعها ويمكن أن تكون غير ممثلة للمجتمع، وتدريب نماذج التعلم الآلي على بيانات منحازة يمكن أن يؤدي إلى توقعات خاطئة مثل تشخيص خاطئ للمرض بسبب تحيز البيانات الطبية المستخدمة للتدريب. لتقليل التحيز في عملية الوسم ينبغي أن يكون فريق الواسمين وفريق تأكيد الجودة من خلفيات متنوعة، فالوسم المزدوج والمتعدد يمكن أن يقلل من تأثير التحيز الناتج عن الأفراد، وعلى البيانات المستخدمة في التدريب أن تعكس العالم الحقيقي بتمثيل متوازن للتركيبة السكانية والجغرافية ويمكن جمع البيانات من مصادر واسعة التنوع وإضافة بيانات مخصوصة لمواجهة أي تحيز موجود في المصادر الأولية للبيانات، بالإضافة لذلك يمكنها أن تقلل طرق تعزيز وزيادة البيانات data augmentation مثل قلب الصور وإعادة صياغة النصوص من التحيز وتزيد تنوع البيانات بشكل مصطنع، فقلب الصورة مثلًا يُمكّن النموذج من تعلم التعرف على الكائنات بالصورة بغض النظر عن زاوية العرض مما يقلل التحيز لزاوية دوران الصورة، وإعادة صياغة النصوص تعرض النموذج لطرق أخرى للتعبير عن المعلومات مما يقلل التحيز تجاه صياغة أو كلمات معينة. كما يمكن أن تقلل الرقابة الخارجية من التحيز الموجود في عملية الوسم، وذلك من خلال دعوة فريق خارجي من المختصين بالمجال وعلماء البيانات وخبراء تعلم الآلة لتقييم سير العمل والإشراف على مراجعة وسم البيانات، وتقديم النصائح والاقتراحات التي تساعد على تحسين عملية الوسم وتقليل التحيز. خصوصية وأمان البيانات تتضمن مشروعات وسم البيانات في الغالب بيانات سرية أو خاصة لذا ينبغي أن تحتوي جميع المنصات على ميزات تضمن السرية والأمان للبيانات مثل التشفير والمصادقة المتعددة للتحكم بوصول المستخدمين. فمن أجل حماية خصوصية البيانات ينبغي أن يتم حذف البيانات الشخصية أو جعلها مجهولة الهوية، بالإضافة لذلك ينبغي تدريب كل فرد في فريق الوسم على أفضل ممارسات تأمين البيانات مثل استخدام كلمات مرور قوية وتفادي مشاركة البيانات غير المقصود. كما ينبغي أن تخضع منصات وسم البيانات للقوانين واللوائح المنظمة والتي تشمل اللائحة الشاملة لحماية البيانات GDPR وقانون كاليفورنيا لخصوصية المستخدم CCPA بالإضافة إلى قانون نقل التأمين الصحي والمساءلة HIPAA، وإخضاع المنصات التجارية للمراجعة والإشراف الخارجي والالتزام بمبادئ الثقة الخمسة وهي: الأمان والإتاحة والشفافية والموثوقية والخصوصية. مستقبل نظام وسم البيانات تحدث عملية وسم البيانات في الكواليس بالنسبة للمستخدم النهائي ولكنها ذات دور محوري في تطوير نماذج التعلم الآلي وأنظمة الذكاء الاصطناعي لذلك ينبغي أن يكون نظام الوسم قابلًا للتوسع ليواكب أي تغير في المتطلبات. تُحدَّث منصات الوسم التجارية ومفتوحة المصدر بانتظام لدعم الاحتياجات النامية لوسم البيانات، لذلك ينبغي على أنظمة الوسم المطورة محليًا أن تبني بطريقة تجعل تحديثها أمرًا سلسًا، فالتصميم المعتمد على الوحدات والمكونات القابلة للتبديل بدون التأثير على باقي النظام تٌسهّل عملية التحديث والتطوير، على سبيل المثال يمكن لتوفر ميزة دمج أنظمة وسم البيانات مع مكتبات وأطر عمل مفتوحة المصدر أن تضيف نوعًا من التكييف والتأقلم، حيث يمكن تحديثها وتطويرها باستمرار مع تطور المجال. كما توفر الحلول المبنية على خدمات الحوسبة السحابية ميزة ملحوظة للمشاريع الضخمة في وسم البيانات والتي لا يمكن أن توفرها الأنظمة المُدارة ذاتيًا، فالمنصات السحابية قابلة للتوسع آليًا في تخزينها وفي قدراتها الحاسوبية مما يقلل من الحاجة للتطويرات المكلفة في البنية التحتية. وينبغي أيضًا توسيع قدرة فريق العمل المسؤول عن وسم البيانات مع نمو حجم مجموعات البيانات، وتدريب الواسمين الجدد بسرعة على وسم البيانات بدقة وبفعالية. والتمتع بالمرونة في سد الاحتياجات في قوة العمل باستخدام خدمات الوسم المُدارة أو التعاون مع واسمين مستقلين، وينبغي أن تكون عملية التدريب والضم للفريق قابلة للتوسع في المكان واللغة وأوقات العمل. الخلاصة تعرفنا في مقال اليوم على أسس وسم البيانات لنماذج تعلم الآلة ووجدنا أن المفتاح الرئيسي لتحسين أداء ودقة نموذج التعلم الآلي هو جودة البيانات الموسومة التي ندرب النموذج عليها، وتوفير الأنظمة المختلطة التي تجمع بين البشر والأدوات المؤتمتة في وسم البيانات لتتيح للذكاء الاصطناعي تحسين الطريقة التي يعمل بها والحصول على نتائج أكثر كفاءة وفعالية. ترجمة وبتصرف لمقال Architecting Effective Data Labeling Systems for Machine Learning Pipelines لكاتبه Reza Fazeli اقرأ أيضًا معالجة الصور باستخدام لغة بايثون Python استكشف مصطلحات الذكاء الاصطناعي التوليدي تعرف على أفضل أطر عمل الذكاء الاصطناعي لمشاريع تعلم الآلة أفضل ممارسات هندسة المُوجِّهات Prompt Engineering: نصائح وحيل وأدوات1 نقطة
-
نوضح في هذا المقال مجموعة من النصائح المفيدة للمطورين للاستفادة المثلى من الذكاء الاصطناعي التوليدي الذي أعاد تشكيل الطريقة التي يكتب بها المطورون ومهندسو البرمجيات شيفراتهم البرمجية، واستطاعت هذه التقنية الحديثة التي غزت العالم من بضع سنوات فقط أن تنال شعبية كبيرة وتستخدم في العديد من المجالات. الذكاء الاصطناعي التوليدي ومستقبل البرمجيات كشف تقرير State of DevOps لعام 2023 أن 60% من المساهمين في الاستبيان استخدموا الذكاء الاصطناعي في تحليل البيانات وتوليد الأكواد البرمجية وتحسينها، بالإضافة لتعليم أنفسهم مهارات وتقنيات جديدة، ويكتشف المطورون طرقًا جديدة باستمرار لاستخدام هذه الأدوات التي تتطور بشكل متسارع. كما زعمت شركة Cognition Labs المتخصصة في تطوير تقنيات الذكاء الاصطناعي في ربيع عام 2024 أن منتجها يمكنه أن يستبدل المطورين ومهندسي البرمجيات في حل المشكلات البرمجية المطروحة على جت هاب Github issues بنسبة 13.86% وقد لا يبدو هذا الرقم مبهرًا للوهلة الأولى لكنه سيكون كذلك عندما تعرف أن أفضل أداء مسجل لهذه المهمة في عام 2023 لم يتجاوز نسبة حله 1.96%، ينبغي ملاحظة أن إمكانيات ديفين Devin AI تم تضخيمها لتبدو أكثر من الواقع فتحقيق النسبة المزعومة يتطلب إشراف بشري، كما ولم يستطيع تنفيذ المهام على مواقع العمل الحر، لذا حتى الآن لا يمكننا أن نعتبر ديفين Devin AI ذكاء اصطناعي يضاهي البشر في البرمجة، ولكن مع تطور الذكاء الاصطناعي يمكن أن نرى الأدوات المماثلة تتحسن. كما زعمت شركة Cognition Labs في ربيع 2024، منتجها ديفين Devin AI يمكنه أن يستبدل المطورين ومهندسي البرمجيات في حل المشكلات البرمجية المطروحة على جت هاب Github issues بنسبة 13.86% وقد لا يبدو هذا الرقم مبهرًا للوهلة الأولى لكنه سيكون كذلك عندما تعرف أن أفضل أداء مسجل لهذه المهمة في عام 2023 لم يتجاوز نسبة 1.96%، وتجدر الإشارة هنا لأن إمكانيات ديفين Devin AI لم تكن في الواقع كما زعمت الشركة فتحقيق هذه النسبة كان يتطلب إشرافًا بشريَّا، كما ولم يستطيع ديفن تنفيذ المهام على مواقع العمل الحر، لذا لا يمكننا حتى اللحظة اعتبار ديفين Devin AI ذكاء اصطناعي يضاهي البشر في البرمجة، ولكن مع تطور الذكاء الاصطناعي السريع يمكن أن يتحقق ذلك. هذا يدفعنا للتساؤل كيف يتأقلم مهندسو البرمجيات مع تقنيات وبرامج الذكاء الاصطناعي التي يمكنها كتابة برمجيات أخرى؟ ما الذي ستؤول له مسؤوليات مهندسي البرمجيات مع مرور الوقت في عالم تستحوذ فيه هذه التقنية بشكل تدريجي على كتابة الأكواد؟ هل سنستغني عن العنصر البشرية أم ستكون هناك حاجة دائمة لمهندس برمجيات متخصص يوجه السفينة؟ نناقش في الفقرات التالية كل هذه التساؤلات ونوضح آراء خبراء في المجالات التقنية المتنوعة مثل تطوير الويب وتطوير الواجهات الخلفية backend وتعلم الآلة والطريقة التي يستخدمون بها الذكاء الاصطناعي التوليدي لصقل مهاراتهم وتعزيز إنتاجيتهم في أعمالهم اليومية. ونسلط الضوء على النقاط التي يبرع بها الذكاء الاصطناعي التوليدي ونقاط الضعف التي يعاني منها، وكيف يمكن للمطورين الآخرين تحقيق الاستفادة القصوى من الذكاء الاصطناعي التوليدي في تعزيز إنتاجيتهم خلال عملية تطوير البرمجيات، وما هو مستقبل صناعة البرمجيات في ظل صعود تقنيات الذكاء الاصطناعي التوليدي. كيف يستخدم المطورون الذكاء الاصطناعي التوليدي من أشهر برامج الذكاء الاصطناعي التي يعتمد عليها المطورون في تطوير البرمجيات نذكر شات جي بي تي ChatGPT و جت هاب كوبايلوت Github Copilot، حيث يوفر شات جي بي تي ChatGPT للمستخدمين واجهة نصية تفاعلية يمكن للمستخدم من خلالها توجيه النماذج اللغوية الضخمة Large Language Model باستخدام الموجهات المناسبة فهذه النماذج لديها معرفة شاملة عن مواضيع متنوعة من بينها الأكواد البرمجية بمختلف لغات البرمجة وأطر عملها ومكتباتها، وتنبع هذه المعرفة من التدريب الذي خضعت له هذه النماذج فقد جرى تدريبها على كم هائل من البيانات مفتوحة المصدر المتوفرة على الإنترنت، ويدمج كوبايلوت Copilot مباشرة في بيئة التطوير المتكاملة IDE ليوفر للمطور قدرات متقدمة في إكمال الأكواد البرمجية واقتراح الأسطر القادمة لكتابتها، فقد تدرّب على كل الأكواد مفتوحة المصدر المتوفرة على Github، وجمع هاتين الأداتين معًا من شأنه مساعدة المطور في حل أي مشكلة تقنية يمكن أن تواجهه. الذكاء الاصطناعي في دور الخبير والمتدرب يعتمد المطورون بشكل متزايد على أدوات الذكاء الاصطناعي التوليدي لتحسين سير العمل وتبسيط العمليات البرمجية، حيث تُظهر هذه الأدوات مرونة وفعالية في تأدية دورين أساسيين الأول دور الخبير الذي يقدم الإرشاد والدعم الفني، والثاني دور المتدرب الذي ينجز المهام التكرارية والبسيطة. وفيما يلي دراسة حالة لمطورين خبراء بتخصصات مختلفة يوضح كل منهم كيف اعتمد على الذكاء الاصطناعي التوليدي لمساعدته في تأدية مهامه. الحالة الأولى مطور ويب كامل عند سؤال مطور ويب كامل full-stack web developer ومهندس ذكاء اصطناعي بخبرة تتجاوز 20 عامًا عن استخدام الذكاء الاصطناعي صرّح بما يلي: "أنا استخدم كوبايلوت copilot يوميًا، فهو يتنبأ بسطر الكود الذي أنوي كتابته أغلب المرات بدقة كبيرة. ويمكن للذكاء الاصطناعي أن يؤدي وظفتين، الأولى زميل خبير يساعد في العصف الذهني بمستوى يكافئ خبراتك وتفكيرك، والثانية كمطور مبتدئ يتولى المهام البسيطة والمتكررة في كتابة الكود". وقد وضح أنه استفاد من الواجهة البرمجية OpenAI API لما هو أبعد من مجرد التنبؤ بسطر الكود، حيث طوّر إضافة مفتوحة المصدر لتطبيق أوبسيدين Obsidian وهو تطبيق مشابه لنوشن Notion مع ميزات مختلفة، إذ تستعمل هذه الإضافة الواجهة البرمجية التي تشغل كلًا من شات جي بي تي ChatGPT و كوبايلوت Copilot، وتسمح للمستخدمين بإنشاء شخصيات مخصصة بالذكاء الاصطناعي والتفاعل معها. ويرى المطور أن مهام الذكاء الاصطناعي التوليدي الأكثر أهمية هي تلك التي تطلب وقتًا أطول لإكمالها يدويًا، ويمكن بسهولة التأكد من صحتها ودقتها في وقت قصير مثل تحويل الملف من تنسيق إلى آخر، كما يبرع جي بي تي GPT في توليد نصوص تلخص وظائف الأكواد البرمجية، مع ذلك مازلنا بحاجة لمطور خبير يمكنه فهم التفاصيل التقنية لهذا التلخيص. الحالة الثانية مطور تطبيقات iOS عند سؤال مطور تطبيقات جوال خبير عن استخدام الذكاء الاصطناعي في عمله أفاد بأنه لاحظ تحسنًا ملحوظًّا في سير عمله اليومي منذ أن دمج الذكاء الاصطناعي التوليدي به، فهو يستخدم شات جي بي تي ChatGPT وكوديوم Codeium وهو تطبيق ينافس Copilot لحل المشكلات البرمجية وصرح بما يلي: "يساعدني الذكاء الاصطناعي التوليدي في حل 80% من المشكلات البرمجية بسرعة وفي تفادي هذه المعرقلات في غضون ثواني، دون الحاجة لوقت طويل من الذهاب للبحث والعودة للتجربة من أجل إيجاد حل المشكلات المعقدة". فهو يرى أن هذه أدوات الذكاء الاصطناعي تلعب دور الخبير الموضوعي والمتدرب الذي لا يكل ولا يمل من تنفيذ المهام البسيطة والمتكررة، وتساعده في تفادي المهام المرهقة واليدوية عند كتابة الكود مثل الأنماط المتكررة في الكود أو إجراء تحسين هيكلية الكود البرمجي وإعادة تصميمه Refactoring أو هيكلة طلبات الواجهات البرمجية API بشكل صحيح، فقبل ظهور هذه الأدوات، كانت المشكلات غير المألوفة تشكل عائقًا كبيرًا أمام التقدم في المهام. ويظهر هذا التحدي بشكل خاص عند العمل على مشاريع تتطلب التعامل مع واجهات برمجية APIs أو أطر عمل غير مألوفة تحتاج لبذل جهد ذهني إضافي لفهم كيفية حل مشكلاتها. الحالة الثالثة مهندس تعلم آلة أشار مهندس تعلم آلة خبير لأهمية التأكد من صحة الأكواد المهمّة وخلوّها من الأخطاء قبل تشغيلها فهذه خطوة أساسية وضرورية جدًّا، ولن يكون من الحكمة مطلقًا نسخ الكود الذي يولده الذكاء الاصطناعي، ولصقه مباشرةً وافتراض أنه يعمل بشكل صحيح، فحتى لو تغاضينا مشكلة الهلوسة التي قد يعاني منها الذكاء الاصطناعي سيكون هناك في الغالب أسطر من الكود تحتاج للتعديل من طرف المطور البشري، فالذكاء الاصطناعي لا يمتلك السياق الكامل للمشروع ولا يدري ما هي أهدافه وتفاصيله. وأسدى نصيحة للمطورين الراغبين في تحقيق الاستفادة القصوى من الذكاء الاصطناعي التوليدي في كتابة الأكواد، بعدم إعطائه الكثير من المسؤوليات المهمة مرة واحدة، فهذه الأدوات تعمل جيدًا عندما نعطيها مهامًا محددة ومعرّفة بوضوح وتتبع أنماط الحل المتوقعة والشائعة، ففي حال أعطيناه مهام أكثر تعقيدًا أو مهام عامة غير محددة فهذا سيتسبب بجعله يعاني من الهلوسة ويعطي نتائج غير صحيحة. الذكاء الاصطناعي كمعلم شخصي وباحث يمكن استخدام الذكاء الاصطناعي التوليدي في تعلم أدوات ولغات برمجية جديدة، على سبيل المثال أشار مهندس تعلم الآلة أنه تمكن من تعلم أساسيات تيرافورم Terraform في غضون ساعة باستخدام GPT-4، وذلك من خلال كتابة موجهات لكتابة الأكواد البرمجية ثم شرحها، ثم طلب منه بعض التغيرات على الكود وتوفير العديد من المزايا والخواص والتحقق فيما إذا كانت قابلة للتطبيق، ويعقّب أنه وجد هذه الطريقة في التعلم أسرع وأكثر فعالية من محاولة اكتساب نفس القدر من المعلومات من خلال البحث في المتصفح أو قراءة الدروس التعليمية. وللتأكيد، تنجح هذه الطريقة مع المطورين الذين يمتلكون خبرة تقنية مسبقة ومعرفة بكيفية سير الأمور فقط، فهؤلاء يمكنهم اكتشاف الحالات التي يخطئ فيها النموذج. لكن ستبدأ هذه الأدوات في الفشل عندما نظن أنها ستكون دقيقة 100% لذا لا يمكننا أن نعتمد عليها بالمطلق وبثقة عمياء، وعندما نواجه مهام حساسة لا تتحمل أي نسبة خطأ فيجب علينا التحقق دومًا من صحة الكود بدمج طرق بحث المتصفح التقليدية ومخرجات الذكاء الاصطناعي للتأكد من صحة المعلومات من مصادر موثوقة. ويشدد المطورون الخبراء على ضرورة استخدام النسخ الأحدث من النماذج، فالنسخ الأحدث لها قدرة أفضل على فهم المنطق المعقد مقارنة بالنسخ القديمة فوفقًا لأوبن أيه آي OpenAI يوفر GPT-4 على سبيل المثال دقة أكبر متجاوزًا سلفه بمقدار 40%، ولذا يجب على من يرغب في استخدام أحد نماذج الذكاء الاصطناعي كمعلم شخصي أن يستخدم النسخ الأحدث فهو قادر على دعم الحقائق التي يولدها بالمصادر التي يمكنك تصفحها والتأكد منها مما يقلل من احتمال النتائج الخاطئة. يفيد استخدام الذكاء الاصطناعي التوليدي أيضًا لدراسة الواجهات البرمجية APIs الجديدة وفي العصف الذهني لإيجاد حلول للمشكلات التي تواجه المطورين، فعند استغلال قدرات النماذج اللغوية الضخمة بأقصى حد يمكن تقليل وقت البحث ليقارب الصفر بفضل نافذة السياق الضخمة لتلك النماذج. نافذة السياق Context Window هي حجم المعلومات التي يمكن للنموذج استيعابها والعمل عليها في لحظة معينة، فبينما يستطيع البشر التفكير في بضعة أمور مرتبطة بالسياق في نفس الوقت كحد أقصى، يمكن للنماذج اللغوية الضخمة معالجة عدد متزايد من الملفات المصدرية والوثائق في نفس الوقت، يمكن توضيح الفرق من خلال مثال قراءة كتاب فنحن البشر يمكننا أن نتصفح صفحتين في ذات الوقت بحد أقصى ويمكننا أن نعتبر أن هذا هو حجم نافذة السياق البشرية، ولكن بالنسبة للنماذج اللغوية الضخمة فهي تمتلك القدرة على رؤية كل صفحات الكتاب بشكل متزامن، لقد غير هذا بشكلٍ جزي طريقتنا في تحليل البيانات وإجراء البحوث. "بدأ ChatGPT بنافذة سياق تتسع 3000 كلمة، وقد وصل حاليًا باستخدام نموذج GPT-4 إلى دعم نافذة سياق تصل إلى 100 ألف كلمة، بينما يمتلك Gemini سعة استيعاب ما يصل إلى مليون كلمة، وهي سعة تجعل البحث عن كلمة أو جملة تطبيقًا فعليًا لمثال البحث عن إبرة في كومة قش، ويستطيع جيميناي التعامل مع هذه النافذة الضخمة من السياق بدقة عالية. كان بالإمكان سابقًا إعطاء النسخ الأولية من هذه الأدوات أجزاء ومقاطع من الكود كسياق من المشاريع التي تعمل عليها، وأصبح من الممكن لاحقًا إعطاؤها ملف اقرأني README مع الكود المصدري للمشروع بالكامل فأصبح إرفاق المشروع كاملًا كنافذة سياق قبل طرح الأسئلة أمرًا في غاية البساطة." نصائح لتحسين استخدام أدوات الذكاء الاصطناعي التوليدي يمكن للذكاء الاصطناعي التوليدي تعزيز إنتاجية المطورين في كتابة الأكواد والتعلم والبحث شريطة التعامل معه بشكل صحيح، فبدون سياق كافي، يصبح ChatGPT أقرب للهلوسة ولتوليد ردود غير مناسبة، وقد أظهرت دراسة تجريبية لخصائص إجابات ChatGPT على أسئلة Stack Overflow أن ردود GPT 3.5 في الأسئلة البرمجية تحتوي على معلومات خاطئة بنسبة 53%، ويمكن للسياق الخاطئ أن يكون أسوأ من عدم وجود سياق على الإطلاق، فإن قدمت حلًا ضعيفًا لمشكلة ما في الكود على أنها حل جيد سيفترض ChatGPT أن بإمكانه توليد الردود القادمة على بناء على هذا الأساس الضعيف. ولتحقيق الاستفادة القصوى من أدوات الذكاء الاصطناعي التوليدي، ينبغي أن نحدد له المهام بوضوح، ونقدم المعلومات التقنية ذات الصلة، وحدد الدور المطلوب منه والنتائج المتوقعة، كما يفيد توفير السياق للنموذج في تحسين في أداءه بشكل ملحوظ. لكن احذر من إعطاء معلومات خاصة أو حساسة للنماذج العامة، فمن الممكن أن تستخدم هذه البيانات للتدريب عليها وغالبًا ستفعل ذلك، وقد وجد الباحثون أن من الممكن استخراج مفاتيح واجهات برمجية ومعلومات خاصة باستخدام كوبايلوت Copilot و بعض النماذج الأخرى نتيجة لخطأ المطورين بتركهم تلك المعلومات والمفاتيح السرية غير مشفرة في تطبيقاتهم، ووفقًا لتقرير آي بي ام IBM عن تكلفة تسريبات البيانات فإن السبب الأكبر عالميًا لحدوث تسريبات للبيانات هي بيانات الاعتماد السرية التي تستخدم لتوثيق هوية المستخدم credentials والتي يتم تسريبها. استراتيجيات هندسة الموجهات لتوليد حلول أفضل تؤثر طرق استخدام الموجهات prompts مع الذكاء الاصطناعي التوليدي على جودة الردود المستلمة. لقد أصبحت هذه الطرق محورية للغاية لدرجة أنها أصبحت مجالًا فرعيًا للدراسة يُسمى هندسة الموجهات Prompt engineering، وهو يركز على كتابة وتحسين الموجهات بهدف توليد مخرجات عالية الجودة. تعتمد هندسة الموجهات على فكرة أن الذكاء الاصطناعي يستفيد بشكل أكبر من السياق وينتج إجابات أفضل عندما يعطى وصفًا دقيقًا ومحددًا للرد المطلوب. على سبيل المثال، بدلاً من توجيهه بطلب عام مثل "اكتب قائمة"، يمكننا كتابة مُوّجه أدق مثل: "اكتب قائمة مرقمة ورتب عناصرها حسب الأهمية". فهذه التوجيهات المحسّنة تساعد الذكاء الاصطناعي في فهم المطلوب بشكل أفضل وتوليد استجابات مفيدة. تطبق هندسة الموجهات العديد من الممارسات والحيل لتستخرج من النموذج أفضل الردود الممكنة، ومن هذه الطرق: تجربة تقنيات التعلم بصفر محاولة zero-shot وبمحاولة واحدة one-shot وببضعة محاولات few-show: فهذه لتحدد كيفية التعامل مع المهام دون تدريب مخصص أو مع تدريب محدود، فيمكنك أن لا توفر للنموذج أية أمثلة أو توفر له مثال واحد أو بضعة أمثلة للحصول على المطلوب، الفكرة هي توفير أقل سياق ممكن للنموذج مع التركيز على المعرفة المسبقة لدى النموذج وقدراته المنطقية دون الحاجة إلى تدريب مكثف توجيه النموذج من خلال تسلسل الأفكار Chain-of-thought prompting: فهذا الأسلوب يساعد الذكاء الاصطناعي في تقديم إجابات دقيقة من خلال شرح خطوات تفكيره بشكل منطقي قبل الوصول إلى الإجابة النهائية ويمكننا من فهم الكيفية التي توصل من خلالها لهذه الإجابات التوجيه التكرار وهو يعني ضرورة توجيه الذكاء الاصطناعي للمخرجات المطلوبة وتحسين نتائجه من خلال تعديل الموجهات بشكل متتابع وتكراري. التوجيه السلبي أي إخبار الذكاء الاصطناعي بما لا ينبغي عليه فعله، فمثلًا يمكننا توجيه لعدم توليد محتوى معين ومن المهم أيضًا إلى جانب ما سبق توجيه أنظمة الدردشة الآلية الذكية لجعل ردودها مختصرة فغالبية الردود التي يولدها GPT حشو لا فائدة منه، ويمكننا اختزالها عن طريق موجه prompt لتوليد ردود مختصرة، وينصح أيضاً بطلب تلخيص الموجهات والتعليمات التي طلبناها منها لتضمن أنه يدرك جيدًا ما تريده. وعند استخدام النماذج اللغوية الضخمة للمساعدة في تحسين الموجهات بنفسها من المفيد اختيار عينة لم يقم فيها النموذج بتنفيذ المطلوب كما نرغب والاستفسار منه عن سبب توليد هذا الرد، حيث يحسن هذا من صياغة الموجّهات في المرات التالية، ويمكنك في الواقع أن تطلب من النموذج اللغوي الضخم اقتراح التعديلات التي يمكن تنفيذها على الموجه للحصول على الردود التي تتوقعها. كما أن المهارات البشرية في التواصل لازالت مفيدة حتى عند التعامل مع الذكاء الاصطناعي، فالذكاء الاصطناعي يتعلم بقراءة النصوص البشرية، لذا الالتزام يمكن الالتزام ببعض القواعد المستخدمة في التواصل البشري فهي فعالة أيضًا من قبيل كن مهذبًا، أو كن واضحًا واحترافيًا. تواصل معه كأنك المدير. على سبيل المثال يمكن توجيه الذكاء الاصطناعي المتقمص لدور مراجع باستخدام نصوص الموجهات التالية الذي يوضح للذكاء الاصطناعي من هو وما المتوقع منه من خلال كتابة سلسلة الموجهات التالية: "أنت ذكاء اصطناعي يراجع الأكواد، ومصمم لتدقق وتراجع وتحسن ملفات الأكواد المصدرية، ودورك أن تتصرف كناقد يراجع الكود التي يوفرها المستخدم ويقترح التحسينات المطلوبة عليها، فأنت خبير في تحسين جودة ملف الكود بدون تغيير وظيفته. ينبغي أن تكون محترفًا في تعاملك مع المستخدم وأن تكون طريقة كلامك مهذبة ومهنية، وأن تكون مراجعتك بناءةً وتوفر شرحًا واضحًا للتحسينات المقترحة، وعليك منح أولوية للتعديلات التي تصلح الأخطاء، موضحًا أي هذه التعديلات اختياري وأيها غير اختياري. هدفك مساعدة المستخدم بتحسين جودة الكود الخاص بهم تحسينًا لا يمكنك بعده أن تجد أي شيء قابل للتطوير أبعد من ذلك، وعند وصولك لهذا المستوى وضح للمستخدم أنه لا يمكنك إيجاد شيء لتحسينه مشيرًا إلى جهوزية الكود للتشغيل أو الاستخدام. استلهم عملك من مبادئ أنماط التصميم البرمجية واعتمده كدليل أساسي في تصميم البرمجيات، عليك أن تجتهد في تطبيق ثلاثة مبادئ في الأكواد التي تراجعها وتحللها مشددًا على ضمان صحة الكود وتنسيقه الجيد وتصميمه المتقن. امنح أولوية لصحة الكود وللتحسينات، فضع دومًا التعديلات الأهم والأخطر أولًا قبل التعديلات الأقل أهمية. وقسم مراجعتك إلى ثلاثة أقسامٍ رئيسية وهي التنسيق والتصحيح والتحليل ويحتوي كل قسم على قائمة من التحسينات الممكنة تحت عنوان القسم. اتبع هذه التعليمات: ابدأ بمراجعة تنسيق الكود، مكتشفًا أي خطأ في المسافات أو محاذاة العناصر النصية للكود، فتحسن الكود من الناحية الجمالية وتجعله أسهل في القراءة تاليًا، ركز على صحة الكود وخلوه من الأخطاء النصية والوظيفية أخيرًا، أجري تحليل عالي المستوى للكود، باحثًا عن طرق لتحسين معالجة الأخطاء error handling والتعامل مع الحالات الخاصة بالإضافة لضمان جعل الكود موثقًا ويعمل بكفاءة وقابلاً للصيانة والتحديث يمكن القول أن هندسة الموجهات Prompt engineering فن أكثر من كونها علم، وهي تتطلب قدرًا معينًا من التجربة والمحاولة والخطأ للخروج بالمطلوب، إذ تفرض طبيعة تقنيات معالجة اللغات الطبيعية NLP عدم وجود حل واحد يناسب جميع المشكلات، تمامًا كما أن محادثتك مع أشخاص مختلفين تتطلب اختيارًا مختلفًا للكلمات، والموازنة بين الوضوح والتعقيد والإيجاز والإسهاب، فلكل هذا تأثير على فهم الآخرين لاحتياجاتك ولقصدك." مستقبل الذكاء الاصطناعي التوليدي في تطوير البرمجيات بعد تطور تقنيات الذكاء الاصطناعي التوليدي وأدواته ظهرت ادعاءات ومزاعم عديدة تفترض أن المهارات البرمجية ستصبح عديمة النفع، وأن الذكاء الاصطناعي سيلغي عمل المطورين ويكون قادرًا على بناء تطبيق كامل من الصفر، ولن تشكل معرفة المطورين وقدرتهم على كتابة الأكواد البرمجية أي فرق، وردًا على هذه المزاعم والافتراضات فإنه من الصعب حدوث هذا على الأقل في المدى القريب، فالذكاء الاصطناعي التوليدي لا يمكنه أن يكتب تطبيقًا مكتاملًا لنا، ولا زال يعاني من قصور في تصميم واجهات المستخدم، فلا يوجد حتى الآن أي أداة ذكاء اصطناعي حاليًا قادرة على تصميم واجهات تطبيق تتناسب مع الهوية البصرية الموجودة بالفعل. وهذا القصور ليس نتيجة لنقص المجهود في هذا المجال، فقد ظهرت منصة v0 التي تقدم خدماتها عبر السحابة كواحدة من الأدوات المتخصصة في عالم واجهات المستخدمين المولدة بالذكاء الاصطناعي، ولكنها مازالت مقتصرة على استخدام أكواد رياكت ومكوناتها الموجودة في شاد سي إن shadcn ui components، ويمكن أن تكون نتائجها النهائية مفيدة للنماذج الأولية من المشروع ولكنها تحتاج لمطور واجهة ماهر ليستطيع أن يبني واجهات تناسب الهوية البصرية، وعلى ما يبدو لازالت هذه التقنيات بحاجة لمزيد من التطوير قبل أن تنافس الخبرة البشرية. وقد أصبح تطوير البرمجيات كمنتج منتشرًا بكثرة اليوم، فالمطورون الآن مطالبون بفهم مشكلات العملاء واستخدام الأكواد لحلها بدلاً من مجرد كتابة الكود. وهذا التحول يعني أن الدور التقليدي للمطورين يتغير، ويجب عليهم التركيز على تحقيق أهداف الأعمال بدلاً من مجرد تنفيذ المهام البرمجية. وبالرغم أن هذه التحديات قد تكون صعبة للبعض، فإن تبني تقنيات مثل الذكاء الاصطناعي التوليدي يمكن أن يمنح المطورين ميزة تنافسية. الخلاصة يمكن أن نخلص من حالات الاستخدام والنقاشات الواردة في هذا المقال إلى أن الذكاء الاصطناعي سيظل بحاجة مستمرة للخبراء في توجيه واختبار مخرجاته، ولن يكون بديلاً كاملاً للمطورين المحترفين. لكن في الوقت ذاته، سيصبح أداة قوية لتعزيز إنتاجية المطورين، مما يستدعي الاستعداد لمخاطر استخدامه في تطوير البرمجيات بشكل آمن وفعال. فقد تُرك الحبل على الغارب لإنتاج الكثير من النماذج اللغوية الضخمة، ويبدو أن استخدام الذكاء الاصطناعي سيكون جزءًا أساسيًا في تطوير البرمجيات ولا يمكن تجاهله، لذا، يجب على المؤسسات المعنية تجهيز فرقها بأدوات جديدة لزيادة الإنتاجية ولتوضيح المخاطر الأمنية المرتبطة باستخدام الذكاء الاصطناعي في سير العمل. ترجمة -وبتصرف- لمقال Increase Developer Productivity With Generative AI: Tips From Leading Software Engineers لكاتبه Sam Sycamore اقرأ أيضًا مقدمة إلى الذكاء الاصطناعي التوليدي Generative AI كل ما تود معرفته عن دراسة الذكاء الاصطناعي استكشف مصطلحات الذكاء الاصطناعي التوليدي مستقبل الذكاء الاصطناعي1 نقطة
-
1 نقطة
-
استحوذ الذكاء الاصطناعي في السنوات الأخيرة على الساحة التقنية وأثر على كل الصناعات والقطاعات، بداية من المجالات الإبداعية وصولًا إلى القطاعات المالية، مدفوعًا بالتطور متسارع الخطى للنماذج اللغوية الضخمة Large Language models أو اختصارًا LLMs مثل GPT من شركة OpenAI وجيميناي Gemini من شركة جوجل، فصارت هذه النماذج جزءًا أساسيًا من الأدوات التي يستخدمها مهندسو البرمجيات. لا يستطيع الجيل الحالي من النماذج اللغوية الضخمة استبدال مهندسي البرمجيات بالطبع، ولكنه يمكنه مساعدتهم في مهام عديدة مثل تحليل الأكواد البرمجية، واكتشاف الأخطاء وتتبعها، وإجراء المهام البسيطة الروتينية. نحاول في هذه المقالة تبسيط تعقيدات استخدام النماذج اللغوية الضخمة واستخدامها في تطبيق عملي لتوليد كود بايثون قادر على التفاعل مع تطبيق خارجي. ما هي النماذج اللغوية الضخمة Large Language Models النماذج اللغوية الضخمة هي نماذج تعلم آلي دُربت على كميات ضخمة من البيانات النصية بهدف فهم وتوليد اللغة البشرية، يبنى النموذج اللغوي الضخم عادة باستخدام المحولات transformers والمحولات هي نوع من الشبكات العصبية الاصطناعية تُستخدم بشكل أساسي في معالجة اللغات الطبيعية مثل الترجمة أو الإجابة على الأسئلة وتستخدم أيضًا في تطبيقات مثل معالجة الصور. المميز في المحولات أنها تعتمد على آلية الانتباه الذاتي، مما يجعلها قادرة على التركيز على أجزاء معينة من المدخلات، وهي تقوم على آلية تسمى الانتباه الذاتي self-attention mechanism والتي تعني أن سلسلة المدخلات تعالج بشكل متزامن بدلًا من معالجتها كلمة كلمة، وهذا يتيح للنموذج تحليل جمل كاملة، ويحسن قدرتها على فهم السياق والمعاني الضمنية للكلمات، وفعالة في توليد نصوص قريبة جدًا من الأسلوب البشري. وكلما زاد عمق الشبكة العصبية الاصطناعية كلما أمكنها تعلم معاني أدق في اللغة، ويتطلب النموذج اللغوي الضخم الحديث كمية هائلة من بيانات التدريب وقد يحتوي مليارات المعاملات parameters وهي عناصر تتغير بالتدريب على البيانات ليتأقلم النموذج على المهمة المراد تعلمها، فزيادة عمق الشبكة يؤدي إلى تحسن في المهام مثل الربط بالأسباب reasoning، على سبيل المثال من أجل تدريب GPT-3 جُمعَت بيانات من المحتوى المنشور في الكتب والإنترنت بلغ حجمها 45 تيرابايت من النصوص المضغوطة، ويحتوي النموذج ما يقارب 175 مليار معامل كي يتمكن من تحقيق هذا المستوى من المعرفة. وقد ظهرت عدة نماذج لغوية ضخمة حققت تقدمًا ملحوظًا بالإضافة إلى GPT-3 و GPT-4، نذكر منها على سبيل المثال نموذج PaLM 2 من جوجل ونموذج LLaMa 2 من ميتا. ونظرًا لاحتواء بيانات تدريب هذه النماذج على أكواد برمجية بلغات مختلفة فقد أصبحت هذه النماذج اللغوية الضخمة قادرة على توليد الأكواد البرمجية لا المحتوى النصي فحسب، إذ تستطيع النماذج اللغوية الحديثة تحويل الأوامر أو الموجهات prompts المكتوبة باللغة الطبيعية إلى كود بمختلف اللغات والتقنيات، وعلى الرغم من ذلك لن تحقق الاستفادة المرجوة من هذه الميزات القوية إذا لم تمتلك الخبرة التقنية الكافية. فوائد ومحدويات الأكواد المولدة بنماذج اللغات الضخمة يتطلب حل المشكلات والمهام المعقدة في الغالب تدخل المطورين البشريين، لكن يمكن للنماذج اللغوية الضخمة أن تعمل كمساعدات ذكية للمطورين وتكتب الأكواد لمهام أقل تعقيدًا، وتسهل التعامل مع المهام التكرارية مما يعزز الإنتاجية ويقلل وقت التطوير في مراحل هندسة البرمجيات خصوصًا في المراحل الأولى من تطوير النماذج الأولية للبرمجيات، كما يمكن أن توفر النماذج اللغوية الضخمة مساعدة كبيرة في تصحيح الكود البرمجي وتشرحه وتساعدنا على إيجاد الأخطاء التي قد يصعب علينا ملاحظتها كبشر. يجدر التوضيح أن أي أكواد مولدة باستخدام النماذج اللغوية الضخمة تعتبر نقطة للبداية وليس منتجًا نهائيًا وينبغي دائمًا مراجعة الأكواد المولدة واختبارها. والوعي بمحدوديات نماذج اللغات الضخمة، فهي تفتقد لقدرات حل المشكلات والتفكير المنطقي والإبداعي الذي يميزنا كبشر، إضافة إلى احتمال عدم تعرض النماذج للتدريب الكافي الذي يؤهلها للتعامل مع مهام متخصصة مناسبة لنوع معين من المستخدمين أو أطر العمل غير مفتوحة المصدر، وبالتالي يمكن لهذه النماذج اللغوية الضخمة أن تساعد بشكل كبير ولكن سيبقى دور المطور البشري أساسيًا في عملية التطوير بالطبع. توليد كود برمجي باستخدام نموذج لغوي ضخم: استخدام الواجهة البرمجية للطقس من أهم مميزات التطبيقات الحديثة قدرتها على التعامل مع مصادر خارجية، إذ يمكن للمطورين إرسال طلبات لهذه المصادر الخارجية من خلال واجهة برمجة التطبيقات API وهي مجموعة من التعليمات أو البروتوكولات التي توفر طريقة موحدة لتواصل التطبيقات فيما بينها. وتتطلب كتابة الكود البرمجي الذي يستخدم واجهة برمجة التطبيقات قراءة متعمقة لتوثيقات هذه الواجهة، حيث تشرح التوثيقات كافة المتطلبات والتسميات المصطلح عليها، والوظائف والعمليات التي تدعمها، وتنسيق البيانات المرسلة والمستلمة والمتطلبات الأمنية. ويمكن للنموذج اللغوي الضخم تسريع هذه العملية في حال توفرت لديه المعلومات المطلوبة. حيث يمكن للنموذج اللغوي المساعدة بتوليد الكود البرمجي اللازم لإرسال طلب لواجهة برمجة التطبيقات. وفيما يلي نوضح كيف يمكننا توجيه ChatGPT ليولد كود بلغة البرمجة بايثون لطلب بيانات الطقس من خلال الواجهة البرمجية لتطبيق للطقس OpenWeather API، وسنوضح كيف يمكننا تفادي أخطاء استخدام دوال قديمة deprecated لم تعد مدعومة، وكيف يمكننا إرسال الطلب من خلال الواجهة البرمجية OpenAI API ونختبر تأثير المعاملات على سلوك وأداء النموذج. ملاحظة: انتبه إلى تكلفة استخدام الواجهة البرمجية للطقس OpenWeather API فهي مجانية لأول 1000 طلب فقط في اليوم الواحد. تحويل موجهات تشات جي بي تي لطلبات API يتطلب المثال الذي سنطبقه عرض درجة الحرارة الحالية ووصف حالة الطقس. دعنا نوضح كيف يمكن أن يساعدنا شات جي بي تي ChatGPT في كتابة الكود، سنكتب موجهًا prompt على النحو التالي: سيولد شات جي بي تي ChatGPT هذا الكود ردًا على الموجه السابق: import requests # استبدل "YOUR_API_KEY" بمفتاح OpenWeather API الخاص بك. api_key = "YOUR_API_KEY" api_url = "http://api.openweathermap.org/data/2.5/weather" # اسم المدينة التي ترغب في الحصول على معلومات الطقس لها. city_name = "London" # المعلمات المطلوبة لإرسال الطلب إلى واجهة API. params = { 'q': city_name, # اسم المدينة 'appid': api_key, # مفتاح API 'units': 'imperial' # استخدم metric للدرجة المئوية أو imperial للفهرنهايت } try: # إرسال طلب GET إلى واجهة API. response = requests.get(api_url, params=params) # التحقق مما إذا كان الطلب ناجحًا if response.status_code == 200: # قراءة وتحليل البيانات المستلمة بصيغة JSON. weather_data = response.json() print("بيانات الطقس لمدينة:", city_name) print("درجة الحرارة:", weather_data['main']['temp'], "°F") print("الوصف:", weather_data['weather'][0]["description"]) else: # طباعة رسالة خطأ إذا لم يكن الطلب ناجحًا. print("خطأ:", response.status_code, response.text) except Exception as e: # التعامل مع أي أخطاء أثناء تنفيذ الكود. print("حدث خطأ:", e) يمكن أن تلاحظ أنه على الرغم من عدم تحديد الموقع المطلوب للواجهة البرمجية الخاصة بالطقي، فإن الكود المولد يتضمن متغير يسمى city_name وهو مضبوط على قيمة افتراضية هي لندن ويمكن تعديها حسب الطلب، ولا تنسى بالطبع استبدال YOUR_API_KEY بالمفتاح الخاص بك لواجهة برمجة التطبيق للطقس OpenWeather API. كي نتمكن من اختبار الكود المولد، نحتاج لأن يكون مفسر interpreter لغة بايثون مثبت على جهازنا، بعد تثبيته يمكن تشغيل الكود محرر أكواد مثل فيجوال ستوديو كود Visual Studio Code أو باستخدام سطر الأوامر Terminal. إليك بيانات الطقس لمدينة لندن المستلمة من الواجهة البرمجية: بيانات الطقس لمدينة: London °F درجة الحرارة: 50.4 الوصف: overcast clouds سنحتاج غالبًا لتخزين البيانات التي حصلنا عليها من الواجهة البرمجية، وبالتالي سنحتاج لتحويل البيانات إلى تنسيق محدد مثل XML أو CSV أو استخدام أوامر لغة الاستعلام البنيوية SQL لحفظ البيانات في جداول قاعدة البيانات، لذا سنطلب من النموذج اللغوي مساعدتنا في هذه المهمة عن طريق توليد الكود المناسب لكل تنسيق، فمثلا يمكننا إضافة الجملة التالية للموجه السابق: سيعيد ChatGPT نفس الكود السابق، ولكن مع إضافة بعض جمل الاستيراد وتحديث تنسيق المخرجات: # استيراد المكتبات اللازمة import requests import json from datetime import datetime # رابط الواجهة البرمجية api_url = "http://api.openweathermap.org/data/2.5/weather" # إعداد المعاملات المطلوبة للطلب params = { 'q': 'الرياض', # اسم المدينة 'appid': 'مفتاح_API_الخاص_بك', # استبدل بمفتاح API الخاص بك 'units': 'imperial' # تحديد وحدة القياس (الفهرنهايت) } try: # إرسال طلب GET إلى الواجهة البرمجية response = requests.get(api_url, params=params) # التحقق من نجاح الطلب if response.status_code == 200: # تحويل الاستجابة إلى صيغة JSON weather_data = response.json() # استخراج البيانات المهمة city = params['q'] # اسم المدينة temperature = weather_data['main']['temp'] # درجة الحرارة weather_description = weather_data['weather'][0]['description'] # وصف الطقس update_date = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S') # وقت التحديث # إنشاء أمر SQL لإدخال البيانات في قاعدة البيانات sql_command = f"INSERT INTO current_weather (city, temperature, weather_description, update_date) VALUES ('{city}', {temperature}, '{weather_description}', '{update_date}')" # طباعة أمر SQL print("أمر SQL للإدخال في قاعدة البيانات:") print(sql_command) else: # طباعة رسالة خطأ في حال فشل الطلب print("حدث خطأ في الطلب:", response.status_code, response.text) except Exception as e: # طباعة رسالة خطأ في حال حدوث استثناء print("حدث خطأ أثناء تنفيذ البرنامج:", e) وسيؤدي تنفيذ الكود السابق لتوليد الأمر التالي بلغة SQL: INSERT INTO current_weather (city, temperature, weather_description, update_date) VALUES ('London', 53.37, 'broken clouds', '2024-02-06 04:43:35') ولكن سنرى تحذيرًا ينبهنا إلى عدم استخدام الدالة ()utcnow حيث أنها مهملة deprecated ولن تكون متوفرة في إصدارات قادمة وهذا قد يتسبب في تعطل الكود الخاص بنا في التحديثات المستقبلية: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). وكي نمنع ChatGPT من استخدام دوال مهملة deprecated، سنضيف التوجيه التالي: بعد إضافة هذا السطر، سيبدل ChatGPT الدالة ()utcnow بدالة أخرى كما يلي: # استخدم الكائن timezone-aware لتحديث التاريخ update_date = datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S') يعيد لنا هذا الكود مجددًا أمرًا بلغة SQL ويمكن اختباره في أي محرر استعلامات Query editors لنظام إدارة قواعد البيانات DBMS. وفي حال كنت تولد هذا الكود ضمن تطبيق ويب تقليدي فمن المتوقع تشغيل أمر SQL مباشرة بعد توليده من خلال الواجهة البرمجية وتحديث بيانات قاعدة البيانات في الزمن الحقيقي. استخدام الواجهة البرمجية OpenAI API بدلًا من شات ChatGPT تملك العديد من نماذج اللغات الضخمة واجهة برمجة تطبيقات API تمكّن المطور من التفاعل مع النماذج اللغوية الضخمة برمجيًا ودمجها بسلاسة داخل تطبيقاته، سنستفيد من هذه الواجهات البرمجية لإنشاء مساعد ذكي بشكل افتراضي، يوفر لنا هذا المساعد ميزات عديدة مثل إكمال الكود أو توليده من الصفر أو إعادة صياغته وتحسينه. ويمكن تحسين واجهات المستخدم وتخصيصها من خلال قوالب جاهزة من الموجهات Prompts templates، كما يتيح لنا دمج النماذج اللغوية الضخمة برمجيًا جدولة المهام أو تفعيلها عند تحقق شروط معينة ويسهل أتمتة المساعد الذكي الذي نعمل عليه. سننفذ في هذا المثال نفس المهمة السابقة وهي طلب معلومات الطقس باستخدام بايثون للتفاعل برمجيًا مع الواجهة البرمجية OpenAI API وتوليد الكود من خلال واجهة المستخدم بدلًا من كتابة موجّه في ChatGPT مباشرة. بداية علينا تثبيت الواجهة البرمجية OpenAI API باستخدام الأمر التالي: pip install openai الآن لنتمكن من استخدام الواجهة البرمجية OpenAI API نحتاج لمفتاح الواجهة API key وهو غير مجاني ويتطلب دفع رسوم. بعدها، يمكننا استيراد المكتبة openai وإرسال نفس الموجه المستخدم من قبل مع إزالة الجزء الخاص بتوليد أوامر SQL، كما نحدد النموذج المستخدم GPT-3.5 من خلال الكود التالي: import openai openai.api_key = "YOUR_API_KEY" # استبدله بمفتاح الواجهة البرمجية الخاص بك response = openai.chat.completions.create( model='gpt-3.5-turbo', max_tokens=1024, temperature=0.3, top_p=0.9, messages = [ {'role': 'system', 'content': 'أنت مساعد ذكي قائم على الذكاء الاصطناعي.'}, {'role': 'user', 'content': "اكتب كود بلغة بايثون باستخدام مكتبة requests لإرسال طلب GET إلى واجهة OpenWeather API للحصول على بيانات الطقس، وذلك عبر نقطة الوصول التالية http://api.openweathermap.org/data/2.5/weather. يجب أن يتضمن الطلب مفتاح API الخاص بك ضمن الرابط باستخدام المعامل appid. يُتوقع أن تُعيد الواجهة البيانات بتنسيق JSON، ويجب على الكود استخراج درجة الحرارة من البيانات وإعادتها بوحدة الفهرنهايت ولا يستخدم أي دوال قديمة غير مستعملة"}, ] response_message = response.choices[0].message.content print(response_message ) سيولد النموذج اللغوي الضخم كود بايثون التالي، والذي يجلب درجات الحرارة لمدينة لندن: import requests # مفتاح الواجهة البرمجية ونقطة الوصول url = "http://api.openweathermap.org/data/2.5/weather" api_key = "YOUR_API_KEY" # معاملات الاستعلام params = { 'q': 'London,uk', # مثال على المدينة ورمز الدولة. 'appid': api_key } # إرسال طلب GET. response = requests.get(url, params=params) # التحقق مما إذا كان الطلب ناجحاً. if response.status_code == 200: # تحليل استجابة JSON. data = response.json() # طباعة درجة الحرارة بالدرجة المئوية. temperature = data['main']['temp'] - 273.15 print(f"درجة الحرارة في لندن هي {temperature:.2f}°C.") else: print(f"خطأ: {response.status_code}") لاحظ أننا أزلنا التعليمات الخاصة بتحديد درجات الحرارة بالفهرنهايت لذا لم يحدد النموذج اللغوي الضخم وحدة القياس عند طلب الواجهة البرمجية للطقس، ولكنه اختار حسابها رياضيًا بتحويل الوحدة من الكلفن إلى سلسيوس عند عرض النتائج. الاستفادة من معاملات النموذج اللغوي الضخم لتحقيق أقصى استفادة يمكننا ضبط بعض المعاملات عند استخدام الواجهة البرمجية لنماذج الذكاء الاصطناعي والنماذج اللغوية الضخمة من أجل تعديل الردود المولدة منها، فهناك معاملات يمكنها تحديد مستوى العشوائية والإبداع في الردود المولدة كالمعامل Temperature، ومعاملات يمكنها التحكم بتكرار النصوص المولدة مثل Repetition Penalty، بينما تؤثر معاملات أخرى على النص اللغوي المولد مما يساعد على التحكم في جودة الكود الناتج. في الكود السابق، يمكننا ضبط قيم معاملات GPT في السطر السابع على النحو التالي: max_tokens=1024, temperature=0.3, top_p=0.9, المعامل الوصف التأثير على الكود المولد Temperature يعني درجة الحرارة إذ يتحكم هذا المعامل في عشوائية الردود المولدة، أو درجة الإبداعية في الردود، فالقيمة العالية لهذا المعامل تزيد عشوائية الردود المولدة، بينما القيمة المنخفضة تولد ردودًا واقعية، القيم الممكنة لهذا المعامل بين 0 و 2 والقيمة الافتراضية 0.7 أو 1 بحسب النموذج المستخدم. ستولد القيمة المنخفضة لهذا المعامل كودًا آمنًا يتبع الأنماط والهياكل المكتسبة خلال عملية التدريب، بينما ستولد القيمة العالية ردودًا أكثر تميزًا وغير اعتيادية مما يرفع من احتمالية الأخطاء والتناقضات البرمجية. Max token يحدد هذا المعامل الحد الأقصى لعدد الوحدات النصية tokens المولدة في الاستجابة. إذا ضبطته بقيمة صغيرة، فقد يتسبب ذلك في أن تكون الاستجابة قصيرة جدًا، بينما إذا تم ضبطته بقيمة كبيرة جدًا، قد يؤدي ذلك لاستهلاك عدد كبير من الوحدات النصية المتاحة، مما يزيد من تكلفة الاستخدام يجب أن يضبط المعامل على قيمة عالية بما يكفي لتغطية جميع الأكواد التي تحتاج إلى توليدها. ويمكنك تقليله إذا كنت ترغب في توليد الكود فقط دون توفير شرح الكود المضاف من النموذج top_p يتحكم هذا المعامل في اختيار الكلمات التالية بتقليص نطاق الخيارات المتاحة. إذا منحناه القيمة 0.1 سيقتصر على أفضل 10% من الكلمات الأكثر احتمالاً، مما يزيد الدقة. وإذا منحناه القيمة 0.5 سيوسع الاختيار ليشمل أفضل 50%، مما يعزز التنوع. ويساعد في موازنة الدقة والإبداع في الردوع. عند ضبط المعامل بقيمة منخفضة، يصبح الكود المولد أكثر توقعًا وارتباطًا بالسياق، ويجري اختيار الاحتمالات الأكثر ترجيحًا بناءً على السياق الحالي. أما عند زيادة قيمته يزداد التنوع في المخرجات، مما قد يؤدي إلى توليد كود أقل ارتباطًا بالسياق وقد يتسبب في أخطاء أو توليد كود متناقض. frequency_penalty يعني عقوبة التكرار إذ يحدّ هذا المعامل من تكرار الكلمات والعبارات في ردود النموذج اللغوي الكبير. عند ضبطه على قيمة عالية، يقلل من تكرار الكلمات أو العبارات التي استخدمها النموذج سابقًا. أما عند ضبطه على قيمة منخفضة، فيسمح للنموذج بتكرار الكلمات والعبارات. حيث تتراوح قيم هذا المعامل من 0 إلى 2. تضمن القيمة العالية لهذا المعامل تقليل التكرار في الكود المولد، مما يؤدي لتوليد أكواد أكثر تنوعًا وإبداعًا. ومع ذلك، قد يؤدي ذلك إلى اختيار عناصر أقل كفاءة أو غير صحيحة. من ناحية أخرى، عند خفض قيمته، قد لا يستكشف طرقًا متنوعة للحل. presence_penalty يعني عقوبة التواجد ويرتبط هذا المعامل بالمعامل السابق فكلاهما يشجعان على التنوع والتفرد في الكلمات المستخدمة، حيث يعاقب المعامل السابق الوحدات النصية التي استخدمت عدة مرات في النص في حين يعاقب المعامل الحالي الوحدات النصية التي ظهرت من قبل بغض النظر عن مرات التكرار، يتلخص تأثير معامل عقوبة التكرار في أنه يقلل من تكرار الكلمات بينما يركز معامل عقوبة التواجد على استخدام كلمات جديدة بالكليّة، والقيمة الصغرى لهذا المعامل هي 0 أما القيمة العظمى فهي 2. له تأثير مشابه لعقوبة التكرار، فالقيمة العالية تشجع النموذج على استكشاف حلول بديلة، ولكن قد يصبح الكود المولد أقل كفاءة ومليء بالأخطاء، بينما تسمح القيمة المنخفضة بتكرار الكود مما يؤدي إلى كود أكثر كفاءة واتساقًا، خاصةً عند وجود أنماط متكررة. stop دور هذا المعامل هو تحديد نقطة التوقف في عملية توليد النصوص. عند ضبطه مع سلسلة معينة مثل "n/"، سيتوقف النموذج عن توليد النصوص بمجرد أن يصادف هذه السلسلة مما يساعد في التحكم بدقة في نهاية الرد المولد وتحديد متى يجب أن يتوقف النموذج عن إضافة المزيد من الكلمات. يمنع هذا المعامل النموذج من توليد أجزاء من الكود لا تتناسب مع السياق أو الوظيفة المطلوبة. يجب أن تكون سلسلة التوقف نقطة منطقية وواضحة لنهاية الكود، مثل نهاية دالة أو نهاية حلقة تكرارية، لضمان توقف النموذج عن توليد المزيد من الكود بشكل مناسب. لنختبر كيفية تأثير هذه المعاملات على توليد الكود، سنجرب تعديل معاملات عقوبة التكرار frequency_penalty وعقوبة التواجد presence_penalty . عند تهيئة عقوبة التكرار frequency_penalty بقيمة مرتفعة وهي 1.5،سينتج النموذج اللغوي الضخم كودًا إضافيًا ليلاقى التوقعات محاولًا تفادي تكرار المخرجات السابقة: # ... try: # إرسال طلب GET مع المعلمات والحصول على البيانات في تنسيق JSON. response = requests.get(url, params=params) if response.status_code == 200: weather_data = response.json() # طباعة بعض المعلومات المهمة من بيانات الطقس. print("المدينة:", weather_data['name']) print("درجة الحرارة:", weather_data['main']['temp'], "K") except requests.exceptions.RequestException as e: # التعامل مع أي خطأ حدث أثناء الطلب print("خطأ:", e) عند العمل مع الكود الذي يتعامل مع واجهة برمجية API من المهم أن نلاحظ أن النتائج قد تكون غير متوقعة. ففي الكود السابق، على الرغم من أن إضافة معالجة الأخطاء مفيدة، إلا أننا لم نطلب من النموذج توليد كود يتعامل مع جميع الأخطاء المحتملة بشكل دقيق. لهذا السبب، عند إرسال نفس الطلب مرة أخرى مع نفس المعاملات، قد نحصل على نتائج مختلفة تمامًا. ولضمان استقرار الكود ومعالجته للأخطاء بشكل صحيح، يجب إضافة موجه أولي initial prompt يوجّه النموذج لتوليد الكود مع معالجة الأخطاء بشكل مناسب. بهذا الشكل، يمكن ضمان أن الكود سيكون متسقًا ويعمل كما هو متوقع في جميع الحالات. يمكننا ضبط المعامل presence_penalty بقيمة عالية ولتكن 2.0 للحصول على تأثير مشابه، حيث يتفادى النموذج تكرار المخرجات السابقة ويرسل طلب جديد للواجهة البرمجية للطقس OpenWeather API من خلال دالة ممرًا لها مفتاح الواجهة البرمجية API key كمعامل كما يلي: import requests def get_weather(api_key): url = "http://api.openweathermap.org/data/2.5/weather" params = { 'q': 'London,uk', # مثال على المدينة ورمز الدولة. 'appid': api_key } response = requests.get(url, params=params) # إضافة سطر إرسال الطلب if response.status_code == 200: data = response.json() return data else: print("خطأ:", response.status_code) # استبدل "YOUR_API_KEY" بمفتاح الواجهة البرمجية الفعلي من OpenWeather. api_key = "YOUR_API_KEY" weather_data = get_weather(api_key) print(weather_data) إن إنشاء دالة برمجية مخصصة لطلب الواجهة البرمجية لتطبيق الطقس إضافة مفيدة للكود، ولكن تمرير مفتاح الواجهة من خلال الدالة أمر غريب، فمن المعتاد في أغلب حالات الاستخدام تمرير المدينة city كمعامل للدالة، وهنا يمكننا معالجة هذه المشكلة بتعديل الموجه الأولي. يتطلب ضبط قيم معاملات نماذج اللغة الضخمة الكثير من التجربة، فبعض النتائج تكون غير متوقعة وبعض التعديلات قد تبدو عديمة التأثير، فتعديل المعاملات لا يمتلك تأثيرًا موحدًا يضمن اتباع أفضل الممارسات في توليد الكود. دمج النماذج اللغوية الضخمة في ملفات الكود المصدري بمجرد أن يصبح الكود المولد باستخدام النموذج اللغوي الضخم محسنًا وجاهزًا للعمل، ستكون الخطوة التالية هي دمج الكود الناتج مع الأكواد البرمجية السابقة. لكن قد يؤدي نسخ الكود بشكل مباشر للكود الموجود سابقًا لمشكلات في تنظيم الكود وتنسيقها مما يصعب صيانة وتعديل الكود لاحقًا. يمكننا تبسيط هذه العملية بتحويل الكود إلى أجزاء قابلة لإعادة الاستخدام مثل دوال برمجية أو كائنات وأصناف برمجية، ويمكننا تحقيق هذا أيضًا باستخدام النموذج اللغوي الضخم ما دامت التعليمات المفصلة للقيام بهذا مرفقةً في الموجه Prompt، ويجب أيضاً تحديد مدخلات هذه الدوال والمخرجات المتوقعة منها. دعنا نجعل النموذج اللغوي الضخم ينشئ الكائن البرمجي weather الذي يحوي دالة get_weather ، من خلال إضافة الأوامر التالية للموجه: عندها سنحصل على كود بايثون التالي: import requests class Weather: def __init__(self, api_key): self.api_key = api_key self.temperature = None def get_weather(self, city): url = 'http://api.openweathermap.org/data/2.5/weather' params = { 'q': city, 'appid': self.api_key, 'units': 'imperial' # طلب درجة الحرارة بالفهرنهايت. } response = requests.get(url, params=params) data = response.json() if response.status_code == 200: self.temperature = data['main']['temp'] print(f"درجة الحرارة في {city} هي {self.temperature}°F.") else: print(f"خطأ: {data['message']}") # استبدل "YOUR_API_KEY" بمفتاح الواجهة البرمجية الفعلي من OpenWeather. api_key = "YOUR_API_KEY" weather = Weather(api_key) weather.get_weather('London') يولّد النموذج دالة قابلة للتشغيل بواسطة الكائن weather، ويمكننا دمج هذا الكائن بتطبيق آخر بكل سهولة، ولكن علينا معالجة الأخطاء التي قد تقع لضمان عدم فشل عمل التطبيق وعدم عرضه لبيانات حساسة أو سرية. اختبار التطبيق ومعالجة الأخطاء إن فشل طلبات واجهة البرمجة للتطبيق API أمر شائع في التطبيقات الحقيقية، فيمكن أن تفشل الطلبات لعدة أسباب، لذا لضمان الاعتمادية ينبغي أن يتضمن الكود حالات لمعالجة الأخطاء التي يمكن أن تقع لمنع فشل التطبيق الكامل، في أغلب الأمثلة السابقة كان الكود المولد بواسطة النموذج يحوي شرطًا يختبر رمز الحالة لبروتوكول نقل النص الفائق HTTP ، فالرمز 200 يعبر عن نجاح الطلب بينما أي رمز آخر يعبر عن فشل الطلب أو وجود خطأ ينبغي التعامل معه فيقوم الكود المولد بطباعته، ولكن هذا الشرط لا يأخذ في الاعتبار حالات أخطاء شائعة أخرى مثل انتهاء وقت الطلب timeout أو أخطاء نظام أسماء النطاقات DNS. لضمان الاعتمادية ينبغي أن يحوي الكود المولد آلية لمعالجة الأخطاء، مثل استخدام try-catch عند إجراء طلب من خلال واجهة برمجة التطبيق API. لذا أضفنا النص التالي للموجه السابق: ولّد هذا التوجيه كود بايثون يحتوي كلتلة try-catch تعالج الأخطاء المحتملة: class Weather: def __init__(self, api_key): self.api_key = api_key self.temperature = None def get_weather(self, city): try: # بناء عنوان URL للواجهة البرمجية باستخدام المدينة ومفتاح API المقدم. url = "http://api.openweathermap.org/data/2.5/weather" params = {'q': city, 'appid': self.api_key, 'units': 'imperial' # الحصول على درجة الحرارة بالفهرنهايت. } # إرسال طلب GET إلى الواجهة البرمجية. response = requests.get(url, params=params) # التحقق من حالة الاستجابة if response.status_code == 200: # تحليل الاستجابة بتنسيق JSON data = response.json() # استخراج درجة الحرارة بالفهرنهايت من الاستجابة. self.temperature = data['main']['temp'] else: # عرض وصف الخطأ إذا كانت حالة الاستجابة ليست 200. print(f'خطأ: {response.status_code} - {response.json()["message"]}') except requests.exceptions.RequestException as e: # التعامل مع أي استثناءات تحدث أثناء الطلب. print(f'خطأ: {e}') يعد الكود المولد بواسطة النموذج اللغوي الضخم نقطة بداية جيدة، لكنك ستحتاج في الغالب لتعديلات إضافية لتحصيصه وزيادة الوظائف التي يقوم به، على سبيل المثال من الممكن تسجيل الأخطاء التي تحدث وتنبيه المستخدم من أخطاء الإعدادات التي قد تشمل أخطاء في استيثاق الواجهة البرمجية API authentication error ويمكن للمطورين إضافة واجهة برمجية احتياطية في حالة تعطل الواجهة الأساسية. بمجرد أن يصبح الكود قادرًا على تأدية وظيفته كما ينبغي، فالخطوة التالية مهمة للتأكد من صموده عند التشغيل الفعلي، وينبغي اختبار كل الوظائف والحالات الممكنة للخطأ، ولضمان اعتمادية قوية يمكننا أتمتة عملية الاختبارات وتقييم الأداء من خلال قياس مؤشرات الأداء المختلفة مثل وقت التشغيل واستخدام ذاكرة الوصول العشوائي واستخدام الموارد الحاسوبية، ستساعدنا هذه المؤشرات على تحديد نقاط الخلل في النظام وتحسين الموجهات prompts وصقل fine-tune معاملات النموذج اللغوي الضخم. تطور نماذج اللغات الضخمة تطورت النماذج اللغوية الضخمة لكنها لن تستبدل الخبرة البشرية حاليًا، بل سيقتصر دورها على توليد الكود البرمجي مما يسرّع ويسهّل عملية التطوير كما أنها قادرة على توليد نسخ متنوعة من الكود مما يساعد المطور على اختيار أفضل خيار من بينها، كما يمكنها تولي إنجاز المهام البسيطة والتكرارية لزيادة إنتاجية المطورين، مما يتيح للمطورين التركيز على المهام المعقدة التي تتطلب معرفة متخصصة وتفكير بشري إبداعي. ترجمة-وبتصرٌّف-للمقال Using an LLM API As an Intelligent Virtual Assistant for Python Development اقرأ أيضاً دليل استخدام ChatGPT API لتحسين خدماتك عبر الإنترنت تعرف على مكتبة المحوّلات Transformers من منصة Hugging Face تلخيص النصوص باستخدام الذكاء الاصطناعي استخدام النماذج التوليديّة Generative models لتوليد الصور1 نقطة
-
وصولك إلى هذه المقالة يعني أنك تعاني من كثرة المصطلحات والمفردات اللغوية المستخدمة عند النقاش حول الذكاء الاصطناعي عمومًا AI التوليدي Generative AI على وجه الخصوص، فبعض هذه المصطلحات تستخدم بمفردات أجنبية وقد لا تكون ترجمتها الحرفية ذات دلالة كافية لفهم المعلومات التقنية التي تعبر عنها، لا داعي للقلق فعندما تنتهي من قراءة هذا المقال ستتمكن من فهم كافة المصطلحات والمفردات شائعة الاستخدام عند مناقشة الذكاء الاصطناعي التوليدي Gen AI والمشاركة في النقاشات الدائرة حول هذه التقنية الرائدة سواءً في عملك أو في أي مكانٍ آخر. لقد بدأ النمو المتسارع لتقنيات الذكاء الاصطناعي التوليدي Generative AI -أو Gen AI اختصارًا- يؤثر بشكل جليّ على نمط حياتنا فَـغير طريقة إنجازنا للمهام المختلفة، لذا كان لزامًا على كافة الأشخاص العاملين في المجال التقني اكتساب معرفة كافية بالمصطلحات الأساسية لهذا المجال، وفهم كيفية عملها كي لا يشعر بالتشتت والاستغراب عند سماع مصطلحات مثل نموذج الأساس Foundation Model أو النماذج اللغوية الضخمة Large Language Models أو مصطلح هندسة المُوجّهات Prompt engineering أو غيرها من مصطلحات الذكاء الاصطناعي الشائعة اليوم. سنبدأ في هذه المقالة بشرح المصطلحات الأساسية للذكاء الاصطناعي والمجالات المشتقة منه، ثم سنتدرج بعد ذلك لشرح المصطلحات المتقدمة بهذا المجال الرائد، وللسهولة سنصنف المصطلحات وفق ثلاثة تصنيفات على النحو التالي: أولًا: مصطلحات أساسية حول الذكاء الاصطناعي. ثانيًا: مصطلحات متقدمة في الذكاء الاصطناعي. ثالثًا: مصطلحات تتعلق بآلية عمل الذكاء الاصطناعي. أولًا: مصطلحات أساسية حول الذكاء الاصطناعي نشرح في القسم الأول المصطلحات الأساسية التالية حول الذكاء الاصطناعي ومجالاته المختلفة: الذكاء الاصطناعي (Artificial intelligence (AI تعلم الآلة (Machine Learning (ML الشبكات العصبية الاصطناعية (Artificial Neural Network (ANN التعلم العميق (Deep Learning (DL الذكاء الاصطناعي التوليدي (Generative AI (GAI نموذج الأساس (Foundation Model (FM نماذج اللغة الضخمة (Large Language Models (LLMs معالجة اللغات الطبيعية (Natural Language Processing (NLP النماذج المحولة Transformers Models النموذج مسبق التدريب المبني على المحولات (Generative Pretrained Transformer (GPT الذكاء الاصطناعي (Artificial intelligence (AI يمكن تعريف الذكاء الاصطناعي على أنه محاكاة الآلات لذكائنا البشري، الذكاء الاصطناعي يمكن أن يكون تطبيقًا صغيرًا مدمجًا في هاتفك، أو ربما نظام أكثر تعقيدًا وأكبر حجمًا يعمل على خوادمٍ سحابية تستخدمها شركة لاستضافة نظامها الذكي الذي يستخدمه ملايين الأشخاص، في كلتا الحالتين، يمتلك الذكاء الاصطناعي القدرة على القيام بالمهام والأنشطة التي كانت تتطلب في السابق ذكاءً بشرياً لإتمامها. تعلم الآلة (Machine Learning (ML تعلم الآلة هو تخصص فرعي من الذكاء الاصطناعي، ويستخدم كوسيلة لمنح الأنظمة الحاسوبية القدرة على التعلم من التجربة والبيانات باستخدام نماذج رياضية، يتحسن أداء هذه النماذج بمرور الوقت مع تعرض نموذج التعلم الآلي لمزيد من البيانات التي تُمكّنه من استخلاص الأنماط المتكررة التي يستخدمها النموذج في توقع نتائج تجاربٍ أخرى، هذا يخلق دورة مستمرة تُمكّن النماذج الآلية من التعلم والنمو والتطور دون الحاجة للتدخل البشري. الشبكات العصبية الاصطناعية (Artificial Neural Network (ANN الشبكات العصبية هي خوارزميات متفرعة من تعلم الآلة تستخدم في توجيه وتدريب الآلات على تعلم التعرف على الأنماط باستخدام شبكة مصممة لتحاكي طريقة عمل الشبكات العصبية البشرية في مخ الإنسان. باستخدام هذه الشبكات المكونة من طبقاتٍ يمكن أن تتصل ببعضها على التوالي أو التوازي أو بشكل ملتف وتتكون الطبقات من عدد من الخلايا العصبية الاصطناعية تدعى بالعصبون neuron، تصبح الآلات قادرة على التعامل مع مختلف المدخلات لتوليد أفضل الإجابات والنتائج الممكنة، وتكتسب هذه الآلات القدرة على التعلم من الأخطاء من أجل تحسين دقة النتائج. التعلم العميق Deep Learning يستخدم التعلم العميق الشبكات العصبية الاصطناعية من أجل اكتشاف الأنماط أو تحديدها أو تصنيفها، على نطاقٍ متنوع من البيانات، مثل البيانات النصية والمرئية والصوتية، فيمكنه تحديد ووصف العناصر الموجودة بالصورة، أو يمكنه تحويل ملف صوتي إلى ملفٍ نصّيٍ يحتوى الكلمات المنطوقة، ويمكن لخوارزميات التعلم العميق أن تصبح في غاية التعقيد عن طريق إضافة عدد مهول من طبقات الشبكات العصبية المتصلة بطرقٍ مختلفة تمكن الخوارزمية من اكتشاف الأنماط والعلاقات العميقة في البيانات. الذكاء الاصطناعي التوليدي Generative AI الذكاء الاصطناعي التوليدي Generative AI أو GAI اختصارًا ،هو تخصص فرعي من التعلم العميق وهو يعبر عن قدرة النموذج على توليد وإنتاج محتوى جديد لم يوجد من قبل، قد يكون هذا المحتوى صورة أو نصَا أو تسجيلات صوتية أو فيديو أو غير ذلك، ويحتاج توليد المحتوى من خلال الذكاء الاصطناعي إلى استخدام كميات هائلة من البيانات في مرحلة التدريب المسبق لنموذج الأساس Foundation Model حتى يكون النموذج قادراً على توليد مثل هذا المحتوى المشابه للبيانات الموجودة التى قد ينخدع البعض بها ويظن أنها من صنع الإنسان. نموذج الأساس Foundation Model نماذج الأساس هي نماذج تعلم عميق دُرّبت على كميات ضخمة من البيانات الغير موسومة unlabeled data والشاملة، وهي النماذج التي تعتمد عليها قدرات الذكاء الاصطناعي التوليدي، تكون هذه النماذج في الغالب ضخمة للغاية مقارنة بنماذج التعلم الآلي التقليدي التي تتخصص في مهام معينة وتُدرّب على بيانات مرتبطة بتلك المهمة فقط، تستخدم نماذج الأساس كنقطة بداية لتطوير نماذج تقوم بمهام أكثر تعقيداً، قد يكون نموذج الأساس قادرًا على فهم اللغة حيث تم تدريبه على كميات ضخمة من النصوص فيمكن استخدامه كأساس لنماذج أكثر تخصصاً تستفيد من قدرته على فهم اللغة للقيام ببعض المهام مثل القيام بمحادثات أو تلخيص النصوص أو توليد النصوص المختلفة، مثال على هذا النوع من النماذج هو (GPT-4) وهو نموذج الأساس المستخدم لتشغيل تشات جي بي تي ChatGPT، ولا يتوقف الأمر على النصوص فبعض النماذج قادرة على توليد الصور مثل نموذج الانتشار Stable Diffusion model القادر على توليد محتوى مرئي قوي، ونماذج الأساس قادرة على إنتاج طيف واسع من المخرجات اعتمادًا على الأوامر النصية prompts بمستوى عالٍ من الدقة. النماذج اللغوية الضخمة Large Language Models تستخدم نماذج الذكاء الاصطناعي التوليدي نماذج اللغة الضخمة LLMs لتوليد النصوص اعتمادًا على سلسلة من الاحتمالات تمكنها من توقع وتحديد وفهم السياق، تُدرّب النماذج اللغوية باستخدام معمارية المحولات Transformers architecture تصل معاملات parameters في مثل هذه النماذج إلى مليارات، وتركز النماذج اللغوية الضخمة على محاكاة فهم البشر للغة من خلال معالجة اللغات الطبيعية Natural Language Processing.تستخدم النماذج اللغوية الضخمة في تلخيص النصوص أو تصنيف النصوص وتحليل المشاعر التي تعبر عنها الكلمات، وتستخدم أيضاً في أنظمة المحادثات الآلية chatbots والمساعدات الذكية. معالجة اللغات الطبيعية (Natural Language Processing (NLP معالجة اللغات الطبيعية هي العلم الذي يهتم بدراسة اللغات وتزويد الآلات بالقدرة على معالجة وتفسير اللغات البشرية سواءً كانت هذه اللغات مكتوبة أو منطوقة، كما لو أن إنسانًا يتحدث أو يكتب، ويهتم تخصص فهم اللغات الطبيعية Natural Language Understanding -أو NLU اختصارًا- بفهم المشاعر والقصد من وراء اللغة المستخدمة، بينما في توليد اللغات الطبيعية Natural Language Generation أو NLG اختصارًا فيكون الهدف هو توليد النصوص بشكل كتابي أو منطوق، مما يسمح بتحويل النص إلى النطق text-to-speech و النطق إلى نص speech_to_text. نماذج المحولات Transformers Models تعد معمارية المحولات Transformers architecture من معماريات التعلم العميق وهي الأكثر استخدامًا في تطوير النماذج اللغوية الضخمة، يعود هذا لقدرتها على معالجة النصوص باستخدام نماذج رياضية وقدرتها على فهم الكلمات في السياقات المختلفة وفهم كيفية ارتباط الكلمات ببعضها حتى وإن كانت الكلمات متباعدة (أي يمكن للنموذج الاحتفاظ بمعلومات من الأجزاء السابقة للنص وتذكرها واستخدامها لفهم الأجزاء اللاحقة)، وهذا النوع من الذاكرة طويلة الأمد يسمح للنموذج أن ينقل فهمه بين اللغات المختلفة، ولم يتوقف الأمر عند اللغات فيمكنه نقل معرفته بين الوسائط media المختلفة، فيمكنه تحويل النصوص إلى صور. االمحوِّل التوليدي مسبق التدريب (Generative Pretrained Transformer (GPT النموذج التوليدي مسبق التدريب المبني على معمارية المحولات Generative pre-trained transformers GPT يستخدم معمارية المحولات Transformer Architecture من أجل إكساب الآلات قدرات مشابه للبشر في توليد المحتوى من النصوص، والصور، والتسجيلات الصوتية باستخدام تقنيات معالجة اللغات الطبيعية مثل تلخيص النصوص text summarization، وروبوتات الدردشة الآلية chatbots وغيرها من التطبيقات الأخرىي، ولعل أشهرها هو تشات جي بي تي Chat GPT الذي يستخدم نموذج توليدي مسبق التدريب مبني بمعمارية المحولات. ثانيًا مصطلحات متقدمة في الذكاء الاصطناعي سنوضح في الفقرات التالية المصطلحات المتقدمة التالية حول الذكاء الاصطناعي التوليدي: الذكاء الاصطناعي المسؤول Responsible AI البيانات الموسومة Labelled Data التعلم الخاضع للإشراف Supervised learning التعلم غير الخاضع للإشراف Unsupervised learning التعلم شبه الخاضع للإشراف Semi-supervised learning هندسة المُوجَّهات Prompt engineering سَلسَلة المُوجَّهات Prompt chaining التوليد المعزز بالاسترجاع (Retrieval Augmented Generation (RAG معاملات التحكم بنماذج الذكاء الاصطناعي parameters صقل نماذج تعلم الآلة fine-tuning for learning models الذكاء الاصطناعي المسؤول Responisble AI الذكاء الاصطناعي المسؤول مصمم ليتبع بعض المبادئ والممارسات التي تضمن عند تفعيلها استخدامًا آمنًا وأخلاقيًا للذكاء الاصطناعي لا يكسر أي قوانين، مما يعطي المصداقية والثقة لدى العملاء والأنشطة التجارية المختلفة لاستخدامه، بسبب المخاطر المحتملة لاستخدام الذكاء الاصطناعي والطرق التي سيؤثر بها الذكاء الاصطناعي على البشرية لا بد من وضع قواعد حاكمة تضمن مصداقيته، القدرة على أن تثق في إجابات الذكاء الاصطناعي ونتائجه أمرٌ هام للغاية في أي تطبيق للذكاء الاصطناعي. البيانات الموسومة Labeled data تساعد البيانات الموسومة Labeled data نماذج التعلم الآلي على معالجة البيانات والتعلم منها، ويشير مصطلح وسم البيانات إلى الحالة التي تحتوي فيها البيانات على الوسم أو التسمية المراد تعلم التعرف عليها أو تصنيفها بشكلٍ دقيق من خلال البيانات فمثلا يمكن وسم الصور بما تحويه من عناصر تساعد النموذج على تعلم الروابط والأنماط المشتركة بين كل الصور التي تحمل هذا الوسم، إن كان لديك صورة لنمر يمكن أن توسم هذه الصورة بوسم "نمر" مما يساعد النموذج على الربط بين الأنماط الموجودة في الصورة والأنماط الموجودة في صور جديدة للنمور. التعلم الخاضع للإشراف Supervised Learning التعلم الخاضع للإشراف أو التعلم مع إشراف Supervised learning هو طريقة تدريب لِنماذج التعلم الآلي تستخدم كميات كبيرة من البيانات الموسومة Labeled data لتوقع مخرجات التعلم، ومع تكرار مرات التدريب يصبح النموذج أكثر قدرة على الوصول لدالة معبرة بصورة أفضل عن العلاقة بين المدخلات والمخرجات المتوقعة من النموذج، حيث تُصحّح أخطاء النموذج عن طريق تعديل معاملات parameters الدالة المستخدمة في ربط المدخلات بِالمخرجات المتوقعة لتحسين التوقعات. يسمى هذا النوع من التدريب بأنه خاضع للإشراف لأن الوسم المعطى للبيانات يستخدم كمشرف لتقييم توقعات النموذج، على سبيل المثال إن كانت الصورة المدخلة لنموذج تعلم آلي صورة "أسد" وقام النموذج بوسمها على أنها "نمر" سيُقيّم هذا التوقع بأنه خاطئ وسوف يصحح في الدورات التالية من عملية التدريب. التعلم غير الخاضع لإشراف Unsupervised Learning يتميز التعلم غير الخاضع للإشراف أو التعلم دون إشراف Unsupervised Learning بأنه لا يستخدم بياناتٍ موسومة تشرف على توقعاته، حيث يمنح النموذج الاستقلالية ليقوم باكتشاف الأنماط المشتركة للبيانات المدخلة وتصنيفها حسب درجة تشابه خواص تلك البيانات، على سبيل المثال إن كانت البيانات المدخلة هي صور نمور وفيلة وزرافات سيحتاج النموذج إلى تصنيف هذه الصور بناءً على الخواص المشتركة بينها مثل اللون أو اختلاف الحجم أو الشكل أو شكل الوجه وغيرها من الخواص التي يمكن للنموذج تعلمها من الصور. التعلم شبه الخاضع للإشراف Semi-supervised learning تجمع هذه الطريقة في تدريب نماذج التعلم الآلي بين استخدام البيانات الموسومة Labeled data كما في التعلم الخاضع للإشراف Supervised Learning والبيانات غير الموسومة Unlabeled data كما في التعلم الغير الخاضع للإشراف Unsupervised Learning، في الغالب تُتٌستخدم هذه الطريقة عندما لا تتوفر بيانات موسومة كافية مقارنةً بقاعدة بيانات أكبر من البيانات الغير موسومة، توفر هذه الطريقة عناء وسم البيانات الضخمة بشكلٍ يدوي، حيث يمكنك استخدام البيانات الموسومة الأقل حجمًا لتساعد النموذج في مرحلة التدريب على التعرف على بعض التصنيفات الموجودة في البيانات وتدريب النموذج على البيانات الأكبر حجماً دون استخدام وسمٍ أو إشراف. هندسة المُوجَّهات Prompt Engineering هندسة المُوجَّهات Prompt Engineering تسهل عملية إعطاء الأوامر للنماذج اللغوية الضخمة Large language models عن طريق تعديل النص المدخل من أجل الحصول على مخرجات مناسبة، حيث تساعد هذه التقنية على تحسين أداء نماذج الذكاء الاصطناعي التوليدي لتنفيذ بعض المهام الدقيقة والمحددة عن طريق تحسين المُوجهات أو الأوامر المدخلة للنموذج، وتهدف هندسة المُوجِّهات لجعل نتائج النموذج أكثر صلة ومناسبة للمهمة المطلوبة، وتشكل هذه التقنية تحولاً في طريقة تفاعل البشر مع الذكاء الاصطناعي. سَلسَلة المُوجَّه Prompt Chaining سَلسَلة المُوجَّه Prompt Chaining هي تقنية تعمل مع نماذج اللغات الضخمة LLMs ومعالجة اللغات الطبيعية NLP وتسمح بالقيام بمحادثات تفاعلية تعتمد على المُوجَّهات والردود السابقة، تنشئ هذه الطريقة وعياً بالسياق خلال المحادثة، وهو أمر أساسي لجعل المحادثات مع الآلة شبيهة بمحادثات البشر التفاعلية، تظهر أهمية هذه الطريقة في أنظمة الدردشة الآلية chatbots فبدلًا من التعامل مع أمر نصي ضخم يصعب التعامل معه والرد عليه، يمكننا بدلًا من ذلك تقسيمه إلى سلسلة متتالية من الأوامر أو المُوجَّهات التي يسهل التعامل معها والإجابة عليها. التوليد المعزز بالاسترجاع (Retrieval augmented generation (RAG التوليد المعزز بالاسترجاع (Retrieval augmented generation (RAG هو طريقة تعزز من قدرة نماذج الأساس بِتعزيزها باسترجاع الحقائق من مصادر خارجية لمساعدتها على توليد ردود حديثة ومدعومة بمصادر، نموذج الأساس يمتلك معرفة محدودة فقط بالبيانات التي تدرب عليها، لذا إذا كان هناك نقص أو تأخر في تاريخ هذه البيانات لن تصبح ذات فائدة، لذلك تعزيز النموذج بالحقائق والمعلومات من مصادر خارجية حديثة سوف يحسن من مصداقية ودقة المعلومات المولدة، على سبيل المثال لا يمكنك توقع إجابة دقيقة عن سعر سهمٍ في شركة من نموذج معرفته محدودة زمنياً وغير قادر على الوصول إلى البيانات الحديثة لهذا السهم، أما باستخدام التوليد المعزز باستراجاع الحقائق RAG فسوف يمكن بكل سهولة تعزيز معرفة النموذج من مصادر موثوقة ليصبح قادرًا على توفير إجابة محدثة عن السهم، لن تُخزّن هذه المعلومات لدى نموذج الأساس فقط تستخدم لتعزيز الإجابات بالحقائق. المعاملات Parameters إن معاملات parameters نماذج الذكاء الاصطناعي وتعلم الآلة هي عبارة عن متغيرات تُعدَّل قيمها أثناء تدريب النموذج من أجل تحسين أدائه في اكتشاف الأنماط الموجودة في البيانات، وبالتالي جعلها أكثر كفاءة، وتتحكم هذه المعاملات في تصرف النموذج وتقلل الفرق بين القيم المتوقعة والقيم الحقيقية الصحيحة وتجعله أدق في التنبؤ أو تصنيف البيانات. لنفرض أننا نريد تصنيف الحيوانات والتمييز بين الكلب والقطة بناءً على بعض الخصائص مثل الوزن والطول ووجود الفرو باستخدام نموذج يسمى الانحدار اللوجستي Logistic Regression الذي يعتمد على معادلة تجمع بين الخصائص (الوزن، الطول، وجود الفرو) لحساب احتمال أن يكون الحيوان كلبًا أو قطة. سيبدأ النموذج بمعاملات عشوائية تحدد أهمية كل خاصية (مثل الوزن أو الطول) في تحديد نوع الحيوان، ويقارن التوقعات مع النوع الحقيقي للحيوان (كلب أو قطة) ويعدل المعاملات لتقليل الأخطاء في التوقعات، وبعد العديد من المحاولات والتعديلات يصبح النموذج أكثر دقة في التمييز بين الكلب والقطة. وبهذا يتعلم النموذج القيم المثلى للمعاملات التي تمكنه من التنبؤ بنوع الحيوان بدقة أكبر بناءً على خصائصه. صقل نماذج التعلم الآلي Fine Tuning Learning models صقل نماذج التعلم الآلي Fine Tuning Learning models هي تقنية لتعديل النماذج مسبقة التدريب pre-trained على مهام متخصصة ودقيقة، تصقل نماذج التعلم باستخدام بيانات تناسب المهمة المتخصصة التي نرغب في تحسين أداء نموذج الأساس عليها، يمتلك نموذج الأساس فهمًا عامًا للبيانات التي يتعامل معها ومع عملية الصقل باستخدام قاعدة بيانات صغيرة تناسب المهمة المتخصصة يصبح النموذج أكثر كفاءةً في أداء هذه المهمة، تمنح هذه التقنية نماذج التعلم الآلي القدرة على التأقلم على مهام جديدة عن طريق تعديل معاملاتها parameters لتناسب المهمة المتخصصة مما يزيد من دقة النموذج وفعاليته في تنفيذ هذه المهمة. ثالثًا: مصطلحات تتعلق بآلية عمل الذكاء الاصطناعي في هذا القسم نشرح بعض المصطلحات المتعلقة بآلية عمل الذكاء الاصطناعي: التحيز Bias الهلوسة Hallucinations درجة الحرارة Temperature التشبيه بالإنسان Anthropomorphism الإكمال Completion الوحدات اللغوية Tokens الطفرات غير المتوقعة في الذكاء الاصطناعي Emergence in AI التضمينات Embeddings تصنيف النصوص Text Classification نافذة السياق Context Window التحيز Bias عندما يأتي الأمر لذكر تعلم الآلة تظهر مشكلة التحيز كنتيجة لاستخدام بيانات منحازة في التدريب لا تعبر بشكلٍ إحصائي جيد عن الواقع، هذا يؤدي بشكلٍ غير عادل وغير دقيق إلى ميول النموذج إلى القيام بتوقعات تحاكي هذا التشوه في بيانات التدريب، وبالتالي توليد نتائج منحازة، يُبرز هذا الأمر أهمية جودة البيانات المستخدمة في تدريب النماذج، حيث أن البيانات غير المكتملة أو ذات الجودة المنخفضة يمكن أن تولد نماذج لا تستحق الثقة نتيجة الافتراضات الخاطئة. الهلوسة Hallucination تحدث هلوسة نماذج الذكاء الاصطناعي عندما يولد ردودًا تبدو كأنها حقائق مسلم بها وهي ليست كذلك، على الرغم من أن الهلوسة تعتبر نادرة الحدوث بعض الشيء، إلا أنها تعد سببًا وجيهًا لعدم أخذ الإجابات المولدة على أنها حقائق مسلم بها، من الممكن أن تتسبب البيانات المنحازة إلى هلوسة النماذج، أو ربما بسبب عدم فهم البيانات أثناء التدريب، وقد استخدم مصطلح الهلوسة في هذا السياق لكونه مشابهًا لسلوكنا نحن البشر عند تخيل أشياء غير واقعية وظن أنها حقيقة واقعة. درجة الحرارة Temperature درجة الحرارة Temperature هي معامل parameter يستخدم في نماذج الذكاء الاصطناعي، للتحكم في درجة عشوائية أو إبداع الردود المولدة من النموذج، تتراوح القيم الممكنة لِمعامل الحرارة بين الصفر والواحد، القيمة الافتراضية لهذا المعامل هي 0.7، وكلما كانت قريبة إلى الصفر أكثر، كلما كانت الردود أكثر واقعية وثباتًا، بينما كلما ارتفعت قيمة المعامل كلما زادت إبداعية الردود المولدة وتفرّدها. التشبه بالإنسان Anthropomorphism التشبيه بالإنسان أو التجسيم Anthropomorphism هو إعطاء الصفات والمشاعر والنوايا البشرية على الكيانات غير البشرية، فبعض الكيانات التي يمكن تشبيها بالبشر مثل الآلات، والحيوانات، والجمادات وغيرها من الأمثلة، ومن خلال استخدام الذكاء الاصطناعي الذي يتطور بشكل أكثر تعقيدًا يومًا عن يوم، وبعد فترة قصيرة للغاية من التعرض لأدوات الذكاء الاصطناعي، سيبدأ البشر في وصف برامج الحواسيب بصفاتٍ بشرية والتعامل معها كأنها تمتلك مشاعر إنسانية وهذا يمكن أن يؤثر على تصرفات وتفاعلات البشر مع الآلة. الإكمال Completion يٌستخدم مصطلح الإكمال Completion في معالجة اللغات الطبيعية NLP لوصف مخرجات النماذج الناتجة كرد، على سبيل المثال عند طرح سؤال على تشات جي بي تي Chat GPT سوف تعتبر الإجابة المولدة من النموذج اللغوي إكمالاً Completion لسياق السؤال المطروح. الوحدات اللغوية Tokens قد تكون الوحدة اللغوية Token تكون كلمة، أو مجموعة رموز للتميز بين بدايات الجمل ونهايتها والمسافات والحروف المميزة، تستخرج الوحدات اللغوية Tokens من النصوص المدخلة للنموذج اللغوي ليتمكن من التعامل مع التصريفات المختلفة للكلمات و الرموز المميزة وتسمى هذه العملية بِتقطيع النص إلى وحداتٍ لغوية Tokenization، توجد عدة طرق للقيام بعملية التقطيع تختلف في الغالب حسب النموذج المستخدم، تعتبر هذه الوحدات اللغوية الوحدات الأساسية لنماذج اللغات الضخمة حيث تستخدمها لمعالجة النصوص المختلفة واكتشاف الأنماط بها، وتستخدم أيضا كوحدة معيارية لِتحديد القدرة الاستيعابية للنموذج في المدخلات والمخرجات مما يساهم في تحديد نافذة السياق Context window. الطفرات غير المتوقعة في الذكاء الاصطناعي Emergence in AI هو قدرة الذكاء الاصطناعي على اكتساب قدرات ومهارات غير مقصودة أو غير مبرمجة من البداية، تحدث هذه الظاهرة بسبب تعقيد النماذج وزيادة عدد المعاملات Parameters مما يؤدي إلى تأثيراتٍ جانبية تجعل النموذج قادراً على تأدية بعض المهام الغير مدرب عليها بشكلٍ صريح، لن تحدث هذه الظاهرة في النماذج البسيطة والأصغر حجمًا، لكن هناك مخاوف من إمكانية ظهور بعض المخاطر والتعقيدات الناتجة عند حدوث هذه الظاهرة في نماذج الذكاء الاصطناعي المتقدمة، على سبيل المثال يمكن أن نفقد السيطرة على هذه النماذج بحيث تنتج ردوداً تخالف القواعد العامة أو ردودًا مؤذية أو عنصرية بشكلٍ غير مقصود من المطور ولم تُدرّب عليها. التضمينات Embeddings التضمينات Embedding هي تمثيلات رقمية تعبر عن الكائنات، والكلمات في متجهات متعددة الأبعاد، تنتج عن طريق خوارزميات التعلم الآلي، وتمتلك القدرة على فهم معاني الكلمة في السياقات المختلفة وتَشابُه التمثيلات الرقمية للكلمات يدل على تشابه في المعنى، وبالمثل في معالجة الصور image processing يمكن ترميز الصور رقمياً كمتجهات ومصفوفات ليسهل تحليلها والقيام بالعمليات الرياضية عليها، تساعد هذه الترميزات الرقمية على القيام بالحسابات اللازمة ، مما يمّكن أنظمة الذكاء الاصطناعي من القيام بمهامٍ مثل فهم اللغات، والتعرف على الصور، وتقديم الاقتراحات بكفاءةً عالية. تصنيف النصوص Text Classification يتضمن تصنيف النصوص Text classification تدريب النموذج على تصنيف النصوص وإعطائها الوسم المناسب من قائمة من الوسوم المعرفة مسبقًا، باستخدام تقنيات مثل معالجة اللغات الطبيعية، يمتلك النظام القدرة على تعلم الأنماط وتحليل السياق التي وردت به الكلمات، من أجل إعطاء توقعات دقيقة على المشاعر التي تعبر عنها النصوص، أو الموضوع، أو القصد من الكلام، وتتمتع مصنفات الذكاء الاصطناعي النصية بالقدرة على معالجة وفهم لغات وسياقات مختلفة للنصوص، مما يمّكنها من التعامل مع مهام مختلفة عابرة للغات بشكلٍ فعال. نافذة السياق Context Window نافذة السياق context window هو مصطلح يشير إلى كمية النصوص أو المعلومات التي يمكن لنموذج الذكاء الاصطناعي معالجتها والرد عليها من خلال إدخالها بشكلٍ نصي، يرتبط هذا المصطلح بشكلٍ وثيق بعدد الوحدات اللغوية Tokens المستخدمة في النموذج، تختلف حجم نوافذ السياق context windows باختلاف النموذج المستخدم، تلعب هندسة النصوص المدخلة prompt engineering دورًا هامًا عند التعامل مع نموذج نافذة سياق محددة، حيث تحتاج لوصف الأوامر المطلوبة بشكلٍ دقيق دون تجاوز الحجم الأقصى لنافذة السياق من الوحدات اللغوية Tokens. ترجمة-وبتصرٌّف-للمقالات Navigating the Vocabulary of Generative AI Series (1 of 3) و ( Navigating the Vocabulary of Generative AI Series (2 of 3 و (Navigating the Vocabulary of Generative AI Series (3 of 3 لصاحبها STUART SCOTT. اقرأ أيضًا كل ما تود معرفته عن دراسة الذكاء الاصطناعي أهمية الذكاء الاصطناعي من هو مهندس الذكاء الاصطناعي وما أبرز مهامه خوارزميات الذكاء الاصطناعي استخدام النماذج التوليديّة Generative models لتوليد الصور1 نقطة
-
الإصدار 1.0.0
6329 تنزيل
كانت لغة سي C الاستثنائية نتاج عمل رجلٌ واحدٍ يعمل في مختبرات بيل AT&T Bell Laboratories يدعى "دينيس ريتشي Dennis Ritchie"، وشهدت هذه اللغة شعبيةً متزايدةً منذ وقت ظهورها، وينظر إليها البعض بكونها أكثر لغات البرمجة استخدامًا حول العالم. لا يوجد عامل أساسي في نجاح لغة سي، بل هناك مجموعةٌ من العوامل المختلفة الملائمة، ولعل أبرزها هو تطوير اللغة على يد ممارسين للبرمجة (مبرمجين) يوميًا بهدف استخدامها عمليًّا وليس بغرض الاستعراض النظري، وكانت متعددة الاستخدامات وتؤدي العديد من الأغراض، إذ ركزت على تزويد المبرمج بالقوة والتحكم بدلًا من احتوائها على حدودٍ وقواعد صارمة تحدّ من حريته. ساهم هذا السبب الكبير في جعل لغة سي مناسبةً للمحترفين أكثر من المبتدئين، إذ يتطلب تعلُّم البرمجة في البداية بيئةً آمنةً ومبسطة، تعطيك استجابةً لأخطائك وكيفية حلّها بسرعة. بمعنى آخر، برامج تعمل حتى لو لم تنفذ ما تريده -بسبب خطأ من طرفك- ولكن لغة سي لا تعمل بهذه الطريقة. الأمر مماثل لاستخدام حطاب محترف للمنشار الآلي لقطع الأشجار، فهو يعي جيّدًا خطورة الأداة هذه إن لمس شفراتها بينما تعمل، ولكنه يستطيع استخدامها بثقة وبمهارة. تعمل لغة سي C بصورةٍ مشابهة، وعلى الرغم من أن مصرِّف Compiler لغة سي قد ينبِّه المبرمج عند حدوث بعض الأخطاء ويزوده بإرشاداتٍ محدودة تدلُّه على سبب الخطأ، إلا أن المبرمج يملك خيار تجاهل تحذيرات المصرِّف وإجباره على استخدام التعليمات التي كتبها، وبفرض أنك أردت الحصول على البرنامج الذي كتبته فعلًا، فستحصل عليه دون أيّ قيود. ازدادت شعبية لغة C أيضًا بفضل نمو سوق أجهزة الحواسيب الشخصية، فقد صُممت لغة سي خصيصًا لتطوير البرمجيات عليها، إذ تمنح هذه اللغة عالية المستوى القدرة للمبرمجين على كتابة برنامج سهل القراءة والكتابة، والقوة للتحكم بمختلف موارد الحاسوب ومعماريته دون اللجوء لاستخدام شيفرةٍ تجميعية Assembly Code. تُعرف لغة سي بقدرتها الفريدة على الجمع بين مستويين من البرمجة في وقتٍ واحد، مع المحافظة على قدرة التحكم بالتدفق وهياكل البيانات data structures والإجراءات procedures -وهي جميع الأمور التي تتوقعها من أي لغة حديثة عالية المستوى-، كما تسمح لمبرمجي الأنظمة بالتعامل والتلاعب بخانات الآلة bits، لضمان الوصول الأقرب للعتاد الصلب في حال الحاجة. مجموعة الخصائص هذه مرغوبة جدًا في سوق برمجيات الحواسيب التنافسي، ونتيجة لذلك اتخذ العديد من مطوري البرمجيات لغة سي أداتهم الأساسية. هذا الكتاب مترجم عن الإصدار الثاني من الكتاب The C Book للمؤلفين Mike Banahan - Declan Brady - Mark Doran الذي نُشر أول إصدار منه عام 1991 وقد نفدت كل الإصدارات المطبوعة منه وبقيت النسخة المنشورة على الإنترنت والتي ترجمناها إلى العربية. ورغم قِدمه، إلا أن محتواه متوافق مع لغة سي المستقرة والتي تُستعمل في مجال هندسة البرمجيات بكثرة خصوصًا في مجال الأنظمة والأنظمة المدمجة embedded programming وتعلمها يعطي فهمًا واسعًا عن عملية البرمجة لذلك تجد أن أغلب الجامعات ودورات البرمجة المتوسعة والشاملة تبدأ بتعليم البرمجة بلغة سي. الكتاب موجّهٌ لفئتين من الأشخاص، الأشخاص المبتدئين في لغة سي C الذين يريدون تعلُّمها من البداية، والفئة التي تعرف التعامل مع لغة سي مسبقًا بمعيارها القديم وتريد التعرُّف على الإضافات الجديدة في المعيار الجديد. نتمنى أن يكون هذا الكتاب مفيدًا وممتعًا لك في نفس الوقت. يمكنك قراءة فصول الكتاب على شكل مقالات مجتمعة تحت الوسم "تعلم لغة سي" وتجد روابطها تاليًا: الفصل الأول: مقدمة إلى لغة سي بنية برنامج لغة سي بعض البرامج البسيطة بلغة سي C: المصفوفات والعمليات الحسابية الفصل الثاني: المتغيرات والعمليات الحسابية المحارف المستخدمة في لغة سي البنية النصية لبرامج سي الأنواع الحقيقية والصحيحة في لغة سي التحويلات ما بين الأنواع في تعابير لغة سي العوامل في لغة سي الثوابت وسلاسل الهروب في لغة سي الفصل الثالث: التحكم بالتدفق والتعابير المنطقية التعابير المنطقية والتحكم بالتدفق في برنامج C العوامل المنطقية في لغة سي C وعوامل أخرى الفصل الرابع: الدوال Functions الدوال في لغة C مفهوم التعاود Recursion وتمرير الوسطاء إلى الدوال في لغة سي مفهوم النطاق Scope والربط Linkage على مستوى الدوال في لغة C الفصل الخامس: المصفوفات Arrays والمؤشرات Pointers مدخل إلى المصفوفات في لغة سي المؤشرات Pointers في لغة سي التعامل مع المحارف والسلاسل النصية في لغة سي عامل sizeof وحجز مساحات التخزين في لغة سي التعامل مع المؤشرات Pointers في لغة سي الفصل السادس: هياكل البيانات هياكل البيانات: القوائم المترابطة Linked lists والأشجار Trees في لغة سي هياكل البيانات: الاتحادات Unions وحقول البتات Bitfields والمعددات Eums في لغة سي تهيئة المتغيرات وأنواع البيانات في لغة سي الفصل السابع: المعالج المسبق Preprocessor الماكرو Macro والمعالج المسبق Preprocessor في لغة سي الفصل الثامن: مواضيع مخصصة عن لغة سي التصاريح declarations والتعاريف definitions وإمكانية الوصول accessibility في لغة سي معرفات النوع typedef والمؤهلات qualifiers ونقاط التسلسل sequence points في لغة الفصل التاسع: المكتبات Libraries مقدمة إلى مكتبات لغة سي التعامل مع المحارف وضبط إعدادات التوطين localization في لغة سي القيم الحدية والدوال الرياضية في لغة سي التعامل مع المكتبات في لغة سي مقدمة عن التعامل مع الدخل والخرج I/O في لغة سي التعامل مع الدخل والخرج I/O وتنسيقه في لغة سي أدوات مكتبة stdlib في لغة سي دوال التعامل مع السلاسل النصية والوقت والتاريخ في لغة سي الفصل العاشر: تطبيقات عملية تطبيقات عملية في لغة سي1 نقطة