القليل من الذكاء الاصطناعي

🤖

و الكثير من المتعة!

بسم الله الرحمن الرحيم و الحمد لله و الصلاة و السلام على رسول الله و على آله و صحبه و من والاه.. و رمضان مبارك عليكم و علينا.

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

قبل عشر سنوات تماماً، في مايو ٢٠٠٩م عندما أكرمني الله برحمته بالعمل على الكثير من تطبيقات الـiPhone و بعد أن أَكرمنا الله بنجاح تطبيق Groups، اقترح شريكي فهد جيلاني أن نصنع تطبيق CallWay و هو تطبيق هاتف و جهات اتصال يستخدم لوحة مفاتيح الـT9 على شاشة الجوال (تستخدم في الغرب) للبحث بدلاً من الكتابة على لوحة مفاتيح الأحرف العادية الأصغر حجماً و التي تستغرق وقتاً أطول. استخرت الله و استخار و اتفقنا على البدء في العمل على هذه الفكرة .


بدأنا العمل بسم الله الكريم .. و في مرحلة معيّنة، شاء الله برحمته ليدور بيني و بين فهد هذا النقاش المفصلي في حياتي كمطوّر تطبيقات :


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

و كيف سنفعل ذلك؟

سألني فهد كيف؟ و الحقيقة أني لا أدري كيف سنفعل ذلك! لكني فوضت الأمر إلى الله الكريم في تلك اللحظة، فبدأ الإلهام يهطل من خزائنه التي لا تنفد كالشلال :

ممم .. بسم الله توكلنا على الله .. ماذا لو أعطينا كل نتيجة من نتائج البحث نقاطاً حسب مطابقتها لمعايير معيّنة؟

اشرح أكثر فضلاً

مثلاً.. النتائج التي يتطابق اسمها الأخير من اسمي الأخير لا بد أنهم من عائلتي، نعطيهم خمس نقاط! لنعطيهم ثقلاً أكبر ..

ثم؟

و النتائج التي سجلتها كمفضّلة في التطبيق، نعطيهم خمس نقاط كذلك!

لعلك تقصد أننا سنرتب النتائج حسب مجموع النقاط؟

و النتائج التي يشير عنوانها بأنها في نفس مدينتي نعطيها أربع نقاط! .. و النتائج التي اتصلت بها مؤخراً نعطيها أربع نقاط كذلك! ..



تبارك الرحمن! … نعم! تماماً! .. و النتائج التي اتصلت بها من نتائج البحث ذاته نعطيها ثلاث نقاط إضافية لأنها نتيجة صحيحة ذكيّة من بحث سابق ناجح!

تقصد أن ..

أقصد أن البرنامج بفضل الله تعالى يتعلم أكثر و يزداد ذكاءً كلما استخدمته أكثر .. يتعلّم من استخدامك!

 😲

لله تعالى الحمد و الشكر، سيكون ذلك رائعاً!

ما سأفعله بإذن الله تعالى هو أني سأعطي Tokens لكل نتيجة من نتائج البحث، عمليّة البحث عبارة عن مسابقة بين النتائج.. و النتيجة الحاصلة على نقاط أكثر ستكون أعلى من غيرها.

ربّما بإمكاننا زيادة المعايير أكثر و جعلها تراكميّة كذلك ؟

كيف سنجعلها تراكميّة؟

مثلاً كلما اتصلت مرة بـ خالد الغير متواجد في مدينتي و ليس من أقربائي يأخذ ٤ + ٣ نقاط إضافيّة جديدة؟ فيبدأ بالصعود للأعلى في المرة القادمة.. و إن اتصلت به مرة أخرى من نتائج البحث سيكون لديه ٨ + ٦ نقاط لأنه ثاني اتصال به من نتائج البحث؟ و في ثالث عملية بحث سيكون لديه ١٤ نقطة و سيظهر في نتائج البحث أعلى من خالد قريبي الذي يسكن في نفس مدينتي الذي لديه ٩ نقاط فقط! لأنه من الواضح أني الآن مهتم أكثر بخالد لذي اتصلت به مرتين مؤخراً ..

لله تعالى الحمد و الشكر، هذا يبدو فعلاً كترتيب حسب الأهميّة!


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


ثم مات هذا التطبيق لاحقاً


رفضنا عرض استحواذ من شركة يابانيّة على تطبيق CallWay، و مات التطبيق بعدها بعام فسحبناه من الـApp Store.. و بعدها بسنوات عندما بدأت العمل على كرميلا فهمت لماذا وضع الله عزّ و جلّ تطبيق CallWay في طريقي حتى و إن كان التطبيق لن يستمر طويلاً.. كان ذلك ليعلّمني و يشجّعني على إضافة لمسات من الذكاء الاصطناعي الذي سأحتاجه في الكثير من تطبيقاتي اللاحقة!


