مقدمة: لماذا C# في عالم التعلم الآلي؟
يرتبط عالم التعلم الآلي (ML) ارتباطاً وثيقاً بـ Python و R و Julia. ومع ذلك، كثيراً ما يتساءل المطورون الذين يستخدمون C# ومنصة .NET: هل يمكن استخدام اللغة المألوفة لبناء أنظمة ذكية؟ الإجابة هي نعم، ولكن مع تحفظات. C# ليس الخيار السائد في مجال Data Science، لكن نظام .NET البيئي يقدم أدوات قوية مثل ML.NET و TensorFlow.NET والتكامل مع ONNX. في هذه المقالة، سنستعرض الإمكانيات التي يوفرها C# للتعلم الآلي، وأين يكون استخدامه مبرراً، وأين يكون من الأفضل اللجوء إلى Python.
إمكانيات C# للتعلم الآلي
1. ML.NET — إطار عمل أصلي من Microsoft
ML.NET هو إطار عمل مفتوح المصدر للتعلم الآلي ومتعدد المنصات، تم تطويره خصيصاً لنظام .NET البيئي. يتيح دمج نماذج ML في تطبيقات C# و F# دون الحاجة لتعلم Python. يدعم ML.NET:
- التصنيف والانحدار (مثل تحليل المشاعر، التنبؤ بالأسعار).
- التجميع والترتيب.
- أنظمة التوصية واكتشاف الحالات الشاذة.
- معالجة الصور (عبر التكامل مع TensorFlow).
مثال على تدريب نموذج بسيط لتصنيف المشاعر النصية:
using Microsoft.ML;using Microsoft.ML.Data;
public class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}
public class SentimentPrediction{ public bool PredictedLabel { get; set; }}
var context = new MLContext();var data = context.Data.LoadFromTextFile<SentimentData>("data.csv", separatorChar: ',');var pipeline = context.Transforms.Text.FeaturizeText("Features", "Text") .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());var model = pipeline.Fit(data);var predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var prediction = predictionEngine.Predict(new SentimentData { Text = "هذا منتج رائع!" });Console.WriteLine(prediction.PredictedLabel); // True (مشاعر إيجابية)يناسب ML.NET بشكل ممتاز دمج ML في تطبيقات .NET المؤسسية مثل CRM و ERP وخدمات الويب على ASP.NET Core.
2. التكامل مع TensorFlow و ONNX
يمكن لـ C# العمل مع النماذج المدربة مسبقاً من عالم Python عبر صيغ TensorFlow و ONNX. يتيح ذلك استخدام الشبكات العصبية القوية (مثل ResNet و BERT) مباشرة في تطبيقات .NET.
مثال على تحميل نموذج ONNX للتعرف على الصور:
using Microsoft.ML.OnnxRuntime;using Microsoft.ML.OnnxRuntime.Tensors;
var session = new InferenceSession("model.onnx");var input = new DenseTensor<float>(new float[1 * 3 * 224 * 224], new[] { 1, 3, 224, 224 });var inputs = new List<NamedOnnxValue>{ NamedOnnxValue.CreateFromTensor("input", input)};using var results = session.Run(inputs);var output = results.First().AsTensor<float>();Console.WriteLine($"Predicted class index: {output.ArgMax()}");بهذه الطريقة، يمكنك تدريب النماذج في Python ونشرها في بيئة الإنتاج باستخدام C#.
3. الأداء وسلامة الأنواع
C# هي لغة مترجمة مع ترجمة JIT (أو AOT عبر Native AOT). توفر:
- أداء عالياً — للمهام التي تهم فيها سرعة تنفيذ الاستدلال (مثل الأنظمة في الوقت الفعلي).
- كتابة صارمة للأنواع — أخطاء أقل في وقت التشغيل، وهو أمر حاسم لحلول ML المؤسسية.
- التزامن وتعدد الخيوط — دعم مدمج لـ async/await ومكتبة Task Parallel Library (TPL) لمعالجة البيانات الكبيرة.
4. أدوات Data Science في Visual Studio
متاحة لـ C#: