اذهب إلى المحتوى

Ali Ibrahim12

الأعضاء
  • المساهمات

    45
  • تاريخ الانضمام

  • تاريخ آخر زيارة

3 متابعين

المعلومات الشخصية

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

آخر الزوار

لوحة آخر الزوار معطلة ولن تظهر للأعضاء

إنجازات Ali Ibrahim12

عضو مساهم

عضو مساهم (2/3)

30

السمعة بالموقع

11

إجابات الأسئلة

  1. ما الفرق بين التعلم العميق والشبكات العصبية؟ التعلم العميق : هو مجال في الذكاء الاصطناعي (AI). الشبكة العصبية: هي التكنولوجيا الأساسية في التعلم العميق. يتم استخدام مصطلحي التعلم العميق والشبكات العصبية بالتبادل لأن جميع أنظمة التعلم العميق مصنوعة من الشبكات العصبية. ومع ذلك ، تختلف التفاصيل الفنية. بشكل دقيق كل تعلم عميق مبني على شبكة عصبية لكن ليس كل شبكة عصبية هي تعلم عميق. حيث الشبكات العصبية يمكن ان تكون بسيطة او عميقة والتعلم العميق مبني على شبكة عميقة حصرا ونقارن بين النوعين: الشبكات العصبية البسيطة: تتكون الشبكات العصبية من طبقة إدخال وطبقة مخفية وطبقة خرج وتكون أقل تعقيد ، لأنها تحتوي على طبقات قليلة فقط حيث تعمل بشكل جيد عند حل المشكلات البسيطة. غالبا ما تستخدم الشبكات العصبية البسيطة لمهام التعلم الآلي (ML) نظرا لان تطويرها منخفض التكلفة والمتطلبات الحسابية التي يمكن الوصول إليها. يمكن للمؤسسات تطوير التطبيقات التي تستخدم الشبكات العصبية البسيطة داخليا. إنها أكثر جدوى للمشاريع الصغيرة لأن لديها متطلبات حسابية محدودة. إذا احتاجت الشركة إلى تصور البيانات أو التعرف على الأنماط ، فإن الشبكات العصبية توفر طريقة فعالة من حيث التكلفة لإنشاء هذه الوظائف. الشبكات العصبية العميقة (التعلم العميق): تتكون من عدة طبقات مخفية مرتبة للالتفاف(convolution) أو التكرار (recurrence) وبنيتها اكثر تعيقد حيث يمكن ان تكون معقدة للغاية ولها هياكل مثل الذاكرة طويلة المدى (LSTM), وتتطلب بيانات اكبر واضخم لتدريبها لكن اذا توفرت يمكنها حل المشكلات المعقدة كثيرا حيث يكلف تدريب شبكات التعلم العميق الكثير من المال والموارد .فإن أنظمة التعلم العميق لها مجموعة واسعة من الاستخدامات العملية. تتيح لهم قدرتهم على التعلم من البيانات واستخراج الأنماط وتطوير الميزات تقديم أداء متطور. على سبيل المثال ، يمكنك استخدام نماذج التعلم العميق في معالجة اللغة الطبيعية (NLP) والقيادة الذاتية والتعرف على الكلام.
  2. في الكود الثاني، قمت بتطبيق التحجيم القياسي (StandardScaler)فقط على بيانات التدريب (x_traing) ولكن لم تقم بتطبيق نفس التحجيم على بيانات الاختبار (x_test). هذا يؤدي إلى عدم توافق في توزيع البيانات بين التدريب والاختبار، مما يسبب زيادة كبيرة في الخطأ. يجب عليك أيضًا تطبيق التحجيم على بيانات الاختبار باستخدام نفس التحجيم الذي استخدمته لبيانات التدريب: import pandas as pd from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error data = pd.read_csv("heart_disease.csv") feutures = data.drop(['target'], axis=1, inplace=False) outpnt = data['target'] x_traing, x_test, y_traing, y_test = train_test_split(feutures, outpnt, test_size=0.25, random_state=44, shuffle=True) scaler = StandardScaler() x_scaler_traing = scaler.fit_transform(x_traing) x_scaler_test = scaler.transform(x_test) # تطبيق نفس التحجيم على بيانات الاختبار linearregression = LinearRegression(fit_intercept=True, copy_X=True, n_jobs=-1) fit = linearregression.fit(x_scaler_traing, y_traing) y_prodict = fit.predict(x_scaler_test) msevalue = mean_squared_error(y_test, y_prodict, multioutput="uniform_average") print(f"MSEvalue: {msevalue}") وتأكد من أن البيانات في ملف heart_disease.csv لا تحتوي على قيم شاذة أو غير منطقية يمكن أن تؤثر على النتائج بعد التحجيم. بتطبيق التعديلات السابقة، يجب أن تحصل على نتائج أكثر منطقية لقيمة MSE.
  3. في نماذج التعلم الالي مفهوم ال"target" يعبر عن الخرج المستهدف أو النتيجة المرغوبة التي يتم استهدافها في مجموعة البيانات. حيث تكون موجودة في مسائل التعلم بالاشراف (supervised learning) من مسائل تصنيف او تنبؤ على غرار مسائل الغير خاضعة للاشراف (unsupervised learning) مثل خوارميات التجميع وغيرها. حيث يمكن ان تصادفك بغير اسم لكن تعبر عن نفس المعنى ومن الاسماء الشائعة الاخرى للtarget هي: Label (التصنيف) Class (الفئة) Outcome (النتيجة) Ground truth (الحقيقة الأساسية) Y (نتيجة او الدالة ) ففي مثالك الtarget هي حالة السكري في الدم حيث تعبر 0 للحالة الطبيعية اي انه بمعنى اخر غير مصاب بالسكر وال1 انه مرتفع السكري وهو مؤشر لاصابته بالسكري فيمكن ان تحل البيانات التي تملكها ان يمكن تصنيف الاشخاص المصابين بالسكري من غير المصابين وذلك تبعا للعوامل مثل العمر والجنس والخ...) هدف استخدام الـ target في التعلم الآلي هو تدريب النموذج للتنبؤ بالفئة المناسبة للمثال الجديد. عند تدريب النموذج، يتم مقارنة النتيجة المتوقعة المستنتجة من النموذج بالقيمة الهدف (target) الحقيقية. بناءً على هذه المقارنة، يتم تحديث وضبط معلمات النموذج ليتعلم التنبؤ الدقيق بالفئات وهذا تعريف التعلم بالاشراف.
  4. يمكن أن تكون المشكلة في إعدادات البريد الإلكتروني الخاصة بـ Django على الاستضافة. هناك احتمالان رئيسيان للمشكلة: 1. إعدادات البريد الإلكتروني في Django: - تأكد من تكوين إعدادات البريد الإلكتروني بشكل صحيح في ملف `settings.py` الخاص بمشروع Django الخاص بك. تحتاج إلى تحديد معلومات الاعتماد الصحيحة لخادم البريد الصادر (SMTP) الذي تستخدمه لإرسال البريد الإلكتروني. -تكون من الشكل : EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'your-smtp-host' EMAIL_PORT = 587 EMAIL_HOST_USER = 'your-email@example.com' EMAIL_HOST_PASSWORD = 'your-email-password' EMAIL_USE_TLS = True DEFAULT_FROM_EMAIL = EMAIL_HOST_USER 2. قيود الاستضافة: - بعض خدمات الاستضافة تفرض قيودًا على إرسال البريد الإلكتروني، مثل حجم رسائل البريد أو قيود بروتوكول SMTP. يجب التحقق من قواعد الاستضافة الخاصة بك للتأكد من عدم وجود أي قيود تمنع إرسال رسائل البريد الإلكتروني من الاستضافة. ويكن مراجعة الجواب التالي لاعداد البريد الالكتروني والتاكد من انك قمت بالاعداد الصحيح
  5. قم بإنشاء نسخة احتياطية من بياناتك (تصديرها) قبل القيام بالتغييرات وذلك في حال استخدام MySql بطريقة بسيطة بالذهاب الى phpmyadmin واختبار قاعدة البيانات المطلوبة وثم القيام بصدير ينتج ملف ذو لاحقة sql توجد فيه نسخة احطياتية لبياناتك ويوجد طرق اخرى لكن هذه اسهل واحدة . وعندما تريد استردادها قم بimport الى قاعدة بيانات فارغة واختيار الملف الذي قمت بتصديره مسبقا. يمكن اضافة الحقل الجديد دون مشاكل عبر طريقتين نعطي مثال اضافة phone_number الى نموذج ال User وداخل تابع up قم باضافة الحق الجديد عن طريق : اضافة الحقل في ملف الترحيل لكن يجب وضع له قيمة افتراضية مما يعطي كل البيانات القديمة هذه القيمة الافتراضية: قم باجراء التعليمة التي تقوم بانشاء ملفmigration جديد يوجد في المسار database/migrations php artisan make:migration add_phone_number_users_table ثم وضع قيمة افتراضية داخل الجدول الاتي ولتكن 55555 public function up() { Schema::table('users', function (Blueprint $table) { $table->integer('phone_number')->default(55555); }); } ينتج اضافة حقل جديد لكل البيانات القديمة مع قيمة 55555 لكل المستخدمين . او بوضع الحقل اسمح بان يكون null عبر public function up() { Schema::table('users', function (Blueprint $table) { $table->integer('phone_number')->nullable(); }); } ينتج اضافة حقل جديد لكل البيانات القديمة تأخذ قيمة null لكل المستخدمين . بعدها تنفيذ امر تهجير البيانات php artisan migrate وهذا تكون اضفت حقل جديد دون التاثير على البيانات
  6. إرسال رسائل البريد الإلكتروني عبر Gmail في Django اتبع الخطوات التالية : 1. التحقق على خطوتين أول شيء نحتاجه هو إعداد التحقق من عامل 2. انتقل إلى https://myaccount.google.com/security واسمح له بالتسجيل بحسابك . 2. إنشاء تطبيق كخطوة ثانية ، نحتاج إلى إنشاء تطبيق. انتقل إلى https://myaccount.google.com/apppasswords سيعطيك كلمة مرور ، والتي سنستخدمها في Django. بعد إنشاء تطبيق ، ستتلقى كلمة مرور. احفظه ، حيث ستحتاج إليه لاحقا. 3. إعدادات جانغو: لتجنب تخزين بيانات الاعتماد مباشرة سنستخدم ملفا(.env) حيث للتعامل معه نستخدم الامر التالي pip install decouple ثم نقوم بانشاء ملف باسم .env بعدها نضع داخله EMAIL_HOST_USER=your_account@gmail.com EMAIL_HOST_PASSWORD="doep naxs afue tlzv" DEFAULT_FROM_EMAIL=Your app <your_account@gmail.com> وبعدها انتقل إلى الملف(settings.py) وأضف إعدادات خادم البريد الإلكتروني. from decouple import config EMAIL_HOST = "smtp.gmail.com" EMAIL_HOST_USER = config("EMAIL_USER") EMAIL_HOST_PASSWORD = config("EMAIL_PASSWORD") EMAIL_PORT = 587 EMAIL_USE_TLS = True DEFAULT_FROM_EMAIL = config("DEFAULT_EMAIL") بالنسبة لمستخدمي Windows ، فأنت جاهز لكن قد يواجه مستخدمو Mac خطأ أثناء الاختبار. في هذه الحالة ، ستحتاج إلى تثبيت حزمة تسمى .certifi للتاكد من المستخدم عبر التعليمة التالية pip install --upgrade certifi ثم قم بتشغيل هذا الأمر من الجهاز. قم بتحديث المسار إذا كنت تستخدم إصدارا مختلفا من Python. /Applications/Python\ 3.12/Install\ Certificates.command والان الارسال عبر الدالة send_mail كالطريقة التالية from django.core.mail import send_mail from django.shortcuts import render def index(request): subject = ( "Ali ibrahim" ) message = "This email is from Django." send_mail( subject=subject, message=message, from_email=None, recipient_list=["alicodeacm@gmail.com",'mohamad123@gmail.com'] ) return render(request, "index.html") والنتيجة النهائية
  7. ما هي الـMicroservices؟ الـMicroservices هي نهج معماري في تطوير البرمجيات يقوم على تقسيم التطبيق إلى مجموعة من الخدمات الصغيرة والمستقلة، كل خدمة تعمل على عملية واحدة وتتواصل مع الخدمات الأخرى عبر واجهة برمجة التطبيقات (API). هذا النهج يُمكّن من تطوير ونشر وصيانة كل خدمة بشكل مستقل عن الخدمات الأخرى. عند جمع هذه الخدمات في واجهة واحدة لتكوين التطبيق بالكامل حيث يتعامل المستخدم مع واجهة التطبيق وحيدة لكن كل خدمة تنفذ بشكل مستقل عن الاخرى ويمكن ان يكون هناك تخاطب بين بعض هذه الخدمات وتتمثل بالشكل التالي: الفوائد: • الاستقلالية: كل خدمة في نموذج الـMicroservices تعمل بشكل مستقل عن الخدمات الأخرى، مما يعني أنه يمكن تحديثها، أو استبدالها، أو تطويرها دون التأثير على بقية النظام بحيث إذا فشلت خدمة ما، لا تتأثر الخدمات الأخرى. • التخصص: كل خدمة مصممة لأداء وظيفة محددة جداً، وهذا يساعد في الحفاظ على النظام نظيفًا ومنظمًا. • المرونة: يمكن توزيع الخدمات على عدة خوادم أو حتى مراكز بيانات، مما يزيد من مرونة النظام وقابليته للتوسع. • القابلية للتوسع: يسهل توسيع نطاق الخدمات حسب الحاجة. التحديات: • التعقيد: يمكن أن يزيد التعقيد في التواصل بين الخدمات. • إدارة البيانات: يجب التعامل مع تقسيم البيانات بين الخدمات المختلفة. • الأمان: يجب ضمان الأمان في التواصل بين الخدمات. مثال على التطبيق العملي لها: في تطبيق التجارة الإلكترونية، بدلاً من وجود خادم واحد كبير يحتوي على كل الوظائف، يمكن تقسيم الوظائف إلى خدمات مستقلة مثل: • خدمة المستخدمين (User Service): تتعامل مع بيانات المستخدمين. • خدمة الطلبات (Order Service): تتعامل مع عمليات الشراء والطلبات. • خدمة الاصناف (Catalog Service): تتعامل مع المنتجات والمخزون. • خدمة البحث (Search Service): تتعامل مع المنتجات والمخزون. التواصل بين الخدمات: يمكن للخدمات التواصل عبر: • رسائل الوسيط (Message Broker): حيث تُرسل الخدمات الطلبات عبر قناة رسائل مشتركة حيث الredis يعتبر نوع منه. • الاتصال المباشر: حيث تتواصل الخدمات مباشرةً مع بعضها البعض. الخلاصة: الـMicroservices تعتبر نهجاً مثالياً للمشاريع التي تتطلب مرونة عالية وسرعة في التطوير والتوسع ولكنها تأتي مع تحدياتها الخاصة. وهي ليست دائماً الحل الأمثل لكل مشروع حيث يجب تقييمها بناءً على متطلبات المشروع وقدرات الفريق أنه لديه الخبرة الكافية لإدارة هذا النوع من الأنظمة، فإنها تتطلب فهماً عميقاً للمبادئ والممارسات الجيدة، واستخدام الأدوات المناسبة للتغلب على التحديات المرتبطة بها.
  8. قبل البدء بالتفاصيل التقنية، لنتكلم قليلا لماذا ومتى نحتاج إلى اتصالات قاعدة بيانات متعددة في تطبيق Laravel الخاص بنا ؟ - تطبيق مبدأ فصل الاهتمام: فغالباً ما تنتمي البيانات المختلفة إلى مجالات أو خدمات مختلفة. - تحسين الأداء: من خلال توزيع بياناتك عبر قواعد بيانات متعددة، يمكنك تحسين أداء قاعدة البيانات. فعلى سبيل المثال، يقوم البعض باستخدام قاعدة بيانات مخصصة للعمليات الثقيلة للقراءة وأخرى للعمليات الثقيلة للكتابة. - عمليات تكامل الجهات الخارجية: في بعض الأحيان، قد تحتاج إلى الاتصال بقواعد بيانات خارجية أو قديمة لا تتوافق مع مخطط قاعدة البيانات الأساسية. تمكنك الاتصالات المتعددة من العمل مع مصادر البيانات هذه بكفاءة. - في تطبيقات التي تقدم خدمة بالاجار تسمى SAAS وخاصة في حالة تريد فصل بيانات المستخدمين عن بعضهم البعض حيث تكون الواجهة واحدة ولكن بقواعد بيانات مخصصة لكل عميل حيث تسمى هذه الهيكلية بMulti-Tenancy والآن سأقوم بشرح الخطوات لتحقيق ذلك: 1. يجب إعداد قواعد البيانات التي أريد التعامل معها: لإعداد اتصالات قاعدة بيانات متعددة نحتاج لتعريف كل اتصال منها في ملف config/database.php: // config/database.php 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'default'), 'username' => env('DB_USERNAME', 'default'), 'password' => env('DB_PASSWORD', ''), // ... ], 'second_db' => [ 'driver' => 'mysql', 'host' => env('SECOND_DB_HOST', '127.0.0.1'), 'port' => env('SECOND_DB_PORT', '3306'), 'database' => env('SECOND_DB_DATABASE', 'second'), 'username' => env('SECOND_DB_USERNAME', 'second'), 'password' => env('SECOND_DB_PASSWORD', ''), // ... ], // يمكنك الإضافة بقدر ما تشائين من الاتصالات بقواعد البيانات هنا ], في هذا المثال، حددنا اتصالين بقاعدة البيانات: "mysql" (الاتصال الافتراضي) و"second_db". يمكنك إضافة المزيد من الاتصالات كما هو مطلوب، ولكل منها تكوينها الخاص.2. تعيين متغيرات البيئة: للحفاظ على أمان بيانات الوصول لقاعدة البيانات، يجب الالتزام باستخدم ملف .env لتخزينها. لذلك يجب تعيين متغيرات البيئة لكل اتصال قاعدة بيانات قمنا بانشائه كما يلي: DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database DB_USERNAME=your_username DB_PASSWORD=your_password SECOND_DB_CONNECTION=mysql SECOND_DB_HOST=127.0.0.1 SECOND_DB_PORT=3306 SECOND_DB_DATABASE=second_database SECOND_DB_USERNAME=second_username SECOND_DB_PASSWORD=second_password وتأكد من تطابق أسماء متغيرات البيئة مع تلك المعرفة في config/database.php. 3. نقوم بإنشاء النماذج (models): مثلاً هنا سأقوم بإنشاء نموذج لكل قاعدة بيانات: php artisan make:model User -m php artisan make:model Product -m يقوم هذا الأمر بإنشاء ملفات النموذج وملفات الترحيل (migrations) لكل نموذج. 4. تحديد الاتصال في ملفات النموذج التي تم إنشاؤها: // app/Models/User.php protected $connection = 'mysql'; // app/Models/Product.php protected $connection = 'second_db'; 5. تشغيل عمليات الترحيل (migrate) الآن، يمكنك تشغيل عمليات الترحيل لكل اتصال على حدة: php artisan migrate php artisan migrate --database=second_db سيؤدي هذا إلى إنشاء الجداول اللازمة في قواعد البيانات الخاصة بكل منها.الآن أصبح كل نموذج يتعامل مع قاعدة بيانات مختلفة: فمثلاً للتأكد يمكنك الآن الاستعلام عن البيانات من قواعد بيانات متعددة باستخدام نماذج كل قاعدة بيانات. وفيما يلي مثال على كيفية استرداد المستخدمين والمنتجات من قاعدتي البيانات لدينا: use App\Models\User; use App\Models\Product; // Retrieve users from the 'mysql' database $users = User::all(); // Retrieve products from the 'second_db' database $products = Product::all(); وهنا يتولى لارافل مهمة توجيه استعلاماتك إلى قاعدة البيانات الصحيحة بناء على خاصية اتصال النموذج التي قمنا بوضها في كل نموذج.
  9. يمكن القيام بذلك عبر اضافة شرط تحقق من تساوي العنصر مع الرقم 2 وبعدها طباعة مجموع 2 و 5: my_list = [1,2,3,4] for x in my_list: if x ==2: print(x + 5) يمكن تعميم الكود على اي رقم تريده وجمع له اي رقم تريده عبر اضافة متغران وجعله بالشكل التالي : حيث تم المرور على عناصر الlist واختبار تساوي الرقم مع العنصر المطلوب وبعدها زيادة له الرقم المطلوب my_list = [1, 2, 3, 4] # طلب رقم من المستخدم user_number = int(input("أدخل رقمًا تريد ان تضيف عليه من القائمة: ")) # طلب رقم الذي تريد اضافته add_number = int(input("أدخل رقم الذي تريد اضافته: ")) for x in my_list: if x == user_number: print(x + add_number) وملاحظة مهمة ان طريقة المرور على العناصر بالطريقى التي استخدمها مصطفى في التعليق الشابق تعتبر اسرع ومفيدة في عدد العناصر الكبير لكن هذه الطريقة مناسبة للقراءة اكثر ويجب انت تعرف الطريقتين
  10. من المهم فهم الفرق بين "الصلة"(relevance) و"التشابه"(similarity). أن التشابه يتعلق بالتشابه في مطابقة الكلمات ، الا ان الصلة تتعلق بترابط الأفكار. يمكنك تحديد المحتوى القريب لغويا باستخدام الاستعلام على قاعدة بيانات متجهة(vector database)، ولكن تحديد المحتوى ذي الصلة واسترداده يتطلب أدوات أكثر تطورا. حيث البنية العامة لنظام الاسترجاع من الشكل التالي حيث يوجد فيه قاعدة بيانات متجهة يتم الاستعلام (query)عليها بواسطة حساب التشابه بين الاستعلام والمتجهات داخل قاعدة البيانات : فان من الاستراتيجيات المتبعة هي تقسيم الملفات الى اجزاء اصغر يمكن لنظام RAG تحديد التشابه بسرعة ودقة أكبر في أجزاء نصية أصغر منه في المستندات الكبيرة. في حين أن الأجزاء الأكبر يمكن أن تلتقط المزيد من السياق ، إلا أنها تجعل نسبة التشابه اقل فعالية وتتطلب المزيد من الوقت وتكاليف الحوسبة للمعالجة.لكن القطع الأصغر قد لا تلتقط السياق الضروري بالكامل وهذه هي مشكلتك يصعب تحديد الاجزاء ذات الصلة. في حال التقطيع كيف يمكنك التأكد من اختيار الجزء الصحيح؟ تعتمد فعالية استراتيجية التقطيع إلى حد كبير على جودة وهيكل هذه القطع اي لا يوجد طريقة لتقييم مدى جودتها سوى عن طريق مراجعة يدوية. يمكن التغلب على هذه القيود عن طريق اتباع احد الاستراتيجيتان ادخال أجزاء المتداخلة : هي طريقة لتحقيق التوازن بين كل من هذه القيود. من خلال تداخل الأجزاء ، من المحتمل أن يسترد الاستعلام بيانات كافية ذات صلة عبر متجهات متعددة من أجل إنشاء استجابة سياقية بشكل صحيح.لكن أحد القيود هو أن هذه الاستراتيجية تفترض أن جميع المعلومات التي يجب عليك استردادها يمكن العثور عليها في مستند واحد. إذا تم تقسيم السياق المطلوب عبر مستندات مختلفة متعددة، فقد تفشل وسوف تفكر في الاستفادة من الحلول مثل التسلسلات الهرمية للمستندات وهي الاستراتيجية الثانية. التدرجات الهرمية للمستندات: يعد التسلسل الهرمي للمستندات طريقة فعالة لتنظيم بياناتك لتحسين استرجاع المعلومات وتاخذ الشكل التالي. تربط التدرجات الهرمية للمستندات الأجزاء بالعقد، وتنظم العقد في العلاقات بين الأصل والابن. وتحتوي كل عقدة على ملخص للمعلومات الواردة فيها، مما يسرع نظام RAG ويعرفه بالأجزاء التي يجب استخراجها. مثال : لنفترض أن الشركة متعددة البلدان لديها 10 مكاتب للموارد البشرية وأن لكل مكتب سياسة الموارد البشرية الخاصة بكل بلد ، ولكنها تستخدم نفس النموذج لتوثيق هذه السياسات. ونتيجة لذلك، فإن وثيقة سياسة الموارد البشرية لكل مكتب لها نفس التنسيق تقريبا، ولكن كل قسم سيفصل السياسات الخاصة بكل بلد لقضاء العطلات الرسمية، والرعاية الصحية، وما إلى ذلك. في قاعدة بيانات المتجهات ، ستبدو كل فقرة "أيام العطل الرسمية" متشابهة جدا. في هذه الحالة ، يمكن للاستعلام المتجه استرداد الكثير من نفس البيانات غير المفيدة ، مما قد يؤدي إلى الضياع في الحالة العادية او في الاستراتيجية الاولى.لكن باستخدام التسلسل الهرمي للمستندات، يمكن لنظام RAG الإجابة بشكل أكثر موثوقية على سؤال حول العطلات الرسمية لمكتب دمشق من خلال البحث أولا عن المستندات ذات الصلة بمكتب دمشق. ملاحظة الاستراتيجية الثانية تتطلب خبرة اكثر في بنائها. وتتطلب خبرة خاصة بالمجال أو مشكلة محددة للإنشاء لضمان أن تكون الملخصات ذات صلة كاملة بالمهمة المطروحة. يمكن انشاء الملخصات يدويا او بواسطة ادوات ونماذج قد تساعد في عملية التلخيص
  11. الفرق بين Eloquent ORM و Query Builder في لارافل يكمن في طريقة التعامل مع قاعدة البيانات وتمثيل البيانات: Eloquent ORM: ORM هي اختصار لـ Object Relational Mapper حيث يمثل طبقة وسيطة بين قاعدة البيانات وعمليات الطلب عليها اذ يؤمن الاتصال معها دون الخوض في تعلم التعليمات الخاصة بها حيث ميزاته: هو نظام لتمثيل الجداول والعلاقات بينها في شكل كائنات (objects). يسهل إنشاء العلاقات بين الجداول والتعامل معها. يوفر طريقة سهلة لإجراء العمليات مثل الإدخال، التحديث، الحذف، والاستعلام وغيرها. تربط كل جدول في قاعدة البيانات بكائن يدعى(model). مثال عن جلب كافة المستخدمين: $users = User::all(); مثال عن إنشاء بيانات جديدة: $user = new User(); $user->name = 'Ali Ibrahim'; $user->email = 'ali@example.com'; $user->save(); Query Builder: هي أداة تسمح بإنشاء استعلامات SQL برمجياً. تناسب بناء استعلامات معقدة وتنفيذ عمليات متنوعة على البيانات. توفر مرونة أكبر في كتابة الاستعلامات البرمجية. مثال عن جلب كافة المستخدمين: $users = DB::table('users')->get(); مثال عن إنشاء بيانات جديدة: DB::table('users')->insert([ 'name' => 'Ali Ibrahim', 'email' => 'ali@example.com', ]); أيهما أفضل للاستخدام؟ الاختيار بينهما يعتمد على احتياجات المشروع وتفضيلات المطور. بشكل عام، Eloquent ORM يوفر طريقة أكثر سهولة وتجريداً للتعامل مع البيانات، بينما Query Builder يوفر مرونة أكبر في كتابة الاستعلامات على قاعدة البيانات. إذا كنت تقوم بتطوير تطبيق لارافل وتحتاج إلى طريقة بسيطة وسهلة الاستخدام للتفاعل مع قاعدة البيانات، فإن Eloquent يعد خياراً جيداً. وإذا كنت بحاجة إلى تنفيذ استعلامات معقدة أو إذا كنت بحاجة إلى استخدام ميزات غير مدعومة بواسطة Eloquent أو كنت تهتم بالسرعة، فإن Query Builder هو الخيار الأفضل. ملاحظة أخيرة: يمكن الدمج بينهما بحيث يمكن اعتماد ORM للمشروع كامل وفي بعض الحالات نستخدم Query Builders https://academy.hsoub.com/questions/24095-ما-هو-الفرق-بين-eloquent-و-query-builder-في-laravel؟/https://academy.hsoub.com/questions/24095-ما-هو-الفرق-بين-eloquent-و-query-builder-في-laravel؟/
  12. فهم الاساسيات: يعد الفهم الأساسي للمفاهيم الرياضية ، وخاصة الجبر الخطي وحساب التفاضل والتكامل والاحتمال ، أمرا بالغ الأهمية للنجاح في الذكاء الاصطناعي. التحولات الخطية والمصفوفات شائعة في الذكاء الاصطناعي الخوارزميات ، مما يدل على أهمية فهم هذه المفاهيم. يعد فهم الإحصاءات ، مثل الأهمية الإحصائية والتوزيع والانحدار والاحتمال ، أمرا ضروريا أيضا لتطبيقات الذكاء الاصطناعي. تعد العقلية الاستباقية والحماس للتعلم أمرا بالغ الأهمية لأولئك الذين يتطلعون إلى التقدم في الذكاء الاصطناعي ، حيث يتطور المجال باستمرار مع التطورات والتقنيات الجديدة. لذلك ، فإن الفهم الأساسي لهذه المفاهيم ضروري للنجاح في الذكاء الاصطناعي. تتطلب الذكاء الاصطناعي الأدوار مستويات متفاوتة من الفهم والإتقان في مجالات المتطلبات الأساسية ، اعتمادا على الدور. قد لا يحتاج علماء البيانات إلى فهم متعمق لجميع المفاهيم الرياضية ، في حين أن علماء الأبحاث الذين يهدفون إلى إنشاء خوارزميات الذكاء الاصطناعي جديدة قد يحتاجون إلى فهم أكثر عمقا للرياضيات. لذلك فهم اساسيات الرياضية وليس الخوص بالتفاصيل ونترك الغوص في التفاصيل للمرحلة التي تحدد المجال الذي شعرت بشغف تجاهه. يمكن اتباع الخطة التالية لنرفض على مدار السنة حيث يمكن زيادة او التلاعب بالمدة حسب الاستيعاب : الشهر 1-3: أساسيات الرياضيات والبرمجة وهياكل البيانات ومعالجتها: الرياضيات والإحصاء: ابدأ بأساسيات الجبر الخطي وحساب التفاضل والتكامل والإحصاء والاحتمالات. سيعطيك هذا أساسا قويا لما سيأتي. برمجة: تعلم بايثون ، اللغة الأكثر استخداما في الذكاء الاصطناعي. ابدأ بالأساسيات ثم انتقل إلى مفاهيم أكثر تقدما. خذ مسار مهارة أساسيات Python ومعالجة البيانات باستخدام Python Skill Track لتغطية الأساسيات ، بما في ذلك الحزم مثل NumPy. معالجة البيانات: ابدأ في التعرف على معالجة البيانات وتحليلها. تعرف على مكتبات Python مثل الباندا و NumPy ، والتي ستستخدمها لمعالجة البيانات. تعرف على كيفية تنظيف البيانات وإعدادها، وهو جزء مهم من أي مشروع الذكاء الاصطناعي أو التعلم الآلي. الشهر 4-6: تعمق أكثر في الذكاء الاصطناعي والتعلم الآلي: أساسيات الذكاء الاصطناعي: فهم ما هو الذكاء الاصطناعي وتاريخه وفروعه المختلفة. يمكن أن توفر الدورات التدريبية التي توفر أساسيات الذكاء الاصطناعي بداية جيدة. تعميق معرفتك بالتعلم الآلي: تعرف على أنواع مختلفة من خوارزميات التعلم الآلي - التعلم الخاضع للإشراف وغير الخاضع للإشراف وشبه الخاضع للإشراف والتعلم المعزز. واحرص على معرفة أهم أنواع النماذج ، وطريقة التحقق من صحة النموذج ، وضبط المعلمات الفائقة(Fine-tuning ). ووالتعرف ب TensorFlow و Keras واختم المرحلة بمعرفة عن التعلم العميق وفرقه عن خوارميات التعلم الالي وماهي اهم انواع الشبكات العصبونية. الشهر 7-9: التخصص والموضوعات المتقدمة: التعلم العميق: فهم الشبكات العصبية والتعلم العميق عبر حل امثلة لمواضيع بسيطة لانواعه المختلفة. أساسيات MLOps: تعرف على MLOps ، والذي يتعلق بتطبيق مبادئ DevOps على أنظمة التعلم الآلي. يتضمن ذلك إصدار النموذج ونشر النموذج والمراقبة والتنسيق. التخصص: بناء على اهتماماتك وتطلعاتك المهنية ، تخصص في مجال واحد - يمكن أن يكون معالجة اللغة الطبيعية أو رؤية الكمبيوتر أو التعلم المعزز أو أي مجال آخر. الشهر 10 والى النهاية - استمر في التعلم والاستكشاف: تخصص أكثر: حاول قراءة كتابين على الاقل في المجال الذي اخترته بحيث في النهاية عند قراءة عناوين في الكتاب تكون قادر على الاجابة وشرح مفهوم معين. ابق على اطلاع: تابع بانتظام المدونات والبودكاست والمجلات ذات الصلة الذكاء الاصطناعي. انضم إلى المجتمعات لتبادل الأفكار مع ممارسي الذكاء الاصطناعي الآخرين. وتذكر دائما الأخلاق في الذكاء الاصطناعي: عندما تتعلم المزيد عن الذكاء الاصطناعي ، تأكد أيضا من التعرف على الاعتبارات الأخلاقية في الذكاء الاصطناعي. نصيحة اخيرة : الذكاء الاصطناعي مجال سريع التطور. بمجرد حصولك على الأساسيات ، من المهم الاستمرار في التعلم وتحسين مهاراتك. اتبع الذكاء الاصطناعي المدونات ، واقرأ الأوراق البحثية ، وخذ دورات متقدمة ، وابحث دائما عن طرق جديدة لتحدي نفسك. ستحولك هذه العملية التكرارية من مبتدئ إلى خبير. وتذكر أن الرحلة إلى التعلم الذكاء الاصطناعي صعبة ولكنها مشوقة للغاية. لا تثبط عزيمتك إذا واجهت عقبات على طول الطريق. إنهم جزء من عملية التعلم. ضع هدفك النهائي في الاعتبار ، وابق ملتزما. بالتوفيق لك❤️
  13. إن الحوسبة السحابية تعني توفير موارد تقنية كا(CPUوGPU والتخزين ورام) حسب الطلب عبر الإنترنت مع تسعير التكلفة حسب الاستخدام. فبدلاً من شراء مراكز البيانات والخوادم المادية وامتلاكها والاحتفاظ بها ودفع سعر عالي جدا لامتلاكها، يمكنك الوصول والاستفادة من الخدمات التكنولوجية، مثل إمكانات الحوسبة، والتخزين، وقواعد البيانات، بأسلوب يعتمد على احتياجاتك، وذلك من خلال جهة موفرة للخدمات السحابية مثل Amazon Web Services (AWS) وgoogle colab وغيرها. Google Colab (اختصار لـ Google Colaboratory) هي بيئة تطوير قائمة على السحابة تقدمها Google. يسمح للمستخدمين بكتابة وتنفيذ كود Python في متصفح الويب دون الحاجة إلى أي إعداد أو تثبيت. تم تصميم Google Colab فوق Jupyter Notebook ويوفر بيئة حوسبة مجانية مع إمكانية الوصول إلى موارد وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات (GPU) وحتى موارد TPU. تعتبر بيئة Colab شبيهة جدا بال(notebooks jupyter) كالاتي : وتعطي موراد عالية مجانية واخرى مدفوعة وذلك حسب الحاجة , في الخطة المجانية يعطي 12G ram و 107G تخزين فهي خيار جيد جدا عند التعامل مع بيانات كبيرة او نماذج ذكاء اصطناعي يحتاج موارد عالية قد لا تتوفر في الاجهزة المكتبية الموجودة في المنزل لذلك اخدمة السحابية تؤمن لك البيئة المناسبة دون الاطرار الى جلب موارد اعلى او التعامل مع تثبيت هكذا موارد . بنسبة للذكاء الاصطناعي سيطرت Google Cloud و Azure و AWS على المساحة السحابية لبضع سنوات حتى الآن بسبب الميزات والقدرات التي توفرها وهم يقدمون خدمات متشابهة تماما لكن يوجد موفرين اخرين اقل كلفة لكن لا يوجد فهما الخدمات الموجودة في Google Cloud و Azure و AWS لكنهما حل وسيط بين الخدمة الجيدة والرخص. حيث لا توفر فقط (CPUوGPU والتخزين ورام) بل اوفر نماذج ضخمة قد يحتاج المطورون الذين يسعون إلى إنشاء تطبيقات الذكاء الاصطناعي توليدية إلى أدوات ومنصات قوية لإحياء أفكارهم. يقدم اثنان من المتنافسين الرئيسيين في مجال الحوسبة السحابية ، Amazon Web Services (AWS) و Microsoft Azure ، منصات الذكاء الاصطناعي قوية وهي AWS Bedrock و Azure OpenAI. تتضمن الميزات الرئيسية ل AWS Bedrock ما يلي: الوصول إلى نماذج تأسيسية متعددة ، بما في ذلك نموذج Titan و Falcon الذكاء الاصطناعي من Amazon. التكامل مع خدمات AWS، وتبسيط عملية التطوير. رقائق مخصصة(CPU) مصممة لتدريب نماذج الذكاء الاصطناعي ، مما قد يقلل من التكاليف للمطورين. تتضمن الميزات الرئيسية ل Azure OpenAI ما يلي: الوصول إلى سلسلة GPT-4 وسلسلة GPT-35-Turbo ونماذج سلسلة التضمين. إمكانات الضبط الدقيق(Fine-tuning) لنماذج عدة. لذلك تعد الحوسبة السحابية مهمة جدا وخاصة في المشاريع الحقيقية التي تتطلب دقة اما في حال المشاريع التي في الجامعة او المشاريع التعليمية تعتبر بسيطة لا تحتاج الى موارد كبيرة . وكما يعتبر تعلم تكامل الخدمات السحابية واحدة من المهارات الواجب على كل مهندس ذكاء اصطناعي التعامل معها.
  14. الحل بسيط بالذهاب الى المسار التالي app/Exceptions/Handler.php وقومي بوضع الاستدعاء التالي في اعلى الملف use Illuminate\Auth\AuthenticationException; وبعدها ضعي التابع التالي داخل كلاس ال Handler : protected function unauthenticated($request, AuthenticationException $exception) { if ($request->expectsJson()){ return response()->json(['message' => "Token is expired"], 401); } return parent::render($request, $exception); } يمكن نغير الرسالة بتغير الرسالة التالي كما تريد او ارجاع اي رسالة او رد ترغب به Token is expired سوف يظهر الرد كالتي { "message": "Token is expired" } حيث قمنا بعمل Overriding للدالة unauthenticated باعادة تعريفها مرة اخرة وتغير الجسم الخاص بها وتعبر رسالة unauthenticated نوع من الException لذلك الموقع المناسب لها في ملف Handler الخاص بال Exception
  15. الخطأ بسبب تجاوز حدود المصفوفة كما ترا المصفوفة الاولى يختلف حجمها عن الثانية لذلك انته لهذه المشكلة ولحل المشكلة يمكن تخزين اول ثلاث طلاب في حال كانت المصفوفة مرتبة حسب الافضل students = ['جاسم', 'خلف', 'عبدلله', 'مسعود', 'زايد', 'مصطفى'] appointment_times = ['9:00', '9:30', '10:00', '10:30'] first_3_students = students[:3] first_3_appointment_times= appointment_times[:3] تسمى هذه العملية بSlicing اي اقتطاع اول 3 عناصر هنا من مصفوفة الطلاب بعدها يمكن المرور على المصفوفتات المتشابهتان بالحجم بالطريقة التالية for i in range(first_3_students): print(f"{first_3_students[i]} وقته {first_3_appointment_times[i]}") ولباقي الطلاب rest_students = students[3:] for i in range(rest_students): print(f"{first_3_students[i]} وقته {appointment_times[-1]}") الخرج : لكن ليكون الكود اكثر احترافية يمكن استعمال الدالة zip لتمشي على المصفوفتان سويا وتاخذ الطول الاقصر دون ان تعطي خطأ وبعدها يمكن المرور على باقي الطلاب واعطائهم اخر قيمة students = ['جاسم', 'خلف', 'عبدلله', 'مسعود', 'زايد', 'مصطفى'] appointment_times = ['9:00', '9:30', '10:00', '10:30'] first_3_students = students[:3] unique_appointments = {student: time for student, time in zip(first_3_students, appointment_times)} shared_appointment_time = appointment_times[-1] shared_appointments = {student: shared_appointment_time for student in students[3:]} all_appointments = {**unique_appointments, **shared_appointments} for student, time in all_appointments.items(): print(f"{student} وقته {time}") حيث العملية التالية هي وضعهم ضمن قاموس (dictionary) لنتيجة الطلاب الاوائل والطلاب الباقين على التوالي {student: shared_appointment_time for student in students[3:]} {student: shared_appointment_time for student in students[3:]} ثم دمج القاموسين عن طريق التعليمة التالية {**unique_appointments, **shared_appointments} ويكون الخرج مشابه كالاتي وفيما يلي الشكل dictionary التي تتكون من مفتاح عبارة عن الاسم والقيمة هي الوقت الخاص فيه
×
×
  • أضف...