فهرست مطالب
Toggleچطور بهترین زبان انتخاب می شود؟
- زبان های متعددی برای برنامه نویسی وجود دارد و یکی از رایج ترین سوالات هنگام شروع هوش مصنوعی این هست که “چه زبانی یاد بگیرم؟” برای پاسخ به این سوال باید عوامل متعددی را در نظر گرفت مثلا:
سخت افزار سیستم را چقدر درگیر میکند؟
یادگیری آن سخت هست یا نه؟ (چقدر به زبان ماشین نزدیک است؟)
منابع متن باز و آموزشی بیشتر روی کدام زبان هستند؟
پروژه ها صنعتی و تجاری معمولا با کدام زبان نوشته می شوند؟
در اگهی های استخدام معمولا تسلط برکدام زبان خواسته می شود؟
تعداد خط کدهایی که برای یک پروژه مشابه نوشته می شود ، چقدر است؟
در نظر گرفتن همه این پارامتر ها مشخص میکند که بهترین زبان برنامه نویسی برای هوش مصنوعی چیست؟
برای انتخاب بهترین زبان برنامه نویسی باید پارامتر های متعددی را بررسی کرد و در نظر گرفت که دونه به دونه این موارد رو بررسی میکنیم. توجه کنید که:
بهترین زبان برای یادگیری هوش مصنوعی چیست؟
- طول کد
برای نوشتن یک برنامه واحد هر کدام از زبان های برنامه نویسی چند خط کد نیاز دارند ، شاید فکر کنید که این موضوع زیاد مهم نیست ولی در پروژه های بزرگ این موضوع بسیار مهم می شود. بدیهی هست که هر چقدر طول کد کمتر باشد نوشتن برنامه راحت تر هست.
- زبان هایی که کد نویسی طولانی دارند: جاوا ، c++
- زبان هایی که کد نویسی متوسطی دارند: جاوا اسکریپت، پایتون
- سرعت خوانش
آن چیزی مشخص هست زبان های برنامه نویسی از یک ساختار و یک روند مشابهی برای اجرا پیروی نمیکنند ، زمان در پروژه های کامپیوتری عامل بسیار مهمی هست چراکه در پروژه های صنعتی و تجاری علاوه بر سخت افزار و عملگر های مکانیکی ( در پروژه های که عملگر مکانیکی دارند ) هم وجود دارند که روی سرعت اجرای پروژه اثر میگذارد.
- زبان هایی که کارایی بالایی دارند: جاوا ، c++
- زبان هایی که کارایی متوسط دارند: پایتون ، جاوا اسکریپت
- ثابت یا پویا بودن ( استاتیک و داینامیک)
ابتدا بیایید یک تعریف کلی از این دو اصطلاح داشته باشید. ببینید شما در یک پروژه برنامه نویسی متغییر های متعددی تعریف و استفاده می کنید و وقتی روی دکمه اجرای کد ها کلیک میکنید کد ها از نظر خطا های کد نویسی توسط کامپیوتر بررسی می شود. اینجا کامپیوتر میتواند صرفا بخشی که کد در آن جرا می شود را بررسی کند یا کل کد ها رو ؛ این دقیقا یکی از تفاوت های استاتیک و داینامیک بودن زبان برنامه نویسی هست. در برنامههای پویا تنها قسمتهایی بررسی نوعی میشوند که اجرا شوند نه کل برنامه.
- کارایی
یک زبان برنامهنویسی کامپایلی و البته استاتیک کارایی بسیار بهتری نسبت به زبان تفسیری ارائه میکند. این موضوع بدان دلیل است که دانستن نوع داده و بررسی درست آن باعث میشود که در کدهای ماشین بهینهتر باشند.از آنجایی هم که در هر خط از دستور نیازی به بررسی نوع دادهای ندارند در زمان اجرا بسیار سریعتر از زبانهای پویا هستند. همانطور که گفتیم در زبانهای پویا با اجرای کدها برنامه خط به خط بررسی میشود. این مسئله زمانبر است. البته یک نکته مهم دیگر آن است که هر دو زبانهای ایستا و کامپایلی قبل از اجرای برنامه، برای ترجمه شدن مدت زمانی وقفه دارند.
تفاوتهای بیشتر
زبانهای ایستا قبل از اجرای برنامه خطاها را به شما نشان میدهند، این موضوع از آن جایی مهم است که در زمان ساخت یک برنامه بسیار بزرگ با خطاهای نامعلوم مواجه نخواهید شد. چرا که در زبانهای پویا اگر یک سورس ۱۰۰۰ خط کد باشد باید خط به خط در زمان اجرا به دنبال خطا باشد و این موضوع به خودی خود کمی ناامن به نظر میرسد. بنابراین استفاده از زبانهای ایستا شما را از خطاهای ناگهانی دور نگه میدارد.
از طرفی دیگر زبانهای پویا بیشترین سازگاری و انعطافپذیری را دارند. نوشتن برنامه در این زبانها بسیار سریعتر انجام میشود.
نحوه نگارش
زبان های انسان های را روی کره زمین نگاه کنید! هر کدام یک اصول نگاری و حروف الفبا متفاوتی دارند. مسلما هرچه زبان قاعدمندتر باشد یادگیری ان راحتر است. زبان های برنامه نویسی هم اینگونه اند به این معنی که در زبان برنامه نویسی c انقدر اصول نگارشی بالایی وجود دارد که شما بیشتر از اینکه به اصل مسئله یعنی کد نویسی برسی باید بیشتر به نجوه نگارش توجه کنی.
- زبان هایی که نگارش دشواری دارند: c++
- زبان هایی که نگارش معمولی دارند: جاوا اسکریپت ، جاوا
- زبان هایی که نگارش آسان دارند: پایتون
دسترسی به منابع متن باز و انجمن علمی
برای حل سریع تر مشکلات و سوال ها و همچنین استفاده از کد سورس ها پروژه مشابه ما نیاز یکسری سایت ها داریم که همین نیاز ها در ان رفع شود ، به این منظور انجمن های علمی متعددی شکل گرفته تا افراد متخصص به یک دیگر یاری برسانند و افراد مبتدی هم با شرکت در این انجمن ها آموزش ببینند.
- زبان هایی که منابع متن باز و انجمن های علمی زیادی دارند: پایتون
- زبان هایی که منابع متن باز و انجمن های علمی کمی دارند: جاوا اسکریپت ، جاوا ، c++
جمع بندی
عوامل بسیار بیشتری برای انتخاب زبان وجود دارد که میتوان برای هر کدام ساعت ها نوشت ولی بگذارید با در نظر گرفتن ابعاد مختلف جمع بندی خودمان را در قالب یک اینفوگرافیک به شما بگوییم:
چرا پایتون بهترین زبان برنامه نویسی برای هوش مصنوعی است؟
- آسان در یادگیری . سینتکس پایتون بسیار انعطاف پذیر است. خیلی برنامه نویسان، پایتون را بصری می دانند. این سهولت برای ورود مهم است زیرا بسیاری از دانشمندان داده و تحلیلگران داده (data scientists and analysts) که با هوش مصنوعی کار می کنند، پیشینه برنامه نویسی ندارند.
- به خوبی یکپارچه شده است: برنامه نویسان نیازی به اختراع مجدد چرخ ندارند. بسیاری از چارچوبها، کتابخانهها و پلتفرمهای هوش مصنوعی قبلاً در پایتون توسعه یافتهاند و به عنوان پروژههای منبع باز در دسترس هستند.
- منابع متعدد یادگیری: یادگیری پایتون حتی ساده تر است زیرا آموزش ها، پروژه ها و بوت کمپ های آنلاین بسیار زیادی وجود دارد. زبان های کمتر محبوب ممکن است نمونه های زیادی نداشته باشند.
- ساده و آسان برای خواندن: پایتون کد کوتاه و بسیار خوانا تولید می کند، به خصوص در مقایسه با زبان هایی مانند جاوا.
- مستقل از پلتفرم: پایتون تقریباً روی هر پلتفرمی، از ویندوز گرفته تا یونیکس، قابل اجرا است. لازم نیست کامپایل شود زیرا یک زبان تفسیری است.
- ابزارهای تجسم و ترسیم داده عالی: پایتون دارای مجموعه گسترده ای از کتابخانه های تجسم داده است که برای توسعه هوش مصنوعی ضروری است. دانشمندان داده می توانند نمودارهای جذاب و قابل خواندن برای انسان را با کتابخانه هایی مانند Matplotlib ایجاد کنند.
اگر از زبان دیگری در حوزه هوش مصنوعی کار کنیم دچار مشکل می شویم؟!؟
از نظر فنی ، میتوانید از هر زبانی برای برنامهنویسی هوش مصنوعی استفاده کنید چون در حالت کلی هیچ مشکلی متوجه شما نمی شود.. بیایید یک نگاه اجمالی به چند تا از زبان های برنامه نویسی بیندازیم:
- جاوا Java
- مزایا: جاوا یک زبان محبوب و همه منظوره با جامعه بزرگی از توسعه دهندگان است. به صورت ایستا تایپ شده است، به این معنی که می توانید خطاها را زودتر متوجه شوید و برنامه ها را سریعتر اجرا کنید.
- معایب: جاوا می تواند پرمخاطب باشد ولی رابط کاربری ضعیفی دارد به این معنی که برنامه نویسان باید کارهای زیادی را به صورت دستی انجام دهند.
- جولیا Julia
- مزایا: برای محاسبات عددی با کارایی بالا طراحی شده است و از یادگیری ماشین پشتیبانی می کند.
- معایب: یک زبان جوان است و در نتیجه از حمایت اجتماعی متخصصین زیادی برخوردار نیست برای همین یادگیری و کار با این زبان ممکن است چالش برانگیز باشد
- هاسکل Haskell
- مزایا: یک زبان برنامه نویسی کاربردی است که بر صحت ( با درستی متفاوت است.) کد تأکید دارد. می توان از آن برای توسعه هوش مصنوعی استفاده کرد، اگرچه بیشتر در آموزش و تحقیق استفاده می شود.
- معایب: کار با ان می تواند بسیار گیج کننده باشد
- لیسپ Lisp
- مزایا: سالهاست که برای هوش مصنوعی استفاده میشود. چرا که به انعطاف پذیری شناخته شده است.
- معایب: خواندن و نوشتن Lisp ممکن است دشوار باشد. همچنین دارای یک جامعه کوچک از توسعه دهندگان است.
- آر R
- مزایا: یک زبان برنامه نویسی آماری محبوب در میان دانشمندان داده است. به خوبی با زبان های دیگر ادغام می شود و بسته های زیادی در دسترس دارد. برای هوش مصنوعی با نیازهای پردازش داده قوی بسیار عالی است.
- معایب: R می تواند کند باشد و به خوبی پشتیبانی نمی شود.
- جاوا سکریپت JavaScript
- مزایا: جاوا اسکریپت یک زبان محبوب برای توسعه وب است. توسعه دهندگان از جاوا اسکریپت در کتابخانه های یادگیری ماشینی مانند TensorFlow.js استفاده می کنند.
- معایب: یادگیری جاوا اسکریپت از پایتون پیچیده تر و چالش برانگیزتر است. قوی هست ولی ممکن است شما را سردرگم کند.
C++
- مزایا: زبان سریع و قدرتمند است که در بین
توسعه دهندگان بازی محبوبیت دارد. می تواند برای بسیاری از موارد مختلف
استفاده شود. همچنین کارایی بالایی دارد.
- معایب: یادگیری C++ دشوار است .بسیاری از چیزها باید به
صورت دستی توسط برنامه نویس انجام شود.
پرولوگ Prolog
- مزایا: Prolog یک زبان برنامه نویسی
اعلامی است که برای توسعه هوش مصنوعی مناسب است. این تا حد زیادی برای برنامه نویسی
مبتنی بر منطق – پایه توسعه هوش مصنوعی – استفاده می شود.
- معایب: یادگیری Prolog ممکن است دشوار باشد و جامعه کوچکی از
توسعه دهندگان دارد.
اسکالا Scala
- مزایا: یک زبان همه منظوره با ویژگی های زیادی
است که برای توسعه هوش مصنوعی مناسب است. به خوبی با جاوا ادغام می شود و جامعه
بزرگی از توسعه دهندگان دارد.
- معایب: می تواند پیچیده و دشوار باشد. اسکالا در درجه اول برای توسعه های
پیشرفته مانند پردازش داده ها و محاسبات توزیع شده استفاده و توصیه می شود.
برای هوش مصنوعی این زبان ها را انتخاب نکن!
برخی از زبان ها برای توسعه هوش مصنوعی مناسب نیستند و در پارامترهای متعددی نمره پایینی میگیرند، این زبان ها عبارت اند از :
- PHP . PHP برای توسعه وب محبوب است. با این حال، برای توسعه هوش مصنوعی به
اندازه کافی انعطاف پذیر یا قوی نیست. - سی . C
برنامه نویسی با ان
بسیار سخت و دشوار هست با اینکه سرعت بالایی در اجرای کد دارد
میخواهم پایتون رو بیشتر بشناسم!
پایتون یک زبان برنامه نویسی شیءگرا، تفسیری است که توسط Guido van Rossum خیدو فان روسوم ساخته شد و در سال 1991 منتشر شد. فلسفه اصلی طراحی پایتون خوانایی بالای کد است.
اهداف پایتون:
- یک زبان برنامهنویسی ساده و بصری ودر عین حال یک رقیب جدی در کارهای تخصصی.
- متن باز هست یعنی هر فردی میتواند در توسعه این زبان کمک کند.
- کد برنامه قابل درک و آسان هست تا حدی که شما با مطالعه کد های پایتون مانند یک متن انگلیسی به راحتی ان را درک کنید
- مخصوص طراحی سریع و آسان یک برنامه در مدت زمان کم.
معروفترین کتابخانههای پایتون برای هوش مصنوعی
برای درک این ویژگی باید یک مقدمه ای از اهمیت کاربرد و ضرورت وجود کتابخانه بدانید.
کتابخانه ها دقیقا چی هستن؟
همونطور که پیش تر خدمت شما گفته شد پایتون یک زبان متن باز هست به این معنی که هر ادم متخصص و باسوادی میتواند در توسعه این زبان برنامه نویسی کمک کند ولی این کمک دقیقا چگونه هست؟
کتابخانه ها کدهای اماده ای هستن که قبلا وسط برنامه نویسان متخصصی نوشته شده اند و شما به جای نوشتن همه کد های لازم میتوانید از ان کد ها استفاده کنید. مثلا برای پیدا کردن مُد mode در یک مجموعه نیاز باشد 15 خط کد زنی انجام شود ولی با استفاده از کتابخانه نامپای فقط با نگارش 3 خط کد میتوان مد یک مجموعه را پیدا کرد. همین موضوع راجع به پیدا کردن میانگین ، واریانس ، چارک ها و… یک مجموعه هست.
توجه کنید که… استفاده از این کتابخانه ها شاید در موارد کوچک خیلی به چشم نیاید ولی در موارد پیچیده تر واقعا راهگشا خواهد بود.حال فکر کنید که بسیاری از خواسته های شما در یک زبان برنامه نویسی به راحتی توسط کتابخانه ها در پیاده سازی شده و اماده استفاده است. دقیقا مانند یک اتوبان 6 بانده شما با سرعت و راحتی میتوانید در ان کار کنید.
در هوش مصنوعی ما زیاد با داده کار داریم و به شیوه های گوناگون باید با انها کار کنیم برای همین زبان برنامه نویسی که کتابخانه های مرتبط بیشتری داشته باشد برای ما حائز توجه بیشتری هست. در ادامه بهترین کتابخانههای پایتون که برای تحلیل و بررسی داده هستند را بررسی میکنیم.
Scikit-learn
Scikit-learn یکی از بهترین کتابخانههای یادگیری ماشین در پایتون است. این کتابخانه الگوریتمهای اصلی و پایه این حوزه را به خوبی پردازش میکند. مواردی مثل رگرسیون خطی و لاجستیک، خوشهبندی، طبقهبندی و غیره توسط Scikit-learn به خوبی شناسایی میشوند.
.
Pandas
Pandas یک کتابخانه متن باز است که تحت پروانه BSD منتشر میشود. این کتابخانه در کنار کارایی آسان خود، بازدهی بالایی نیز دارد. از Pandas برای تحلیل داده استفاده میشود. Pandas در واقع سعی داشت یک شکاف را در پایتون برطرف کند. این شکاف مشکلی بود که پایتون در مدل سازی و آنالیز دادهها داشت. پانداس در کنار سایر کتابخانههای یادگیری عمیق و یادگیری ماشین قدرت بیشتری میگیرد.
.
Keras
از Keras برای یادگیری عمیق (Deep Learning) استفاده میشود. این کتابخانه محاسبات و ساخت نمونه را با سرعت بسیار بالا انجام میدهد. به خاطر اینکه به جزء پردازشگر دستگاه (CPU) از گرافیک (GPU) هم برای تقسیم بار محاسباتی استفاده میکند. Keras از پایتون 2.7 تا 3.6 را پشتیبانی میکند و یکی از بهترین کتابخانههای یادگیری عمیق در پایتون است.
.
TensorFlow
شرکت گوگل در سال 2010 یک تیم تحقیقاتی در حوزه هوش مصنوعی و یادگیری عمیق تشکیل داد. کتابخانه TensorFlow یکی از دستاوردهای این گروه است که در سال 2015 منتشر شد. گوگل هم در تحقیقات و هم در محصولات خود از این کتابخانه استفاده میکند. TensorFlow خودش را با انواع سیستمعاملها (لینوکس، ویندوز، مکینتاش و غیره) وقف داده است.
.
Matplotlib
Matplotlib یک کتابخانه بسیار مفید برای ایجاد نمودارها است. به کمک آن میتوانید انواع اشکال دوبعدی، هیستوگرام، نمودار و غیره طراحی کنید. بعد از اینکه اطلاعات متنوع خود را تحلیل کردید، برای خوانایی و فهم بیشتر، میتوانید از نمودارها استفاده کنید. Matplotlib به ما کمک میکند یک خروجی کاربردی و ملموس از دیتای خود داشته باشیم.
.
NLTK
NLTK یک ابزار عالی برای ساخت برنامههای پایتونی مبتنی بر زبان انسان است. مثلا اگر برنامه ای ساختهاید که نیاز به تحلیل صحبتهای انسان دارد، میتوانید از کتابخانه NLTK استفاده کنید. متاسفانه این کتابخانه فقط برای زبان انگلیسی کار میکند و امکان اضافه کردن آن به پروژه های فارسی زبان وجود ندارد. NLTK مخفف Natural Language Toolkit بوده و بهترین گزینه در پردازش زبان است.
Scikit-image
پردازش تصویر مبحثی است که رابطه نزدیکی با بینایی ماشین دارد. پردازش تصویر در زمینههای متنوعی مثل موارد نظامی، امنیتی، صنعتی کاربرد دارد. بعضی از کاربردهای بینایی ماشین در زندگی روزمره عبارتند از تشخیص بارکد محصول، تشخیص پلاک یا سرعت خودرو و غیره. Scikit-image الگوریتمهای مختلفی دارد که شامل تغییرات هندسی، آنالیز رنگها، تشخیص ویژگیهای تصویر و غیره میشود.
.
PyBrain
Pybrain یکی از بهترین کتابخانههای یادگیری ماشین بوده که با زبان پایتون نوشته شده است. این کتابخانه شامل الگوریتمهایی مربوط به شبکههای عصبی و یادگیری تقویتی است. Pybrain یک کتابخانه رایگان، آزاد و متن باز به حساب میآید که هر کسی میتواند از آن استفاده کند. ترکیب Pybrain با سایر کتابخانههای هوش مصنوعی به نتایج بسیار مفیدی منجر میشود.
.
Caffe
Caffe یک فریمورک یادگیری عمیق (Deep Learning) است که با تمرکز بر روی سریع بودن و ماژولار بودن طراحی شده است. این کتابخانه پروژه آقای Yangqing Jia در دانشگاه Berkeley بوده و در حال حاضر تحت لایسنس BSD در اختیار عموم قرار گرفته است. برای اینکه قدرت Caffe را درک کنید باید بگوییم که این کتابخانه میتواند با جابهجا شدن بین CPU و کارت گرافیک، روزانه بیشتر از 60 میلیون تصویر را پردازش کند.
StatsModels
StatsModels در علوم داده، تجزیه و تحلیل اطلاعات و گزارشگیریها کاربرد دارد. StatsModels به خوبی در کنار سایر کتابخانههایی که معرفی کردیم قرار میگیرد و با آنها تعامل دارد. مثلا میتواند به راحتی برای کنترل دادهها با کتابخانه Pandas ادغام شود. همچنین این کتابخانه برای کار با سایر کتابخانههای گرافیکی از Matplotlib استفاده میکند.
کتاب خانه های پایتون برای یادگیری ماشین یا ماشین لرنینگ (ML)
- پایبرین
- PyML
- Scikit-learn
- بسته ابزاریMDP
کتاب خانه پایتون برای پردازش متن و زبان طبیعی یا NLP
- NLTK