نظام النقاط هذا الذي ألهمني الله استخدامه في CallWay هو الأساس للكثير من الذكاء الاصطناعي البسيط في كرميلا و عدد من تطبيقاتي الأخرى التي تلت CallWay..

فمثلاً..

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

فمثلاً.. نحن نختبر كل عنصر Widget في الصفحة لوحده لنعرف اللغة التي كتب بها هو تحديداً.. قد نحصل في النهاية على نتيجة مثل: ١٠ عناصر باللغة العربية و ٦ عناصر باللغة الإنجليزية و ٣ عناصر باللغتين سوياً، بعدها نقوم بإعطاء العناصر ذات الأهميّة الأعلى مضاعفات أعلى لنقاطها، فالعنوان يضيف للغة التي كتب بها المزيد من النقاط و النص التقديمي للمقالة يعطي ثقلاً أكبر للغته كذلك.. و الحاشية و الهوامش الصغيرة تحصل على قيمة أقل من قيمتها الحقيقية.. و في النهاية نحصل على تقرير منطقي واضح و دقيق بشكل أكبر بكثير من الـAPIs المتوفرة على الإنترنت :

إضافة لما يظهر في الصورة أعلاه، نختبر لغة اسم المستخدم كعامل إضافي و نعطي لغتها نقاطاً إضافيّة، و نستطيع كذلك اختبار بلد المستخدم بالـIP فإن كانت دولة عربية نزيد العربيّة نقاطاً و إن كانت اليابان نزيد اللغة اليابانية نقاطاً (لكننا لا نفعل ذلك حالياً) .. و بعد ذلك نحصل على المجاميع التالية في هذا المثال :


العربية (٤٩ + ١٨٠ + ١٢٠ + ٥٥ + ٥٠ +(١٠٠ من اسم المستخدم)) = ٥٥٤ نقطة


الإنجليزية (٩٩ + ٢٠ + ٧٠ + ٤٥) = ٢٣٤ نقطة


اليابانيّة (١٠٠) = ١٠٠ نقطة


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


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


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


و أكثر البرامج بحاجة

للقليل من الذكاء الاصطناعي

في تطبيقكم iQuran مثلاً.. إن كنت تفتح التطبيق كل عصر لقراءة سورة معيّنة.. بإمكان التطبيق أن يتعلّم من هذا التكرار (بنظام النقاط بين السور مع تسجيل الوقت و اليوم الذي أُضيفت فيه النقطة) ليرجّح هدفك من فتح التطبيق في هذا الوقت من اليوم أو هذا الوقت من الأسبوع و يعطيك اختصاراً في واجهته للذهاب إلى هذه السورة فوراً إن فتحتها في ذات الوقت في اليوم التالي.. نفس الشيء مع سورة الكهف كل جمعة مثلاً .. ذات الشيء في تطبيقكم iSubha إن كنت تفتحه كل يوم بعد الفجر لاختيار (سبحان الله و بحمده) من القائمة لتسبح بها. عندما أشعر كمستخدم بأن التطبيق يفهمني و يشكّل واجهته و خياراته حسب تصرفاتي و يستوعب أوقاتي و حالاتي تزداد العواطف بيني و بينه!


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


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

لا يحتاج الذكاء الاصطناعي لأن يكون معقّداً !


لا شك أن أهل التخصص لديهم مصطلحات أدقّ لما شرحته لكم بالأعلى لكنه ليس تخصصي و لا تهمني مصطلحاته حالياً بقدر ما يهمني استخدامه لحل المشاكل التي تواجهني و تواجه المستخدمين.. و كل ما سردته لكم أبسط بكثير من تعلّم الآلة (Machine Learning) و فروع الذكاء الاصطناعي الأخرى الأعمق التي لا أعلم عنها الكثير! إنما إن لم تكن قد بدأت بها و درستها.. فبإمكانك أن تبدأ بأفكار أبسط مثل التي شرحتها هنا.. لعلها ذكاء اصطناعي.. لعلها تذاكي اصطناعي.. أو لعلها مجرد لمسات برمجيّة تهدف لإفراح المستخدم و اختصار وقته.. ماهيتها لا تهم! المهم أن تتحسن التطبيقات التي نصنعها و تصنع فارقاً إيجابياً مع المستخدمين.. و هدفنا إرضاء الله العظيم و له الحمد في الأولى و الأخرى و ما بينهما و في العالمين.

Join