اگر شما یک برنامهنویس سی شارپ هستید و قصد ورود به دنیای یادگیری ماشین (Machine Learning) و هوش مصنوعی (AI) را دارید، احتمالاً با این سوال مواجه شدهاید که آیا بهتر است از زبان سی شارپ و ابزارهای موجود در اکوسیستم داتنت برای این منظور استفاده کنید یا به سراغ زبان پایتون بروید که به طور گسترده در این حوزه مورد استفاده قرار میگیرد. این مقاله بر اساس اطلاعات موجود در منابع شما، به بررسی این پرسش و راهنمایی شما در انتخاب مسیر مناسب میپردازد.
ابتدا باید به یک نکته مهم اشاره کنیم: مقایسه یک کتابخانه یادگیری ماشین با یک زبان برنامهنویسی اشتباه است.
سوال صحیحتر این است که آیا کتابخانه ML.NET که برای یادگیری ماشین در سی شارپ استفاده میشود، بهتر از کتابخانه معادل آن در زبان پایتون (مانند سایکیت لرن) یا زبانهای دیگر مانند جاوا یا سی پلاس پلاس است. هدف این مقاله نیز مقایسه کتابخانهها و ابزارهای موجود برای یادگیری ماشین در دو اکوسیستم سی شارپ و پایتون از دیدگاه یک برنامهنویس سی شارپ است که با یادگیری ماشین آشنایی ندارد و میخواهد وارد این حوزه شود.
یادگیری ماشین: کلاسیک در مقابل عمیق
به طور کلی، یادگیری ماشین را میتوان به دو دسته اصلی تقسیم کرد: یادگیری ماشین کلاسیک (Classic Machine Learning) و یادگیری عمیق (Deep Learning).
یادگیری ماشین کلاسیک بر اساس فرمولهای ریاضی و الگوریتمهای مشخص عمل میکند. در مقابل، یادگیری عمیق که احتمالاً نام آن را زیاد شنیدهاید، تا حدی شبیه به عملکرد شبکههای عصبی انسانی است و تفاوتهای زیادی با یادگیری ماشین کلاسیک دارد.
کتابخانههای یادگیری ماشین کلاسیک: ML.NET در مقابل سایکیت لرن
کار اصلی مدلهای یادگیری ماشین، شبیهسازی رفتار انسان و انجام کارهایی مانند پیشبینی بر اساس دادههای ورودی است.
این مدلها بر اساس فرمولهای ریاضی عمل میکنند. پیادهسازی مستقیم این فرمولها و الگوریتمهای پیچیده ریاضی بدون استفاده از کتابخانه، نیازمند دانش عمیق ریاضی و کدنویسی زیاد با هر زبانی مانند سی شارپ، پایتون، جاوا یا... است و میتواند با دردسرها و خطاهای زیادی همراه باشد. کتابخانههایی مانند ML.NET برای سی شارپ و سایکیت لرن (Scikit-learn) برای پایتون، برای سادهسازی این فرایند ایجاد شدهاند. این کتابخانهها در پسزمینه، فرمولها و الگوریتمهای پیچیده ریاضی یادگیری ماشین را پیادهسازی کردهاند و برنامهنویسان میتوانند با استفاده از کلاسها و متدهای آنها، بدون نیاز به دانش عمیق ریاضی، مدلهای یادگیری ماشین را ایجاد کنند.
مقایسه ML.NET و سایکیت لرن:
تفاوت عمده بین ML.NET و سایکیت لرن این است که سایکیت لرن تعداد بسیار بیشتری روش و الگوریتم یادگیری ماشین کلاسیک نسبت به ML.NET ارائه میدهد.
با این حال، ML.NET نیز تا کنون از بیش از 40 روش یا ترینر مختلف پشتیبانی میکند و اکثر الگوریتمهای پرکاربرد در ML.NET نیز ارائه شدهاند. مایکروسافت نیز روشهای مختلفی را در ML.NET ارائه کرده است.
مزیت اصلی ML.NET برای برنامهنویسان سی شارپ، یکپارچگی آن با اکوسیستم داتنت است.
اگر شما یک برنامهنویس سی شارپ هستید که در حال انجام پروژههای سازمانی (NET Core و سی شارپ) هستید و میخواهید بخشی از نرمافزار خود را هوشمند کنید، استفاده از ابزارهای خود سی شارپ مانند ML.NET بهترین گزینه است. پیادهسازی یک نیاز مشابه با پایتون و سپس تلاش برای استفاده از آن در پروژه داتنت شما میتواند پیچیدگیهای زیادی داشته باشد. برای مثال، انتقال مدل آموزشدیده در پایتون به پروژه داتنت میتواند از طریق APIهای REST (که نیازمند هاست کردن جداگانه مدل پایتون است) یا استفاده از فرمت ONNX انجام شود. در حالی که با ML.NET، میتوانید مدل را مستقیماً در همان پروژه داتنت خود آموزش دهید و مانند یک فایل DLL آن را در بخشهای مختلف پروژه (مانند ASP.NET Core, Xamarin, Blazor و غیره) استفاده کنید.
منابع آموزشی سایکیت لرن بسیار بیشتر از ML.NET است و الگوریتمهای بیشتری را نیز پشتیبانی میکند.
اما اگر ML.NET نیاز شما را برطرف میکند، استفاده از آن برای شما که برنامهنویس سی شارپ هستید، بسیار سادهتر است. نیازی به یادگیری اکوسیستم جدید پایتون و کار با سایکیت لرن نخواهید داشت. شما میتوانید خیلی سریع (حتی در یک یا دو روز) با جستجوی آموزش ML.NET، اولین مدل ساده یادگیری ماشین خود را ایجاد کرده و در پروژه داتنت خود به کار ببرید. در حالی که یادگیری زبان جدید، ابزارها، فریمورکها و کتابخانههای آن فرآیند را طولانیتر میکند.
کتابخانههای یادگیری عمیق: TensorFlow.NET و TorchSharp
یادگیری عمیق نسبت به یادگیری ماشین کلاسیک بسیار پیچیدهتر است و کتابخانههای متفاوتی برای آن ارائه شده است.
شما نمیتوانید یادگیری عمیق در مقیاس بزرگ را با سایکیت لرن انجام دهید و باید از کتابخانههای تخصصی آن استفاده کنید. یکی از محبوبترین کتابخانههای یادگیری عمیق، تنسورفلو (TensorFlow) است که توسط گوگل ارائه شده و سالهاست در پروژههای بزرگ استفاده میشود. تنسورفلو در زبانهای برنامهنویسی مختلف از جمله پایتون قابل استفاده است و یکی از گزینههای اصلی برای یادگیری عمیق در پایتون محسوب میشود.
اما برای برنامهنویسان سی شارپ که میخواهند از تنسورفلو برای یادگیری عمیق استفاده کنند، نسخهای برای داتنت نیز ارائه شده است: TensorFlow.NET.
این بدان معناست که شما میتوانید همان کتابخانه تنسورفلو را که گوگل برای پایتون ارائه کرده، از طریق نسخه داتنت آن در سی شارپ استفاده کنید.
کتابخانه محبوب دیگری برای یادگیری عمیق در پایتون، پایتورچ (PyTorch) نام دارد.
.معادل این کتابخانه برای سی شارپ نیز موجود است که با نام TorchSharp یا Torch.NET میتوانید از آن استفاده کنید. این کتابخانهها در واقع یک لایه (Wrapper) روی کتابخانههای اصلی پایتون قرار میدهند تا امکان استفاده از آنها در زبان سی شارپ فراهم شود.
استفاده از مدلهای پایتون در سی شارپ: SciSharp Stack و ONNX
حتی اگر کتابخانه یا ابزار بسیار خاصی در پایتون وجود داشته باشد که در داتنت معادل مستقیمی ندارد، راههایی برای استفاده از آن در سی شارپ وجود دارد.
یکی از این راهها استفاده از SciSharp Stack است. این استک مجموعهای از ابزارهاست که کتابخانههای حوزه یادگیری ماشین و هوش مصنوعی در پایتون را به نسخههای قابل استفاده در داتنت تبدیل میکند. با مراجعه به سایت SciSharp Stack میتوانید بررسی کنید که آیا نسخه داتنت کتابخانه مورد نظر شما ارائه شده است یا خیر. این استک پروژههای مختلفی مانند TensorFlow.NET و NumSharp (معادل NumPy در پایتون برای استفاده در سی شارپ) را شامل میشود. بسیاری از این پروژهها متنباز هستند و در گیتهاب قابل مشاهدهاند. تعداد ریپازیتوریهای این استک بسیار زیاد است و حدود 70 ابزار مختلف پایتون را به داتنت تبدیل کرده است.
روش دیگر برای استفاده از مدلهای آموزشدیده در پایتون (یا زبانهای دیگر مانند جاوا و سی پلاس پلاس( در سی شارپ، استفاده از فرمت ONNX (Open Neural Network Exchange) است.
ONNX یک فرمت استاندارد است که توسط فیسبوک و مایکروسافت ارائه شده و هدف آن این است که مدلهای یادگیری ماشین، مستقل از فریمورک یا زبانی که با آن آموزش دیدهاند، بتوانند به این فرمت تبدیل شوند و سپس در فریمورکها و زبانهای دیگر (مانند سی شارپ) مورد استفاده قرار گیرند.
تیمهای زیادی در سراسر دنیا با استفاده از پایتون مدلهایی را برای کاربردهای مختلف (مانند تشخیص اشیا، تشخیص چهره، دستهبندی تصاویر و...) ایجاد و آموزش دادهاند.
بسیاری از این مدلها به صورت رایگان در دسترس هستند. شما میتوانید این مدلهای آموزشدیده که به فرمت ONNX تبدیل شدهاند را دانلود کرده و به راحتی مانند یک پکیج یا فایل DLL در پروژه سی شارپ خود ایمپورت کرده و از آنها استفاده کنید. این روش یک محدودیت مهم را برطرف میکند: حتی اگر تیمی که برای شما مدل میسازد تخصص داتنت نداشته باشد و با پایتون کار کند، میتواند مدل را به فرمت ONNX تبدیل کرده و شما آن را در پروژه ASP.NET Core خود به کار ببرید. این امکان استفاده از مدلهایی که توسط شرکتهای بزرگی مانند گوگل، مایکروسافت و فیسبوک ایجاد و منتشر شدهاند را نیز برای برنامهنویسان داتنت فراهم میکند.
چه زمانی ML.NET را انتخاب کنیم؟ (برای برنامهنویسان سی شارپ)
همانطور که گفته شد، اگر شما یک برنامهنویس سی شارپ هستید، پروژه داتنت دارید و میخواهید قابلیت یادگیری ماشین را به بخشی از آن اضافه کنید، بهترین و سادهترین راه این است که ابتدا بررسی کنید آیا ML.NET قابلیت مورد نظر شما را ارائه میدهد یا خیر.
اگر بله، استفاده از ML.NET توصیه میشود. دلیل این امر سادگی ادغام و استفاده از مدل آموزشدیده در پروژه داتنت شماست. علاوه بر این، برای شما که با اکوسیستم داتنت آشنا هستید، یادگیری ML.NET بسیار سریعتر خواهد بود. در واقع، میتوانید در عرض یک یا دو روز اولین مدل ساده خود را ایجاد کنید.
چه زمانی پایتون را در نظر بگیریم؟ (برای برنامهنویسان سی شارپ)
اگر هدف شما تبدیل شدن به یک متخصص هوش مصنوعی و یادگیری ماشین (مهندس داده یا متخصص AI) است و نه صرفاً افزودن یک قابلیت هوشمند به یک پروژه داتنت موجود، بهتر است از همان ابتدا به سراغ پایتون و کتابخانههای آن بروید.
پایتون در حوزه هوش مصنوعی قدمت بیشتری دارد و کتابخانههای بسیار بیشتری برای کاربردهای مختلف (به خصوص در یادگیری عمیق) دارد. تنوع کتابخانهها در پایتون بیشتر است و برای اکثر نیازها مدلهای آموزشدیده از قبل موجود هستند که میتوانید از آنها استفاده کنید. منابع آموزشی (کتابها، دورهها) و جامعه کاربری پایتون در حوزه هوش مصنوعی نیز بسیار گستردهتر است.
همچنین، اگر میخواهید یک ابزار بسیار پیشرفته هوش مصنوعی مستقل ایجاد کنید، مانند تبدیل صوت به متن یا متن به صوت، پایتون به دلیل وجود مدلهای رایگان و گستردهتر (به خصوص برای زبان انگلیسی) گزینه بهتری میتواند باشد.
البته همانطور که اشاره شد، حتی در این موارد نیز میتوانید مدلهای پایتون را به فرمت ONNX تبدیل کرده و در سی شارپ استفاده کنید.
نکته مهم این است که آینده برنامهنویسی به سمت هوش مصنوعی پیش میرود و یادگیری این حوزه اجتنابناپذیر است.
یادگیری ماشین تنها یکی از زیرمجموعههای هوش مصنوعی است. شما میتوانید با ML.NET یا سایکیت لرن شروع کنید و سپس بر اساس نیازهایتان به سراغ روشها و کتابخانههای دیگر بروید. شما با انتخاب یکی از این دو، سقفی برای خود تعیین نمیکنید.
نمونههایی از کاربرد ML.NET
برخلاف تصور برخی که ممکن است کارایی ML.NET را در پروژههای بزرگ زیر سوال ببرند، ML.NET در حال حاضر در پروژههای بزرگ و حتی در محصولات خود مایکروسافت استفاده میشود.
برخی از نمونهها عبارتند از:
• موتور جستجوی بینگ مایکروسافت: در برخی بخشها از ML.NET استفاده میکند.
• محصولات آفیس (مانند پاورپوینت و اکسل): برای پیشنهاد بهترین نمودار بر اساس دادهها.
• Microsoft Defender: این سیستم امنیتی یکپارچه از ML.NET استفاده میکند.
مشکلاتی که ML.NET در Defender حل کرده در منابع مایکروسافت توضیح داده شده است.
• SecParser: برای تشخیص ایمیلهایی که توسط انسان نوشته نشدهاند.
• دستهبندی اسناد: در پروژههای مختلفی از ML.NET برای دستهبندی خودکار اسناد استفاده شده است.
• صنعت تولید: یک کارخانه بستهبندی فندق در سال 2019 از ML.NET برای نظارت بر رطوبت فندقها در دستگاههای خشککن استفاده کرد.
تیم توسعهدهنده این کارخانه برنامهنویس داتنت بودند و توانستند در عرض دو و نیم هفته مدل اولیه را ایجاد کرده و در خط تولید به کار ببرند. این مدل با استفاده از سنسورها، دادهها را دریافت کرده و بر اساس آنها تشخیص میدهد که رطوبت در بازه نرمال قرار دارد یا خیر.
این نمونهها نشان میدهند که ML.NET در پروژههای واقعی و در مقیاس بزرگ قابلیت استفاده دارد و نباید نگران کارایی آن بود.
در نهایت، ML.NET و سایکیت لرن هر دو کتابخانههایی هستند که پیادهسازی الگوریتمها و فرمولهای ریاضی را برای ما ساده کردهاند. شما بدون آنها نیز با دانش کافی میتوانید این کار را انجام دهید، اما کتابخانهها کار را آسان کردهاند.
نتیجهگیری
برای یک برنامهنویس سی شارپ که میخواهد قابلیتهای هوش مصنوعی و یادگیری ماشین را به پروژههای داتنت خود اضافه کند، ML.NET و سایر ابزارهای موجود در اکوسیستم سی شارپ گزینه اول و بهترین راه هستند
این ابزارها امکان ادغام سریع و آسان را فراهم میکنند و نیاز به یادگیری یک اکوسیستم کاملاً جدید را از بین میبرند. با این حال، اگر هدف شما تبدیل شدن به یک متخصص صرف یادگیری ماشین است، یا نیاز به ابزارها و مدلهای بسیار خاصی دارید که در پایتون به مراتب گستردهتر یافت میشوند، رفتن به سمت پایتون توصیه میشود. همچنین، همیشه میتوانید از روشهایی مانند SciSharp Stack و ONNX برای استفاده از قابلیتها و مدلهای پایتون در پروژههای سی شارپ خود بهره ببرید. انتخاب نهایی به نیاز خاص شما و زمینه کاریتان بستگی دارد.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید