لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 04/01/23 في كل الموقع
-
هل يجب اعتبار وكالات الإعلان والمؤسسات المالية أعضاء في القناة؟ و لماذا؟ هل من المفيد أكثر من منظور إداري التفكير في المستهلكين كأعضاء في القناة أو كمستخدمين نهائيين يستهلكون خدمات القناة؟1 نقطة
-
السلام عليكم. كيف يمكن تمرير <Icon /> داخل مكون في react js إستعملت الكود التالي <Card Icon = '<AiFillFacebook size={22}/>' /> <Card Icon = '<AiFillTwitterSquare size={22}/>' /> <Card Icon = '<AiFillInstagram size={22}/>' /> <Card Icon = "<AiFillYoutube size={22}/>" /> المتصفح لم يستطع قراءة Icon شكرا على المساعدة1 نقطة
-
import docx from pathlib import Path doc = docx.document(Path.home()/ Path('G:/python cource','project','word','academy_1.docx')) print(len(docx.paragraph())) رسالة الخطأ "G:\python cource\project\Word\venv\Scripts\python.exe" "G:\python cource\project\Word\ReadWord.py" Traceback (most recent call last): File "G:\python cource\project\Word\ReadWord.py", line 2, in <module> import docx File "G:\python cource\project\Word\venv\Lib\site-packages\docx.py", line 30, in <module> from exceptions import PendingDeprecationWarning ModuleNotFoundError: No module named 'exceptions' Process finished with exit code 11 نقطة
-
مرحبا ما هي الدورات التي تنصحوني بها بعد انهاء دورة علوم الحاسوب؟1 نقطة
-
السلام عليكم. في المثال التالي أريد أن يكون هناك اثنين كارد في الشاشات المتوسطة و كارد واحد في الشاشات الصغيرة الكود الجي قمت به: App <div className=" container flex gap-3 xl:gap-8 items-center justify-center "> <Card icon = {<AiFillFacebook size={30}/>} cardClass = 'card before:bg-facebook' iconClass = 'text-facebook' /> <Card icon = {<AiFillTwitterSquare size={30}/>} cardClass = 'card before:bg-twitter ' iconClass = 'text-twitter' /> <Card icon = {<AiFillInstagram size={30}/>} cardClass = 'card before:bg-gradient-to-r before:from-amber-500 before:via-orange-600 before:to-purple-600' iconClass = 'text-instagram' /> <Card icon = {<AiFillYoutube size={30}/>} cardClass = 'card before:bg-youtube' iconClass = 'text-youtube' /> </div> Card <div className={cardClass}> <div className=" flex gap-1 items-center justify-center"> <span className={iconClass}> {icon} </span> <span className="">@abcd</span> </div> <h2 className=" text-center font-bold text-5xl pt-6"> 1987 </h2> <p className=" text-center text-md uppercase tracking-[3px] text-stone-400 pb-6"> Followers </p> <div className=" flex gap-1 items-center justify-center text-mainGreen"> <span> <RiArrowUpSFill size={22}/> </span> <span>Today</span> </div> </div> index.css .card { @apply container mt-6 bg-stone-200 rounded py-6 before:content-[''] before:w-full before:h-1 relative before:absolute before:left-0 before:top-0 overflow-hidden w-1/4 md:w-1/2 sm:w-full } المشكل أنه لم يتم تفعيل md:w-1/2 sm:w-full حيث أن عدد الكارد لا يتغير في الشاشات الصغيرة و المتوسطة شكرا لكم1 نقطة
-
تثبيت TailwindCSS باستخدام npm عن طريق الأمر التالي: npm install tailwindcss بعد ذلك، إنشاء ملف tailwind.css واستيراد TailwindCSS فيه باستخدام @import كما يلي: @import 'tailwindcss/base'; @import 'tailwindcss/components'; @import 'tailwindcss/utilities'; ثم تكوين ملف tailwind.config.js لتحديد الـ breakpoints المطلوبة، وتمكين الخصائص الإضافية التي ترغب في استخدامها. على سبيل المثال، يمكنك استخدام الكود التالي: // tailwind.config.js module.exports = { theme: { screens: { 'sm': '640px', 'md': '768px', 'lg': '1024px', 'xl': '1280px', }, extend: { colors: { 'primary': '#1a202c', 'secondary': '#718096', }, }, }, variants: {}, plugins: [], } بعد ذلك، يمكنك استخدام الـ breakpoints المحددة في ملفات CSS الخاصة بك، ولتفعيل TailwindCSS في مشروع React، يجب تضمين ملف tailwind.css في ملف index.js الخاص بالمشروع كما يلي: // index.js import React from 'react'; import ReactDOM from 'react-dom'; import './tailwind.css'; import App from './App'; ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') );1 نقطة
-
قم بالتأكد من تضمين مكتبة TailwindCSS وإضافة الـ breakpoints الخاصة بها في ملف الـ CSS الخاص بك، باستخدام الـ breakpoints المرتبطة بعرض الشاشة، مثل sm, md, lg, و xl. بعد ذلك، يمكنك تحديد عرض العناصر بناءً على الشاشة المعنية باستخدام الـ breakpoints في CSS الخاص بالكارد، مثل: @media (min-width: 640px) { .card { width: 50%; } } @media (min-width: 768px) { .card { width: 33.33%; } } ومن خلال الكود السابق، عندما يكون عرض الشاشة أكبر من 640 بكسل، سيتم تعيين عرض الكارد على 50٪، وعندما يكون أكبر من 768 بكسل، سيتم تعيين عرض الكارد على 33.33٪. كما يمكنك استخدام الـ breakpoints المختلفة لتحديد الأحجام الأخرى التي تناسب شاشات مختلفة.1 نقطة
-
مرحبا بكم، حابب ان شارك تجربتي وان اخذ رائكم انا متخصص سيو وبدأت في إنشاء مدونة علي بلوجر من اجل التدريب والتطوير وتحسين مهارتي في السيو والحمد لله المدونة الان بها 10 مقالات كل مقال يتعدي 600 كلمة وتظهر في محرك البحث جوجل وبنج وياندكس، وقد طبقت بعض الاستراتيجيات بها وبدأت الزيارات في الزيادة وايضا قد شاركت هذا الموقع في جميع وسائل التواصل الاجتماعي، الموقع اسمه مصر دريم ومهتم بمجال التقنية كنت حابب اعرف نصائحكم وهل يمكنني التقديم في جوجل ادسنس؟ هذا هو الموقع: مصر دريم1 نقطة
-
السلام عليكم اريد انشاء جدولين في قاعدة بيانات MYSQL جدول رئيسي master وجدول فرعي له details وبينها علاقة many to one relationship الجدول الرئيسي انشأته بـ sql server وهذا الكود الخاص به : USE [db1] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[table_main]( [file_type] [int] NOT NULL, [file_no] [int] NOT NULL, [file_date] [date] NULL, [descr] [nvarchar](50) NULL, CONSTRAINT [PK_table_main] PRIMARY KEY CLUSTERED ( [file_type] ASC, [file_no] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO الجدول الفرعي انشأته بـ sql server وهذا الكود الخاص به : USE [db1] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[table_sub]( [file_type] [int] NOT NULL, [file_no] [int] NOT NULL, [file_srno] [int] IDENTITY(1,1) NOT NULL, [descr] [nvarchar](100) NULL, CONSTRAINT [PK_table_sub] PRIMARY KEY CLUSTERED ( [file_type] ASC, [file_no] ASC, [file_srno] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[table_sub] WITH CHECK ADD CONSTRAINT [FK_table_sub_table_main] FOREIGN KEY([file_type], [file_no]) REFERENCES [dbo].[table_main] ([file_type], [file_no]) ON UPDATE CASCADE ON DELETE CASCADE GO ALTER TABLE [dbo].[table_sub] CHECK CONSTRAINT [FK_table_sub_table_main] GO فكيف انشاء اكود مثلهما تعمل في mysql1 نقطة
-
npm start و npm run start هما أمران يمكن استخدامهما لتشغيل تطبيق React، ولكن هناك فارق بسيط بينهما. عندما تستخدم npm start في تطبيق React، فإن npm سيقوم بتشغيل الأمر المحدد في الـ script المسمى "start" في ملف package.json. وغالبًا ما يكون هذا الأمر يشير إلى react-scripts start، الذي يقوم بتشغيل تطبيق React في وضع التطوير ويسمح بتحديث الصفحة تلقائيًا عند إجراء أي تغيير في الكود. أما عند استخدام npm run start، فإن npm سيقوم بتشغيل الأمر "start" المحدد في ملف package.json بشكل صريح. ويمكن تحديد أي أمر في script المسمى "start"، وليس بالضرورة أن يكون هذا الأمر react-scripts start. بشكل عام، يمكن استخدام npm start في معظم حالات تطبيق React، لأن react-scripts start هو الأمر الذي يستخدم بشكل عام لتشغيل التطبيق في وضع التطوير. ولكن إذا كنت ترغب في تشغيل أمر مخصص في script المسمى "start"، فيمكن استخدام npm run start. هناك شيء مثير للاهتمام يجب ملاحظته وهوإذا كان كائن scripts لا يحتوي على خاصية "start" في ملف package.json ، فإن npm start أو npm run start سيشغل node server.js افتراضيًا.ولكن إذا كان كائن البرامج النصية في package.json له خاصية "start" ، فإنه يتجاوز node server.js وينفذ الأمر في خاصية "start".1 نقطة
-
E:\web-sit\formik\ps_academy\p2\pro2\src\components\FicheAxois.js هذا الملف لا يظهر في الشاشة . لا أعلم اين هو الخطأ1 نقطة
-
بالإضافة إلى ما ذكره لك عدنان حاول التأكد من النقاط التالية: 1- التأكد من أن المسار الذي تم استدعاء الملف من خلاله صحيح، أي E:\web-sit\formik\ps_academy\p2\pro2\src\components\FicheAxois.js هو المسار الصحيح. 2- التأكد من تثبيت المكتبة اللازمة للمكون، ففي الكود الخاص بك يتم استخدام axios لإحضار البيانات من API. 3- التأكد من عدم وجود أخطاء في الأكواد الأخرى في التطبيق، حيث أن الأخطاء في الأكواد الأخرى يمكن أن تؤثر على عرض المكون في الشاشة. 4- قد يكون المشكلة مرتبطة بطريقة عرض المكون في الكود، يجب التأكد من عدم وجود أي أخطاء في طريقة عرض المكون داخل ملف الكود. 5- يمكن أن يكون المشكلة مرتبطة بخطأ في ملف الـ CSS الخاص بالمكون، حيث أنه إذا كانت الصفحة تعمل بشكل صحيح ولكن المكون لا يظهر بشكل صحيح، فقد يكون السبب في ذلك هو خطأ في ملف الـ CSS.1 نقطة
-
السلام عليكم و رحمة الله و بركاته , أريد ان أنشئ ملف readme يحتوي على خطوات تشغيل مشروع web , هل يمكنكم إعطائي فكرة عن ماهي الخطوات الذي اكتبها , و شكرًا لكم .1 نقطة
-
ملف readme هو ملف نصي يحتوي على معلومات مهمة عن المشروع وكيفية تشغيله واستخدامه. يجب أن يكون ملف readme في المستوى الأعلى من الدليل الخاص بالمشروع ويجب أن يكون بصيغة markdown لتنسيق النص بشكل جميل. لإنشاء ملف readme لمشروع web ، يمكنك اتباع الخطوات التالية لإنشاء ملف README.md عام: اكتب عنوان المشروع في السطر الأول باستخدام # ، مثل # مشروع web. اكتب وصفاً عاماً عن المشروع في السطر التالي ، مثل هذا المشروع هو تطبيق web يقوم ب... اكتب حالة المشروع إذا كان لا يزال قيد التطوير أو قد اكتمل ، وأذكر أي تغييرات مخطط لها أو اتجاه التطوير أو تاريخ الانتهاء. اكتب المتطلبات على بيئة التطوير للاندماج ، مثل اللغات والأطر والأدوات المستخدمة في المشروع وأي روابط لمزيد من المعلومات حول هذه التقنيات. اكتب دليلاً لتثبيت واستخدام المشروع ، مثل كيفية تنزيل الرمز المصدري وتثبيت الاعتمادات وتشغيل الخادم والوصول إلى التطبيق من خلال المتصفح. اكتب قسماً للتعاون المرغوب إذا كان المشروع مفتوح المصدر وتريد أن يقوم المطورون الآخرون بتعديله أو توسيعه. اشرح كيفية التعامل مع المشاكل وكيفية تقديم التغييرات. اكتب قسماً للأخطاء المعروفة وأي إصلاحات لها إذا كان هناك أي. اكتب قسم FAQ بجميع الأسئلة التي تم طرحها سابقاً. اكتب قسم حقوق النشر والترخيص وأذكر صاحب المشروع وأي شروط أو قيود على استخدام المشروع يمكنك اتباع الخطوات التالية لإنشاء ملف README.md لمشروع مبني بلغة Python: تأكد من وجود متطلبات النظام اللازمة: يجب التأكد من وجود المتطلبات الضرورية لتشغيل مشروع الويب كـ لغة البرمجة، البيئة، وأي إطارات عمل مطلوبة، والتي يمكن تحديدها في الملف `requirements.txt`. قم بتنزيل المشروع: يجب تنزيل ملفات المشروع الكاملة من منصة التحكم في الإصدارات مثل Git Hub أو Bitbucket أو الخدمات المشابهة. قم بإنشاء بيئة افتراضية وتشغيلها: يمكن استخدام أدوات مثل `virtualenv` لإنشاء بيئة افتراضية. بعد الانتهاء، يجب تنشيط بيئة العمل الافتراضية الجديدة باستخدام الأمر `source virtualenv/bin/activate`. تثبيت المكتبات والإطارات اللازمة: بعد تنشيط بيئة العمل الافتراضية اجديدة، يجب تثبيت جميع المكتبات والإطارات والمتطلبات اللازمة من خلال استخدام `pip install -r requirements.txt`. تشغيل المشروع: بعد التثبيت وتكوين الإعدادات، يمكن تشغيل المشروع مباشرة من الأمر `python manage.py runserver`. يجب الانتباه إلى استخدام الشارطة كلمتي المرور الخاصة بقاعدة البيانات في الملف `settings.py`. تنفيذ الاختبارات: بعد تشغيل المشروع، يجب تنفيذ ملف الاختبار الخاص بالتحقق من عمل المشروع. يمكن تنفيذ اختبار المشروع باستخدام `python manage.py test`. ملاحظة يجب تحديث التوثيق: يجب تحديث ملف README.md ليشمل التغييرات الأخيرة في المشروع، والتأكد من أن الخطوات الموجودة في الملف بينية وصحيحة. هذه هي عادة الخطوات الأساسية التي يمكن تضمينها في ملف README لتشغيل مشاريع الويب. ومن الأفضل دائمًا إضافة المزيد من التفاصيل والشرح لتجنب أي مشكلات في فهم العملية.1 نقطة
-
يجب عليك أولاً معرفة ما يجب عليك تضمينه في هذا الملف حتى تعرف الخطوات اللازمة لتنفيذ ذلك ما يجب تضمينه في ملف readme الخاص بك عنوان المشروع : هذا هو اسم المشروع. يصف المشروع بأكمله في جملة واحدة ، ويساعد الناس على فهم الهدف الرئيسي للمشروع وهدفه. وصف المشروع : هذا عنصر مهم في مشروعك غالبًا ما يغفل عنه العديد من المطورين الجدد.الوصف الخاص بك هو جانب مهم للغاية من مشروعك. يسمح لك الوصف المصمم جيدًا بإظهار عملك للمطورين الآخرين وكذلك لأصحاب العمل المحتملين. جدول المحتويات (اختياري) : إذا كان ملف README الخاص بك طويلاً جدًا ، فقد ترغب في إضافة جدول محتويات لتسهيل انتقال المستخدمين إلى أقسام مختلفة بسهولة. سيسهل على القراء التنقل في المشروع بسهولة. كيفية تثبيت وتشغيل المشروع :إذا كنت تعمل في مشروع يحتاج المستخدم إلى تثبيته أو تشغيله محليًا ، فيجب عليك تضمين الخطوات المطلوبة لتثبيت مشروعك وكذلك التبعيات المطلوبة إن وجدت.قدم وصفًا تفصيليًا لكيفية ضبط بيئة التطوير وتشغيلها. كيفية استخدام المشروع : قدم تعليمات وأمثلة حتى يتمكن المستخدمون / المساهمون من استخدام المشروع. سيسهل ذلك عليهم في حالة مواجهة مشكلة - سيكون لديهم دائمًا مكان للإشارة إلى ما هو متوقع.يمكنك أيضًا الاستفادة من المساعدات المرئية من خلال تضمين مواد مثل لقطات الشاشة لإظهار أمثلة على المشروع الجاري وكذلك البنية ومبادئ التصميم المستخدمة في مشروعك.أيضًا إذا كان مشروعك يتطلب مصادقة مثل كلمات المرور أو أسماء المستخدمين ، فهذا قسم جيد لتضمين بيانات الاعتماد. تضمين الاعتمادات : إذا كنت تعمل في المشروع كفريق أو منظمة ، فقم بإدراج المتعاونين / أعضاء الفريق. يجب عليك أيضًا تضمين روابط لملفات التعريف الخاصة بهم على GitHub ووسائل التواصل الاجتماعي أيضًا.أيضًا ، إذا اتبعت البرامج التعليمية أو أشرت إلى مادة معينة قد تساعد المستخدم في بناء هذا المشروع المحدد أضف ترخيصًا : بالنسبة لمعظم ملفات README ، يعتبر هذا عادةً الجزء الأخير. يتيح للمطورين الآخرين معرفة ما يمكنهم وما لا يمكنهم فعله بمشروعك.لدينا أنواع مختلفة من التراخيص حسب نوع المشروع الذي تعمل عليه. اعتمادًا على الشخص الذي ستختاره ، سيحدد المساهمات التي يحصل عليها مشروعك.الأكثر شيوعًا هو ترخيص GPL الذي يسمح للآخرين بإجراء تعديل على التعليمات البرمجية الخاصة بك واستخدامها لأغراض تجارية هناك العديد من مولدات README المتاحة على الإنترنت. وفيما يلي بعض من أفضلها: readme.so: يوفر هذا المولد تصميمات جاهزة لقالب README ويمكنك تخصيص النص والصور والروابط والتنسيق بسهولة. Readme-md-generator: يعتبر هذا المولد من أفضل المولدات المتاحة حاليًا. يستخدم واجهة سطر الأوامر ويقوم بتوليد قالب README بناءً على المعلومات التي تقدمها ويوفر العديد من الخيارات لتخصيص التنسيق والمحتوى. DocToc: هذا المولد يساعدك على إنشاء فهرس للمستندات الخاصة بك وترتيبها بشكل مناسب. Readme.io: يتيح هذا المولد إنشاء صفحات ويب كاملة لمشاريعك بما في ذلك README والوثائق والكود الخاص بك. StackEdit: يوفر هذا المولد واجهة تحرير سهلة الاستخدام تتيح لك إنشاء README بشكل سريع وسهل. GitHub README Generator: هذا المولد متاح على موقع GitHub ويتيح لك إنشاء README بشكل سريع وسهل مع إمكانية تخصيص التنسيق والمحتوى.1 نقطة
-
تأكد أنك تقوم باستيراد وتضمين هذا المكون على نحو صحيح، في مكون App الأب مثلا يفترض أن يكون كـ: import React from 'react'; import FichAxois from './path/to/FicheAxois.jsx'; export function App(props) { return ( <div className='App'> <FichAxois /> </div> ); } يرجى الاشارة ايضا ان كانت تظهر أي اخطاء في نافذة الطرفية console1 نقطة
-
المعلومات التي بحاجة إلى توفيرها هي كالتالي: توضيح متطلبات النظام: تحديد المتطلبات اللازمة لتشغيل المشروع على النظام، مثل نسخة معينة من نظام التشغيل أو البرامج المطلوبة للتشغيل، على سبيل المثال: "يحتاج المشروع إلى نظام تشغيل Windows 10 ومتصفح Chrome". طريقة تحميل المشروع: تحديد كيفية تحميل المشروع، سواء عن طريق الحصول على الرمز المصدري أو تنزيل حزمة التثبيت، على سبيل المثال: "يمكن تحميل المشروع من مستودع GitHub أو من خلال تنزيل حزمة التثبيت". طريقة تثبيت المشروع: شرح كيفية تثبيت المشروع على النظام، سواء كان ذلك بتنزيل الحزمة وتثبيتها أو ببناء المشروع من الرمز المصدري، على سبيل المثال: "يمكن تثبيت المشروع بتنزيل حزمة التثبيت وتشغيلها على جهاز الكمبيوتر الخاص بك". كيفية تهيئة المشروع: شرح كيفية تهيئة المشروع قبل تشغيله، سواء كان ذلك بتكوين الملفات التكوينية أو بإعداد قاعدة البيانات، على سبيل المثال: "يجب تحرير ملف التكوين لتعيين المفاتيح السرية المطلوبة لتشغيل المشروع". كيفية تشغيل المشروع: شرح كيفية تشغيل المشروع، سواء بتشغيل الخادم أو بفتح صفحة الويب، على سبيل المثال: "يمكن تشغيل المشروع عن طريق تشغيل خادم الويب الذي يتم تضمينه في حزمة التثبيت، ثم فتح المتصفح والانتقال إلى عنوان URL الخاص بالمشروع". شرح وظائف المشروع: يمكنك شرح وظائف المشروع وكيفية استخدامها بشكل أفضل. توضيح المعلمات اللازمة: إذا كان المشروع يستخدم معلمات معينة، فعليك وضع شرح لهذه المعلمات وكيفية استخدامها بشكل صحيح. مثال للاستخدام: يمكنك وضع مثال عن كيفية استخدام المشروع بشكل صحيح من خلال توضيح المدخلات والمخرجات المتوقعة. توضيح الأخطاء الشائعة: يمكنك وضع تحذير للمستخدمين حول الأخطاء الشائعة التي قد يواجهونها عند استخدام المشروع وكيفية حلها. وبالنسبة للمشاريع الصغيرة فكل ما تحتاجه هو وصف بسيط للمشروع مع عنوان وصورة للتطبيق أو الموقع، مع عنوان ووصف للتقنيات واللغات المستخدمة، وعنوان ووصف لطريقة التشغيل. وهناك أداة بسيطة ستمكنك من فعل ذلك بكل سهولة: https://readmd.itsvg.in/ وإذا أردت المزيد من التخصيص وإضافة المزيد من المعلومات فالأداة التالية ستوفر لك ما تحتاجه: https://readme.so/ اللغة التي يتم بها كتابة ملفREADME اللغة الأكثر شيوعًا لكتابة README هي لغة تنسيق النصوص Markdown، لأنها توفر تنسيقًا بسيطًا وسهل القراءة للمستخدمين وتدعم تنسيقات متعددة مثل الصور والروابط والجداول والشفرة والاقتباسات والعناوين والنماذج والقوائم. بالإضافة إلى أن Markdown يعتبر لغة نصوص بسيطة وسهلة التعلم والاستخدام ولا تتطلب مهارات تقنية خاصة، مما يجعلها مثالية لكتابة ملفات README للمشاريع. ويمكن استخدام لغة HTML لكتابة ملف README، لأنها لغة تنسيق متعددة الاستخدامات وتدعم العديد من العناصر والسمات المختلفة التي يمكن استخدامها لتنسيق النص وتوضيح المشروع بشكل أفضل. أي يمكنك الجمع بين Markdown و HTML.1 نقطة
-
import React ,{ useEffect, useState } from "react"; let FicheAxois= ()=>{ let [state, setState]= useState([]); const fitshData= async ()=>{ await fetch('https://jsonplaceholder.typicode.com/posts' ,{method: 'GET' }).then(req=>req.json()).then(data=>setState(data)) } useEffect(()=>{ fitshData() },[]) return( <div> aaa </div> ) }; export default FicheAxois;1 نقطة
-
أنت تحاول تمرير سلسلة نصية تحتوي على رمز الأيقونة كـ "Icon" للمكون "Card"، وما يجب هو تمرير الأيقونة نفسها كعنصر منفصل داخل المكون. import { AiFillFacebook, AiFillTwitterSquare, AiFillInstagram, AiFillYoutube } from 'react-icons/ai'; function Card(props) { return ( <div> {props.Icon} </div> ); } function App() { return ( <div> <Card Icon={<AiFillFacebook size={22} />} /> <Card Icon={<AiFillTwitterSquare size={22} />} /> <Card Icon={<AiFillInstagram size={22} />} /> <Card Icon={<AiFillYoutube size={22} />} /> </div> ); } يتم استيراد الأيقونات من مكتبة "react-icons" ويتم تمريرها كـ argument منفصل داخل المكون "Card" باستخدام الأقواس الزوجية، ثم عرض الأيقونة داخل المكون "Card" باستخدام "props.Icon".1 نقطة
-
ربما هناك خطأ في عمود file_srno في الجدول الفرعي "details" الذي تم إنشاؤه في MySQL، حاول تجربة تعريف عمود السيريال "file_srno" على أنه مفتاح أساسي (primary key)، والذي يتم توليد قيمه تلقائياً بواسطة خاصية AUTO_INCREMENT. CREATE TABLE table_sub ( file_type INT NOT NULL, file_no INT NOT NULL, file_srno INT NOT NULL AUTO_INCREMENT PRIMARY KEY, descr NVARCHAR(100), FOREIGN KEY (file_type, file_no) REFERENCES table_main(file_type, file_no) ON UPDATE CASCADE ON DELETE CASCADE ); تم إضافة PRIMARY KEY في عمود file_srno لجعله المفتاح الأساسي، والاحتفاظ بخاصية AUTO_INCREMENT.1 نقطة
-
من استعمل qt designer في التصميم واستدعى مكتبة pyside في الكود هل يجب وضع نسخة GPL في ملف المشروع وبيع التطبيق بمصدر مفتوح ؟1 نقطة
-
PySide تندرج تحت رخصة LGPL فبالتالي يمكنك استدعاء اي شيء منها بدون ذكر ذلك حتى. ال QtDesigner مجرد تطبيق يساعدك على انشاء ملفات الواجهة بالتالي لا داعي ايضا لذكر رخصة، يمكنك اعتباره كالفوتوشوب.1 نقطة
-
أريد استعمال مكتبة qt في تطبيقي الخاص (تسيير صيدلية مثلا) بلغة بايثون حيث سأبيعه مغلق المصدر ، كيف أقوم بتنزيل qt بترخيص LGPL وليس GPL ؟1 نقطة
-
أتكلم عن المكتبات مفتوحة المصدر بمختلف التراخيص ، هل استدعاءها واستعمال كلاساتها وتوابعها دون نسخ كودها لا تخضع لشروط الترخيص ؟1 نقطة
-
يعني حسب ما فهمت هناك فرق بين استدعاء مكتبة ونسخ مكتبة وتعديل مكتبة، فاستدعاء مكتبة لا تخضع لشروط الترخيص أما النسخ والتعديل يخضعان لشروط الترخيص، هذا هو المقصود؟ وهل هذا الكلام صالح لكل لغات البرمجة ؟1 نقطة
-
1 نقطة
-
لإنشاء جدولين في قاعدة البيانات MySQL، اتبع الآتي: لإنشاء الجدول الرئيسي "master"، يمكن استخدام الأمر التالي: CREATE TABLE table_main ( file_type INT NOT NULL, file_no INT NOT NULL, file_date DATE, descr NVARCHAR(50), PRIMARY KEY (file_type, file_no) ); لإنشاء الجدول الفرعي "details"، استخدم الأمر التالي: CREATE TABLE table_sub ( file_type INT NOT NULL, file_no INT NOT NULL, file_srno INT NOT NULL AUTO_INCREMENT, descr NVARCHAR(100), PRIMARY KEY (file_type, file_no, file_srno), FOREIGN KEY (file_type, file_no) REFERENCES table_main(file_type, file_no) ON UPDATE CASCADE ON DELETE CASCADE ); ملاحظة: تم استخدام نوع البيانات INT للأعمدة file_type، file_no، و file_srno، استخدام نوع البيانات DATE للعمود file_date في الجدول الرئيسي، و استخدام NVARCHAR للأعمدة descr في الجدولين. كما تم استخدام AUTO_INCREMENT في الجدول الفرعي لتوليد قيم فريدة للعمود file_srno.1 نقطة
-
السلام عليكم اريد فقط الاستفسار عن مدة عرض رمضان سعر الدورتين بدورة واحدة لانه حاليا لا املك سعر الدورة واحتاج الى الوقت1 نقطة
-
أولاً، يجب أن نتحقق من القوس الأول في السلسلة، إذا كان مفتوحًا نقوم بإضافته إلى المكدس، وإذا كان مغلقًا فإن الأقواس غير صحيحة. ثم، نتحقق من القوس التالي في السلسلة، إذا كان مفتوحًا نقوم بإضافته إلى المكدس، وإذا كان مغلقًا نتحقق من القوس الأعلى في المكدس، إذا كان مفتوحًا نزيله من المكدس، وإذا كان مغلقًا فإن الأقواس غير صحيحة. وهكذا، نستمر في التحقق من الأقواس اللاحقة، حتى نصل إلى نهاية السلسلة. في حال انتهاءنا من السلسلة والمكدس فارغ، فإن الأقواس صحيحة. وإذا انتهت السلسلة ولكن كان هناك قوس مفتوح لم يتم إغلاقه، فإن الأقواس غير صحيحة. باختصار، يتم التحقق من الأقواس في ترتيبها الصحيح وفقًا للخطوات المذكورة، ويتم إضافة الأقواس المفتوحة إلى المكدس وإزالة الأقواس المغلقة من المكدس، وفي النهاية يجب أن يكون المكدس فارغًا لتكون الأقواس صحيحة.1 نقطة
-
نعم، يوجد فرق بين `npm start` و `npm run start`. - `npm start`: هو أمر مخصص في `package.json` لتشغيل التطبيقات التي تعتمد في التنفيذ على ملف `index.js`، وإذا لم يتم تعريف `npm start` في `package.json`، فسيتم البحث عن ملف `server.js` أو `app.js` لتنفيذه. - `npm run start`: هو أمر لتشغيل اي سكريبت خاص/ مخصص، يتم وضع هذا الأمر في `package.json` تحت `scripts`، ويمكنك تسمية هذا السكريبت مثلًا `serve`، وقم بتعريفه يدويًا مثل هذا: "scripts": { "serve": "node server.js" } في هذا المثال، سينفذ الأمر `npm run serve` سكريبت `serve` الذي ينفذ ملف `server.js`.1 نقطة
-
لتكون قادرًا على استخدام ال Layer via Cut، عليك التأكد من: الطبقة غير مقفلة الطبقة ليست Smart Object. بشكل عام ، يجب أن تكون طبقة نقطية تحتاج إلى تحديد شيء ما قم بالتأكد من الخطوة الأولى والأخيرة أما بالنسبة للثانية فيمكنك تجربة الحل التالي قم بتحديد ال Smart Object ثم قم بإختيار choose layer ثم Smart Objects ثم Rasterize1 نقطة
-
يمكنك تجربة الحلول التالية: تحقق من أن الصورة ليست محمية بشكل غير صحيح أو تحتوي على أي عيوب أخرى قد تؤثر على القدرة على قص الصور. في بعض الأحيان، يمكن أن يحدث خطأ معين عند استخدام "Layer via Cut"، لذا يمكنك محاولة استخدام "Layer via Copy" بدلاً من ذلك. قد يكون هناك بعض الأخطاء في الإصدار الذي تستخدمه من فوتوشوب، ولذلك يمكنك محاولة تحديث البرنامج إلى أحدث إصدار. يمكن أن تتسبب الأدوات المخصصة للقص في بعض الأحيان في مشاكل في عملية القص، لذلك يمكنك محاولة إعادة تعيين هذه الأدوات. وأيضًا حاول تجربة التالي: استخدام أداة "Marquee" لتحديد المنطقة التي ترغب في نسخها أو قصها. الذهاب إلى القائمة Layer > New > Layer via Cut/Copy. النقر على Ctrl+J. ولكن في بعض الأحيان، يتم تعطيل هذه الخيارات وتصبح رمادية ولا تعمل. ويتم ذلك لأن الفوتوشوب لا يتعرف على البيكسلات التي تريد قصها أو نسخها. ولحل هذه المشكلة، هناك حلاً بسيطاً، وهو النقر بزر الماوس الأيمن على الطبقة التي توجد بها الصورة واختيار "Rasterize Layer". وبعد ذلك، يمكن استخدام أحد الخيارات السابقة لعمل نسخة من الصورة أو قصها بحرية.1 نقطة
-
تحظى وظائف التصميم الجرافيكي باهتمام كبير في أيامنا هذه، وهو ليس بالأمر الغريب، إذ يسمح لك عالم التصميم بتطبيق مهاراتك الفنية والحاسوبية أيضًا؛ أضف إلى ذلك أن دخلك السنوي في مجال التصميم قد يتجاوز 100 ألف ريال في بعض الدول، وهو أمر مثير للاهتمام. يميل الكثير من الأشخاص إلى العمل عن بعد في مجال التصميم لأنه يساعدهم على ممارسة عمل يحبونه في ظروف وساعات عمل مرنة ومشجّعة. وتتنوع فرص العمل في مجال التصميم الجرافيكي عن بعد، ولكن المشكلة تكمن في أن هذه الفرص قد لا تتمتع بالجودة أو الروعة المطلوبة، مما سيُصعّب عليك اختيار الفرصة الجيدة، لذا سنقدم لك تاليًا دليلًا كافيًا لإيجاد فرص عمل عن بعد في مجال التصميم الجرافيكي عن بعد. اهتم بالطريقة التي تعبر بها نفسك يبدو الأمر في غاية المثالية عندما تسجل دخولك لتصبح عضوًا في منصة للعمل الحر، ثم تتلقى مباشرةً ردًّا على طلب العمل الذي قدّمته، حيث يقدّم لك مسؤول التوظيف عرضًا ممتازًا وتبدأ تعاونًا طويل الأمد مع الشركة؛ ولكنّ الأمر مختلف في الحقيقة، إذ يعاني المستقلون من استمرار تقديم العروض دون الحصول على رد يرضي طلبهم في أغلب المحاولات. أصبحت المنافسة جنونيّةً في سوق عمل التصميم الجرافيكي، لذلك من الصعب إقناع مسؤول التوظيف في شركة ما بروعة عملك وجودة الخدمة التي ستقدمها طالما أنك لا زلت مبتدئًا. يعاني الكثير من المصممين من تحديات كثيرة قبل الحصول على وظيفتهم الأولى في المجال، كما أنهم يضيعون وقتًا طويلًا ما ينجم عنه تثبيط في عزيمتهم، ولكن يجب عليك ألّا تيأس رغم صعوبة الأمر في البداية، إذ يجب عليك أن تعمل على جانبين أساسيين لتضمن نجاح طلب التوظيف الذي تقدمه. معرض أعمالك في مجال التصميم ستواجه العديد من حالات الرفض في حال عدم امتلاكك لمعرض أعمال على الإنترنت يعرض أعمالك في مجال التصميم إذا كنت تسعى للعمل في مجال التصميم عن بعد، ولن يُظهِر مسؤول التوظيف أي ترحيب أو استعداد لقبولك بجدّيّة. لذلك، حتى وإن كنت جديدًا في عالم التصميم ولا تملك ما يكفي من الأعمال لتتباهى بها في معرضك، فمن المفيد أن تستمر في تطوير معرض أعمال جذاب من خلال جمع كافة المشاريع التي كنت قد صمّمتها في السابق. لقد أنجزت العديد من الأعمال المميزة أثناء فترة تدريبك لتصبح مصمّمًا، وهذه المشاريع التي عملت عليها خلال فترة تدريبك ستكون نموذجًا مناسبًا للتطبيق العملي الذي أنجزته. لست بحاجة إلى إضافة كل تلك المشاريع، بل حاول اختيار الأفضل من بينها، ولا سيّما تلك التي تُظهر أسلوبك في التصميم، ولا تتوقف عن الابتكار أبدًا حتى وإن كنت تملك ما يكفي من المشاريع لعرضها في معرض أعمالك بحجة أنك لا تتقاضى المال مقابل إنجازك للعمل الذي تحب. ستتحسن مهاراتك بالتدريب المستمر، لذلك تستطيع أن تنجز تصاميمًا لأصدقائك أو معارفك مثلًا، بحيث تحصل على فرصة للعمل مع عميل حقيقي وتقييم احتياجاته قبل أن تسلّم العمل النهائي بجودة مميزة، وسيكون هذا المشروع بمثابة إضافة مثالية لمعرض أعمالك. اختر منصةً مناسبة، وابدأ ببناء معرض الأعمال من خلالها، ولا تكن متطرّفًا في هذا الاختيار. تقدم لك بعض المواقع إمكانية إنشاء موقعك الخاص لتأسيس معرض أعمالك فيه، إذ توفر لك إمكانية استخدام قالب جاهز مع وجود خيارات هائلة في غاية المرونة لإظهار مهاراتك، بحيث تستطيع تنصيب موقعك خلال ساعات، كما يمكنك تضمين مدونة أيضًا، مما سيمنحك المساحة الكافية للحصول على حملة تسويقية فعّالة ستساعدك على تحويل اسمك إلى علامة تجارية شخصية. لا تهمل تعزيز معرض أعمالك على منصات التوصل الاجتماعي ولا تنسَ Linked In، إذ أنك ستحصل من خلاله على العديد من العروض المقدّمة من قِبل زوار معرض أعمالك إذا كان مميّزًا. وبما أننا نغوص في عالم التصميم الجرافيكي الذي يعتمد على الانطباعات البصرية، فمن الضروري أن تهتم بمنصتي Instagram وpinterest، اللتان ستكونان بمثابة منصات تسويقية مثالية لك. السيرة الذاتية وملفك الشخصي على LinkedIn ستفكر حتمًا بالسيرة الذاتية عندما تتقدّم لشاغر وظيفي مكتبي ما، وعندما نتحدث عن فرص العمل عن بعد في مجال التصميم الجرافيكي، فمن الضروري أن تبحث عن طريقة لإظهار مهاراتك ومؤهلاتك وخبراتك بصيغة مبسّطة. بطبيعة الحال، لا نقصد السيرة الذاتية النصية التقليدية في حديثنا هذا، بل نتحدث عن السيرة الذاتية الرقمية التي تعطيك المساحة الكافية لإظهار مهاراتك في التصميم الجرافيكي الذي يُعَد مجال عمل قائم على الإبداع حيث تلعب البصريات الدور الأهم. يتمتع معظم المصممين بالمهارة الكافية للتعامل مع الجانب البصري من السيرة الذاتية، ولكن تكمن المشكلة في فهم المحتوى الذي يجب تضمينه في السيرة الذاتية للمصمم. يجب أن تزوّد مسؤول التوظيف بكافة المعلومات التي يرغب بمعرفتها عنك، إلى جانب إبداعك في إظهار لمستك الفنية. لا تنسَ حساب LinkedIn لما له من تأثير بالغ على إمكانية حصولك على وظائف مناسبة في مجال التصميم الجرافيكي. لا تقتصر أهمية LinkedIn على المساحة التي يقدمها لتعرض سيرتك الذاتية، بل يقدّم لك شبكةً متكاملةً تساعدك في إنشاء علاقات واتصالات مع أفراد وشركات في مجالك، كما يسمح LinkedIn للأفراد والشركات بعرض فرص العمل الشاغرة، مما سيساعدك على إيجاد الكثير من الفرص المثالية. يجب أن يكون حسابك في منصة LinkedIn مميّزًا، لذلك ركّز جيّدًا على خبراتك في المشاريع التي أنجزتها حتى وإن لم تملك ما يكفي من الخبرات لعرضها في سيرتك الذاتية وحسابك على المنصة. اُذكر جميع المشاريع التي أدرجتها في معرض الأعمال، واشرح المسؤوليات التي كانت على عاتقك في حال كنت تعمل ضمن فريق، أو اذكر الخصائص والتحديات الأساسية التي تُميّز المشروع في حال أنك أنجزته بمفردك. لا تهمل إدراج رابط الأعمال، إذ يحتاج مسؤول التوظيف إلى التحقق منه بعد مراجعة سيرتك الذاتية. انخرط في مجال تسويق المحتوى هل تريد أن تجذب أرباب العمل الذين يحتاجون إلى خدمات التصميم الجرافيكي؟ إذًا يجب عليك أن تعمل على العلامة التجارية الشخصية. سترغب بالطبع ببناء جمهور يحيط بمشاريعك، مما سيعطي انطباعًا عامًّا عن نفوذك في هذا المجال. وبالرغم من أن هذه العملية تتطلّب وقتًا وإصرارًا، إلا أن النتائج تستحق هذا المجهود. ضمّن قسمًا مخصّصًا للمدونة في موقعك، إذ أنها بداية جيّدة، ثم اختر بعض المواضيع وأضفها إلى تقويم التدوينات التي ستنجزها، إذ يتطلّب نجاح الحملة التسويقية ثباتًا وانتظامًا في مشاركة المحتوى ذو الجودة العالية. إليك بعض الاقتراحات التي ستساعدك في ابتكار مواضيع تدوين مناسبة وقيّمة: اكتب عن مشاريعك السابقة. اشرح دوافعك وراء تلك المشاريع. تحدّث عن مواضيع رائجة في عالم صناعة التصميم الجرافيكي. شارك مهاراتك. يحاول الكثيرون تعلّم التصميم الجرافيكي عن طريق الإنترنت، وبإمكانك مساعدتهم من خلال خبرتك. استخدم منصةً يرغب زوّارها بقراءة المنشورات المتعلّقة بالمواضيع التي تثير اهتماماتهم، ويجب أن تعرض تلك المنصة أعمالك أمام شريحة واسعة من الجمهور، مما سيساعدك في شق طريق أوسع باتجاه موقعك. كن مميّزًا. يجب أن تبدو مصمّمًا نافذ البصيرة ومتميّزًا وموهوبًا أمام أصحاب العمل المحتملين الذين قد يشاهدون عملك، إذ أنك لا تنخرط في حملة تسويق المحتوى لمجرّد أنها أمر رائج، ولا تكتب لمجرّد الكتابة. يكمن الهدف وراء الحملة التسويقية في تصميم شعار شخصي وعلامة تجارية تميّز عملك، لذلك أضف لمسةً من شخصيتك الإبداعية إلى العمل، وإليك هذه القاعدة الإلزامية: استخدم المصادر الصحيحة تهانينا! لقد حصلت على معرض أعمال رائع وسيرة ذاتية مميزة وحساب على LinkedIn، وبدأت بإنشاء مدونتك أيضًا، ماذا بعد؟ أنت الآن جاهز لتبدأ بالحصول على فرص عمل في مجال التصميم الجرافيكي عن بعد. وبطبيعة الحال، الأمر ليس بالسهولة التي يبدو عليها، فقد يحالفك الحظ بالحصول على أول صفقة من المحاولة الأولى، ولكن إيّاك أن تيأس إن لم يحدث ذلك منذ البداية. الخطوة الأهم هي الاعتماد على المصادر الصحيحة عندما تحاول البحث عن عمل في التصميم عبر الإنترنت، إذ يجب أن توسّع دائرة بحثك لما هو أوسع من LinkedIn سوق العمل الشاسع الذي سبق وذكرناه. إليك بعض المنصات التي يجب تأخذها بالحسبان: مستقل: واحدة من أكبر منصات العمل الحر العربي عبر الإنترنت وأكثرها تنوّعًا، والتي يصل العملاء بالمستقلّين المناسبين لإنجاز أعمالهم. تعمل مرشّحات البحث في الموقع بفعالية كبيرة، بحيث تستطيع أن تجد الإعلانات التي تطلب مصمم جرافيكي يتمتع بالمهارات التي تملكها؛ كما أن إرسال عرض مضبوط هو أمر إلزامي، إذ يجب أن تنتبه إلى متطلبات وظائف التصميم المعروضة، ومن ثم إرسال عرضك مباشرةً؛ وتذكّر إرسال عيّنات من أعمالك أو رابط سيرتك الذاتية الرقمية. Behance: لا يقتصر موقع Behance على كونه معرضًا للأعمال، بل يملك شبكة توظيف أيضًا، لذلك ابدأ ببناء معرض أعمالك هناك، ثم اُدخل مضمار المنافسة على فرص العمل المتاحة. خمسات: وهو المكان المثالي الذي يبدأ منه أصحاب العمل الناشئين بإضافة خدماتهم المصغرة البسيطة مثل تصميم شعار أو بطاقة عمل. تتجلّى أهمية العمل في منصة خمسات بأنها السوق العربي اﻷكبر على اﻹنترنت، إذ تكمن احتمالات حصولك على عملاء وتقديم الخدمات كبيرًا جدًا. ولكن للحصول على العملاء بسرعة فأنت تحتاج للاهتمام بمعرض خدماتك عبر تقديم صور تدل على مهاراتك التصميمية ضمن هذا المعرض. بعد تقديم عشرات الخدمات لعشرات العملاء والحصول على تقييمات جيدة، ستستطيع ضم هذا اﻹنجاز إلى معارض أعمالك وسيرتك الذاتية بفخر. بيكاليكا: تستطيع هنا الحصول على دخل سلبي بسهولة عبر تقديم تصاميم وأعمال احترافية للبيع، إضافةً إلى المساهمة المهمة في مجتمعات بيكاليكا الخاصة بالمصممين. استمر بتطوير مهاراتك وتحديث معرض أعمالك يستسلم البعض ممن يعتقدون أن إيجاد فرصة عمل عن بعد في عالم التصميم الجرافيكي أمرًا سهلًا بعد بضعة محاولات قد تبوء بالفشل، وذلك بسبب الصدمة التي يتلقونها نتيجة المنافسة الهائلة ووجود عروض عمل عديمة الفائدة، لذا يجب عليك أن تبذل قصارى جهدك إذا أردت أن تكون منافسًا رائعًا في فرص عمل مميزة. أول ما يجب عليك فعله هو تقديم عرضك الأول، أي إذا لاحظت أن متجر القهوة المفضل لديك يعاني من مواد ترويجية رديئة مثلًا، فبإمكانك أن تبادر بأن تقترح تحسينات ذات أسعار مخفّضة، مما سيمنحك تجربة جديدة تضيفها إلى معرض أعمالك وخبرة جيّدة أيضًا. لن يأتي إليك العملاء لمجرّد أنك تجلس منتظرًا! لذلك لا تتوقف عن إنجاز المشاريع حتى وإن كانت من ابتكارك، إذ أنها لطريقة المثالية لجذب العملاء، ولا تهمل تطوير مهاراتك التصميمية وتحديث معرض أعمالك. إن إيجاد نمطك الفريد في عالم التصميم وتسليط الضوء عليه ليكون مميّزًا ليس بالأمر السهل. مع ذلك، لا تتوقف عن المحاولة أبدًا. لا تسمح لمعاناتك في إيجاد فرصة عمل مناسبة بأن تطفئ الشغف الذي رافقك منذ البداية ودفعك لتدخل عالم التصميم. استمر بفعل ما تحب، وستحصل حتمًا على فرص العمل المناسبة عن بعد في مجال التصميم الجرافيكي؛ وإلى ذلك الحين دع الأمور تسير في مسارها الطبيعي. ترجمة -وبتصرّف- للمقال How to Find Freelance Graphic Design Jobs Online. اقرأ أيضًا كيف تحظى بوظيفة في التصميم الجرافيكي؟ كيف تحصل على وظيفة مصمم (وفقًا لأكثر من 1000 رائدًا في التصميم) ما هو العمل عن بعد؟ دليلك لبناء فِرق عمل عن بعد والحصول على وظيفة أحلامك من المنزل مواقع العمل الحر والعمل عن بعد لتصميم الرسوميات1 نقطة
-
إليك بعض النصائح التي من شأنها تحسين جودة المحتوى والذي بدوره سيزيد من عدد الزيارات لموقعك: إختيار موضوع يهم الجمهور المستهدف، ويمكن البحث عن المواضيع باستخدام أدوات البحث عن الكلمات الرئيسية. إجراء بحث عن الكلمات الرئيسية التي تصف الموضوع وتساعد في زيادة ظهور المقال في محركات البحث. كتابة المقال باستخدام أسلوب معين، مثل "طريقة الهرم المقلوب"، والتي تساعد على كتابة مقال يحوي معلومات قيمة ومنظمة بشكل مناسب، أي ذكر المعلومات القيمة في البداية والتي من شأنها أن تجذب إنتباه الزوار. تحسين المحتوى بشكل داخلي من خلال استخدام أفضل الممارسات لتحسين محتوى الصفحة، مثل إضافة عناوين تحتوي على الكلمات الرئيسية وتصميم صفحة جذابة. إضافة وسائط متنوعة، مثل الفيديو والصور والرسوم البيانية والأدوات الرقمية لجعل المقال أكثر جاذبية وإثارة للاهتمام. تطوير استراتيجية لمشاركة المقال عبر مختلف القنوات الممكنة، مثل مواقع التواصل الاجتماعي والبريد الإلكتروني والمدونات وغيرها. تضمين محتوى يمكن وصله بروابط إلى موقعك، وذلك لزيادة مصداقية الموقع في محركات البحث، حيث يمكن استخدام أنواع مختلفة من المحتوى الذي يمكن ربطه بروابط، مثل الفيديو والرسوم البيانية والأدوات الرقمية والمزيد. ركّز على إنشاء محتوى طويل لمدوّنتك حيث تشير الدراسات إلى أن المحتوى الطويل يؤدي إلى أداء أفضل في نتائج البحث من المشاركات القصيرة أو الضعيفة، ولكن هناك شرطًا مهمًا وهو أن يكون المحتوى الطويل جيدًا ومناسبًا للقارئ. فالمحتوى الطويل هو المحتوى الذي يتميّز بعدد كبير من الكلمات ويعرض أفكارًا ومعلومات عميقة حول موضوع معيّن. يمكن أن يساعد المحتوى الطويل في تحسين مراكز البحث بسبب زيادة عدد الكلمات الرئيسية المستخدمة في المحتوى وأيضًا بسبب قدرته على إرضاء القارئ وتلبية استفساراته، مما يزيد من فرص المشاركة في وسائل التواصل الاجتماعي أو الربط بمواقع أخرى ويؤدي إلى زيادة حركة المرور. كما أن المحتوى الطويل يزيد من وقت الإقامة لدى الزائر، وهو الوقت اللازم بين لحظة النقر على نتائج البحث ولحظة العودة إلى نتائج محرك البحث، وهناك دراسات تشير إلى وجود علاقة بين وقت الإقامة الطويل وترتيبات البحث الأعلى. أيضًا حافظ على تحديث محتوى الموجود، فإنشاء محتوى "جديد" أمرًا حيويًا لتحقيق نتائج بحث جيدة وزيادة حركة المرور إلى موقعك، ولكن ينبغي أن تركز على جودة المحتوى بدلاً من الكمية. يمكنك الاستثمار في وقتك لتحسين المحتوى الحالي وجعله أفضل عن طريق مراجعة المشاركات السابقة باستمرار وتحديثها باستخدام أحدث المعلومات المتاحة. وهذا ينطبق بشكل خاص على مراجعات المنتجات، ولكن حتى "المحتوى الأخضر" (المحتوى الدائم الذي يتضمن حقائق لا تتغير كثيرًا، إن كانت تتغير على الإطلاق) يمكن أن يستفيد من إعادة النظر فيه وتحسينه من وقت لآخر. ويتميز تحديث المحتوى القديم بإرسال إشارات "التحديث" إلى جوجل، مما يعطي إشارات إيجابية للخوارزميات التي تستخدمها جوجل، بالإضافة إلى زيادة طول المنشورات وتوفير المحتوى "الطويل" الذي غالبًا ما يعمل بشكل أفضل في نتائج البحث. ولكن، يجب أن نذكر أن هناك قيمة مهمة في إنشاء محتوى جديد بشكل دوري، لأن كلما زاد عدد المحتوى على موقعك، كلما كان لديك المزيد من الكلمات الرئيسية التي يمكنك تصنيفها في نتائج البحث، ولكن هذا يتحقق فقط إذا كان المحتوى قويًا ومفيدًا للقارئ.1 نقطة
-
نرحب بك في أي وقت يا محمد وإذا كنت تريد إلغاء الإشتراك، فالسبيل الوحيد هو عن طريق التحدث إلى مركز المساعدة الخاص بأكاديمية حسوب، وسيتم الرد عليك لا تقلق. وإذا كنت تواجه أي مشكلة في الدورات أو تريد فهم شيئًا ما فلا تتردد في السؤال. تحياتي.1 نقطة
-
1 نقطة
-
مرحبًا @محمد بن حبيش يمكنك التواصل مع مركز المساعدة بخصوص طلبك، ثم الإنتظار وسيتم الرد عليك بلا شك، لذلك أرجو من الإنتظار. ولكن هل يوجد مشكلة تواجهك تريد لها حل؟ تحياتي.1 نقطة
-
السلام عليكم عندما ارفع الخط واضمنه في تنسيق راس الصفحة style لايتم تحميل الخط ويظهر لي الخطا التالي وهل تعمل الدالة asset في راس الصفحة ؟ <style> @font-face { font-family: Cairo; src: url('{{ public_path('fonts/Cairo-Medium.ttf') }}'); } * { font-family: Cairo ; } </style> Not allowed to load local resource: file:///C:/laragonww-appstorage%0Fonts/Cairo-Medium.ttf مثلا لما اضعها بهاذ الشكل <style> @font-face { font-family: Cairo; src: url('http://127.0.0.1:8000/storage/fonts/Cairo-Medium.ttf'); } * { font-family: Cairo ; } </style> يعلق ويطلعلي Maximum execution time of 60 seconds exceeded1 نقطة
-
هذا المقال جزء من سلسلة «مدخل إلى الذكاء الاصطناعي»: الذكاء الاصطناعي: أهم الإنجازات والاختراعات وكيف أثرت في حياتنا اليومية الذكاء الاصطناعي: مراحل البدء والتطور والأسس التي نشأ عليها المفاهيم الأساسية لتعلم الآلة تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال يمكنك قراءة السلسلة على شكل كتاب إلكتروني بالانتقال إلى صفحة الكتاب، مدخل إلى الذكاء الاصطناعي وتعلم الآلة. إن سبق وحاولت قراءة أي مقالٍ على الإنترنت يتحدث عن تعلّم الآلة، فلا بدّ من أنك عثرت على نوعين من المقالات؛ فإما أن تكون سميكة وأكاديمية ومليئة بالنظريات (عن نفسي لم أستطع حتى تجاوز نصف مقال)، أو عن القصص الخيالية المريبة حول سيطرة الذكاء الصنعي على البشر، أو منهم من يتحدث عن البيانات وتأثيرها الساحر على مجالات العلوم الأخرى أو البعض الآخر من المقالات يتحدث عن كيفية تغيّر وظائف المستقبل. لم يكن هنالك أي كتاب يضعني على بداية الطريق لكي أتعلم أبسط الأساسيات لأنتقل بعدها إلى المفاهيم المعقدة واثق الخطى. لذا كان لا بدّ لي من كتابة مقالٍ بسيط ومفهوم وواقعي لطالما تمنيت وجوده. سيكون هذا المقال مقدمة بسيطة لأولئك الّذين أرادوا دومًا فهم طريقة عمل مجال تعلّم الآلة. بتطبيق أفكاره على أمثلة من مشاكل العالم الحقيقي، والحلول العملية المطبقة، بلغة بسيطة ومفهومة، وتجنب النظريات الصعبة قدر الإمكان. ليستطيع الجميع فهم ماهيّة هذا العِلم سواءً أكانوا مبرمجين أو مدراء بل وحتى لأي شخص كان. فهرس المحتويات لماذا نريد من الآلات أن تتعلم؟ المكونات الرئيسية لتعلم الآلة 1. البيانات (Data) 2. الميّزات (Features) 3. الخوارزميات (Algorithms) الفرق بين التعلم (Learning) والذكاء (Intelligence) تعلم الآلة التقليدي التعلم الموجه (Supervised Learning) التصنيف (Classification) أشجار القرار (Decision Trees) الانحدار (Regression) التعلم غير الموجه (Unsupervised learning) التجميع (Clustering) خوارزمية K-mean خوارزمية DBSCAN تقليل الأبعاد (Dimensionality Reduction) تعلم قواعد الربط (Association Rule Learning) التعلم المعزز (Reinforcement Learning) طريقة المجموعات 1. طريقة التكديس (Stacking) 2. طريقة التعبئة (Bagging) 3. طريقة التعزيز (Boosting) الشبكات العصبية (Neural Networks) والتعلم العميق (Deep Leaning) الشبكات العصبية (Neural Networks) الشبكات العصبية التلافيفية (Convolutional Neural Networks) الشبكات العصبية المتكررة (Recurrent Neural Networks) التعلم العميق (Deep Learning) الفرق بين الشبكات العصبية والتعلم العميق الخلاصة المراجع وإليك المخطط الرئيسي للمواضيع التي سنتناولها في هذه المقالة ملخصة بالصورة التالية: لماذا نريد من الآلات أن تتعلم؟ هذا صديقنا أحمد يريد شراء سيارة ويحاول حساب مقدار مبلغ المال الّذي سيحتاجُ لتوفيره شهريًا. واستعرض عشرات الإعلانات على الإنترنت وعلم بأن السيارات الجديدة يبلغ سعرها حوالي 20000 دولار، والسيارات المستعملة لعام واحد يبلغ سعرها 19000 دولار، والمستعملة لعامين يبلغ سعرها 18000 دولار وهكذا دواليك. يبدأ أحمد -محللنا الرائع- بملاحظة نمط معين لسعر السيارات؛ إذ يعتمد سعر السيارة على مدة استخدامها، وينخفض سعرها بمقدار 1000 دولار مقابل كلّ عام من عمرها، لكن سعرها لن ينخفض أقل من 10000 دولار. في هذه الحالة وطبقًا لمصطلحات تعلّم الآلة يكون أحمد قد ابتكر ما يُعرفُ بالانحدار (Regression): وهي طريقة لتوقع قيمة (أو سعر) معيّن على أساس بيانات قديمة معروفة. أغلب الناس تؤدي هذا الأمر طوال الوقت دون أن تشعر به، فمثلًا عند محاولتنا لتقدير السعر المعقول لجهاز أيفون مستعمل على موقع eBay، أو أثناء محاولتنا معرفة وزن اللحوم المناسب والكافي لبلوغ حدّ الشبع لكلّ شخص من المدعوين على عزومة الغداء. فعندها سنبدأ بتقدير الأمر ونسأل أنفسنا، هل 200 غرام كافي للشخص؟ أم 500 غرام أفضل؟ سواءً اعترفنا بذلك أم لا، أغلبنا يؤدي هذه المهمة لا شعوريًا. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن سيكون من الجميل أن يكون لدينا صيغة بسيطة مثل هذه لحلّ كلّ مشكلة في العالم. وخاصة بالنسبة لعزومة الغداء. ولكن لسوء الحظ هذا مستحيل. لنعود إلى مثال السيارات. المشكلة الحقيقية في هذا المثال هو وجود تواريخ تصنيع مختلفة، وعشرات الأنواع من السيارات، والحالة الفنية للسيارة، بالإضافة لارتفاع الطلب الموسمي على سيارة معينة، والكثير من العوامل المخفية الأخرى الّتي تؤثر بسعر السيارة. وبالتأكيد لن يستطيع صديقنا أحمد الاحتفاظ بكلّ هذه البيانات في رأسه أثناء حسابه للسعر. معظم الناس كسالى بطبعهم ولذلك سنحتاج حتمًا لآلات لتأدية العمليات الرياضية. لذا لنجاري الوضع الحاصل ولِنتجه باتجاه توفير آلة تؤدي هذه المهمة الحسابية الّتي واجهناها. ولنُوفر لها بعض البيانات اللازمة وسنطلبُ منها العثور على جميع الأنماط المخفية المتعلقة بالسعر. الجميل في الأمر أن هذه الآلة ستُؤدي هذه المهمة بطريقة أفضل بكثير مما سيُؤديه بعض الناس عند تحليلهم بعناية لجميع التبعيات المتعلقة بالسعر في أذهانهم. في الحقيقة كان هذا النوع من المشاكل المحفز الأساسي لولادة تعلّم الآلة. المكونات الرئيسية لتعلم الآلة لو أردنا اختصار جميع الأهداف الكامنة وراء مجال تعلّم الآلة فسيكون الهدف الوحيد هو توقع النتائج معينة بناءً على البيانات المدخلة (أي التعلّم من البيانات المدخلة). وهذا خلاصة الأمر. إذ يمكن تمثيل جميع مهام تعلّم الآلة بهذه الطريقة. كلّما زاد تنوع البيانات (تسمى في بعض الأحيان بالعينات) المجمعة لديك، كلّما كان مهمة العثور على الأنماط ذات الصلة والتنبؤ بالنتيجة أسهل نسبيًا. لذلك، فإن أي نظام يستخدم تعلّم الآلة سيحتاجُ لثلاثة مكونات رئيسية وهي: 1. البيانات (Data) هل تريد الكشف عن رسائل البريد الإلكتروني المزعجة؟ احصل على عينات من الرسائل هذه الرسائل المزعجة. هل تريد التنبؤ بالتغيرات الّتي تطرأ على أسعار الأسهم؟ ابحث عن سجلات أسعار الأسهم. هل تريد معرفة ما هي تفضيلات المستخدم؟ حللّ أنشطته على الفيسبوك، واعتقد بأن مارك زوكربيرج ماهرٌ جدًا في ذلك. كلما كانت البيانات أكثر تنوعًا، كانت النتيجة أفضل. في بعض الأحيان تكون عشرات الآلاف من سجلات البيانات هي الحد الأدنى لاستنتاج معلومة معينة. وفي البعض الآخر نحتاج إلى ملايين العينات. هناك طريقتين رئيسيتين للحصول على البيانات: الطريقة اليدوية. الطريقة الآلية. تتميز البيانات المجمّعة يدويًا باحتوائها على أخطاء أقل بكثير بالموازنة مع نظيرتها الآلية، ولكنها بالمقابل تستغرق وقتًا أطول في التجميع مما يجعلها أكثر تكلفة عمومًا. أما الطريقة الآلية فتكون أرخص إذ كلّ ما سنفعله هو جمع كلّ ما يمكننا العثور عليه على أمل أن تكون جودة هذه البيانات مقبولة. تستخدم بعض الشركات مثل غوغل عملائها لتصنيف البيانات لهم مجانًا. هل تعلم لماذا طريقة التحقق البشري ReCaptcha (المستخدمة في أغلب المواقع) تجبرك على "تحديد جميع لافتات الشوارع الموجودة في صورة معينة"؟ في الحقيقة إن هذه الطريقة ما هي إلا وسيلة لتصنيف البيانات وتعظيم الاستفاد منها. إذ يستغلون حاجتك للتسجيل في الموقع معين ويسخّرونك مجبرًا للعمل لديهم وبالمجان. مدعين بأنهم بهذه الطريقة يختبرونك بأنك بشري! نعم هذا بالضبط ما يفعلونه! تبًا لهم الأشرار! أراهن لو أنك بمكانهم فستُظهر رمز التحقق البشري أكثر منهم بكثير. أليس كذلك؟ بيد أن من الصعوبة بمكان الحصول على مجموعة جيدة من البيانات -والتي تسمى عادةً مجموعة بيانات (Dataset). وهذه المجموعات مُهمّة للغاية بل إن مجموعة البيانات ذات الجودة العالية هي في الواقع كنز حقيقي لصاحبها لدرجة أن الشركات يمكن أن تكشف أحيانًا عن خوارزمياتها، إلا أنها نادرًا ما تكشف مجموعات البيانات الخاصة بها. 2. الميزات (Features) تُعرف أيضًا باسم المعاملات (Parameters) أو المتغيّرات (Variables). والتي يمكن أن تعبر عن المسافة المقطوعة بالسيارات، أو جنس المستخدم، أو سعر السهم، أو تكرار كلمة معينة في النص. بعبارة أخرى، هذه هي الميزات الّتي يجب أن تنظرَ لها الآلة. عندما تكون البيانات مخزنة في الجداول، يكون الأمر بسيطًا - فالميّزات هي أسماء الأعمدة. ولكن ماذا لو كان لديك 100 غيفابايت من صور القطط؟ بكلّ تأكيد لا يمكننا اعتبار كلّ بكسل ميزّة. هذا هو السبب بكون اختيار الميّزات الصحيحة يستغرق عادة وقتًا أطول من أي خطوة أخرى في بناء نظام يعتمد على تعلّم الآلة. وهذا أيضًا هو المصدر الرئيسي للأخطاء. ولذلك دائمًا ما تكون الاختيارات البشرية غير موضوعية. إذ يختارون فقط الميّزات الّتي يحبونها أو تلك الّتي يجدونها "أكثر أهمية". ولذا من فضلك تجنب أن تكون بشريًا! 3. الخوارزميات (Algorithms) وهو الجزء الأسهل والأكثر وضوحًا. إذ يمكن حلّ أي مشكلة بطرق مختلفة. بيد أن الطريقة الّتي تختارها ستُؤثر على دقة النموذج النهائي وأدائه وحجمه. هناك فارق بسيط واحد مهم: إذا كانت البيانات سيئة فلن تساعدك حتى أفضل خوارزمية موجودة. في بعض الأحيان يشار إليها بمصطلح "الدخل السيئ سيؤدي إلى نتائج سيئة". لذلك لا تهتم كثيرًا لنسبة الدقة، وحاول الحصول على المزيد من البيانات كبداية. من الجدير بالذكر أن مصطلح نموذج (Model) يشير إلى ما خلاصة ما تعلمته من البيانات، ويكمننا في بعض الأحيان استخدام نموذج جاهز وتمرير البيانات له أو تحسين نموذج حالي. الفرق بين التعلم (Learning) والذكاء (Intelligence) إن سبق ورأيت مقالًا بعنوان "هل ستحلّ الشبكات العصبية محل تعلم الآلة؟" أو على شاكلته من العناوين الّتي تنشرها بعض المواقع التابعة لوسائل إعلامية على الإنترنت. دائمًا ما يسمي رجال الإعلام هؤلاء أي انحدار خطي (Linear Regression) على أنه ذكاء اصطناعي، بل إن بعض وسائل الإعلام تضخم الأمور لدرجة يصعب تصديقها حتى أصبحنا نخاف من الذكاء الصنعي كما خاف أبطال فيلم Terminator من الروبوت SkyNet. وإليك صورة توضح المفاهيم وتفض الالتباس الموجود: علوم الحاسب (Computer Science): عمومًا هو دراسة أجهزة الحاسب بما فيها من أسس نظرية و حسابية، كما تشتمل على دراسة الخوارزميات، وبُنى المعطيات وأساسيات تصميم الشبكات ونمذجة البيانات ..وغيرها. الذكاء الصناعي (Artificial Intelligence): وهو فرع من فروع علوم الحاسب يهدف إلى تعزيز قدرة الآلات والحواسيب على أداء مهام مُعينة تُحاكي وتُشابه تلك الّتي تقوم بها الكائنات الذكيّة؛ كالقدرة على التفكير، أو التعلُم من التجارب السابقة، أو غيرها من العمليات الأُخرى الّتي تتطلب عمليات ذهنية. تعلم الآلة (Machine Learning): وهو جزء مهم من الذكاء الاصطناعي، وهو أحد فروع الذكاء الاصطناعي الّذي يُعنى بجعل الحاسوب قادرًا على التعلُم من تلقاء نفسه من أيّ خبرات أو تجارب سابقة، مما يجعله قادرًا على التنبؤ واتخاذ القرار المُناسب بصورة أسرع، ولكن تعلم الآلة ليس الفرع الوحيد الّذي يؤدي هذه المهمة. الشبكات العصبية الاصطناعية (Artificial Neural Networks): وهي من أحد أشهر الطرق الشعبية في مجال تعلّم الآلة، ولكن هناك طرق أخرى جيدة أيضًا. التعلم العميق (Deep Learning): هو طريقة حديثة لبناء وتدريب واستخدام الشبكات العصبية. وهي بالأساس هيكلية جديدة للشبكات العصبية. وحاليًا لا أحد يفصل التعلم العميق عن "الشبكات العصبية العادية". حتى أننا نستخدم نفس المكتبات لهم. من الأفضل دومًا تسمية نوع الشبكة وتجنب استخدام الكلمات الرنانة. من المهم دائمًا تذكر بأنه لا توجد طريقة واحدة أبدًا لحل مشكلة معينة في مجال تعلّم الآلة. بل هناك دائمًا العديد من الخوارزميات الّتي يمكنها حل نفس المشكلة، وتبقى مهمة اختيار الطريقة أو الخوارزمية الأنسب عائدة إليك. إذ يمكنك حلّ أيّ شيء باستخدام شبكة عصبية اصطناعية، ولكن من الّذي سيدفع لك ثمن استئجار (أو حتى شراء) بطاقة معالجة الرسوميات (GPU) من نوع GeForces؟ لنبدأ بنظرة عامة أساسية على الاتجاهات الأربعة السائدة حاليًا في مجال تعلّم الآلة. تعلم الآلة التقليدي جاءت الطرق الأولى لتعلّم الآلة من مجال الإحصاء البحت في خمسينات القرن الماضي. إذ اعتمد العلماء على حلّ معظم المهام الرياضية الرسمية من خلال البحث عن الأنماط في الأرقام، وتقييم قرب نقاط البيانات، وحساب اتجاه المتجهات. يعمل حاليًا نصف الإنترنت على هذه الخوارزميات. فعندما ترى قائمة بالمقالات المرشحة لك قراءتها في أحد المواقع، أو عندما يحظر البنك الّذي تتعامل معه بطاقتك عند تمريرك إياها على الآلة في محطة وقود عشوائية في مكان مجهول بعيدة عن سكنك، فعلى الأرجح هذه الأفعال ناتجة عن خوارزميات تعلّم الآلة. تعد الشركات التكنولوجيا الكبرى من أكبر المعجبين بالشبكات العصبية، إذ أنها تستطيع الاستفادة منها بقدر أكبر من الشركات الناشئة. فمثلًا يمكن لدقة صغيرة ولتكن 2٪ لإحدى خوارزمياتها الحساسة أن تعود بالنفع على إيرادات الشركة بمبلغ مالي ضخم يبلغ 2 مليار دولار. ولكن عندما تكون شركتك صغيرة وناشئة، فهذه النسبة ليست ذات فائدة كبيرة. فإذا أمضى المهندسين في فريقك البرمجي سنة كاملة يعملون على تطوير خوارزمية توصية جديدة لموقع التجارة الإلكترونية الخاص بك، مع معرفتهم بأن 99٪ من الزيارات تأتي من محركات البحث. عندها ستكون فائدة الخوارزمية قليل جدًا إذ لم عديمة الفائدة تمامًا وخصيصًا أن معظم المستخدمين لم يفتحوا الصفحة الرئيسية. فهذا سيكون أكبر هدر لطاقة فريقك البرمجي وبذلك سيكون أسوء استثمار لهذه العقول خلال هذه السنة. بصرف النظر عن ما يقال عن هذه الطرق إلا أنها سهلة سهولة كبيرة. بل إنها مثل أساسيات الرياضيات وأغلبنا يستخدمها يوميًا بدون أن يفكر بها. ينقسم تعلّم الآلة الكلاسيكي إلى فئتين وهما التعلّم الموجّه (ويسمى أيضًا التعلّم الخاضع للإشراف) و التعلّم غير الموجّه (ويسمى أيضًا التعلّم غير الخاضع للإشراف). التعلم الموجه (Supervised Learning) تحتوي الآلة على "مشرف" أو "مُعلّم" يزود الآلة بجميع الإجابات الصحيحة والدقيقة، مثل تحديد فيما إذا كان الشكل في الصورة لقطة أو كلب. قسّم (أو صنّف) المعلم بهذا الطريقة فعليًا البيانات إلى قطط وكلاب، ويستخدم الجهاز هذه الأمثلة الصحيحة للتعلم منها. واحدًا تلو الآخر. أما التعلم غير الموجّه فأن سيترك الآلة بمفردها مع كومة كبيرة من صور الحيوانات ومهمتها ستكون تصنيف هذه الصور. وذلك لأن البيانات غير مصنفة، ولا يوجد معلّم يحدد لنا ما الشكل الموجود في هذه الصور، ولذلك ستحاول الآلة بمفردها العثور على أي أنماط في الصور لتحديد الفوارق ومعرفة ما الموجود في الصور. سنتحدث عن هذه الطرق في التعرف على الأنماط لاحقًا. من الواضح أن الآلة ستتعلم أسرع بكثير مع معلّم، لذلك فالتعلّم الموجّه مستخدمٌ بكثرة في المهام الواقعية. هناك نوعين رئيسيين لطريقة التعلم الموجّه وهما: التصنيف (Classification): التنبؤ بصنف كائن معين. الانحدار (Regression): التنبؤ بنقطة معينة على محور رقمي. التصنيف (Classification) تقسيم الكائنات أو العناصر بناءً على إحدى السمات المعروفة مسبقًا. افصل الجوارب بحسب اللون، والمستندات بحسب اللغة، والموسيقى بحسب الأسلوب. وعمومًا يستخدم التصنيف من أجل: تصفية البريد الإلكتروني من الرسائل المزعجة. كشف عن اللغة المستخدمة. البحث عن وثائق مماثلة. تحليل المشاعر. التعرف على الحروف والأرقام المكتوبة بخط اليد. الكشف عن الغش. ومن بعض الخوارزميات الشائعة المستخدمة للتصنيف: خوارزمية بايز أو المصنّف المعتمد على قانون بايز في الاحتمالات Naive Bayes. خوارزمية شجرة القرار Decision Tree. خوارزمية الانحدار اللوجستي Logistic Regression. خوارزمية الجار الأقرب K-Nearest Neighbours. خوارزمية الدعم الآلي للمتجه Support Vector Machine. ويوجد أيضًا العديد من الخوارزميات الأخرى. غالبًا ما يعتمد مجال تعلّم الآلة على تصنيف الأشياء. إذ تكون الآلة في هذه الحالة مثل طفل يتعلم كيفية فرز الألعاب: فها هي الدمية، وهذه هي السيارة، وهذه هي الشاحنة …إلخ ولكن مهلًا. هل هذا الأمر صحيح؟ هل سيعرف الطفل المعنى الحقيقي للدمية أو للسيارة؟ ليستطيع بعدها تمييز أي دمية مهما اختلف شكلها ولونها وطريقة صنعها؟ أي بعبارة أخرى، هل سيستطيع أن يعمم ما تعلمه؟ في التصنيف سنحتاج دائمًا لمعلّم. ويجب تصنيف البيانات بميّزات (Features) حتى تتمكن الآلة من تعيين الأصناف المناسبة بناءً على هذه الميّزات. في الحقيقة يمكننا تصنيف كلّ شيئ تقريبًا ابتداءً من تصنيف المستخدمين بناءً على اهتماماتهم (كما تفعل خوارزمية فيسبوك)، والمقالات المستندة إلى اللغة أو الموضوع (وهذا أمر مهم لمحركات البحث)، والموسيقى المبنية على الأسلوب سواءً أكانت موسيقى جاز أو هيب هوب …إلخ (هذا الأمر نشاهده في قوائم تشغيل الخاصة بتطبيق Spotify)، وحتى تصنيف رسائل البريد الإلكتروني الخاصة بك. في تصفية الرسائل المزعجة وغير المرغوب بها، تستخدم خوارزمية بايز Naive Bayes على نطاق واسع. إذ تحسبُ الآلة عدد الكلمات الجيدة في الرسالة وعدد الكلمات الاحتيالية أيضًا بناءً على تصنيف سابق للكلمات موجود في قاعدة بيانات أو مجموعة بيانات (Dataset)، ومن ثمّ تضرب الاحتمالات باستخدام معادلة بايز، وتجمعُ النتائج النهائية وبهذه البساطة أصبح لدينا جهاز يستفيد من طرق تعلّم الآلة من أجل أن يزيد ذكائه ومعرفته. بعدها بفترة وجيزة تعلم مرسلو البريد العشوائي كيفية التعامل مع هذه المرشحات -إن صح التعبير- والّتي تعتمد على خوارزمية بايز فعكفوا على إضافة الكثير من الكلمات المصنّفة على أنها "جيدة" في نهاية البريد الإلكتروني لتُتضاف هذه الكلمات إلى العملية الحسابية الخاصة بحساب احتمالات كون الرسالة مزعجة أم لا. ومن المفارقة أن هذه الثغرة سمّيت لاحقًا بتسمم بايز. دخلت خوارزمية بايز التاريخ باعتبارها من أوائل الخوارزميات الأنيقة والمفيدة عمليًا في ترشيح رسائل البريد الإلكتروني، ولكن في وقتنا الحالي لا تستخدم هذه الخوارزمية وإنما تستخدم خوارزميات أكثر قوة وذكاءً معتمدًا على الشبكات العصبية الاصطناعية لتصفية رسائل البريد العشوائي المزعج. إليك مثال عملي آخر على تطبيقات خوارزميات التصنيف. لنفترض أنك بحاجة لاقتراض بعض المال عن طريق بطاقتك الائتمانية. كيف سيعرف البنك إذا كنت تريد فعلًا أن تسدد هذا القرض أم لا؟ وبالتأكيد لا توجد طريقة مباشرة لمعرفة ذلك، مثل أن يسألك مثلًا. ولكن لدى البنك الكثير من الملفات الشخصية لأشخاص اقترضوا مالًا في الماضي. في الواقع لدى البنك جميع البيانات المهمة حول أعمار الأشخاص المقترضين ومستوى تعليمهم ومهنهم ورواتبهم -والأهم من ذلك- حقيقة أن هل هؤلاء المقترضين سددوا القرض أم لا. وهذه البيانات مهمة جدًا إذ يمكننا تمريرها للنظام الداخلي للبنك الّذي يعتمد على تعلّم الآلة للعثور على الأنماط المحددة الموجودة في الأشخاص الّذين يسددون القروض، وبذلك يمكننا الحصول على الإجابة المبنية على هذه البيانات السابقة. في الواقع لا توجد مشكلة حقيقية في الحصول على إجابة من هذه البيانات. وإنما تكمن المشكلة في أنه لا يستطيع البنك أن يثق في إجابة الآلة ثقةً عمياء. فماذا لو حدث فشل في النظام أو في جزء منه مثل تعطل أحد الاقراص الصلبة المخزن عليها قواعد البيانات المطلوبة، أو أن أحد قراصنة الإنترنت هجم على الخادم وتلاعب بالخوارزميات أو البيانات. فما الّذي سيحدث في هذه الحالة؟ للتعامل مع هذه الحالة لدينا خوارزمية شجرة القرار. والتي ستقسّم جميع البيانات تلقائيًا إلى أسئلة أجوبتها نعم أو لا. قد يبدو الأمر غريبًا بعض الشيئ من منظور بشري، فمثلًا ما المشكلة إذا كان الدائن يكسب أكثر من 128.12 دولارًا أمريكيًا؟ بالرغم من ذلك تضع الآلة مثل هذه الأسئلة لتقسيم البيانات بشكل أفضل في كلّ خطوة. وهكذا تُصنعُ شجرة القرار. كلما كان الفرع أعلى كلما كان السؤال أعم. يمكن لأي محلل أن يأخذ ناتج الخوارزمية ويعلّم تمامًا ما هو القرار المناسب. يمكن ألا يشعر بأن كلّ تفاصيلها منطقية إلا أنه يستطيع أن يبني عليها قراره. أشجار القرار (Decision Trees) تستخدم خوارزمية شجرة القرار على نطاق واسع في المجالات ذات المسؤولية العالية مثل: التشخيص والطب وفي الأمور المالية. من أكثر الخوارزمات شيوعًا لتشكيل الأشجار هما خوارزمية CART وخوارزمية C4.5. ونادرًا ما تستخدم طريقة بناء أشجار القرار الأساسية الصرفة في وقتنا الحالي. إلا أنها غالبًا ما تضع حجر الأساس للأنظمة الكبيرة، بل إن المُجمّعات (Ensembles) المعتمدة على أشجار القرار تعمل بطريقة أفضل من المجمعات المعتمدة على الشبكات العصبية الاصطناعية (سنتحدث لاحقًا في هذا المقال عن كلّ جزء منهم بالتفصيل). عندما تبحث عن شيء ما في غوغل، فما يحدث بالضبط هو أن مجموعة من الأشجار ستبحث عن إجابة أو مجموعة من الإجابات المناسبة لك. وهذه الأشجار سريعة جدًا، ولذلك تحبها محركات البحث. تعدّ خوارزمية الدعم الآلي للمتجه (Support Vector Machines) والتي يشار إليها اختصارًا (SVM) هي الطريقة الأكثر شيوعًا للتصنيف الكلاسيكي. والمستخدمة لتصنيف كلّ شيئ موجود تقربيًا مثل: النباتات حسب مظهرها في الصور، والوثائق بحسب الفئات …إلخ. الفكرة وراء خوارزمية الدعم الآلي للمتجه بسيطة جدًا إذ تحاول رسم خطين بين نقاط البيانات الخاصة بك مع أكبر هامش بينهما. هناك جانب مفيد جدًا من خوارزميات التصنيف وهو الكشف عن البيانات الشاذة. فعندما لا تتناسب الميزة مع أيّ من الفئات، فإننا نبرزها. وتستخدم هذه الطريقة حاليًا في الطب وتحديدًا في أجهزة التصوير بالرنين المغناطيسي، تبرز الحواسيب جميع المناطق المشبوهة أو انحرافات الاختبار. كما تستخدم أيضًا في أسواق الأسهم للكشف عن السلوك غير الطبيعي للتجار لمعرفة ما يحدث وراء الكواليس. الجميل في الأمر أنه عندما نعلّم الحاسب الأشياء الصحيحة فنكون علمناه تلقائيًا ما هي الأشياء الخاطئة. القاعدة الأساسية هي كلّما زاد تعقيد البيانات، زاد تعقيد الخوارزمية. بالنسبة للنصوص والأرقام والجداول سنختار النهج الكلاسيكي. إذ النماذج الناتجة ستكون أصغر، وتتعلم أسرع وتعمل بوضوح أكبر. أما بالنسبة للصور ومقاطع الفيديو وجميع أنواع البيانات المعقدة الأخرى، سنتجه بالتأكيد نحو الشبكات العصبية. منذ خمس سنوات فقط كان بإمكانك العثور على مصنف للوجه مبني على خوارزمية الدعم الآلي للمتجه (SVM). حاليًا أصبح من السهل الاختيار من بين مئات الخوارزميات المعتمدة على الشبكات العصبية المدربة مسبقًا. أما بالنسبة لمرشحات البريد العشوائي فلم يتغير شيئ. فلا تزال بعض الأنظمة مكتوبة بخوارزمية الدعم الآلي للمتجه (SVM). الانحدار (Regression) وهو طريقة لرسم خط بين مجموعة نقاط. نعم، هذا هو التعلّم الآلة! يستخدم الانحدار حاليًا في تطبيقات متعددة، مثل: توقعات أسعار الأسهم. تحليل حجم الطلب والمبيعات. التشخيص الطبي. أي ارتباطات عددية. ومن الخوارزميات الشائعة نذكر: خوارزمية الانحدار الخطي Linear. خوارزمية االانحدار متعدد الحواف Polynomial. الانحدار هو في الأساس آلية للتصنيف ولكن هنا نتوقع رقمًا بدلًا من فئة. ومن الأمثلة على ذلك توقع سعر السيارة من خلال المسافة المقطوعة، وتوقع حركة المرور بحسب وقت محدد من اليوم، وتوقع حجم الطلب من خلال نمو الشركة، وما إلى ذلك. ويكون من الواجب استخدام الانحدار عندما تعتمد مشكلة معينة على الوقت. كلّ من يعمل في مجالات التمويل والتحليل المالي يحب خوارزميات الانحدار. حتى أن معظمها مدمج في برنامج مايكروسوفت إكسل (Excel). وطريقة استخدامها سلسة جدًا من الداخل إذ تحاول الآلة ببساطة رسم خط يشير إلى متوسط الارتباط (Average Correlation). على عكس الشخص الّذي يحاول رسم شكل الانحدار يدويًا على السبورة، فإن الآلة ترسم الشكل بدقة رياضية عالية جدًا، بحساب متوسط الفاصل الزمني لكل نقطة. عندما يكون خط الانحدار مستقيمًا فيكون هذا الانحدار خطيًا، أما عندما يكون خط الانحدار منحنيًا فيكون الانحدار متعدد الحواف (Polynomial). وهذه الأنواع الرئيسية من الانحدار. والبعض الآخر أكثر غرابة مثل الانحدار اللوجستي (Logistic Regression) وسيكون شكله مميز كتميز الخروف الأسود في قطيع غنم. ولكن لا تدعه يخدعك، لأنه مجرد طريقة تصنيف وليس انحدارًا. لا بأس في الخلط بين الانحدار والتصنيف. إذ يتحول العديد من المصنّفات لتنفيذ عملية انحدار بقليل من الضبط والإعداد. وعمومًا تستخدم طرق الانحدار عندما لا يمكننا تحديد فئة الكائن، وإنما يمكننا تحديد ومعرفة مدى قربه من هذه الفئة، وهنا بالضبط تأتي مهمته. في حال أردت التعمق أكثر في التعلم الموجّه، فراجع هذه السلسلة: Machine Learning for Humans. التعلم غير الموجه (Unsupervised learning) ظهر التعلّم غير الموجّه بعد ظهور التعلّم الموجّه بقليل، وتحديدًا في التسعينيات. ويستخدم أقل من التعلّم الموجّه، ولكن في بعض الأحيان لن يكون لدينا خيار آخر سوى استخدامه. تعدّ البيانات المصنّفة نوع فاخر من البيانات. ولكن ماذا لو كنت رغبت في إنشاء تصنيف مخصص للحافلات (الباصات)؟ هل يجب عليك التقاط صور يدويًا لمليون حافلة في الشوارع وتصنيف كلّ واحدةٍ منها؟ مستحيل، سيستغرق هذا الأمر عمرًا بأكمله. في هذا النوع من التعلم من منظورنا نحن نعطيها أومر معينة للتجميع أو تقليل الأبعاد وهي تؤدي هذه المهمة من خلال تحليلها لقيم الميّزات (Features) ومحاولة الربط بينها ومعرفة العلاقات أو الارتباط بين هذه البيانات. كما يمكن أن تكون البيانات معقدة للغاية، ولذلك لا يمكن لهذه الخوارزميات التكهن بالنتيجة المطلوبة بصورة صحيحة. في تلك الحالات نحاول تنظيم بياناتنا أو إعادة هيكلتها في صيغة منطقية أكثر من السابق من أجل معرفة فيّما إذا استطاعت هذه الخوارزميات استنتاج شيئ ما، وبذلك الأمر له عدة جوانب للحلّ ومتعلّق بنوعية البيانات وطريقة تنظيمها وجودتها. ولكن هناك بعض الأمل إذ لدينا الملايين من المنصات الّتي توفر خدمات رخيصة نسبيًا تبدأ من 5 دولار أمريكي، وغالبًا نعتمد عليها لمساعدتنا في تصنيف البيانات وهذه الطريقة المعتمدة الّتي تجري وفقها أمور تطوير البيانات في هذا المجال. بعض الأنواع للتعلّم غير الموجّه: التجميع (Clustering). تقليل الأبعاد أو التعميم (Dimensionality Reduction). تعلم قواعد الربط (Association rule learning). التجميع (Clustering) تُقسّم عملية التجميع الكائنات على أساس ميّزات غير معروفة. إذ تختار الآلة أفضل طريقة لفرز الميّزات الّتي تراها مناسبة. هذه بعض التطبيقات لعملية التجميع في وقتنا الحالي: تقسيم السوق (أو تقسيم أنواع العملاء، أو طريقة ولائهم للعلامة التجارية). دمج نقاط قريبة على الخريطة. ضغط الصورة. تحليل وتسمية البيانات الجديدة. الكشف عن السلوك غير الطبيعي. ومن بعض خوارزميات الشائعة للتجميع: خوارزمية K-mean_clustering. خوارزمية Mean-Shift. خوارزمية DBSCAN. تعدّ عملية التجميع فعليًا عملية تصنيف ولكن المفارقة هنا أنها لا تحتوي على فئات محددة مسبقًا. مشابهة جدًا لعملية تقسيم الجوارب في الدرج بحسب ألوانهم، وذلك عندما لا تتذكر كلّ الألوان الّتي لديك فعندها ستجلب الجورب الأول ذو اللون الأسود وتضعه جانبًا وتأخذ الجورب الثاني ..وهكذا. تحاول خوارزميات التجميع العثور على كائنات متشابهة (بحسب بعض الميزات) ودمجها في مجموعة. تُجمّع الكائنات الّتي لديها الكثير من الميزات المماثلة في فئة واحدة. وتسمح لنا بعض الخوارزميات حتى تحديد العدد الدقيق للمجموعات الّتي نريدها. من أحد أشهر الأمثلة على التجميع هي تجميع العلامات (أو المؤشرات) على خرائط الوِب. فمثلًا عندما تبحث عن جميع المطاعم النباتية المحيطة بك، سيجمّعُ محرك البحث الخاص بالخريطة جميع المطاعم على شكل أرقام. ولو أنه لم يجمّعها لك فحتمًا سيتجمد متصفحك بعد عملية البحث لأنه سيحاول رسم جميع المطاعم النباتية الموجودة على سطح الكرة الأرضية وعددهم سيكون كبير بكلّ تأكيد. ومن بعض الاستخدامات الأخرى لخوارزميات التجميع تطبيقات الهواتف المحمولة مثل: Apple Photos وGoogle Photos إذ كِلاهما يستخدمان خوارزميات تجميع معقدة أكثر من المثال السابق، وذلك لإنهم يبحثان عن الوجوه المميزة في الصور بهدف إنشاء ألبومات خاصة لأصدقائك. لا يعرف التطبيق عدد أصدقاؤك ولا حتى كيف تبدوا أشكالهم، ولكنه مع ذلك يحاول العثور على ميزات صريحة في وجوههم، والموازنة بينها لمعرفة عددهم، وعرض الألبومات وفقًا لذلك. ومن بعض الاستخدامات الأخرى هي ضغط الصورة فعند حفظ الصورة بلاحقة PNG، يمكنك ضبط مجموعة الألوان وليكن عددها 32 لونًا. هذا يعني أن آلية التجميع ستأخذ جميع البكسلات "المحمرة" وتحسب قيمة "المتوسط الأحمر" وتضبطه على جميع البكسلات الحمراء. وبذلك يكون لدينا ألوان أقل، مما يؤدي في نهاية المطاف إلى حجم ملف أقل، وبذلك تنخفضُ مصاريف التخزين المحلي أو السحابي. ومع ذلك يمكن أن نواجه بعض مشاكل في الألوان مثل الألوان القريبة من لونين بنفس الوقت مثل لون الأزرق السمائي (Cyan). إذ لا يمكننا تصنيفه فيما إذا كان أخضرًا أم أزرق؟ هنا يأتي دور خوارزمية K-Means. خوارزمية K-mean إذ تعيّن خوارزمية K-Means مجموعة من النقاط اللونية والبالغ عددها 32 نقطة لونية بطريقة عشوائية في مجموعة الألوان. وتسمى هذه النقاط (أو الألوان) بالنقاط المركزية (Centroids). وتُحدد النقاط المتبقية على أنها مخصصة لأقرب نقطة (لون) مركزي. وبعدها سنُلاحظ أننا حصلنا نوعًا ما على ما يشبه المجرات حول هذه الألوان 32. ثم ننقل النقطة المركزية إلى وسط مجرتنا، ونكرر ذلك حتى تتوقف النقطة المركزية عن التحرك. نفذنا جميع المهام بنجاح. ولدينا 32 مجموعة محددة ومستقرة. وإليك شرحًا كرتونيًا وتفصيليًا لما جرى: البحث عن الألوان المركزية مريح. إلا أن التجميعات في الحياة الواقعية ليست دائمًا على شكل دوائر. لنفترض أنك عالم جيولوجيا. وتحتاج للعثور على بعض المعادن المتماثلة على الخريطة. في هذه الحالة، يمكن تشكيل تجميعات بطريقة غريبة وحتى متشعبة. ولا يمكنك أيضًا أن تعرف عددهم فهل هم 10؟ أم 100؟ بكل تأكيد أن خوارزمية K-means لن تتناسب مع هذه الحالة، وإنما ستكون خوارزمية DBSCAN مفيدةً أكثر. خوارزمية DBSCAN لنفترض أن النقاط لدينا هم أناس في ساحة البلدة. اَبحث عن أي ثلاثة أشخاص يقفون بالقرب من بعضهم البعض واطلب منهم أن يمسكوا أيديهم. ثم اطلب منهم البدء في الإمساك بأولئك الجيران الّذين يمكنهم الوصول إليهم. وهكذا دواليك. إلى أن نصل لشخص لا يستطيع الامساك بأي شخص آخر. هذه هي مجموعتنا الأولى. كرر هذه العملية ليُجمعُ كلّ الناس بمجموعات. ملاحظة: الشخص الّذي ليس لديه من يمسك يده - هو فعليًا مجرد بيانات شاذة. إليك رسم توضيحي يبين لك كيف سيبدو الحل: وإن كنت مهتم بخوارزميات التجميع؟ يمكنك الاطلاع على هذه المقالة The 5 Clustering Algorithms Data Scientists Need to Know. نلاحظ أن التجميع مشابه تمامًا للتصنيف، إذ يمكن استخدام المجموعات للكشف عن الحالات الشاذة. هل لاحظت بأن المستخدم يتصرف بطريقة غير طبيعية بعد اشتراكه بموقعكK أو بخدمتك؟ دع الآلة تحجبه مؤقتًا، وتنشئ تذكرة للدعم الفني لفحص هذا النشاط المريب لاتخاذ القرار المناسب. فربما يكون روبوت آلي يحاول إشغال الخادم الّذي تحجزه لموقعك. في الحقيقة لن نحتاج حتى لمعرفة ماهيّة "السلوك الطبيعي" للمُستخدم وإنما سنأخذ جميع أفعال ونشاطات المستخدم ونحملها إلى نموذجنا ونترك الآلة تقرر ما إذا كان هذا المستخدم "نموذجيًا" أم لا. يمكن أن لا يعمل هذا النهج بطريقة جيد بالموازنة مع التصنيف، ولكن القرار النهائي سيُبنى على المحاولة والتجربة. تقليل الأبعاد (Dimensionality Reduction) وتعرف أيضًا بالتعميم (Generalization) وهي عملية تجميع ميّزات محددة بداخل ميّزات ذات مستوى أعم وأعلى. ومن بعض التطبيقات العملية لهذه الطريقة نجد: أنظمة التوصية. التصورات (المحاكاة) الجميلة. نمذجة الموضوعات والبحث عن وثائق مماثلة. تحليل الصور المزيفة. إدارة المخاطر. ومن بعض الخوارزميات الشائعة لتطبيقها: خوارزمية تحليل المكونات الرئيسية Principal Component Analysis ويشار لها اختصارًا (PCA). خوارزمية تحليل القيمة المفردة Singular Value Decomposition ويشار لها اختصارًا (SVD). خوارزمية Latent Dirichlet allocation. خوارزمية التحليل الدلالي الكامن Latent Semantic Analysis ويشار إليها اختصارًا (LSA أو pLSA أو GLSA). خوارزمية t-SNE (التي تستخدم في مجال الرؤية الحاسوبية). استخدم علماء البيانات المتعصبون سابقًا هذه الأساليب، وكان عليهم العثور على "شيئ مثير للاهتمام" في أكوام ضخمة من الأرقام. وعندما لم تساعدهم مخططات إكسل بهذه المهمة أجبروا الآلات على العثور على الأنماط. حتى حصلوا على طريقة تقليل الأبعاد أو ميّزة تعلّم كيفية تقليل البعد. من الأفضل دائمًا استخدام التلخيص أو التجريد (Abstractions)، عوضًا عن مجموعة من الميزات المجزأة. فمثلًا، يمكننا دمج كلّ الكلاب ذات الآذان مثلثية الشكل والأنوف الطويلة والذيل الكبير ليصبح لدينا تلخيص لشكل كلب لطيف وهو كلب "شبيرد". نعم فقدنا بعض المعلومات حول الصفات المميزة الخاصة بالكلب شبيرد، إلا أن التلخيص الجديد يعدّ أكثر فائدة لتسمية الأغراض وتوضيحها. بالإضافة إلى ذلك، إن النماذج المُلخAصة تتعلّم بطريقة أسرع، ولا تظهر لديها مشكلة "فرض التخصيص" (Overfitting) -الّتي سنتحدث عنها بالتفصيل لاحقًا- بكثرة وهي تستخدم عددًا أقل من الميّزات. أصبحت هذه الخوارزميات أداة مذهلة "لنمذجة المواضيع". إذ يمكننا تلخيص مواضيع من كلمات محددة لمعانيها. هذا ما تفعله خوارزمية التحليل الدلالي الكامن. تعتمد على عدد مرات تكرار كلمة معينة في موضوع محدد. مثل: استخدام كلمة "تقنية" بكثرة في المقالات التقنية، وبالتأكيد سنعثر على أسماء الأشخاص السياسيين بكثرة في الأخبار السياسية وهكذا. كما يمكننا بكل تأكيد إنشاء مجموعات من جميع الكلمات في المقالات، ولكننا سنفقد جميع الروابط المهمة بين معاني الكلمات خصيصًا العلاقة بين الكلمات ذات المعنى نفسه مثل البطارية (Battery) والبطارية المقصود بها المدخرات الكهربائية - (Accumulator) الموجودة في مستندات مختلفة. إلا أن خوارزمية التحليل الدلالي الكامن ستتعامل معها بالطريقة الصحيحة، ولهذا السبب تحديدًا سمّيت "بخوارزمية التحليل الدلالي الكامن". لذلك نحن بحاجة إلى ربط الكلمات والمستندات في ميزة واحدة للحفاظ على هذه الاتصالات الكامنة واتضح لنا بأن خوارزمية التفكيك المفرد (Singular decomposition) تؤدي هذه المهمة بقوة، مما يشفُ عن فائدة المجموعات المجمعة بحسب الموضوع الّتي تحدثنا عنها سابقًا. من الاستخدامات الشائعة الأخرى هي أنظمة التوصية (Recommender Systems) والتصفية التعاونية (Collaborative Filtering) من أجل تقليل الأبعاد. مما يبدو أنه إذا كنت تستخدمه في تلخيص تقييمات المستخدمين، فستحصل على نظام رائع للتوصية بالأفلام والموسيقى والألعاب بل وحتى أي شيئ تريده. للمزيد من المعلومات حول هذا الموضوع نوصيك بالكتاب الرائع "برمجة الذكاء الجمعي" Programming Collective Intelligence. بالكاد سنتمكن من فهم فهمًا كاملًا لفكرة التلخيص (أو التجريد) الآلي، ولكن من الممكن رؤية بعض الارتباطات عن قرب. إذ يرتبط بعضها بعمر المستخدم فمثلًا يلعب الأطفال لعبة ماين كرافت (Minecraft) ويشاهدون معها الرسوم المتحركة بكثرة، ويرتبط بعض المستخدمين الآخرين بنوعية فيلم معينة أو بهوايات مخصصة وهكذا. تستطيع الآلات الحصول على هذه المفاهيم التجريدية عالية المستوى من دون حتى فهم ماهيتها، بناءً فقط على معرفة تقييمات المستخدم. تعلم قواعد الربط (Association Rule Learning) وهي طريقة للبحث عن الأنماط في تدفق الطلبات. حاليا تستخدم في عدد من المجالات مثل: التنبؤ بالمبيعات والخصومات. تحليل البضائع المشتراة معًا. معرفة كيفية وضع المنتجات على الرفوف. تحليل أنماط تصفح الإنترنت. الخوارزميات الشائعة لها هي: خوارزمية Apriori. خوارزمية Eclat. خوارزمية FP-growth. وتستخدم هذه الطريقة لتحليل عربات (سلّات) التسوق الإلكترونية أو الواقعية، كما تستخدم أيضًا لأتمتة استراتيجية التسويق، والمهام الأخرى المتعلقة بمثل هذه الأحداث. وتحديدًا عندما يكون لديك تسلسل لشيئ معين وترغب في إيجاد أنماط فيه - جرب هذه الأشياء. لنفترض أن العميل سيأخذ ستة عبوات من العصائر ويذهب إلى طاولة المحاسبة ثم إلى باب الخروج. هل يجب أن نضع الفول السوداني بجانب الطريق المؤدي إلى طاولة المحاسبة؟ وفي حال وضعناها، كم مرة سيشتريها الناس بالمجمل؟ لربما تتماشى العصائر مع الفول السوداني، ولكن ما هي التسلسلات الأخرى الّتي يمكننا التنبؤ بها اعتمادًا على البيانات؟ هل يمكن لتغييرات بسيطة في ترتيب البضائع أن تؤدي إلى زيادة كبيرة في الأرباح؟ وينطبق نفس الشيء على التجارة الإلكترونية. إذ المهمة هنا أكثر حماسية وإثارة للاهتمام، فما الّذي سيشتريه العميل في المرة القادمة؟ هل سيشتري المنتجات النباتية؟ أم الحيوانية؟ تعتمد الأساليب الكلاسيكية لتعلم الآلة على نظرة مباشرة على جميع السلع المشتراة باستخدام الأشجار أو المجموعات. يمكن للخوارزميات البحث عن الأنماط فقط، ولكن لا يمكنها تعميمها أو إعادة إنتاجها بما يتوافق مع الأمثلة الجديدة. أما في العالم الحقيقي فإن كلّ متجر تجزئة كبير يبني حلًا خاصًا ومناسبًا له، لذلك لا نرى تطورات كبيرة في هذا المجال. وعلى المستوى التقني فإن أعلى مستوى من التقنيات المستخدمة هي أنظمة التوصية (أو تسمى أحيانًا الأنظمة الناصحة). التعلم المعزز (Reinforcement Learning) وهو عملية رمي روبوت في متاهة وتركه بمفرده ليجد طريق الخروج بنفسه. من بعض التطبيقات العملية المستخدمة حاليًا: السيارات ذاتية القيادة. روبوت تنظيف الأرضية. الألعاب. أتمتة التداول. إدارة موارد المؤسسة. من أبرز الخوارزميات الشائعة لها: خوارزمية التعلم المعزز وفق النموذج الحر Q-Learning. خوارزمية خطة ماركوف للتعلّم المعزز لاتخاذ القرار SARSA. خوارزمية التعلم المعزز العميق وفق النموذج الحر DQN. خوارزمية الناقد المميز غير المتزامن A3C. الخوارزمية الجينية Genetic algorithm. أخيرًا وليس آخرًا، نصل إلى شيئ يشبه الذكاء الحقيقي. في كثير من المقالات نرى خطأ شائعًا بأن يصنف التعلّم المعزز تحت قسم التعلّم الموجّه أو أحيانًا في قسم التعلّم غير الموجّه. لذا وجب التنويه إلى كونه طريقة تعلّم منفصلة. يستخدم التعلّم المعزز في الحالات الّتي لا تتعلق فيها مشكلتك بالبيانات على الإطلاق، وإنما لديك بيئة افتراضية تتعامل معها. مثل عالم ألعاب الفيديو أو مدينة افتراضية للسيارات ذاتية القيادة. إن معرفة جميع قواعد الطرقات الجوية في العالم لن تعلّم الطيار الآلي كيفية القيادة على بأحد الطرق الجوية. بغض النظر عن مقدار البيانات الّتي نجمعها، لا يزال يتعذر علينا توقع جميع المواقف المحتملة. وهذا هو السبب الأساسي لهدف التعلم المعزز وهو ** تقليل الخطأ، وليس التنبؤ بجميع التحركات المحتملة**. إن البقاء على قيد الحياة في البيئة الافتراضية هي الفكرة الأساسية للتعلم المعزز. إذ سنعتمد على ترك الروبوت الصغير الفقير يتجول في الحياة الافتراضية ونُعاقبه على الأخطاء ونُكافؤه على الأفعال الصحيحة. بنفس الطريقة الّتي نعلم بها أطفالنا، أليس كذلك؟ الطريقة أكثر فعالية لتدريب الروبوت هي بناء مدينة افتراضية والسماح للسيارة ذاتية القيادة بتعلم كلّ طرق القيادة وحيلها فيها أولًا. في الحقيقة هذه هي الطريقة المعتمدة في تدريب الروبوت الموجودة في السيارات ذاتية القيادة. إذ ننشئ في البداية مدينة افتراضية استنادًا لخريطة المدينة الحقيقية، ونضيف إليها أناس افتراضيين يمشون في الشوارع (لمحاكاة الواقع) ونترك السيارة تتعلم بمفردها وذلك بوضع هدف نصب أعيننا وهو "تقليل العدد الّذي تقتله من الناس بأقل ما يمكن" وهكذا يستمر الروبوت في التدرب إلى أن يصل لمرحلة لا يقتل بها أحد. عندما يؤدي الروبوت أداءً جيدًا في لعبة GTA عندها سنُحرره ونختبره في الشوارع الحقيقية. قد يكون هناك نهجان مختلفان للتعلم المعزز وهما: نهج قائم على نموذج (Model-Based). نهج غير قائم على نموذج أو النهج الحر (Model-Free). إن النهج القائم على نموذج يعني أن السيارة بحاجة لحفظ كامل الخريطة أو أجزائها. هذا نهج قديم جدًا لأنه من المستحيل بالنسبة للسيارة الفقيرة ذاتية القيادة أن تحفظ الكوكب بأكمله. أما في النهج غير القائم على نموذج فلا تحفظ السيارة كلّ حركة ولكنها تحاول تعميم المواقف، ومحاولة التصرف بعقلانية إلى جانب محاولتها الحصول على أقصى مكافأة. هل تذكر الأخبار المتداولة حول خسار بطل العالم بلعبة Go أمام الذكاء الصنعي؟ هل تعلم بأن عدد التركيبات القانونية المحتملة للعبِ بهذه اللعبة أكبر من عدد الذرات الموجودة في الكون كلّه؟ حتى أن العلماء أثبتوا ذلك لاحقًا. ولكن هل سنطلب من هذا الروبوت المسكين حفظ كلّ ذلك؟ في الواقع أن الآلة لم تتذكر جميع التركيبات المحتملة للعب ومع ذلك فازت بلعبة Go، إذ حاولت تطبيق أفضل حركة في كلّ دور على حدة (تمامًا كما فعلت في لعبة الشطرنج عندما هزمت غاري كاسباروف في المباراة الشهيرة سنة 1997 والّتي سميت بمباراة القرن). هي فعليًا اختارت ببساطة أفضل حركة (من ناحية المكسب) لكلّ حالة، وقد فعلت ما يكفي للتغلب على البشر. يعد هذا النهج مفهومًا أساسيًا أدى لظهور التعلّم المعزز وفق النموذج الحرّ (Q-learning) وهو فرع من فروع التعلّم المعزز بل وظهور الخوارزميات مثل خوارزمية خطة ماركوف للتعلّم المعزز لاتخاذ القرار (SARSA) وخوارزمية التعلّم المعزز العميق وفق النموذج الحرّ (DQN). ومن الجدير بالذكر أن حرف "Q" يشير إلى "الجودة" (Quality) إذ يتعلم الروبوت أداء الفعل الأكثر "نوعية" في كلّ حالة ويحفظ جميع المواقف على أنها سلسلة ماركوفية بسيطة. يمكن للآلة اختبار مليارات المواقف والحالات في البيئة افتراضية، ويمكنها تذكر جميع الحلول الّتي أدت لمكافأة أكبر. ولكن كيف يمكنها أن تميز المواقف الّتي رأتها مسبقًا عن المواقف الجديدة كليًا؟ فمثلًا إذا كانت السيارة ذاتية القيادة في إحدى التقاطعات بين الشوارع وكانت إشارة المرور حمراء وتحولت فجأة الإشارة الخضراء فهل هذا يعني أنها يمكن أن تسير مباشرة؟ ماذا لو كانت هناك سيارة إسعاف تسير في شارع قريب وتطلب من السيارات الأخرى إفساح الطريق لها؟ الإجابة الحالية على هذا السؤال وفق المعطيات المتاحة إلى يومنا هذا هو "لا أحد يعرف ما الّذي ستفعله هذه السيارة ذاتية القيادة". فعليًا لا توجد إجابة سهلة. لطالما استمر الباحثون في المحاولة للعثور على إجابة، ولكن في الوقت نفسه لا يجدون سوى الحلول المؤقتة لبعض الحالات. إذ يعتمد البعض على محاكاة جميع المواقف يدويًا الّتي تنتج حلًا للحالات الاستثنائية، مثل: مشكلة العربة. والبعض الآخر يتعمق أكثر من ذلك ويترك للشبكات العصبية مهمة اكتشافها. وهذا قادنا لتطور التعلم المعزز وفق النموذج الحر (Q-learning) إلى شبكات التعلم المعزز العميق (Deep Q-Network). لكنها ليست بالحل المثالي أيضًا. طريقة المجموعات وهو مجموعة أشجار غبية تتعلّم تصحيح أخطاء بعضها البعض. من بعض تطبيقاتها العملية في وقتنا الحالي: جميع التطبيقات الّتي تعمل على الخوارزميات الكلاسيكية (الفارق هنا أنها تقدم أداء أفضل). أنظمة البحث. الرؤية الحاسوبية. الكشف عن الأغراض. من أبرز الخوارزميات الشائعة لها: خوارزمية الغابات العشوائية (Random Forest). خوارزمية التدرج المعزز (Gradient Boosting). حان الوقت للأساليب الحديثة والكبيرة. تعدّ المجمعات والشبكات العصبية مقاتلان رئيسيان يمهدان طريقنا نحو التفرد في عملية التعلّم. واليوم ينتجون أكثر النتائج دقة ويستخدمون على نطاق واسع في جميع الأحداث. على الرغم من فعاليتها العالية إلا أن الفكرة الكامنة وراءها بسيطة للغاية. إذ تعتمد على أخذ مجموعة من الخوارزميات ذات الفعالية العادية، وتجبرها على تصحيح أخطاء بعضها بعضًا، فستكون الجودة الإجمالية للنظام أفضل من أفضل خوارزميات تعمل بطريقة منفردة. ستحصل على نتائج أفضل إذا أخذت أكثر الخوارزميات تقلبًا في النتائج، والّتي تتوقع نتائج مختلفة تمامًا في حالة حدوث ضوضاء صغيرة على بيانات الدخل. مثل خوارزميات أشجار القرار وأشجار الانحدار. هذه الخوارزميات حساسة للغاية، حتى أنه يمكن لقيمة شاذة واحدة خارجية مطبقة على بيانات الدخل أن تجعل النماذج يجن جنونها. في الحقيقة هذا بالضبط ما نحتاجه. هنالك ثلاث طرق لبناء المجمعات: طريقة التكديس (Stacking). طريقة التعبئة (Bagging). طريقة التعزيز (Boosting). سنشرح كلّ واحدٍ منهم على حدة: 1. طريقة التكديس (Stacking) تُمرر مجموعة من النماذج المتوازية كمدخلات للنموذج الأخير والّذي سيتخذ القرار النهائي. تَنتجُ هذه النماذج من تطبيق خوارزميات مختلفة وكلمة "مختلفة" تعني أي أن خلط تكديس نفس الخوارزميات على نفس البيانات لن يكون له أي معنى أو أهمية. وإن عملية اختيار الخوارزميات أمر متروك لك مطلق الحرية في اختباره. إلا أنه بالنسبة للنموذج المعني باتخاذ القرار النهائي، عادة ما يكون الانحدار خيارًا جيدًا لخوارزميته. 2. طريقة التعبئة (Bagging) وهي معروفة أيضًا باسم Bootstrap Aggregating. في هذه الطريقة نستخدم نفس الخوارزمية، ولكن ندربها على مجموعات فرعية مختلفة من البيانات الأصلية. في النهاية نحسب متوسط الإجابات فقط. يمكن أن تتكرر البيانات في مجموعات فرعية عشوائية. فمثلًا، يمكننا الحصول على مجموعات فرعية من المجموعة "1-2-3" مثل: "2-2-3" و"1-2-2" و"3-1-2" وما إلى ذلك. نستخدم مجموعات البيانات الجديدة هذه لتعليم الخوارزمية نفسها عدة مرات، ثمّ نتوقع الإجابة النهائية عن طريق خوارزمية البسيطة التصويت بالأغلبية. أشهر مثال على استخدام طريقة التعبئة هي خوارزمية الغابات العشوائية (Random Forest) والتي ببساطة تعبأ باستخدام أشجار القرار (الّتي سبق وأن وتحدثنا عنها في الفقرات السابقة). فمثلًا عند فتحك لتطبيق الكاميرا الخاص بهاتفك ورؤيتك لمربعات مرسومة حول وجوه الأشخاص فيجب أن تسأل نفسك، كيف حدث ذلك؟ في الحقيقة من المحتمل أن تكون هذه النتيجة بفضل خوارزمية الغابات العشوائية. وذلك لأن الشبكات العصبية بطيئة جدًا عند تشغيلها في الزمن الحقيقي (Real-time)، وبالمقابل تكون طريقة التعبئة مثالية بهذه الحالات لأنه يمكنها أن تبني أشجار القرار على جميع البطاقات الرسومية الضعيفة والقوية بل وحتى على المعالجات الجديدة الفاخرة الخاصة بتعلّم الآلة! في بعض المهام، تكون الاستراتيجية المتبعة هي التركيز على قدرة الغابة العشوائية على العمل بالتوازي مثلما يحدث عند استخدام الشبكات العصبية الاصطناعية أما طريقة التجميع لا تستطيع العمل بالتوازي، والبعض الآخر من التطبيقات تتطلب السرعة الّتي تستطيع تحققها طرق المجموعات بغض النظر عن أسلوب تطبيقها وتحديدًا في المهام الّتي تتطلب معالجة بالزمن الحقيقي. ولكنها في النهاية مسألة مفاضلة بين خياري الدقة أو السرعة وذلك بحسب كلّ مهمة. 3. طريقة التعزيز (Boosting) وهي الطريقة الّتي تعتمد على تدريب الخوارزميات واحدةً تلو الآخرى. وكلّ خوارزمية لاحقة تولي معظم اهتمامها لنقاط البيانات الّتي أخطأت الخوارزمية السابقة في تفسيرها. وتكرر هذه العملية إلى أن تصبح النتيجة مرضية. كما هو الحال في طريقة التعبئة، تستخدم الخوارزمية مجموعات فرعية متنوعة من بياناتنا ولكن هذه المرة لن نُنشئها بطريقة عشوائية. وإنما في كلّ عينة فرعية، نأخذ جزءًا من البيانات الّتي فشلت الخوارزمية السابقة في معالجتها. وبذلك نُنشئ خوارزمية جديدة لتتعلم كيفية إصلاح الأخطاء الموجودة في الخوارزمية السابقة. الميزة الرئيسية في طرق التجميع هي الدقة الممتازة بالموازنة مع الوقت المأخوذ، وتعد أسرع بكثير من الشبكات العصبية. تقريبًا الأمر أشبه ما يمكن بسباق بين سيارة وشاحنة على المضمار. يمكن للشاحنة أن تؤدي المزيد من الأفعال، ولكن في حال أردت أن تسير بسرعة فحتمًا ستأخذ السيارة. لالقاء نظرة على مثال حقيقي لاستخدام طرق التجميع (وتحديدًا طريقة التعزيز) افتح موقع فيسبوك أو موقع غوغل واكتب أي استعلام في مربع البحث. هل يمكنك سماع جيوش من الأشجار تزأر وتتحطم معًا لفرز النتائج حسب الصلة؟ ذلك بسبب أن هذه الشركات يستخدمون طريقة التجميع باستخدام التعزيز. حاليًا هناك ثلاث أدوات شائعة لتطبيق طريقة التعزيز، يمكنك قراءة هذا التقرير المفصل الّذي يوازن بينها CatBoost مقابل LightGBM مقابل XGBoost. الشبكات العصبية (Neural Networks) والتعلم العميق (Deep Leaning) الشبكات العصبية (Neural Networks) الشبكات العصبية: وهي عبارة عن مجموعة من الخلايا العصبية الاصطناعية الموجودة في طبقاتٍ متوضعةٍ فوق بعضها بعضًا، ولها طبقة أولية، وطبقة النهائية، تتلقى الطبقة الأولية المعلومات الخام، وتعالجها لتُمررها لاحقًا للطبقة الّتي تليها وهكذا إلى أن نحصل على الخرج من الطبقة النهائية. بعض أشهر تطبيقاتها العملية المستخدمة في وقتنا الحالي: تحديد الكائن في الصور ومقاطع الفيديو. التعرف على الكلام والتراكيب اللغوية. معالجة الصور وتحويل التنسيق. الترجمة الآلية. بالإضافة إلى أنه يمكنها أن تعمل عوضًا عن جميع تطبيقات طرق تعلّم الآلة السابقة. من بعض الهيكليات الشائعة للشبكات العصبية: الشبكات العصبية بيرسيبترون (Perceptron). الشبكات العصبية التلافيفية (CNN). الشبكات العصبية المتكررة (RNN). الشبكات العصبية ذات الترميز التلقائي (Autoencoders). إن أي شبكة عصبية اصطناعية هي في الأساس مجموعة من الخلايا العصبية الاصطناعية (Neurons) و الاتصالات (Connections) الّتي بينهم. وإن الخلية العصبية الاصطناعية: هي مجرد تابع لديه مجموعة من المدخلات وخرج وحيد. وتتمثل مهمة الخلية العصبية الاصطناعية في أخذ جميع الأرقام من مدخلاتها، وأداء الوظيفة المنوطة إليها وإرسال النتيجة للخرج. الاتصالات تشبه إلى حدٍ ما القنوات بين الخلايا العصبية الحقيقية. إذ تربط مخرجات خلية عصبية معينة لمدخل خلية عصبية أخرى حتى يتمكنوا من إرسال الأرقام والنتائج لبعضهم بعضًا. وكلّ اتصال له وسيط واحد فقط وهو الوزن (Weight). وهو مشابه لقوة الاتصال للإشارة. فعندما يمر الرقم 10 من خلال اتصال بوزن 0.5 يتحول إلى 5. هذه الأوزان تطلب من الخلية العصبية الاصطناعية أن تستجيب أكثر للدخل ذو الوزن الأكبر، وأقل للدخل ذو الوزن الأقل. تُعدل هذه الأوزان عند التدريب وهكذا تتعلّم الشبكة العصبية الاصطناعية. فيما يلي مثال لخلايا عصبية اصطناعية بسيطة ولكنها مفيدة في الحياة الواقعية: ستجمع جميع الأرقام من مدخلاتها وإذا كان هذا العدد أكبر من N فستُعطي النتيجة 1 وإلا ستعطي النتيجة 0. لمنع حدوث فوضى في الشبكة، ترتبط الخلايا العصبية بطبقات، وليس بطريقة عشوائية. لا ترتبط الخلايا العصبية داخل الطبقة الواحدة، وإنما تتصل بالخلايا العصبية للطبقات التالية والسابقة (الأعلى والأسفل). تتحرك البيانات في الشبكة العصبية الاصطناعية تحركًا صارمًا باتجاه واحد من مدخلات الطبقة الأولى إلى مخرجات الطبقة الأخيرة. إذا وضعت عددًا كافيًا من الطبقات ووضعت الأوزان بطريقة صحيحة، فستحصل على النتيجة المرجوة وإليك مثلًا يوضح الأمر، تريد أن تكتشف ما هو الرقم المكتوب بخط اليد في الصورة الممررة، ستمرر الصورة إلى الشبكة عن طريق مدخلات الطبقة الأولى، وبعدها فإن البكسلات السوداء ستُنشّط الخلايا العصبية المرتبطة بها، وهي بدورها ستُنشّط الطبقات التالية المرتبطة بها، وهكذا حتى يضيء أخيرًا المخرج المسؤول عن الرقم أربعة. إذا هكذا وصلنا للنتيجة المرجوة (سنأخذ هذا المثال بوضوح أكبر وبكلّ تفاصيله الدقيقة في الجزء الثاني من هذه السلسلة). في الواقع عند برمجة الخلايا العصبية على الحاسب لا نكتب عمليًا الخلايا العصبية والوصلات المرتبطة بها. وإنما يمثل كلّ شيء كمصفوفات وتحسب النتيجة بناءً على ضرب المصفوفات ببعضها بعضًا للحصول على أداء أفضل. يبسط هذا الفيديو كيف تحدث عملية التعلّم في الخلايا العصبية الاصطناعية، وكيف تحدد عملية الضرب دقة الشبكة العصبية الّتي لدي (لا تنس أن تغعّل خيار التعليقات التوضيحية لأن الفيديو مترجم إلى اللغة العربية). تحتوي الشبكة على طبقات متعددة لها روابط بين كلّ خلية عصبية تسمى الشبكات العصبية بيرسيبترون المتعددة (Multilayer Perceptron) وتسمى اختصارًا (MLP) وتعد أبسط بنية مناسبة للمبتدئين. بعد إنشاء الشبكة، ستكون مهمتنا هي تعيين الطرق المناسبة لتتفاعل الخلايا العصبية مع الإشارات الواردة بطريقة صحيحة. وسنُعطي الشبكة بيانات الدخل أو "مدخلات الشبكة العصبية" صورة الرقم المكتوب بخط اليد وبيانات الخرج أو "مخرجات الشبكة العصبية" ستكون الرقم الموافق للصورة المُمررة عبر مدخلات الشبكة. أي سنقول للشبكة "عدلي أوزانك بالطريقة الصحيحة حتى تستطيعين معرفة الصورة الممررة لك على أنها صورة للرقم 4". في البداية تُسند جميع الأوزان بطريقة عشوائية. بعد أن نعرض لها رقمًا معينًا، إذ تنبعث منها إجابة عشوائية لأن الأوزان ليست صحيحة حتى الآن، ونوازن مدى اختلاف هذه النتيجة عن النتيجة الصحيحة. ثم نبدأ في بالرجوع للخلف عبر الشبكة من المخرجات إلى المدخلات ونخبر كلّ خلية عصبية، لقد تنشطت هنا وأديت عملًا رهيبًا وهكذا. بعد مئات الآلاف من هذه الدورات "الاستدلال ثمّ التحقق ثمّ التغيير" المتتالية هناك أمل في أن تُصحح الشبكة العصبية أوزانها وتجعلها تعمل على النحو المنشود. الاسم العلمي لهذه المنهجية هي "منهجية الانتشار العكسي" (Backpropagation). يبسط هذا الفيديو كيف تَحدثُ عملية التعلّم بالتفاصيل الدقيقة في الطبقات المخفية وكيف تتعلم من أخطائها (مرة أخرى لا تنسَ أن تغعّل خيار التعليقات التوضيحية لأن الفيديو مترجم إلى اللغة العربية). يمكن للشبكة العصبية المدربة تدريبًا جيدًا أن تنوب عن عمل أي من الخوارزميات الموضحة في هذا الفصل (بل وغالبًا ما يمكنها أن تعمل بدقة أكثر منهم). وهذا ما جعلها شائعة الاستخدام على نطاق واسع. اتضح لاحقًا أن الشبكات الّتي تحتوي على عدد كبير من الطبقات تتطلب قوة حسابية لا يمكن تصورها آنذاك (عند بداية ظهور الشبكات العصبية). أما حاليًا فأي حاسوب مُخصص للألعاب يتفوق بالأداء على أداء مراكز البيانات الضخمة آنذاك. لذلك لم يكُ لدى الناس أي أمل في أن تصبح هذه القدرة الحسابية متوفرة ذلك الحين، وكانت فكرة الشبكات العصبية مزعجة بضخامتها. سنتاول في شرحنا أهم الهياكل المشهورة للشبكات العصبية في الوقت الحاضر. الشبكات العصبية التلافيفية (Convolutional Neural Networks) أحدثت بنية الشبكات العصبية التلافيفية والتي تدعى اختصارًا (CNN) ثورة في عالم الشبكات العصبية حاليًا. إذ تستخدم للبحث عن الكائنات في الصور وفي مقاطع الفيديو، كما تستخدم أيضًا للتعرف على الوجوه، وتحويل التنسيق، وتوليد وتحسين الصور، وإنشاء تأثيرات مثل التصوير البطيء وتحسين جودة الصورة. باختصار تستخدم بنية الشبكات العصبية التلافيفية في جميع الحالات الّتي تتضمن صورًا ومقاطع فيديو. يمكنك ملاحظة كيف استطاعت تقنيات تعلم الآلة الّتي طورتها شركة فيسبوك من تحديد الكائنات الموجودة في الصورة بدقة ممتازة. من أبرز المشاكل الرئيسية الّتي تواجهنا عند التعامل مع الصور هي صعوبة استخراج الميزات منها. على عكس سهولة الّتي نجدها عند التعامل مع النصوص، إذ في النصوص يمكنك ببساطة تقسيم النص بحسب الجمل، والبحث عن الكلمات ذات سمات معينة، وما إلى ذلك. ولكن في الصور الأمر أعقد من ذلك بكثير إذ يجب تصنيف الصور تصنيفًا يدويًا لكي تتمكن برامج تعلّم الآلة من معرفة مكان آذان القطط أو ذيولها في هذه الصورة المحددة والمنصفة. سميت هذه المنهجية لاحقًا باسم "صناعة الميزات يدويًا" وكان يستخدمها الجميع تقريبًا. ولكن الأمر لم يتوقف إلى هذا الحد فحسب وإنما ظهرت العديد من المشاكل مع منهجية صناعة الميزات يدويًا.فمثلًا في البداية إذا كانت تعرفت الشبكة العصبية على أذني القطة وأبعدت هذه القطة عن الكاميرا فنحن في مشكلة لأن الشبكة لن ترى شيئًا (بسبب تغيّر حجم أذن القطة). ثانيًا لنحاول تسمية 10 ميزات مختلفة تميّز القطط عن بقية الحيوانات الأخرى (في الحقيقة أنا أول من فشل في هذه المهمة)، ولكن مع ذلك عندما أرى نقطة سوداء تُسرعُ من جانبي أثناء تجولي في الشارع عند منتصف الليل - حتى لو لمحتها فقط في زاوية عيني - سأستطيع أن أحدد بأنها قطة وليست فأر. والسبب بسيط جدًا إذ لا شعوريًا يصنف دماغنا العديد من الميزات الخاصة بالقطط ولا ينظر إلى شكل الأذن أو عدد الأرجل فقط وذلك بدون أي جهد مني ولا حتى تفكير. وبناءً على ذلك سيصعب الأمر جدًا عند محاولتي لنقل هذه المعرفة إلى الآلة. لذا فهذا يعني أن الآلة ستحتاج إلى تعلّم هذه الميزات بمفردها، وإنشاء هذه الميزات اعتمادًا على الخطوط الأساسية للصورة. سننفذ ما يلي: سنقسم الصورة بأكملها إلى كتل ذات حجم 8×8 بكسل. سنخصص لكل نوع من أنواع الخطوط على الصورة رمزًا معينًا - سواء أكان الخط أفقيًا سيكون الرمز [-] أو رأسيًا سيكون الرمز [|] أو قطريًا سيكون الرمز [/]. يمكن أيضًا أن يكون العديد منها مرئيًا للغاية - وهذا يحدث ولذلك لسنا دائمًا على ثقة تامة. سيكون الناتج عدة جداول من الخطوط الّتي هي في الواقع أبسط الميزات الّتي تمثل حواف الكائنات على الصورة. إنها صور بمفردها ولكنها مبنية من الخطوط. وهكذا نستمر في أخذ كتلة ذات حجم 8×8 ونرى كيف تتطابق معًا. ونعيدها مرارًا وتكرارًا. تسمى هذه العملية بعملية الإلتفاف أو الطيّ (Convolution)، مستمدة هذا الاسم من تابع الطيّ المطبق فيها. يمكن تمثيل عملية الطيّ كطبقة من الشبكة العصبية، لأنه في نهاية الأمر يمكن لكلّ خلية عصبية أن تكون بمثابة تابع يؤدي أي وظيفة أريدها. عندما نغذي ونزود شبكتنا العصبية بالكثير من صور القطط، فإنها ستعيّن تلقائيًا أوزانًا أكبر لمجموعات الخطوط الّتي تتكرر كثيرًا في هذه النوع من الصور. لا تهتم الآلة ما إذا كان ظهر القطة خطًا مستقيمًا أو جسمًا هندسيًا معقدًا مثل وجه القطة، وبالمجمل ستكون بعض مجموعات الخطوط ستكون نشطة دائمًا. كمخرجات ستنظر هذه الشبكة العصبية الاصطناعية ذات البنية التلافيفية لأكثر المجموعات نشاطًا في هذه الصور وستبني عليها قرارها فيما إذا كانت الصور لقطة أو لكلب. يكمن جمال هذه الفكرة في أن الشبكة العصبية ستبحث عن الميزات الأكثر تميزًا للكائنات بمفردها. لسنا بحاجة لاختيارها يدويًا. يمكننا تزويد الشبكة بكمية كبيرة من الصور لأي كائن فقط من خلال البحث في غوغل عن مليارات من الصور المشابهة وهكذا سوف تنشئ شبكتنا خرائط مميزة من الخطوط وتتعلم كيفية تمييز أي كائن بمفردها. الشبكات العصبية المتكررة (Recurrent Neural Networks) تعدّ الشبكات العصبية المتكررة والتي يشار لها اختصارًا (RNN) من أكثر البُنى الهيكلية للشبكات العصبية الاصطناعية شيوعًا في وقتنا الحاضر. وذلك لفوائدها الجمّة إذ أعطتنا الكثير من الأشياء المفيدة مثل: الترجمة الآلية، والتعرف على الكلام، وتركيب صوت مميز للمساعد الشخصي مثل المساعد سيري (Siri). وعمومًا تعدّ هذه البنية من أفضل الخيارات الموجودة للبيانات التسلسلية مثل: الصوت أو النص أو الموسيقى. هل تذكر القارئ الصوتي الخاص الموجود في نظام التشغيل ويندوز إكس بي (Windows XP)؟ هذا الرجل المضحك يبني الكلمات حرفًا بحرف، محاولًا لصقها معًا. الآن وازن بين صوته وصوت المساعد الشخصي أليكسا الخاص بشركة أمازون، أو المساعد الشخصي الخاص بغوغل، فرق كبير بينهم، أليس كذلك؟ إنهم لا ينطقون الكلمات بوضوح فقط وإنما يضيفون لكنة خاصة مناسبة لهم! إليك هذا الفيديو اللطيف لشبكة عصبية تحاول أن تتحدث. كلّ ذلك لأن المساعدين الصوتيين الحديثين مدربون على التحدث على عبارات كاملة دفعة واحدة وليس حرفًا بحرف، يمكننا أخذ مجموعة من النصوص الصوتية وتدريب شبكة عصبية لإنشاء تسلسل صوتي أقرب إلى الكلام الأصلي. بمعنى آخر، سنستخدم النص كمدخل للشبكة العصبية الاصطناعية وصوت الشخص المجرّد كخرج لهذه الشبكة. نطلب من الشبكة العصبية إنشاء بعض الأصوات لنص محدد، ثم موازنته بالصوت الأصلي ومحاولة تصحيح الأخطاء للاقتراب قدر الإمكان من الصوت الأصلي المثالي. تبدو عملية التعلم بسيطة وكلاسيكية أليس كذلك؟ حتى الشبكات العصبية ذات التغذية المُسبقة تستطيع فعل ذلك. ولكن كيف يجب تعريف مخرجات هذه الشبكة؟ هل سيكون بلفظ كلّ عبارة ممكنة موجودة في اللغة الإنكليزية؟ بالتأكيد هذا ليس خيارًا جيدًا. هنا ستساعدنا حقيقة أن النص أو الكلام أو حتى الموسيقى؛ ما هي إلا تسلسلات من المعلومات. تتكون من وحدات متتالية (مثل المقاطع اللفظية للكلمات الإنكليزية). تبدو جميعها فريدة من نوعها ولكنها تعتمد على مقاطع سابقة. ألغِ هذا الاتصال بين هذه المقاطع وستحصل على مقطع موسيقي من نوع دبستيب (Dubstep). يمكننا تدريب الشبكة العصبية بيرسيبترون لتوليد هذه الأصوات الفريدة، ولكن كيف ستتذكر الإجابات السابقة؟ لذا تكمن الفكرة في إضافة ذاكرة خاصة لكلّ خلية عصبية اصطناعية، واستخدامها كمدخل إضافي عند تشغيل المقطع التالي. يمكن للخلايا العصبية أن تدون ملاحظات لنفسها مثل اكتشافها لحرفٍ متحرك، ولذلك يتوجب عليها أن تُظهر المقطع الصوتي التالي بنبرة أعلى (في الحقيقة إنها مجرد مقاربة بسطية للغاية). بهذه الطريقة ظهرت الشبكات المتكررة. كان لهذا النهج مشكلة كبيرة وهي عندما تتذكر جميع الخلايا العصبية نتائجها السابقة، يصبح عدد الاتصالات في الشبكة ضخمًا جدًا لدرجة أنه من المستحيل -من الناحية الفنية- ضبط جميع الأوزان. لذلك عندما لا تستطع الشبكة العصبية نسيان بعض الأشياء غير الهامّة فلن تتمكن من تعلّم الأشياء الجديدة (حتى نحن البشر لدينا نفس المشكلة نسيان بعض المعلومات غير الهامة، أو لعلّها ميزة؟ وخصيصًا إذا كانت هذه الأشياء هي ذكريات مؤلمة!). كان التحسين الأول بسيطًا جدًا وذلك بتحديد حجم معين لذاكرة الخلية العصبية الاصطناعية. لنقل بأن الشبكة ستحفظ آخر 5 نتائج فقط. ولكن أليست هذه الفكرة مناقضة للفكرة الأساسية الّتي انطلقنا منها (وهي تذكر ما تعلمته الشبكة بالكامل)؟ بعد تحديثاتٍ وتطويرات كثيرة جاء لاحقًا نهج أفضل بكثير، والّذي سيستخدم خلايا خاصة، تشبه إلى حدٍ ما ذاكرة الحاسوب. يمكن لكلّ خلية إمكانية تسجيل رقم معين أو قراءته أو إعادة تعيينه. وسميت هذه الخلايا بخلايا الذاكرة طويلة وقصيرة الأجل (LSTM). والآن عندما تحتاج الخلية العصبية إلى تعيين منبه لتذكر هذا المقطع، فإنها ستضع راية (Flag) في تلك الخلية. مثل "كان الحرف ساكنًا في الكلمة، استخدم المرة التالية قواعد نطق مختلفة". عندما لا تستدعي الحاجة لاستخدام الرايات، سيُعاد ضبط الخلية تاركة فقط الاتصالات "طويلة الأجل" للشبكة العصبية. وبعبارة أخرى، ستُتدربُ الشبكة العصبية ليس فقط لكي تتعلّم كيفية ضبط الأوزان وإنما لتتعلّم أيضًا كيفية ضبط الرايات (وهي أشبه ما يمكن بالمنبهات) في الخلايا العصبية. قد يبدو الحل بسيط جدًا ومع ذلك يعمل بكفاءة عالية. لكن ماذا لو دمجنا إمكانية تعديل مقاطع الفيديو باستخدام الشبكات العصبية التلافيفية (CNN) مع إمكانية تعديل الصوت باستخدام الشبكات العصبية المتكررة (RNN) على ماذا سنحصل؟ هل حقًا سنحصل على الرئيس السابق للولايات المتحدة الأمريكية؟ إليك هذا الفيديو لتكتشف الأمر. التعلم العميق (Deep Learning) إذا أردنا أن نختصر التعلم العميق بجملة واحدة وواحدة فقط ستكون حتمًا: "التعلّم العميق هو شبكة عصبية اصطناعية كبيرة". من بعض التطبيقات العملية للتعلم العميق: التعرف على الصور والأصوات. تحليل بيانات الأرصاد الجوية. تحليل بيانات الأبحاث البيولوجية. مجال التسويق واختيار الجمهور المستهدف من الإعلانات. من بعض الهيكليات الشبكة العصبية الاصطناعية المستخدمة بكثرة في التعلّم العميق نجد: شبكات بيرسيبترون متعددة الطبقات (Multilayer Perceptron Networks). الشبكات العصبية التلافيفية (Convolutional Neural Networks). الشبكات العصبية المتكررة ذات الذاكرة قصيرة وطويلة الأمد (Long Short-Term Memory Recurrent Neural Networks). والعديد من البنى الأخرى للشبكة. بعد بناء العلماء والباحثين للعديد من البُنى (المعماريات) الخاصة بالشبكات العصبية في محاولة منهم للعثور على البنية الأنسب لاكتشاف الأنماط في البيانات، ومن بين أبرز هذه البُنى (المعماريات) كانت البنية الخاصة بالشبكة التعلم العميق، ويذكر أن أول مرة ظهر فيها مفهوم التعلم العميق كان في عام 2006، وعرفت في ذلك الوقت على أنها مجال فرعي من مجالات تعلّم الآلة (مع أنها تندرج تحت نفس فئة الشبكات العصبية)، إلا أنها لاقت الاهتمام الواسع عندما طبق جيفري هينتون وزملائه بنية الشبكة الخاصة بالتعلّم العميق في مسابقة ImgNet وحققوا آنذاك نتائج مبهرة، إذ استطاعوا تحقيق دقة أفضل بـ10% من البُنى القديمة في التعرف على الصور. بعد هذا النجاح المدوّي استطاعت بجدارة لفت الأنظار حولها وبدأت بالظهور العديد من التطبيقات والأبحاث الجديدة الخاصة بالتعلم العميق، مما أدى إلى تطورها تطورًا كبيرًا، كما أنها أثببت جودتها بتحقيقها نتائج مذهلة في العديد من التطبيقات، وبذلك أوجدت لنفسها مكانة لا يستهان بها في مجال الذكاء الصنعي عمومًا ومجال تعلم الآلة خصوصًا. يعتمدُ مفهوم التعلم العميق في أساسه على طريقة تعلّم مؤلفة من عدّة طبقات من التمثيلات المقابلة لبنيةٍ هرمية من السمات، ويتم تعريفُ السِّمات والمفاهيم عالية المستوى نزولًا إلى المفاهيم ذات المستوى الأدنى، وهي تعمل أيضًا نمط التعلم الموجه وغير الموجه إلا أنها تعمل عملًا ممتازً مع البيانات المصنفة (أي مع التعلّم الموجّه). إن للتعلم العميق علاقة وطيدة مع البيانات إذ لا بدّ من الحصول على كميات كبيرة من البيانات إذا أردنا استخدام هذا النوع من التعلّم. ومع ازدياد البيانات سوف تتحسن الدقة تحسنًا كبيرًا مما سيؤدي لنتائج أفضل في نهاية المطاف. الفرق بين الشبكات العصبية والتعلم العميق في الحقيقة إن التعلم العميق ما هو إلا بنية مخصصة من الشبكات العصبية، ولكنها سميت بالتعلم العميق نسبة إلى عدد الطبقات الّتي تحتويها هذه البنية الشبكية، وبما أنها أكبر من عدد الطبقات الخاصة بالشبكات العادية آنذاك فلذلك سُميت بهذا الإسم. تكمن قوة التعلم العميق في إمكانيته في تعلّم الميزات (Features) بطريقة هرمية، أي تتعلّم التسلسل الهرمي للميزات انطلاقًا من ميزات من مستوى عالٍ مرورًا بميزات بمستوى أخفض وهكذا إلى أن نصل لآخر الميزات ذات المستوى الأدنى، مما يعطي لأسلوب التعلم هذا مستوًى جديدًا من التجريد للنظام وخصوصًا مع الوظائف والمفاهيم المعقدة من خلال بنائها من المفاهيم الأبسط فالأبسط. من الشكل السابق نلاحظ كيف أن التعلم العميق يستطيع تعلم التمثيلات الهرمية للبيانات. الّتي تربط المدخلات مع المخرجات مباشرة من البيانات دون الاعتماد على الميزات الّتي حددها الإنسان. أي تستطيع استنتاج كميات كبيرة من الميزات ومحاولة تحليلها وبطها بالصورة الكاملة للمشكلة. يطلق على هذا النوع من طريقة تعلّم الميزات الخاصة بالبيانات بتعلم الميزات (Feature learning). ومن بين أبرز الطفرات العلمية الّتي شهدها التعلم العميق كان على يد شركة ديب مايند (والتي استحوذت عليها شركة ألفابت)، إذ استطاعت شركة ديب مايند أن تدمج بين التعلم العميق مع التعلم المعزز من أجل حلّ المشاكل المعقدة مثل لعب الألعاب. أطلقوا لاحقًا على طريقتهم هذه اسم شبكات التعلم المعزز العميق (Deep Q-Network)، بعدها اصبح التعلّم العميق في أغلب البنى الخاصة بالشبكات العصبية. ومن الملاحظ مما سبق أن طريقة التعلم العميق تتطلب أجهزة حاسب قوية جدًا، وذلك لأنها تتعامل مع كميات كبيرة من البيانات. هنالك العديد من البنى الخاصة بالشبكات العصبية لدرجة أننا نحتاج لكتاب كامل لتغطية كافة أنواعها ومميزاتها وسلبياتها وطرق عملها ..إلخ، إلا أنه وبما أنك استطعت تعلم الأساسيات فحتمًا ستستطيع تعلم أصعب البنى الشبكية، ولإعطاء نظرة دقيقة للأمر إليك الصورة التالية: كما يمكنك ايضًا الرجوع إلى هذا المقال لمزيد من المعلومات. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن الخلاصة بعد تعرفنا على أهم الأساسيات الخاصة بتعلّم الآلة، وكيف تختلف عن بعضها بعضًا، وما هي النقاط الّتي يجب علينا التركيز عليها عند اختيارنا لطريقة ما على حساب الأخرى، وتعرفنا أخيرًا على الشبكات العصبية والتعلم العميق، لا بدّ لنا من أن نسأل أنفسنا، ما هي المشاكل الّتي يُواجهنا هذا المجال؟ ما نوع هذه المشاكل؟ وكيف نستطيع تجاوزها؟ في مقالنا القادم سنحاول الإجابة على هذه الأسئلة ونتعلم أيضًا بعض الأمور المهمة والّتي ستساعدنا في المضي قدمًا في هذا المجال. المراجع مقال Machine Learning for Everyone. كتاب Hands on Machine Learning with Scikit Learn Keras and TensorFlow الطبعة الثانية. مقال What is Deep Learning?. اقرأ أيضًا المقال التالي: تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال المقال السابق: الذكاء الاصطناعي: مراحل البدء والتطور والأسس التي نشأ عليها النسخة الكاملة من كتاب مدخل إلى الذكاء الاصطناعي وتعلم الآلة1 نقطة
-
أخى الكريم الـ CLI هى إختصارا لجملة Command Line Interface ومعناها واجهة سطر الاوامر ، وهى عبارة عن واجهة تسمح للمستخدمين بكتابة بعض الأوامر المطلوبة من الحاسوب ليقوم بالعمليات اللازمة. تستطيع أن تقول أنها الواجهة بين الإنسان والألة أى المكان الذى يتم فيه الإتصال بين المستخدم والحاسوب بإخذ صيغ نصية. واجهة سطر الأوامر. بالتوفيق1 نقطة