C# للتعلم الآلي: الإمكانيات والقيود وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: C# في عالم التعلم الآلي

يرتبط عالم التعلم الآلي (ML) بقوة بلغة Python: TensorFlow، PyTorch، scikit-learn — هذه هي الأدوات الأساسية لعالم البيانات. ومع ذلك، تقدم بيئة .NET ولغة C# مسارًا بديلاً. تتيح منصة ML.NET من Microsoft دمج ML مباشرة في تطبيقات الأعمال بلغة C#، دون إعادة كتابة الكود بلغة Python. ولكن ما مدى عملية ذلك؟ في هذه المقالة، سنحلل الإمكانيات الحقيقية والقيود، ونكتب كودًا عمليًا بلغة C# للتعلم الآلي.

في موقع pythonlib.ru، نتحدث غالبًا عن Python، لكننا اليوم ننظر إلى المهمة من زاوية أخرى. C# هي لغة مكتوبة بشكل صارم وعالية الأداء، وقد يكون استخدامها لـ ML مبررًا في البيئات المؤسسية حيث يوجد كود قديم على .NET.



الإمكانيات الرئيسية لـ ML.NET: ما الذي يمكن أن تفعله C#؟

ML.NET هي مكتبة مفتوحة المصدر متعددة المنصات. تدعم الخوارزميات الكلاسيكية: الانحدار، التصنيف، التجميع، بالإضافة إلى التعلم العميق من خلال التكامل مع TensorFlow و ONNX.



1. تصنيف النصوص (تحليل المشاعر)

المثال الأكثر شيوعًا هو تحليل المشاعر. يتيح ML.NET تدريب نموذج بلغة C# دون استدعاء نصوص خارجية.

using Microsoft.ML;using Microsoft.ML.Data;

// 1. تحديد مخطط البياناتpublic class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}

public class SentimentPrediction{ [ColumnName("PredictedLabel")] public bool Prediction { get; set; } public float Probability { get; set; }}

// 2. تحميل البيانات وتدريب النموذجvar context = new MLContext();IDataView data = context.Data.LoadFromTextFile<SentimentData>("data.tsv", separatorChar: '\\t');

var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text)) .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());

var model = pipeline.Fit(data);

// 3. إجراء التنبؤvar predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var result = predictionEngine.Predict(new SentimentData { Text = "C# is great for ML!" });Console.WriteLine($"Sentiment: {(result.Prediction ? "Positive" : "Negative")}");

هذا الكود مكتفي ذاتيًا تمامًا. لا تحتاج إلى Python، ولا إلى طلبات REST لخدمات خارجية. كل شيء يعمل ضمن عملية .NET واحدة.



2. التكامل مع TensorFlow و ONNX

إذا كنت بحاجة إلى شبكة عصبية (على سبيل المثال، للتعرف على الصور)، يمكن لـ ML.NET تحميل نموذج مدرب مسبقًا من TensorFlow أو ONNX واستخدامه للاستدلال.

var pipeline = context.Transforms.LoadImages("Image", folder, "ImagePath")    .Append(context.Transforms.ResizeImages("Image", 224, 224))    .Append(context.Transforms.ExtractPixels("Input", "Image"))    .Append(modelTensorFlow);

var prediction = pipeline.Fit(data).CreatePredictionEngine<ImageData, ImagePrediction>(data);var result = prediction.Predict(new ImageData { ImagePath = "cat.jpg" });

ملاحظة مهمة: تدريب شبكة عصبية معقدة بلغة C# غير ممكن حاليًا — لذلك يجب استخدام Python. لكن تحميل واستخدام نموذج جاهز هو سيناريو عملي بنسبة 100%.



قيود C# لـ ML: لماذا لا تزال Python أفضل؟

على الرغم من كل المزايا، تخسر C# أمام Python في عدة جوانب رئيسية.



1. حجم المجتمع والمكتبات

عدد حزم NuGet لـ ML أقل بمئات المرات من PyPI. إذا كنت بحاجة إلى شيء غير تقليدي (مثل خوارزمية جديدة من مقالة عام 2024)، فمن المرجح أنها موجودة فقط في Python. يتم تحديث ML.NET مرة كل ربع سنة، بينما يتم تحديث scikit-learn و PyTorch بشكل شبه مستمر.



2. تدريب النماذج (Training)

يتعامل ML.NET بشكل ممتاز مع المهام المتعلقة بالبيانات الجدولية (الانحدار، التصنيف). لكن بالنسبة لـ

المدونات

توصيات الكتب