جافا سكريبت للتعلم الآلي: الإمكانيات والقيود في الممارسة العملية
\n\nيعتقد العديد من المطورين أن التعلم الآلي هو حكر على Python. بالفعل، تهيمن بيئة Python مع مكتبات TensorFlow و PyTorch و Scikit-learn في هذا المجال. ومع ذلك، تقدم جافا سكريبت (خاصة في بيئة Node.js) أدوات مثيرة للاهتمام للتعلم الآلي. في هذه المقالة، سنحلل ما يمكن فعله باستخدام جافا سكريبت، وأين حدوده الحقيقية، وكيفية استخدام المكتبات المتاحة عمليًا.
\n\nلماذا جافا سكريبت للتعلم الآلي؟ السيناريوهات الرئيسية
\n\nالميزة الرئيسية لجافا سكريبت هي التنوع. إذا كان فريقك يكتب بالفعل بلغة JS وليس لديك الموارد لتعلم Python، يمكنك تنفيذ نماذج تعلم آلي بسيطة مباشرة في Node.js. السيناريوهات الرئيسية للاستخدام:
\n\n- \n
- التعلم الآلي في المتصفح — تشغيل النماذج مباشرة على العميل (مثل TensorFlow.js في المتصفح). هذا مثالي للمهام ذات البيانات الحساسة (الطب، المالية). \n
- حلول الخادم — يتعامل Node.js بشكل ممتاز مع التنبؤات البسيطة، تصنيف النصوص، أو تحليل المشاعر. \n
- النمذجة الأولية والتعلم — للتجارب السريعة وعرض المفاهيم. \n
- التكامل مع بيئة الويب — إذا كان مشروعك يعمل بالفعل على Node.js، فلا حاجة لرفع خدمة Python مصغرة منفصلة. \n
مثال عملي: تصنيف الأرقام باستخدام Brain.js
\n\nBrain.js هي واحدة من أبسط المكتبات للشبكات العصبية في جافا سكريبت. لا تتطلب GPU وهي مناسبة تمامًا للتدريب على CPU. لننظر في مثال التعرف على الأرقام المكتوبة بخط اليد (نسخة مبسطة من MNIST).
\n\nأولاً، نقوم بتثبيت المكتبة:
\nnpm install brain.js\n\nالآن سنكتب الكود لتدريب الشبكة العصبية على التعرف على الرقمين 0 و 1 بناءً على صور ثنائية بحجم 4x4 بكسل:
\n\nconst brain = require('brain.js');\n\n// إنشاء شبكة عصبية بطبقة مخفية واحدة\nconst net = new brain.NeuralNetwork({ hiddenLayers: [3] });\n\n// بيانات التدريب: 16 مدخلاً (4x4)، مخرج واحد (0 أو 1)\nconst trainingData = [\n { input: [0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0], output: [0] }, // رقم 0\n { input: [0,0,0,0, 0,0,1,0, 0,0,1,0, 0,0,0,0], output: [1] }, // رقم 1\n { input: [0,0,0,0, 1,1,1,0, 0,1,1,0, 0,0,0,0], output: [0] }, // رقم 0 آخر\n { input: [0,0,0,0, 0,0,1,0, 0,1,1,0, 0,0,0,0], output: [1] } // رقم 1 آخر\n];\n\n// تدريب الشبكة\nnet.train(trainingData, {\n iterations: 2000,\n errorThresh: 0.005,\n log: true,\n logPeriod: 500\n});\n\n// الاختبار\nconst testData = [0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0]; // يشبه 0\nconst result = net.run(testData);\nconsole.log(`النتيجة: ${result[0] > 0.5 ? '1' : '0'} (الثقة: ${result[0].toFixed(3)})`);\n\nيوضح هذا المثال مدى سرعة تدريب شبكة بسيطة. ومع ذلك، للتعرف الحقيقي على MNIST، ستحتاج إلى بنية أعمق وآلاف الأمثلة.
\n\nTensorFlow.js: أداة قوية لـ Node.js
\n\nTensorFlow.js هو إصدار من الإطار الشهير بلغة جافا سكريبت. يدعم كل من المتصفح و Node.js. إليك مثال على الانحدار الخطي للتنبؤ بأسعار العقارات (بشكل مبسط):
\n\nconst tf = require('@tensorflow/tfjs-node');\n\n// البيانات: المساحة (متر مربع) -> السعر ($)\nconst xs = tf.tensor2d([50, 60, 70, 80, 90], [5, 1]);\nconst ys = tf.tensor2d([150000, 180000, 210000, 240000, 270000], [5, 1]);\n\n// إنشاء النموذج\nconst model = tf.sequential();\nmodel.add(tf.layers.dense({ units: 1, inputShape: [1] }));\n\n// التجميع\nmodel.compile({ optimizer: 'sgd', loss: 'meanSquaredError' });\n\n// التدريب\nasync function train() {\n await model.fit(xs, ys, { epochs: 100 });\n \n // التنبؤ لمنزل مساحته 75 متر مربع\n const prediction = model.predict(tf.tensor2d([75], [1, 1]));\n prediction.print(); // ~225000\n}\n\ntrain();\n\nيمنحك TensorFlow.js إمكانية الوصول إلى معظم