
این روزها همهجا صحبت از هوشمصنوعی است. برخی میگویند هوشمصنوعی جای برنامهنویسان را میگیرد. برخی دیگر میگویند نه. آنچه مسلم است ارتباط هوشمصنوعی و مهندسی نرمافزار است که به صورت یک رابطه دوطرفه باید لحاظ شود. از یک سو، هوشمصنوعی به مهندسان نرمافزار کمک میکند تا کدنویسی و تست سریعتر انجام شود. از سوی دیگر، خود سیستمهای هوشمصنوعی به اصول مهندسی نرمافزار نیاز دارند تا قابل اطمینان و مقیاسپذیر باشند. در ادامه سه مفهوم کلیدی در این حوزه را بررسی میکنیم:
AI4SE
استفاده از هوشمصنوعی برای کمک به کارهای مهندسی نرمافزار. مثلا نوشتن کد، پیدا کردن باگ یا تولید تست
برای مثال فرض کنید قصد دارید تابعی ساده بنویسید، در حالت عادی باید منطق آن را خط به خط بنویسید ولی با AI4SE کافی است منطق کد را توضیح دهید ( برای مثال تابعی که سن را از تاریخ تولد محاسبه کند) و هوشمصنوعی خودش کد را تولید میکند. این کد همواره بینقص نیست، اما زمان توسعه را به شدت کاهش میدهد. جدا از کدنویسی AI میتواند در بازبینی کد هم کمک کند. برای مثال بروز خطا در بخشی از کد را پیشبینی کند یا بهینهتر شدن بخشی از کد را پیشنهاد دهد. برای تست های نرمافزاری هم میتوان از هوشمصنوعی بهره برد. AI میتواند سناریوهای مختلف را حدس بزند و تست بنویسد. استفاده از AI به عنوان دستیار برای توسعه دهنده میتواند بسیار مفید باشد.
SE4AI
این مفهوم دقیقا برعکس مفهوم قبلی است و یعنی استفاده از اصول مهندسی نرمافزار برای ساختن سیستمهای هوش مصنوعی.
فرض کنیم یک مدل ساختهایم که کارش تشخیص ایمیل اسپم است. مدل ما با دقت 98% کار میکند. حال میخواهیم این مدل را در یک سرویس ایمیل واقعی به کار گیریم. چه چالش هایی داریم؟ مدل باید در کثری از ثانیه پاسخ دهد و داده هایی که مدل با آنها روزانه مواجه خواهد شد متفاوت از دادههایی است که در زمان آموزش دیده است. و چالش بعدی و مهم تر از همه زمانی است که مدل اشتباه کند( ایمیل مهمی را اسپم تشخیص دهد) در این مواقع مهندسی نرمافزار وارد میشود.
SE4AI به مسائلی مثل تستپذیری مدل، استقرار مداوم و پایش عملکرد آن در محیط واقعی میپردازد.
MLOps
اگر DevOps که در پست های قبلی به آن اشاره کردیم را برای یک نرمافزار معمولی در نظر بگیرید، MLOps همان مفهوم را برای سیستمهای یادگیری ماشین تداعی میکند. اما در اینجا یک تفاوت مطرح است: در نرمافزار معمولی فقط کد تغییر میکند، در یادگیری ماشین هم کد هم داده و هم مدل تغییر میکنند.
مفهوم MLOps از جمعآوری داده شروع شده و سپس پاکسازی و آماده سازی داده و بعد هم آموزش مدل و ارزیابی آن و در نهایت استقرار آن در محیط تولید را شامل میشود. البته کار ادامه خواهد داشت! باید بعد از استقرار هم مدل پایش شود. دقت مدل نباید پایین بیاید و همچنین باید بررسی شود داده های جدید با فرضیات MLOps قبلی همخوانی داشته باشد. اگر مدل افت کرد باید دوباره آموزش داده شود. این کار ها با MLOps خودکار و قابل تکرار طراحی شده و ابزارهایی مانند MLflow و Kubeflow برای همین کاربرد استفاده میشوند.
این سه مفهوم به سادگی توضیح میدهد که هوشمصنوعی و مهندسی نرمافزار از هم جدا نیستند.
منابع:
MLflow Docs
Kubeflow Docs
Google (Hidden Technical Debt)