بایگانی برچسب: s

استفاده از LLMها بعنوان سیستم‌عامل، آیا با نسل جدیدی از سیستم‌های عامل روبرو خواهیم شد؟

در یکی دو سال گذشته، هوش مصنوعی زایا یا همون Generative AI به شکل عجیب و غریبی رشد پیدا کرده و در تقریبا تمام عرصه‌ها از تولید متن، تصویر، موسیقی و حتی ویدئو و فایل‌های سه‌بعدی، استفاده‌های جالبی ازش شده. همچنین باید گفت که تقریبا حجم بسیار زیادی از این توجه، بخاطر ارائه ناگهانی ChatGPT بود و بعد از اون هم مدل‌های اوپن سورسی مثل لاما (و فرزندانش!).

در دنیای تولید چندرسانه‌ای هم که ناگفته نماند، مدل‌هایی مانند Stable Diffusion یا مانی، تا حد خوبی توجه مردم رو به خودشون جلب کردند و علاوه بر این که مورد توجه مردم عادی بودند، مورد توجه بازی‌سازان، طراحان و … هم قرار گرفتند و این خودش یعنی پذیرش ابزارهای جدید، چه بخواهیم و چه نخواهیم، صورت خواهد گرفت.

اما جای یک چیزی این وسط خالیه، اون هم اینه که «سیستم‌عامل» که شاید قدیمی‌ترین مفهوم زنده در رایانش شخصی بوده، چه تغییراتی رو برای پذیرش ابزارهای هوش مصنوعی، متحمل خواهد شد؟

سیستم‌عامل چیست؟

سیستم‌عامل یک لایه از نرم‌افزارهای سیستمیه که ارتباط بین سخت‌افزار و کاربر رو فراهم می‌کنه. در واقع تصور کنید اگر روی گوشی همراه شما iOS یا اندروید نباشه. یا مثلا لپتاپ و سیستم خانگی شما، مجهز به ویندوز یا مک یا لینوکس نباشه. چه استفاده‌ای ازشون میشه کرد؟ عملا هیچ.

در واقع سیستم‌عامل میشه بستری که ما بتونیم نرم‌افزارهای مختلف مثل فتوشاپ، تلگرام، آفیس، فایرفاکس و … رو اجرا کنیم و به نوعی تسهیل‌گر ارتباط بین نرم‌افزارها با منابع در دسترسشون میشه. حالا که می‌دونیم سیستم‌عامل چیه، یکم اون رو بشکافیم.

سفر به اعماق گنو/لینوکس

احتمالا اسم «لینوکس» یا «گنو/لینوکس» یا «اوبونتو» و امثالهم، به گوشتون خورده، نه؟ اگر از خوانندگان بلاگ من باشید که بیشتر از این‌ها به گوش شما خورده و احتمالا از BSD و Solaris و OpenIndiana و … هم خوندید 😁

گنو/لینوکس یک سیستم‌عامل کامله که از دو بخش تشکیل شده: گنو و لینوکس! حالا گنو چیه و لینوکس چیه؟ با هم بررسی می‌کنیم.

  • لینوکس: یک هسته یا کرنله که در ابتدای دهه ۹۰ میلادی، توسط شخص شخیص لینوس بندیکت تروالدز که در اون زمان ۲۱ سالش بوده، ساخته شده. این هسته سیستم عامل (kernel) وظیفه‌ش مدیریت فرایندها و سخت‌افزاره. در واقع این هسته، میاد می‌شینه وسط سیستم‌عامل و اون تعامل لازم رو با سخت‌افزار و فرایند‌ها برای ما تسهیل می‌کنه.
  • گنو: مجموعه‌ای از ابزارهاست که بعنوان بخشی از جنبش نرم‌افزار آزاد در سال ۱۹۸۳ میلادی به رهبری ریچارد متیو استالمن ساخته شده. گنو، سیستم‌عاملی بود استالمن به عنوان یک اکت اعتراضی نسبت به سیاست‌های AT & T در قبال کد منبع یونیکس، شروع به ساختش کرد.

حالا گنو/لینوکس چیه؟ خیلی ساده بخواهیم بگیم، گنو یک سری ابزارهای مورد نیاز کاربره و در فضای کاربر یا User Space اجرا میشه. اگر دوست دارید بیشتر در موردش بدونید، می‌تونید مستندات گنو و استانداردهای مربوطه رو مطالعه کنید.

ولی خب بذارید یکم ساده‌ترش کنیم. فرض کنیم که ما یک هسته سیستم‌عامل داریم که داره به خوبی و خوشی، با سخت‌افزار ارتباط می‌گیره و کارش رو می‌کنه. اما نیاز داریم که یوزر بتونه از طریقی، فرایندهای مد نظر خودش یا همون «برنامه‌»ها رو اجرا کنه. به همین خاطر نیاز به یک «پوسته» یا shell هم داریم. مثلا گنو، یک ابزار بسیار خوبی داره به نام bash که این کار رو انجام می‌ده.

از طرفی، اصلا وقتی برنامه رو نوشتیم، با چی باید اجراش کنیم؟ اینجا ابزارهایی مثل GNU Binutils خودشون رو نشون میدن. البته لازم به ذکره که با ابزارهایی مثل GNU Compiler Collection یا GCC هم برنامه‌ها رو می‌تونیم بسازیم.

خب الان فهمیدیم که کاربر، نیاز به فضای مختص خودش روی سیستم‌عامل داره. برای این که بتونه برنامه‌ها رو اجرا کنه، بسازه و تغییرشون بده. گذشته از این برای بررسی و پردازش بیشتر داده‌هایی که از شبکه میاد، داده‌هایی که در فرم‌های خاصی مثل تصویر و … داریم و …؛ نیاز داریم که این فضای کاربر رو داشته باشیم.

پس هوش مصنوعی چه؟ از آن نور وارد می‌شود

خب اینجا جا داره که ما بریم و کمی با مفاهیم و مطالب مربوط به هوش مصنوعی آشنا شیم.

چرا که احتمالا شما تا الان دارید پیش خودتون فکر می‌کنید که خب احتمالا این مطلب در مورد یک کلاینته که برای ابزارهای هوش مصنوعی نوشته شه و روی سیستم‌عامل ما نصب شه.

خیلی بی‌راه فکر نمی‌کنید البته، ولی بیایید کمی ابتدا LLMها رو بشناسیم و بعد بریم سراغ این که LLM OS یا «سیستم‌عامل مدل زبانی بزرگ» چطور کار خواهد کرد برامون 🙂

شناخت بهتر LLMها

قبلا در پست مربوط به مارال ۷ میلیارد پارامتری (لینک) و پستی که درش از چیرگی زبان انگلیسی روی دنیای AI شکایت و گله کرده بودم (لینک) در مورد LLMها صحبت کردم. اما بهتره که کمی در موردشون بیشتر با هم بدونیم.

LLM چیست؟

مدل‌های زبانی بزرگ (به انگلیسی Large Language Model) مدل‌ها و ابزارهای مبتنی بر هوش مصنوعی هستن که با تکنیک‌های یادگیری عمیق مثل RLHF یا یادگیری تقویتی با بازخورد انسانی تربیت میشن. در واقع این مدل‌ها یک هدف بیشتر ندارند: بیشترین نزدیکی به زبان آدمیزاد.

یکی از دلایلی که مدل‌هایی مثل GPT-2 یا Bloom زمان خودشون خیلی ترکوندند، این بود که اون موقع بهترین شکل ممکن رو برای تولید زبان داشتند اما خب GPT-3 و LLaMa 3.1 و …؛ به شدت در این زمینه بهتر عمل کردند.

مدل‌های زبانی بزرگ، معمولا اینطوری کار می‌کنند:

همون‌طوری که می‌بینید، کاربر یه محتوایی رو برای LLM فراهم می‌کنه که اینجا گفته recite the first law و بعد مدل، اومده بر اساس داده‌ای که انسان‌ها پیش‌تر بهش دادند، یک سری کلمه پیشنهاد میده. مثلا اینجا، در حال بیان قوانین سه‌گانه رباتیک ایزاک آسیموفه.

اما از این موضوع بگذریم، یک بحث دیگر هم که LLMها به خوبی می‌تونن درکش کنن و این برمی‌گرده به تعداد متغیرهایی که در داده ورودی دیدن، ارتباط معنایی بین کلمات می‌تونه باشه که خب با توجه به این که عمده LLMها در حال حاضر Human Feedback یا بازخورد انسانی در مرحله پیش‌آموزششون دخیله، چیز عجیبی نیست و ناظرین انسانی، بهشون بازخورد لازم رو میدن.

کاربردهای LLMها

کاربردهای LLMها از چیزی که فکر کنید بسیار بیشتره. در حال حاضر بسیاری از پروژه‌هایی که به شکل‌های مختلفی دارند با «متن» سر و کله می‌زنن، به نحوی LLM رو وارد کار و زندگیشون کردند. به همین خاطر هم لازم به ذکره که نمیشه دسته‌بندی خاصی ارائه کرد و چیزی که در ادامه فهرست می‌کنم در واقع بیشترین کاربردهای مدل‌های بزرگه.

  • تولید محتوا برای وبلاگ، وبسایت و MVP
  • تولید محتوا برای ویدئوهای یوتوب و اینستاگرام
  • تولید کد
  • تولید داستان برای بازی‌های رایانه‌ای
  • تولید کدهای SQL
  • و …

همونطوری که می‌بینید، به شدت این عزیزان، در حال استفاده در زمینه‌های مختلفن و خب یکپارچگی این‌ها با سیستم‌های عامل هم خودش یک داستان جداست.

کدام سیستم‌عامل‌ها، به هوش مصنوعی مجهز شدند؟

در حال حاضر مایکروسافت با ارائه Copilot و اپل با ارائه Apple Intelligence تا حد خوبی، هوش مصنوعی رو به سیستم‌های عاملشون آوردند.

همچنین اگر اشتباه نکنم دو سه ماه پیش بود که مایکروسافت ایده‌ای به اسم Copilot+PC رو مطرح کرد که کوپایلت، بیاد و حرکات کاربر رو زیرنظر بگیره و بعد بهش پیشنهاد بده چطور می‌تونه بهتر از کامپیوترش استفاده کنه و خب می‌دونید چه فاجعه حریم‌ خصوصی می‌تونست بشه!

اما در حال حاضر، این که LLMها بتونن سیستم‌عامل رو «کنترل کنن» چیزیه که در حد چندین پروژه آزمایشگاهی مونده و به اون شکل، تجاری‌سازی نشده. چیزی که این همه تا اینجا در موردش خوندید و از اینجا به بعد قراره تازه جذاب باشه :))

رویای کارپاتی: سیستم‌عامل مبتنی بر LLMها

چندی پیش، آندره کارپاتی (که از بزرگان هوش مصنوعی و علوم کامپیوتره) در یوتوب ویدئوی با عنوان مقدمه‌ای بر LLMها منتشر کرد و چیزی حدود یک ساعت در مورد پتانسیل‌های این مدل‌ها، حرف زد و در نهایت ایده LLM OS رو مطرح کرد 🙂

سیستم‌عامل مبتنی بر LLM چطور قراره کار کنه؟

خب بیایید بریم به همون گنو/لینوکس. وقتی شما «ترمینال» رو باز می‌کنید، قراره چه اتفاقی بی‌افته؟ آفرین قراره shell رو ببینید. بعدش چه اتفاقی می‌افته؟ شما شروع می‌کنید به وارد کردن دستورات سیستم‌عامل. مثلا با دستور ls می‌تونید بیایید و محتویات یک پوشه رو ببینید.

حالا فرض کنید جای این که دستورات ترمینال لینوکس رو حفظ کنید، به فارسی یا انگلیسی، برای کامپیوترتون توضیح بدید. این دقیقا میشه کاری که LLM قراره در سیستم‌عامل برای ما انجام بده.

چطور این اتفاق می‌افته؟ در اکثر زبان‌های برنامه‌نویسی ما قادر هستیم که از subprocessها استفاده کنیم. یعنی با کمک subprocessها و LLM می‌تونیم اینطوری کار رو پیش ببریم:

  • شما به سیستم‌عامل می‌گید که «برنامه X رو باز کن»
  • سیستم‌عامل از طریق یک رابط متنی یا صوتی، این دستور رو از شما می‌گیره و به LLM ارسال می‌کنه.
  • حالا LLM طوری تنظیم شده که اون رو به یک subprocess تبدیل کنه و اجراش کنه، کد مربوطه رو تولید و اجرا می‌کنه.
  • بعد از اجرا، برنامه X اجرا میشه (اونطوری که ازش خواستید) و نتیجه توسط LLM به شما گفته میشه.

خیلی دقیق بخواهید بهش نگاه کنید، میشه شبیه چیزی مثل Jarvis در فیلم‌های Iron Man یا حتی «سامانتا» در Her. حتی میشه گفت تا حد خوبی شبیه The Machine در سریال Person of Interest هم هست.

چالش‌های LLM OS

اما این ایده هم مثل سایر ایده‌های هوش مصنوعی، خالی از ایراد و چالش نیست. چندتا از چالش‌های بزرگش رو با هم بررسی کنیم:

  • LLM های قابل اجرا روی سیستم‌های شخصی معمولا خوب نیستن. خوب هم باشند معمولا به شدت کُند هستند.
  • LLMهای خوب، عمدتا باید از طریق وب در دسترس باشند.
  • این که افسار کامپیوتر رو بدیم دست یک موجودیت آنلاین، کمی با ایده حریم خصوصی در تضاده، بخصوص اگر بخواهیم این پروژه رو مبتنی بر لینوکس یا BSD پیش ببریم.

همین سه چالش کافیه تا فعلا چنین چیزی رو به درستی نتونیم داشته باشیم. با این که تلاش‌هایی هم در موردش شده.

جمع‌بندی

در نهایت باید گفت که ما کم کم به سمتی می‌ریم که کل «رابط کاربری» ما خلاصه بشه در «زبان». یعنی عمده رابط‌های کاربری از ما متن یا صدا بگیرند و تبدیلش کنن به کارهایی که ازشون خواستیم و خب این اتفاق خوبی می‌تونه باشه.

و خب با ظهور LLMها و پیش‌رفت زیرساخت‌های سخت‌افزاری، این امر با سرعت بیشتری در حال به وقوع پیوستنه و شما احتمالا تا چند سال دیگر، بتونید توزیعی از لینوکس رو نصب کنید که چنین امکانی در اختیارتون بذاره 🙂 یا روی مک و آیفونتون چنین امکانی داشته باشید.

در کل، پیشرفت جامعه بشری به کمک AI انتهای جالبی خواهد داشت، البته به شرط این که براش انتهایی بشه متصور شد!

موفق و خندون باشید.

Share

پس از چهار سال – ناگفته‌هایی از تیرماه ۹۹ و انجمن نام

در تابستان سال ۹۹ و در بحبوحه همه‌گیری (یا شاید بهتر باشه بگیم دنیاگیری) بیماری کووید-۱۹، اتفاقات جالبی در دنیای نرم‌افزار آزاد و متن‌باز ایران رخ داد. این اتفاقات، شامل تشکیل یک بنیاد مردم نهاد، انتخابات و مجمع اون و همچنین حواشی ایجادشده در این موضوع بود که شاید باورتون نشه ولی در عرض شاید ۴۸ ساعت اکثر این اتفاقات رخ داد.

برای این که بتونید بهتر با این ماجرا آشنا بشید، اول بهتره این مطلب رو بخونید (خوندن تک‌تک مطالب لینک شده هم توصیه میشه) و بعد برگردید اینجا به بلاگ من.

به جهت رعایت انصاف، من از کمی قبل از تیر ۹۹ شروع به بیان ماجرا می‌کنم و سپس به تیر ۹۹ می‌رسم.

اعلام وجود انجمن نام (نرم‌افزار آزاد و متن‌باز)

من شخصا از سال ۸۹ کاربر فروم اوبونتو بودم و از سال ۹۱ به صورت رسمی در جامعه نرم‌افزار آزاد فعال بودم. عمده فعالیت من با پروژه جبیر (+، +، +) شناخته میشه و احتمالا می‌دونید که جامعه هم برخورد درستی با این پروژه نداشته (+).

اما به قولی، باید از افراد و اتفاقات گذشته گذر کرد و رفت سراغ اتفاقات جدیدتر و برای من شخصا، بحث انجمن نام چنین چیزی بود. این رو هم به شما بگم که از همون سال ۹۰-۹۱ من زمزمه‌هایی می‌شنیدم از این که یک موجودیت «نزدیک به دولت» برای نرم‌افزار آزاد باید وجود داشته باشه و از دل خود جامعه هم بیرون آمده باشه و این حرف‌ها.

اما این موضوع تا سال ۹۸ ادامه داشت. دقیقا در آخرین جلسه لاگ تهران پیش از قرنطینه و حبس خانگی کرونا، دانیال بهزادی عزیز – که چهره و نام شناخته‌شده نرم‌افزار آزاد ایران هستند – اومد و انجمن رو معرفی کرد. در همون جلسه افرادی بودند که خب گفتند به این دلیل و اون دلیل دوست ندارند چنین موجودیتی باشه. یک عده هم گفتند که خب باشه، ما نیستیم. یک عده هم گفتن باشه، ما هم هستیم. تقریبا برخورد درست و نرمالی که با هر اتفاقی باید رخ بده، رخ داد.

این بحث تا حد زیادی مسکوت موند و ادامه‌دار نشد (بحث کرونا هم پیش آمد قاعدتا و این خودش یک نکته مهم در این بحث‌هاست). اما خب در سال ۹۹ اعلامیه‌های انجمن مجدد منتشر شدند…

اعلام انجمن برای مجمع

در سال ۹۹ از حدود اردیبهشت‌ماه، اعلامیه‌هایی از سمت انجمن می‌آمد که از افراد حاضر در جامعه میخواست برای شرکت در مجمع و همچنین دست گرفتن کنترل مجمع، اقدام کنند.

در واقع شرایط کاندیداتوری هم بسیار ساده بود. شما کافی بود یک شخص زنده بالای ۱۸ سال و دارای تابعیت ایران به همراه سابقه فعالیت در نرم‌افزار آزاد می‌بودید. در واقع شاید راحت‌ترین روش کاندیداتوری 🙂

حتی یادمه که تا قبل از روز مجمع، در مورد وعده وعیدهای کاندیداها – که من هم یکیشون بودم – چیزی پرسیده نشد…

روز مجمع

روز مجمع، همه ما در ساختمان مربوطه جمع شدیم. چه افرادی که نامزد شرکت در انتخابات انجمن نام بودند، چه افرادی که خودشون رو متعلق به نرم‌افزار آزاد می‌دونستند و میخواستند اون روز در رای‌گیری شرکت کنند و در عین حال، نظرات و وعده‌های کاندیداها رو بشنوند.

و نکته جالب‌تر، حضور فعال دوست عزیزمان آقای مصطفی آهنگرها از خارج از کشور و به صورت برخط در مجمع بود، در حالی که خیلی از افرادی که گفته بودند برخط حضور دارند، حتی زحمت این که در نشست برخطی که اون روز خاص برای این منظور تهیه شده بود شرکت کنند رو به خودشون نداده بودند.

حالا بگذریم، رای‌گیری انجام شد. رای‌گیری جالب، منصفانه و از قضا درستی هم بود و پس از این رای‌گیری، این افراد به عضویت هیئت‌مدیره انجمن نام درآمدند:

  • احمد حقیقی
  • محمدرضا رازیان
  • الهام حصارکی
  • محمدرضا حقیری
  • علیرضا فریدونی
  • دانیال بهزادی
  • و چند تن دیگر از دوستان که حضور ذهن از نامشون پس از چهارسال ندارم و ازشون عذرخواهم.

پس از جلسه، تقریبا تمامی حضار اون جلسه مجمع به فضای سبزی پشت آن ساختمان رفتیم و راهبر اون جلسه فضای آزاد هم دوست عزیزمان «یه انقلابی» بود و در مورد دغدغه‌های خودش و اشخاص دیگر در مورد نرم‌افزار آزاد و متن‌باز، به ما گفت. یادمه که کمی صحبت شد، در مورد اهداف انجمن و حرف‌هایی که زدیم و … و بعدش خداحافظی کردیم. و اینجا شد شروعی بر یک پایان 🙂

حواشی آن روز پرماجرا

پس از این که خداحافظی کردیم، به خانه آمدیم و چند ساعتی گذشت. پس از چند ساعت، شبکه اجتماعی ایکس (پیش‌تر توییتر) رو باز کردم و دیدم که چند توییت، اشاره به نام من و پروژه جبیر داره.

بعد از اون، چندین پست و توییت دیگر دیدم که اشاره به موضوعی مانند «احتمال رانت» یا «رنگ کردن پروژه‌های اوپن سورس به نام ملی» یا «سوء استفاده از جامعه» و … و بستن این انگ‌ها به ما! و نکته جالب‌تر این که بسیاری از این افراد، اتکا به محتوای فردی داشتند که ید طولایی در تهدید و اخاذی به کمک پرونده‌سازی و فشار روانی داره و از همه جالب‌تر اینه که پرونده‌های قطوری هم برای خود اون افراد، به سبب بیان عقاید و مواضعشون ساخته بوده.

خلاصه از همه این موارد که گذشتیم، فشار روانی بسیار زیادی به ما وارد شد. یکی از اتفاقاتی که اینجا افتاد این بود که شخص مصطفی آهنگرها، بعنوان شخصی که اصلا در ترکیب هیئت‌مدیره انجمن نبود و صرفا عضوی از این انجمن شده بود (و طبیعتا بخاطر علاقه و حسی که به نرم‌افزار آزاد و متن‌باز داره) بیشترین فشار، توهین و تهمت رو متحمل شد و راستش رو بخواهید حتی هنوز هم با توجه به این که به شدت توسط «جامعه» اذیت میشه، در حال ادامه دادن مسیرشه (و این واقعا باعث میشه شخصا بهش غبطه بخورم).

این حجم توهین، تهمت و فشار کافی نبود انگار و چندتن از افرادی که نرم‌افزار آزاد رو انگار ارثیه اجدادی خودشون می‌دونستند عریضه‌ای نوشتند که اشاره به مطالب کاملا non-existent داشت! و خب با اتکا به نقاط ضعف احساسی مردم و گارد طبیعی مردم نسبت به موجودیت‌های دولتی و نزدیک به دولت؛ حدود ۴۶۰ نفر قانع به امضای آن عریضه شدند. نکته جالب اینه که در کامنت‌های آن عریضه منحوس هم بسیاری فحش داده بودند و بسیاری هم تهدیدهای جانی و … کرده بودند و این هم در نوع خودش جالب بود.

استعفای دست جمعی هیئت‌مدیره

خلاصه پس از تحمل حدود ۴۸ ساعت تنش، ما تصمیم گرفتیم به صورت دست‌جمعی، استعفای خودمون رو از هیئت‌مدیره انجمن نام اعلام کنیم. گرچه این استعفا تا حد زیادی از فشارهای روانی روی ما کاست، اما بگذریم که همچنان بسیاری از ترکش‌های اون سال با ما هست و به نوعی تبدیل به یک اسباب ابراز رذالت توسط عده‌ای شده و هنوز هم یادآوری اون ماجرا برای من شخصا دردناکه 🙂

و این رو هم باید بگم علیرغم کاهش فشارها، معتقدم استعفا خیلی کار درستی نبود (در اون شرایط بهترین کار بود) چرا که در نهایت، چند نفر که اسم‌های آشنا به گوش جامعه هستند برای اداره چنین موجودیتی بهترند یا افرادی که هیچ اسم و رسمی در این جامعه ندارند؟!

سخن آخر با جامعه پیرامون تیر ۹۹ و مسائل مشابه

جامعه عزیز نرم‌افزار آزاد ایران، ما در جامعه کشورمون به قدر کافی با ناملایمی و بی‌رحمی، روبرو هستیم. تقریبا همه ما روزمون رو با اسنپی شروع می‌کنیم که صرفا برای لج‌بازی با پلتفرم اسنپ، کولرش رو روشن نمی‌کنه و از مسیریاب استفاده نمی‌کنه.

با افرادی روبرو هستیم که عامدانه در بانک، بیمه، وزارتخونه‌ها و … کارهامون رو انجام نمیدن. موقع برگشت به خانه دوباره همان سناریوی اسنپ رو شاهدیم.

در واقع جامعه نرم‌افزار آزاد و هرگونه جامعه آلترناتیوی، برای ما پناهگاهی میشه که از شر روزمرگی خلاص بشیم. در عین این که ما در این جامعه هستیم که یاد بگیریم و یاد بدیم. در این جامعه هستیم که علیه انحصار دیجیتال بجنگیم. در این جامعه هستیم که بسیاری از موارد و مواضعی که دانستن آنها برای مردم مهمه رو به گوششون برسونیم.

حالا فرض کنید که این جامعه هم بخواهد همونقدر ناملایم باشد. شخصا تا زمانی که افراد «قدیمی» و «تاثیرگذار» متوجه روش اشتباه خود در این حوزه نباشند، حاضر نیستم خودم رو بخشی از این جامعه بدونم. همونطوری هم که پیش‌تر گفتم، استفاده از مک یا ویندوز، آیفون داشتن، توییتر داشتن و …؛ هیچ کدام دلیلی بر این نیست که به نرم‌افزار آزاد، استالمن و … ارادتی نداشته باشم که اتفاقا ارادتی دوچندان دارم، اما ترجیح فعلا بر فاصله گرفتن از این جامعه است.

Share

مارال‌چت آمد، ربات تلگرامی با مدل مارال هفتاد میلیارد پارامتری

زمستان پارسال، نخستین نسخه آلفای مدل بزرگ زبانی مارال را معرفی کردیم. یک مدل ۷ میلیارد پارامتری مبتنی بر Mistral که روی دیتای فارسی، تنظیم شده و در دسترس شماست. مارال در نسخه‌های اولیه، به شدت ضعیف عمل می‌کرد و خب البته در نسخه‌های اولیه، این موضوع اصلا چیز عجیبی نیست.

اما بعد از چندماه و با عرضه LLaMa 3 در نسخه‌های ۸ و ۷۰ میلیارد پارامتری توسط شرکت متا (فیسبوک سابق)، اوضاع کمی متفاوت شد. این مدل در پایه خودش، درک خوبی از زبان فارسی داره و Fine Tune کردنش روی زبان فارسی، کمی راحتتر شده. گذشته از این، درک بهتری از معنای متون هم داره و در خیلی از وظایف مثل کدنویسی، تولید متن و … به خوبی می‌تونه کمک کنه.

مارال‌چت

نسخه جدید مارال، که روی داده‌های «دنبال کردن دستورالعمل» یا Instruction following آموزش دیده، اسمش «مارال‌چت» بوده و اصولا یک نمونه مشابه ChatGPT به حساب میاد. از اونجایی که در حال حاضر در فاز MVP و Proof of Concept به سر می‌بره، بستر مورد نظر تلگرام انتخاب شد. این ربات در حال حاضر در تلگرام در دسترس شماست.

مارال‌چت، در دو نسخه ساخته شده یکی ۸ میلیاردی و دیگری ۷۰ میلیاردی که در حال حاضر، تصمیم و ترجیح بر آن بوده که مدل مدتی آزمایش بشه و پس از آزمایش، وزن‌های مدل‌ها در اختیار دوستانی که مایل به self hosting مدل هستند، قرار بگیره. به همین دلیل این مدل تا اطلاع ثانوی اوپن سورس نخواهد شد. اخبار انتشار سورس و وزن مدل هم در همین وبلاگ به زودی منتشر میشه.

دسترسی به ربات در تلگرام

برای این که به مارال‌چت دسترسی داشته باشید، فقط کافیه که از این لینک بهش مراجعه کنید. بعد از start زدن، مثل سایر ربات‌ها می‌تونید به سادگی ازش استفاده کنید.

امکانات ربات

ربات در حال حاضر دو قسم امکانات ارائه می‌ده، اول بپردازیم به امکانات پریمیوم یا پولی ربات که شامل اتصال به اینترنت و همچنین ویژن (پردازش تصویر) میشه.

اما امکانات رایگان ربات که در حال حاضر قادر به استفاده ازش هستید شامل این موارد میشه:

  • چت متنی: مانند ChatGPT و Poe و Gemini و … می‌تونید برای ربات پیام متنی ارسال کنید و پاسخ متنی هم دریافت کنید.
  • چت صوتی: اگر به ربات Voice Message ارسال کنید، ربات هم به شما پیام صوتی ارسال می‌کنه و پاسختون رو میده.
  • ساخت تصویر: ربات مارال به کمک پلتفرم هوش مصنوعی مانی، قادر به ساخت تصاویر با کمک هوش مصنوعی هم هست.

پیگیری اخبار مارال‌چت

به جهت پیگیری اخبار و اطلاع‌رسانی‌های مارال‌چت، می‌تونید به کانال اطلاع‌رسانی مارال‌چت در تلگرام بپیوندید. همچنین می‌تونید در گروه بازخوردها هم عضو بشید و بازخوردتون رو نسبت به نحوه پاسخ‌دهی و کیفیت پاسخ‌ها، اعلام کنید.

پروژه‌های بعدی

پروژه‌هایی مثل مانی، موسیقا (لینک پست بلاگ در موردش اینجاست) و مارال‌چت، پروژه‌هایی بودند که بدون تامین زیرساخت توسط اسپانسرهایی چون ایران‌سرور، تولیدشون برای ما غیرممکن بود. پروژه‌های بعدی ما هم عموما قراره در همین فضای هوش مصنوعی زایا و … باشند و خب اخبار خوبی رو در این تابستان، برای شما خواهیم داشت.

سخن آخر

در آخر، باید گفت چندسالی میشه که فضای هوش مصنوعی رو دارم رصد می‌کنم و هربار می‌بینم که چقدر پتانسیل هست و چقدر میشه در صنایع و موضوعات مختلف، کارهای هیجان‌انگیز و به قولی خفن کرد! و خب این موضوع هم به نوبه خود، می‌تونه کار کردن در این حوزه رو جذاب‌تر کنه.

از طرفی، مشخصا هنوز خیلی‌ها use case درستی برای AI در صنایع و مشاغل و صنف خودشون پیدا نکردند و این خودش می‌تونه تا حد زیادی، مشکل‌ساز بشه. اما خب لازم به ذکره که این use caseها معمولا وقتی به بار می‌شینن که ابزارهایی مانند مارال‌چت یا مانی ساخته بشند و افراد بتونن استفاده‌ای در صنعت خودشون برای این موضوعات پیدا کنند. امیدوارم که از مارال‌چت و امکاناتش استفاده کنید و برای شما، مفید واقع بشه 🙂

موفق باشید.

Share

پارچ، روحی تازه در کالبد اکوسیستم گنو/لینوکس ایران

اگر شما هم از «قدیمی»های جامعه نرم‌افزار آزاد و متن‌باز ایران باشید، احتمالا با خیلی از پروژه‌هایی که هدفشان ساخت یک توزیع گنو/لینوکس متناسب با نیاز روز کاربر بوده، آشنایید. چرا که به درازای تاریخ ورود گنو/لینوکس به ایران، تلاش برای ساخت توزیع ایرانیزه‌شده هم بوده.

اما متاسفانه، یک نگاه اجمالی به دیستروواچ (لینک) می‌تونه به ما نشون بده که تمامی این پروژه‌ها در نقطه‌ای متوقف شدند. البته لازم به ذکره که پروژه‌هایی مانند زمین، کاپریس و جبیر هم بودند که متاسفانه در دیستروواچ مدخل مرتبط با خودشان را نتونستن داشته باشن.

اما چند وقت پیش، توجهم به پروژه‌ای جلب شد که اتفاقا کاملا زنده‌ست و خیلی هم خوب داره پیش میره. پروژه‌ای با نام «پارچ‌لینوکس» که در واقع ترکیبی از واژه‌های Persian و Arch Linux می‌تونیم در نظر بگیریم. این ترکیب، موجب ساخت یک اسم بامزه هم شده که به نظرم این خودش می‌تونه تا حد خوبی، ارزش برندینگ خلق کنه برای این محصول. برای دریافت این توزیع و اطلاعات بیشتر می‌تونید به وبسایتش (لینک) مراجعه کنید.

آشنایی اجمالی با آرچ

احتمالا اگر کاربر گنو/لینوکس باشید، اسم آرچ رو به وفور شنیدید. یک توزیع نه‌چندان دوست‌داشتنی که بخاطر مدل عرضه «غلتان» معروفه. البته گذشته از اون، بخاطر این معروفه که همه چی رو «ساده» نگه داشته و از قاعده KISS پیروی می‌کنه.

در واقع، اگر شما در این زمینه تازه‌کار باشید، آرچ رو اصلا و ابدا نمی‌تونید بدون کمک یک حرفه‌ای‌تر، ویدئو یا مستند خاصی نصب کنید. اما خب از طرفی هم آرچ امکانات جالبی داره (مثل AUR) و به نسبت توزیع‌های سنتی‌تر (دبیان مثلا) در بعضی سخت‌افزارها می‌تونه کارکرد بهتری از خودش نشون بده.

یکی از دلایلی که تعداد نسبتا خوبی توزیع مبتنی بر آرچ‌لینوکس داریم، دقیقا همینه. توزیعیه که چیزهای خوبی برای عرضه داره ولی خب در دسترس همه نیست. به همین خاطر هم خیلی از افرادی که بیشتر من و شما با آرچ آشنان، اومدند و توزیع‌هایی ساختند که به ما هم کمک کنه ازش لذت ببریم.

بریم سراغ پارچ!

من به سهراب (سازنده پارچ) قول یک «نقد منصفانه» دادم و خب، اینجا هم می‌ریم که به صورت منصفانه نقدشون کنیم.

اول بگم که با شناختی که از پروژه پیدا کردم، سازندگان توزیع، روی KDE بیشتر مانور دادند و وقت گذاشتن (و البته این به معنای بد بودن سایر نسخه‌ها نیست) و اگر سیستم خوبی دارید، به نظر من بهتره مستقیم برید سراغ این نسخه.

من از اونجایی که میخواستم روی ماشین مجازی تست کنم و بعد به یک لپتاپ قدیمی ببرمش، نسخه XFCE رو دانلود و نصب کردم.

برخوردهای اولیه

پس از این که تصویر ISO پارچ رو بوت کردید، این صفحه به شما نمایش داده میشه:

طرح پس‌زمینه، جذاب و ایرانیه. معمولا خیلی از توزیع‌های مشابه روی این صفحه پس‌زمینه خاصی نمی‌ذارند. پس این هویت بصری، به نظرم تا اینجا یک نقطه قوت برای این توزیع بوده.

پس از این که گزینه اول رو انتخاب کنیم، به این صفحه می‌رسیم:

اینجا برام جالب بود. عموما XFCE در چنین توزیع‌هایی، پنلی به تقلید از ویندوز در پایین صفحه دارند، یا این که نرم‌افزارهایی مثل cairo-dock یا Plank رو پایین صفحه قرار میدند و پنل رو به بالا منتقل می‌کنند (به تقلید از macOS) که خب در اینجا کلا شکل متفاوتی از پنل xfce رو شاهدیم. پنل که گوشه سمت چپ صفحه نمایش قرار گرفته و امکان خوبی برای استفاده از فضای افقی مانیتور فراهم می‌کنه.

مورد بعدی، Welcome Screen جذاب این توزیعه. این هم از مواردیه که در توزیع‌هایی مثل پارچ، خیلی کمتر به چشم میخوره. ولی خب تا اینجا پارچ بسیار فراتر از یه ریمستر ساده از آرچ خودش رو نشون داده.

نصاب

مثل خیلی از توزیع‌های این روزها، پارچ هم از کالامارس برای نصب خودش روی دیسک شما استفاده می‌کنه و خب وقتی لوکیشن شما رو بر اساس IP ایران تشخیص بده، فارسی میشه و سیستم‌عامل هم فارسی نصب می‌کنه.

در نصاب تفاوت خیلی زیادی با سایر توزیع‌ها مشاهده نمی‌کنیم که این هم می‌تونه یک نقطه قوت محسوب بشه. چرا که حس آشنایی برای کاربرانی که از سایر توزیع‌ها میان داره.

به همین خاطر، نماگرفت‌های بیشتری از نصاب اینجا قرار نمی‌دم.

پروسه نصب، حدود ۳-۴ دقیقه طول می‌کشه و بعد از اون به این صفحه می‌رسیم:

و اینجاست که با یک ریبوت، به دنیای پارچ می‌ریم 🙂

تست پارچ پس از نصب

راستش یکم نقدم اینجا قراره تند بشه به چندین دلیل. نخستین دلیل اینه:

وقتی در syslinux که موقع بوت شدن ISO دیدیم اون پس‌زمینه زیبا به چشم میخوره، انتظار داشتم در گراب هم همون شمایل رو ببینم. با توجه به این که VirtualBox دارم انتظار لود شدن کامل plymouth نداشتم (اگر توزیع داشته باشه) ولی انتظار گراب زیباتری رو داشتم. گرچه پس‌زمینه گراب فقط یه عکسه و تغییری در کارکرد سیستم نداره.

اما مشکل اصلی من، بعد از بوت شدن شروع شد. پروسه بوت، کاملا درست طی شد ولی SDDM (مدیر نمایشگر) درست کار نکرد و مجبور شدم با یکم دانش لینوکسی‌ای که داشتم، وارد محیط گرافیکی بشم.

البته نکته خوب اینجاست که این مورد رو سریعا به سازندگان توزیع اطلاع دادم و راه‌حل سریعی براش ارائه دادند و از اون گذشته، در برنامه قرار دادند که در ریلیزهای بعدی این مشکل پیش نیاد. این پشتیبانی جامعه‌محور، برای من جالب و تحسین‌برانگیز بود.

محیط گرافیکی و عملکرد آن

خب، پس از فیکس کردن SDDM چنین صفحه‌ای رو می‌بینیم:

و پس از ورود پسورد، به محیط زیبای XFCE وارد می‌شیم:

برای تست یه سری موارد هم، ترمینال رو باز کردم و GIMP رو روی پارچ نصب کردم و همه‌چی خیلی خوب و روان پیش می‌رفت.

جمع‌بندی

برخلاف خیلی از توزیع‌های جدیدی که هرروز ایجاد می‌شن، پارچ تا حد خیلی خوبی حرف برای گفتن داره. یکی از دلایلش هم اینه که سیستم پایداری خوبی داره و تا الان، خبری از این که سیستم کلا از کار بیفته یا سر نصب بسته‌ها کرش کنه؛ نبوده.

در کل تجربه بسیار خوبی برای من رقم زد، آن هم در ویرچوال باکس مک (که احتمالا می‌دونید بلای عالمه) اما خب من رو داره قلقلک می‌ده که بعنوان سیستم‌عامل اصلی کامپیوتر قدیمی، ازش استفاده کنم.

حتی با توجه به سخت‌افزار لپتاپ قدیمی (پردازشگر i5 نسل چهارم و ۱۶ گیگابایت حافظه) عجیب نیست که نسخه‌های KDE یا GNOME هم بتونم بدون مشکل اجرا کنم. قطعا پس از نصب روی ماشین واقعی هم نقد مجددی بر این توزیع، خواهم نوشت.

در پایان و بعنوان حسن ختام هم باید بگم که مایه خوشحالیه که در شرایطی که هیچ‌کس به فکر جامعه نرم‌افزار آزاد نیست، چنین پروژه‌هایی زنده هستند و به باقی دوستان، امید می‌دن.

موفق و موید باشید.

Share

مارال اینجاست، مدل ۷ میلیارد پارامتری با پشتیبانی از زبان فارسی

در دنیایی که AI و بخصوص از نوع Generative به شدت در اون مهم شده، یکی از مسائل بزرگی که باهاش روبرو هستیم، چیرگی زبان انگلیسی بر جویه که ساخته شده.

من در مطلب پیشینم، در مورد چیرگی زبان انگلیسی بر دنیای هوش مصنوعی نوشته بودم که می‌تونید بخونید و ببینید که چه مشکلاتی وجود دارند که داریم باهاشون دست و پنجه نرم می‌کنیم.

اما خب، الان قضیه کمی متفاوت شده و ما در این مطلب قراره «مارال» رو بررسی کنیم، هم این که ایده‌ش از کجا آمد و هم این که چیه و چه فرق‌هایی با تلاش‌های پیشین داره و هم این که در کل مزیتش چیه.

مارال هفت میلیارد پارامتری و مزایای آن

در تابستان امسال یا دقیق‌تر بگم روز ۱۵ تیر ۱۴۰۲، من رویدادی با نام Summertime AI برگزار کردم. رویداد برای معرفی چندین ابزار هوش مصنوعی بود و من اشاره‌ای به ابزاری به اسم «مارال» کردم.

مارال در اون زمان، قرار بود یک GPT2 تیون شده روی زبان فارسی باشه، اما خب بعد از کمی تحقیق و تفحص در مورد این مدل، فهمیدم که خیلی پیش‌تر از ما، افرادی بودند که این مدل رو با زبان فارسی تیون کنند.

حقیقتا GPT2 هرقدر هم ساختار خوبی داشت، ظاهرا مدل مناسبی برای این موضوع نبود!

اما راه‌حل رو کمی بعدتر، پیدا کردیم. در ادامه، قراره در مورد این راه‌حل صحبت کنیم و ببینیم که مارال چیه و چه مزایایی داره و برای توسعه بهترش، باید چه کارهایی کنیم.

مارال چیه؟

مارال، یک مدل بزرگ زبانی یا LLM بر مبنای مدل Mistral 7B (لینک) و تیو‌ن‌شده برای زبان فارسیه. این مدل، به صورت «پیروی از دستورالعمل» یا Instruction Following کار می‌کنه و نتایجی که تولید می‌کنه هم تقریبا هم‌ارز GPT-3.5 هستند.

مارال در حال حاضر در نسخه ۷ میلیارد پارامتری عرضه میشه، همچنین به صورت یک adapter برای Mistral هم قابل استفاده‌ست که اگر شما پیش‌تر مدل میسترال رو جایی داشته باشید، صرفا با استفاده از آداپتور مارال، بتونید ازش استفاده کنید.

همچنین مدل و جزییاتش در این لینک موجودند.

مزایای مارال نسبت به مدل‌های فارسی قبلی چیه؟

برای درک این موضوع، باید تا حد زیادی عقب بریم. ببینیم اصلا از کِی، بحث پردازش زبان طبیعی یا NLP فارسی، خیلی داغ شد. راستش رو بخواهید از زمانی که شخصا به یاد دارم، بحث پردازش و نمایش زبان فارسی، بحث داغی بود.

حتی میشه گفت چالش‌های بسیار زیادی هم در این حوزه وجود داشت. کم‌کم با پیشرفت اینترنت، این موضوع هم بهبود پیدا کرد. ناگفته نماند که البته حتی حضور فونت‌های آزاد فارسی مانند وزیرمتن (جا داره اینجا هم یادی کنیم از صابر راستی‌کردار عزیز) هم تاثیر بسزایی در این امر گذاشتند.

اما بحث Text Generation چطور؟ این بحث به صورت خاص در همون سال‌های ۲۰۱۶ تا ۲۰۱۸ که در دنیا مدل‌های LSTM و GPT-2 خیلی مطرح بودند، پا گرفت. بسیاری از اشخاص و شرکت‌های ایرانی، به سمت تولید مدل رفتند. در ادامه، دوتا از این مدل‌ها که «اختصاصا» برای زبان فارسی ساخته شدند رو بررسی و مشکلاتشون هم مطرح می‌کنم.

مدل‌های تجاری

در حال حاضر، تنها مدلی که به صورت تجاری در دسترسه، مدل وبسایت «خودنویس»ئه که خب، این مدل علیرغم این که خروجی‌های بسیار خوبی می‌تونه تولید کنه، تجاریه و نمیشه خیلی بررسی دقیقی روش داشت.

علاوه بر اون، خروجی‌هایی که تولید می‌کنه من رو یاد خروجی مدل‌هایی مانند GPT NeoX 20B و GPT J 6B میندازه و خب با توجه به قدمت این وبسایت، این موضوع کاملا طبیعیه.

یکی از مشکلاتی که مدل‌هایی مثل GPT J دارند، اینه که علاقه خاصی به تکرار خودشون دارند، البته این مشکل تا حدی هم به Tokenizer های مدل‌ها برمی‌گرده که برای زبان فارسی، مناسب‌سازی نشدند.

مدل‌های آزاد

اما در حین جستجو، تونستم دو مدل آزادی که اختصاصا برای فارسی ترین شدند رو پیدا کنم که در ادامه در موردشون کمی توضیح خواهم داد.

  • مدل ParsGPT: این مدل، دقیقا GPT2 اون هم نسخه ۱۴۲ میلیون پارامتری بود که روی دیتای فارسی ترین شده، گرچه دقت نسبتا خوبی در تولید محتوای فارسی داره، اما دو تا مشکل بزرگ داشت. اول، این که طبق معمول عادت به تکرار خودش داره (این مساله رو در ادامه در موردش صحبت خواهم کرد) و دوم این که از یه جایی به بعد، دقیقا مطالب بی‌ربط به پرامپتی که داده شده تولید می‌کنه. مثلا ممکنه از یه مطلبی پیرامون هوش مصنوعی، برای شما متن یک خبر مرتبط با وزارت خارجه بورکینافاسو تولید کنه!
  • مدل GPT2 Medium Persian: این مدل باز کمی بهتر بود. مدل بزرگ‌تر و با حدود ۳۰۰ میلیون پارامتر. اما مشکل به طور واضح، دیتایی بود که مدل باهاش pretrain شده. به قول معروف روی «آشغال‌های سئوشده وب فارسی» ترین شده و احتمال این که مطالب خلاف واقع تولید کنه بسیار بالاست. گذشته از این، هنوز مشکل تولید محتوای بی‌ربط هم در این یکی مدل به چشم میخورد.

پس راه‌حل این بود که یک مدل جدیدتر با پایه جدیدتر ساخته بشه. خوشبختانه دوستی به نام سینا رشیدی، دادگان آلپاکای فارسی رو ایجاد کرده که ازش برای ترین کردن این مدل، استفاده کردیم.

و اگر بخواهیم مزایای مارال رو نسبت به مدل‌های پیشین بگیم:

  • دیتاست بهتر
  • پارامترهای بیشتر
  • مدل پایه جدیدتر
  • خروجی‌های بهتر

خواهند بود.

مزایای مارال نسبت به مدل پایه‌ش (Mistral 7B) چیه؟

اولین روزی که از میسترال استفاده کردم متوجه شدم نسبت به مدل‌های قبلی مثل LLaMa, LLaMa2, StableLM 7B و Vicuna و امثالهم، درک بهتری از الفبای فارسی/عربی داره.

این نشان از این بود که این مدل، قابلیت فهمیدن فارسی داره ولی به قدر کافی مطلب فارسی ندیده. به همین خاطر دست به فاین‌تیون کردنش روی دیتاست فارسی زدم.

مزیت این مدل نسبت به میسترال، اینه که فارسی رو از لحاظ ساختار و معنا درست‌تر می‌فهمه و می‌تونه خروجی بسیار بهتری در زبان فارسی تولید کنه. نکته جالب اینه که زبان انگلیسی هم همچنان می‌فهمه، پس یک مدل Bilingual داریم که می‌تونیم در آینده، ازش استفاده‌های باحالی کنیم.

بذارید خیلی خلاصه بگم، مارال، تمام خوبی‌های میسترال رو داره بعلاوه درک خوبی از زبان شیرین فارسی. البته ناگفته نماند که در بخش بعدی مشکلاتی که در نسخه آلفا داشتیم رو هم لیست کردم و براتون نوشتم 🙂

در حال حاضر چه مشکلاتی ممکنه در استفاده از مارال پیش بیاد؟

  • مدل در هذیان‌گویی (Hallucination) بسیار خوبه. البته، این مشکل تقریبا تمام مدل‌های زبانیه و با گذر زمان، میشه حلش کرد.
  • مدل علاقه زیادی به تکرار خودش داره 😁
  • نتایج مدل در حال حاضر خیلی factual نیستند و می‌تونه misinformation تولید کنه.
  • مدل خیلی بزرگه و با همه سخت‌افزارها قابل اجرا نیست (البته با کد ۸ بیتی که ارائه کردیم قابل اجرا میشه)
  • فرمت پرامپتش، کمی مناسب نیست و نیازه که شروع و پایان جملات به مدل آموزش داده شه.

چه چیزی برای توسعه بهتر مارال لازمه؟

  • دیتاست بهتر (نه الزاما بزرگتر) و حتی شاید دیتاست‌های تخصصی
  • ترین شدن tokenizer روی زبان فارسی

چطور از مارال استفاده کنم؟

چنانچه قصد دارید از مارال استفاده کنید، کدهای اجرای مارال روی GPU رو در این لینک قرار دادیم. می‌تونید این کدها رو روی سیستم خودتون یا در Google Colab اجرا کنید.

جمع‌بندی

پس از این که یک ترین موفق روی Stable Diffusion و ساخت مدل «مانی» که البته در این مطلب در موردش توضیح داده بودم، باعث شد که پلتفرم هوش مصنوعی مانی رو راه‌اندازی کنم و به نوعی یک AI company تشکیل بدم، مسیرم به شکلی تغییر کرد که پشتیبانی بهتر و بهتر از زبان شیرین فارسی رو بتونم به این مدل‌ها اضافه کنم.

در حال حاضر، کاربردهای زیادی برای مدل بزرگ زبانی فارسی مانند مارال میشه متصور شد. گذشته از ربات‌های پشتیبان (که با متد RAG ساخته میشن) میشه به کاربردهای بسیار بیشتری هم برای این مدل فکر کرد. دوست دارم بدونم شما چه فکری در مورد این مدل دارید؟

در پایان هم ممنونم از وقتی که گذاشتید و این مطلب رو خوندید. امیدوارم این مطلب، برای شما مفید بوده باشه. موفق و موید باشید 🙂

Share

مصاحبه با محمدرضا حقیری، مهندس هوش مصنوعی – ابزارهای هوش مصنوعی ما را به جهانی هل می‌دهند که مردم در آن هوشمندانه‌تر کار می‌کنند، نه سخت‌تر

متنی که در ادامه می‌خوانید، ترجمه فارسی مصاحبه من با یک شرکت آلمانیه که یک رسانه هم برای انجام مصاحبه و تولید محتوا در مورد مسائل مرتبط با نرم‌افزار، کامپیوتر، هوش مصنوعی و … دارند. مصاحبه به زبان انگلیسی اینجا و مصاحبه به زبان آلمانی اینجا در دسترسند.

مصاحبه با محمدرضا حقیری، مهندس هوش مصنوعی

ما با محمدرضا حقیری، توسعه‌دهنده‌ای از ایران که هم‌اکنون مشغول کار بر روی یک مدل متن به تصویر متن‌باز به نام مانی است، صحبت کردیم.

او دانشش درباره فناوری‌هایی که برای توسعه این مدل استفاده کرده را با ما به اشتراک گذاشته است. هوش مصنوعی چندمدلی او، از Stable Diffusion و Dream Booth استفاده می‌کند.

برای درک بهتر مطلب، مثل همون متن اصلی، سوالات و نظرات اون‌ها رو بولد و پاسخ‌های خودم رو عادی نوشتم.

لطفا خودت رو برای خوانندگان ما معرفی کن. چه کارهایی کردی که به اینجا رسیدی؟ و چطور؟

من محمدرضا حقیری هستم، متولد ۹ خرداد ۱۳۷۵ (۳۰ می ۱۹۹۶) در تهران، ایران. من همیشه علاقه وافری به ساختن چیزهای مختلف داشتم و این علاقه در حوزه علوم کامپیوتر بیشتر و بیشتر شد. در سن ۱۲ سالگی برنامه‌نویسی رو شروع کردم و اولین زبانی که یادگرفتم هم ویژوال‌بیسیک ۶ بود. یادمه اولین برنامه‌ای که نوشتم، ماشین حسابی بود که فشاری که یک جرم به سطح وارد می‌کنه رو محاسبه می‌کرد.

من در دانشگاه مهندسی سخت‌افزار خوندم و بعد از این که در مقطع کارشناسی فارغ‌التحصیل شدم (که همزمان با قرنطینه بود) مطالعه هوش مصنوعی رو جدی‌تر شروع کردم. ایده‌هایی در ذهنم بودند، برنامه‌نویسی بلد بودم ولی قبل اون دوره، هیچوقت به این که مهندس هوش مصنوعی بشم فکر نکرده بودم. انگیزه اصلی برای مطالعه هوش مصنوعی رو یک سریال تلویزیونی به نام مظنون (Person of Interest) به من داد که به نوعی داشت آثار واقعی هوش مصنوعی بر زندگی بشر رو به تصویر می‌کشید.

اواخر ۲۰۲۱ و اوایل ۲۰۲۲ بود که مفهوم «هوش مصنوعی مولد» و «هنر تولیدشده توسط هوش مصنوعی» رو شناختم و همونطوری که می‌تونی حدس بزنی، عاشقش شدم 😁 به همین خاطر هم مطالعاتم جدی‌تر شدند و سعی کردم مدل خودم رو در قالب یک استارتاپ توسعه بدم تا بتونم اون چیزی که در ذهن دارم رو تولید کنم.

در حال حاضر روی مدل متن به تصویری به اسم Mann-E کار می‌کنی. می‌تونی یکم در موردش توضیح بدی و بگی چطور کار می‌کنه؟

مانی (که در بلاگم توضیح دادم یک جورایی بازی کردن با اسم مانی بوده، یک نام مردانه فارسی که البته اشاره‌ای هم به رهبر روحانی دوران ساسانی به همین نام – که نقاش هم بوده – داره) یک مدل Diffusion محسوب میشه. این به این معنیه که اول یک فضای مبهم (مثل برفک تلویزیون) درست می‌کنه و شروع می‌کنه به توسعه دادن اون تصویر که همزمان با مدلی مثل CLIP هم داره چک میشه که آیا درست داره پیش میره یا خیر. در نهایت هم تصویر تولید شده رو به کاربر نشان میده.

هدف اصلی توسعه مانی ساده‌ست، من نمی‌خوام مردم ایده‌ها و احساسات هنرمندانه‌شون رو در ذهنشون نگه دارند. ما در حال حاضر در دنیای «سیل اطلاعات» زندگی می‌کنیم. ذهن‌های ما هرلحظه با دنیایی از اطلاعات روبرو میشن و من باور دارم که داشتن ابزارهای هوش مصنوعی که کمکمون کنند تا افکار و ایده‌هامون رو در قالب عکس و نقاشی داشته باشیم، می‌تونه کمی به آرامشمان کمک کنه.

اگر دوست دارید بدونید چطور می‌تونید از مانی استفاده کنید، می‌تونید به گیتهاب من مراجعه کنید. یک دفترچه یادداشت جوپیتر اونجا هست که می‌تونه به Google Colab وارد بشه. حجم زیادی از کد هم از دید کاربر مخفی شده که حسی مشابه Midjourney یا Dall-E داشته باشه.

تو وبلاگت اشاره کردی که مدل بر مبنای Stable Diffusion ساخته شده. چه فناوری‌هایی برای این هوش مصنوعی استفاده کردی؟

این چیزیه که من بهش میگم «سوال مورد علاقه‌م». می‌تونم ساعت‌ها در مورد فناوری‌هایی که استفاده کردم، صحبت کنم. اول بذارید یک تاریخچه‌ای براتون بگم. وقتی اکثر تولیدکنندگان تصویر خوب «آزاد» نبودند (در مصاحبه گفتم free و ظاهرا یادم رفته مشخص کنم free as in freedom) تنها پایه و مبنای خوب برای یک تولیدکننده اثر هنری با کمک هوش مصنوعی VQGAN بود. یادمه که اگر نتایجش رو با CLIP ترکیب می‌کردی می‌تونست نتایج خوبی ارائه بده. در واقع این یک بازی انکودر-دیکودر بین دوتا مدل هوش مصنوعی بود.

ولی به قدر کافی خوشحال‌کننده نبود، مخصوصا این که midjourney در همون نسخه‌ها هم تصاویری تولید می‌کرد که انگار همین الان از ذهن یک هنرمند چیره‌دست بیرون آمده. پس من چه کردم؟ شخصا به این فکر بودم که چه اتفاقی می‌افتاد اگر یک نسخه متن‌باز از Midjourney داشتیم؟ و همزمان افرادی در شرکت Stability AI هم فکر مشابهی داشتند. وقتی انتشار Sable Diffusion رو اعلام کردند، من واقعا خوشحال شده بودم. کانسپت رو واقعا دوست داشتم با خودم گفتم که این به درد پروژه من هم میخوره! اینجا دقیقا جایی بود که من رفتم هرچی مقاله و تحقیق در مورد Stable Diffusion بود رو خوندم. این برای من یک دنیا ارزش داشت، چون بالاخره یک مدل تولید تصویر بسیار خوب داشت منتشر می‌شد.

این Stable Diffusion فناوری ابتدایی من بود. بی‌نهایت دوستش داشتم. همیشه تلاش می‌کردم بهترین نتایج رو ازش بگیرم. از prompt engineering صرف بگیر تا نوشتن کد‌هایی که بتونه برای من نتایج بهتری ازش بگیره. در ماه‌هایی که از انتشار نسخه اولیه‌ش گذشت، دو تا اتفاق خیلی بزرگ افتاد. اول این که Dream Booth برای Stable Diffusion ریلیز شد ( و صادقانه بخوام بگم، فاین تیون کردن Stable Diffusion رو به شدت ساده کرده) و همزمان RunwayML هم ورژن ۱.۵ از Stable Diffusion رو منتشر کرد. من مواد اولیه اصلی برای ساخت Midjourney متن‌باز رو داشتم!

بخوام خلاصه بگم: هسته اصلی Stable Diffusion ئه، از چک‌پوینت‌های نسخه ۱.۵ ای که runwayml ساخته استفاده کردم و تیون/ترین کردن با Dream Booth انجام شده. اینا Mann-E رو ممکن کردند. همچنین زبان‌های مورد استفاده هم باید بگم که عمدتا از پایتون استفاده کردم و کمی هم کد روبی برای توسعه وب نوشتم. و این تمام چیزیه که من استفاده کردم.

چه تفاوتی با Dall-E, Open Journey و باقی مدل‌ها داره؟

این سوال سختیه، بخصوص که در طول سال گذشته هزاران مدل با تکنیک‌های Textual Inversion و Dream Booth منتشر شدند. ولی اگر بخوام خلاصه بگم که چه فرقی با Dall-E داره، باید بگم که مانی به اون اندازه گرون نیست. برای استفاده از مانی، فقط کافیه که Google Colab رو راه‌ بندازید، نوت‌بوک رو واردش کنید و تمام! می‌تونید بی‌نهایت تصویر باهاش بسازید. این رو با Dall-E مقایسه کنید که به شما ۵۰ تا تصویر رایگان می‌ده و بعدش باید هزینه پرداخت کنید (که البته به نظرم مدل درآمدی بدی نیست).

ولی وقتی بحث به SD و Open Journey می‌رسه، باید بگم که من همیشه از بزرگترین طرفدارای این مدلا بودم و همیشه حس می‌کردم یه چیزی اونجا درست نیست (بخصوص با SD خام). برای این مدل‌ها، این که نتایج پرت و پلا و بی‌ربط تولید کنند چیز عجیبی نیست. پس چه کار می‌تونستم بکنم؟ حدس می‌زدم بهتره سعی کنم مدل‌های خوب رو با هم ترکیب کنم. الان می‌تونم مدعی بشم که مانی، در واقع یک هوش مصنوعی چندمدلی محسوب میشه که در حال حاضر توضیحش یکم سخته، ولی فکر کنم مقاله‌ای به زودی در موردش منتشر خواهم کرد.

اون مدل‌ها برای نقاشی، طراحی، هنر مفهومی، استایل آنالوگ، دابل اکسپوژر و … بودند. با یک چک‌پوینت و کمی prompt engineering الان می‌تونید نتایج بسیار خوبی از مدل دریافت کنید.

روی مدلی به نام Open Journey کار می‌کردی ولی اسمشو عوض کردی. می‌تونی کمی در موردش بگی؟

مانی اول کار، اسم مدل نبود؛ بلکه اسم استارتاپی بود که در تابستان ۲۰۲۲ برای همین کار راه انداخته بودم. اسم مدل Open Journey بود که اشاره به Open Source Midjourney داشت. بعدا، فهمیدم که یک نفر از تیم میدجرنی از تیم prompthero خواسته که اسم مدلشون (که فکر کنم چیزی مثل midjourney-v4-style-stable-diffusion یا چنین چیزی بود) رو عوض کنند و اون‌ها (یعنی prompthero) هم اسم مدل رو به OpenJourney تغییر دادند. من ازشون درخواست کردم که اسم مدل رو عوض کنند ولی از اونجایی که ترجیحم این بود که اون استارتاپ رو در اون برهه زمانی متوقف کنم، اسم مدل رو به مانی تغییر دادم.

و البته یک اتفاق خوشحال‌کننده هم افتاد. یک نفر لینک قدیمی به مدل من (که هنوز اسم رو Open Journey درج کرده بود) رو در هکرنیوز پست کرده بود و وبسایت من هم از لحاظ تعداد بازدیدکننده ترکید. من اون صفحه رو به صفحه درست، ری‌دایرکت کردم و فکر کنم این «ناخواسته‌ترین دیده‌شدن»ی بود که من می‌تونستم از یک پروژه متن‌باز بگیرم.

فکر می‌کنی آینده هوش مصنوعی چطوریه؟ حرف و حدیث در مورد موضوع خیلی زیاده و اکثرا ریشه در محصولات شرکت OpenAI مثل ChatGPT داره. اتفاق بعدی چیه؟

باور دارم که هوش مصنوعی آینده‌ست. برخلاف چیزی که سال ۲۰۲۱ اومد و یه فازی ساخت و رفت (و بله، منظورم متاورس زاکربرگه). هوش مصنوعی واقعی و آینده‌داره. من دارم به چشم می‌بینم که افراد زیادی از این ابزارها برای تولید پست‌های بلاگ، کپی‌رایتینگ، تولید شعار برای شرکت و استارتاپ، تولید آیکون و تصویر شاخص و حتی تولید کد استفاده می‌کنند. این خیلیه، بخصوص با وجود ابزارهایی مثل GPT-3 یا ChatGPT حتی می‌تونه رایج‌تر هم بشه. از طرف دیگر قضیه هم که بخواهیم نگاه کنیم، ابزارهای متن‌بازی مثل BLOOM, BLOOMZ, Flan-T5, GPT-Neo و … رو داریم. افراد می‌تونند این مدل‌ها و API رو متناسب با نیازهای خودشون، تغییر بدند.

و باور دارم که ابزارهای هوش مصنوعی ما را به جهانی هل می‌دهند که مردم در آن هوشمندانه‌تر کار می‌کنند، نه سخت‌تر. می‌دونی، تو می‌تونی شونزده ساعت از بیست و چهار ساعت شبانه روز رو صرف توسعه یه کمپوننت تو پروژه ری‌اکتیت کنی، درسته؟ این خیلی خوبه که شغلت و کاری که می‌کنی رو دوست داره ولی حدس من اینه که این ماجرا برای کارفرما یا سرمایه‌گذار هیچ اهمیتی نداره، بخصوص وقتی می‌فهمن که با ۱۶ دقیقه prompt engineering می‌تونستی همون نتیجه رو از GPT-3 با کمی ویرایش کد بگیری. برای من، این یک دنیای بهتره.

در پایان هم از تو، الکساندر؛ تشکر می‌کنم که اومدی سراغم.

سخن آخر

سالها پیش دوستانی در وبسایت لینوکس سیزن با من مصاحبه‌ای انجام دادند که از اینجا در دسترسه. اما خب این یکی مصاحبه، برای من پراهمیت‌تر بود، چرا که فکر کنم تنها کسی هستم که در ایران، با جدیت روی پروژه‌های Generative AI (هوش مصنوعی مولد) به صورت آزاد/متن‌باز کار می‌کنه و خب حیف بود که الان که موقعشه، منتشرش نکنم.

خلاصه که ازتون ممنونم بابت وقتی که گذاشتید و خوندید. اگر به چنین مطالبی علاقمندید، می‌تونید من رو در ویرگول هم دنبال کنید و اونجا هم مطالب مشابهی رو مطالعه کنید. ممنونم بابت وقتی که گذاشتید و خوندید.

Share

نصب کتابخانه tensorflow روی Raspberry Pi

حدود بهمن یا اسفند سال ۱۳۹۹ بود که من، یک عدد رزبری پای ۴ مدل B (لینک) خریداری کردم که باهاش یه سری ایده رو عملی کنم. از وقتی که این دستگاه رو خریدم، مدت زیادی تقریبا گذشته اما خب چند هفته اخیر، شدیدا با این دستگاه در حال کشتی گرفتن و تست ایده‌های مختلف هستم. یکی از ایده‌های من پروژه‌ای بود که تا حد زیادی به هوش مصنوعی (و بخصوص tensorflow) نیازمند بود. مشکلی که داشتم این بود که در خود مخازن PyPi ای که روی رزبری پای در دسترسه، هیچ ساخت درستی از tensorflow وجود نداره.

اما خب، نمیشه در دنیای تِک ناامید شد؛ به همین خاطر دنبال راهکار و راه حلی گشتم که بتونم تنسرفلو رو روی رزبری پای داشته باشم. یکم سخت‌تر از حالت عادی (که استفاده از pip بود) شد اما ارزشش رو داشت. چون تونستم بدون مشکل مدلی که مدنظر داشتم رو لود و استفاده کنم. همچنین لازمه ذکر کنم که در این مطلب قراره یاد بگیریم چطور خود تنسرفلو رو نصب کنیم و به TFLite کاری نداریم.

رزبری پای چیه؟

رزبری پای (Raspberry Pi) یک کامپیوتر تک‌برد (SBC یا Single Board Computet) محسوب می‌شه که توسط یک بنیاد غیرانتفاعی به همین اسم در بریتانیا طراحی شده (البته تولیدش مثل عمده محصولات دیگر، در کشور چین انجام میشه). این بردها معمولا یک پردازنده ARM دارند و می‌شه روی اونها سیستم‌عامل نصب کرد. خیلی‌هاشون هم ورودی/خروجی عام‌منظوره (General Purpose Input/Output) یا همون GPIO دارند که می‌تونن رابطی بین این کامپیوتر و قطعات الکترونیکی دیگر باشند.

این کامپیوترهای کوچک – که در ابعاد یک کارت اعتباری ساخته شدند – اسباب‌بازی خوبی برای برنامه‌نویسان و مهندسین کامپیوتر به شمار میان. بسیاری از متخصصین و علاقمندان از رزبری پای استفاده می‌کنن تا ایده‌ها و پروژه‌هاشون رو پیاده‌سازی کنن. البته لازم به ذکره که خیلی‌ها هم حتی محصولاتشون رو برپایه رزبری‌پای توسعه دادند (پس اگر دوست داشتید یکی تهیه کنید و باهاش بازی کنید، درنگ نکنید 😁)

تنسرفلو چیه؟

از اونجایی که این مطلب، در مورد نصب Tensorflow روی رزبری پای بود، لازمه که کمی هم در مورد تنسرفلو توضیح داده بشه. تنسرفلو یک کتابخونه نرم‌افزاری آزاد و متن‌بازه که توسط تیم Google Brain توسعه‌ داده میشه. این کتابخونه، به ما اجازه میده که پروژه‌ها و پروسه‌های یادگیری ماشین، هوش مصنوعی، یادگیری عمیق، استنباط آماری و … تا توسعه شبکه‌های عصبی مصنوعی رو انجام بدیم. به خاطر پشتیبانی گوگل از این کتابخونه، به یکی از محبوب‌ترین و پراستفاده‌ترین کتابخونه‌های هوش مصنوعی تبدیل شده (مثلا در پروژه خودران، من از این کتابخونه استفاده کرده بودم).

اما یک مشکل بزرگی با نصب تنسرفلو روی رزبری پای مواجه هستیم. مشکل اینجاست که وقتی دستور روتین pip برای نصب تنسرفلو رو بزنیم، اتفاق خیلی خاصی رخ نمی‌ده، جز این که یک ارور مبنی بر پیدا نشدن این کتابخونه در مخازن  PyPi متعلق به پلتفرم ما نشون داده میشه. پس باید چی کار کنیم؟ خب در ادامه قراره که همین داستان رو بررسی کنیم و به نتیجه درستی برسیم.

نصب Tensorflow روی Raspberry Pi

قبل از هرچیزی باید بگم که من این پروسه رو روی Raspberry Pi 4 Model B (با رم ۲ گیگابایت) و سیستم عامل Raspberry Pi OS نسخه Bullseye (بله درست حدس زدید، سیستم‌عامل رزبری پای دبیانه 😁 و صدالبته که می‌تونید توزیع‌های دیگری هم روش نصب کنید) و ویرایش ۶۴ بیتی طی کردم. بسته به مدل رزبری شما و سیستم‌عاملتون، این پروسه می‌تونه متفاوت باشه.

نصب نرم‌افزارهای پایه

ما برای این که بتونیم تنسرفلو رو نصب کنیم، نیاز به نصب تعداد زیادی نرم‌افزار روی خود سیستم‌عامل داریم. به نظر بهتره که ابتدا، لیست بسته‌های مخازن رو بروزرسانی کنیم:

sudo apt update

و صدالبته بهتره که خود سیستم‌عامل هم بروزرسانی‌های آخرش رو دریافت و نصب کنه:

sudo apt full-upgrade

پس از این که این مراحل انجام شد، تعداد زیادی نرم‌افزار رو به این شکل نصب می‌کنیم:

sudo apt install gfortran libhdf5-dev libc-ares-dev libeigen3-dev libatlas-base-dev libopenblas-dev libblas-dev liblapack-dev

عمده این نرم‌افزارها رو بر اساس پیام‌های خطایی که دریافت می‌کردم پیدا کردم، چرا که وقتی شما روی سیستم دسکتاپ یا لپتاپ خودتون تنسرفلو نصب می‌کنید، بسیاری از این‌ها (متناسب با معماری پردازنده) پیش‌تر نصب شدند اما سیستم‌عامل‌هایی که روی رزبری نصب می‌کنیم چنین حالتی ندارند. بهرحال، همه نرم‌افزارهای پایه‌ای که نیازه از مخزن دبیان نصب بشه، در این دستور موجوده (طبیعتا اگر نیاز به بسته دیگری باشه بعدا این مطلب ویرایش میشه)

نصب و بروزرسانی بسته های پایتونی

خب ما تعدادی پیش‌نیاز پایتونی هم داریم (که این‌ها رو اکثرا حتی در وبسایت تنسرفلو هم می‌شه پیدا کرد) که با دستورات زیر نصبشون می‌کنیم:

pip3 install pybind11
pip3 install Cython==0.29.21
pip3 install h5py==2.10.0

و سپس بسته setuptools رو هم بروزرسانی می‌کنیم:

pip3 install --upgrade setuptools

و این یکی رو هم نصب می‌کنیم (چرا که باید فایل تنسرفلو رو با این بزرگوار دانلود کنیم)

pip3 install gdown

دانلود و نصب Tensorflow

خب ابتدا به کمک gdown فایل wheel (فایل‌های wheel فایل‌هایی هستند که pip می‌فهمه باید نصبشون کنه) مربوط به نسخه مورد نظر تنسرفلو رو دانلود می‌کنیم:

gdown https://drive.google.com/file/d/1YpxNubmEL_4EgTrVMu-kYyzAbtyLis29

توجه کنید که اگر این دستور کار نکرد هم جای نگرانی نیست، می‌تونید این لینک رو باز کنید و فایل رو خودتون دانلود کنید.

سپس کافیه که با اجرای این دستور:

pip3 install <TENSORFLOW WHL FILE>.whl

نصب رو انجام بدید.

ضمنا، از اونجایی که ممکنه بعدتر نسخه‌ها تغییر کنن، بهتره که این صفحه رو هم هر چند وقت یه بار چک کنید تا اگر نیاز بود نسخه تنسرفلو رو تغییر بدید، فایل مربوطه رو دانلود کنید.

جمع‌بندی

مدتهای زیادی میشه که دوست دارم در مورد پروژه‌هایی که در حوزه «اینترنت چیزها» یا همون IoT انجام میدم هم بنویسم. اما متاسفانه پروژه‌های سخت‌افزاری، وقت زیادی از آدم می‌گیرن و وقتی وقت آزاد زیادی نداشته باشید، معمولا به پروژه‌های سخت‌افزاریتون هم آنچنان نمی‌تونید رسیدگی کنید. به همین خاطر مدتی میشه که در تلاشم تا پروژه‌های شخصی و صدالبته کاریم در حوزه بینایی ماشین رو با IoT ترکیب کنم و به این شکل این حوزه رو هم وارد کارهای روتین و اصلیم کنم که وقت هم همیشه براشون باشه 😁

تست چند پروژه بینایی ماشین روی Raspberry Pi شروعی برای این دوران از زندگی منه. راستی، اگر دوست دارید نقشه راه بینایی ماشین رو داشته باشید می‌تونید بیایید اینجا، اگر دنبال ایده برای پروژه‌ها هستید هم اینجا رو بخونید. حتی می‌تونید به ما در جامعه بینایی ماشین هم ملحق بشید و اشتراک تجربه و دانش کنید.

در پایان، ضمن تشکر از این که وقت گذاشتید و این مطلب رو خوندید، باید بگم که هنوز می‌تونید من رو به یک فنجان قهوه مهمان کنید 🙂

Share

ایده هایی برای پروژه های بینایی ماشین

چندی پیش، در مورد پیش‌نیازهای یادگیری بینایی ماشین در همین وبلاگ نوشته بودم (لینک) و بعد از اون هم در مطلبی در ویرگول، در مورد این که چرا موجودیتی به اسم «جامعه بینایی ماشین» رو راه انداختم (لینک) صحبت کردم. پس از انجام چندین پروژه و تولید چندین محتوا پیرامون این موضوع، امروز در این پست قراره که ایده هایی که شما می‌تونید در پروژه های بینایی ماشین و پردازش تصویر خودتون به کار بگیرید رو بررسی کنیم.

توجه داشته باشید که در این پست، فرض رو بر این گذاشتیم که شما با هوش مصنوعی، پایتون، بینایی ماشین و … آشنایی لازم و کافی رو دارید و حالا قصد دارید یک پروژه جدی باهاش انجام بدید اما نمی‌دونید باید چی کار کنید. اگر آشنایی ندارید هم مشکلی نیست، می‌تونید این مطلب رو صرفا برای ایجاد علاقه و یا رفع کنجکاوی بخونید 😁

ایده های مرتبط با تشخیص چهره

تشخیص چهره، همیشه یکی از پرطرفدارترین شاخه‌های پردازش تصویر و بینایی ماشین بوده است. چرا که با استفاده از تشخیص چهره، می‌توانیم عملیات جالبی انجام دهیم و پروسه‌های زیادی از یک کار بزرگتر را، خودکار کنیم. همچنین می‌توانیم امنیت خانه و محل کار و … را نیز با استفاده از تشخیص چهره تامین کنیم.

در لیست زیر، تعدادی از پروژه‌های مرتبط با تشخیص چهره رو برای شما فهرست کرده‌ام:

  • حضور و غیاب مبتنی بر چهره
  • دوربین امنیتی (به این شکل که وقتی شخص ناشناسی وارد حریم دوربین شد از طریق ایمیل یا SMS و … به شما اطلاع بده)
  • قفل هوشمند ( به شکلی که اگر شما رو دید در رو باز کنه و در غیر این صورت، یک سیستم مانند دزدگیر یا سیستم امنیت خونه رو راه‌اندازی کنه)
  • تشخیص حالت و احساسات چهره
  • تشخیص خواب‌آلودگی (مثلا در یک کلاس این پروژه می‌تونه کاربردی باشه).

همه ایده‌های بالا، به سادگی قابل انجام هستند. فقط کافیه که کار با کتابخانه‌ها و تئوری پردازش تصویر رو بلد باشید. شاید دو سه روزه بتونید یکی از این پروژه‌ها رو به ثمر برسونید 😁

ایده‌ های مرتبط با تشخیص کرکتر

نتایج آزمایش روی دیتاست آزمایشی

تشخیص نوری نویسه یا Optical Character Recognition که به اختصار به اون OCR هم گفته می‌شه، یکی از شاخه‌های پرطرفدار دیگر در حوزه بینایی ماشین می‌تونه به حساب بیاد. پروژه‌هایی که در این حوزه انجام می‌شن به شدت کاربردی هستند و طبیعیه که در حوزه‌های مختلفی کاربرد خواهند داشت. در اینجا تعدادی از ایده‌هایی که می‌تونید روش کار کنید رو اینجا فهرست کردم:

  • تشخیص و استخراج شماره پلاک (که پیش‌تر در موردش نوشتم – لینک)
  • تشخیص و حل مسائل ریاضی/فیزیک (که این هم پیش‌تر در مورد نوشتم – لینک)
  • تشخیص دست‌خط فارسی
  • تشخیص خط نستعلیق (و در کل خوشنویسی) فارسی
  • تشخیص نسخه پزشکی (نکته جالب اینه که در نسخ پزشکی، بسیاری از خط‌خطی‌هایی که می‌بینید در واقع روش مصرف و دوزاژ دارو هستند، که طبق کدگذاری خاصی نوشته می‌شن).

البته باید این نکته رو هم عرض کنم خدمتتون که دنیای OCR خیلی گسترده‌ست. تقریبا هرجایی که شما با نوشتن سر و کار داشته باشید، می‌تونید از OCR هم اونجا استفاده کنید. خیلی چیزا اینجا به خلاقیت و نیازهای خودتون برمی‌گرده. اگر ایده‌ دیگری داشتید، می‌تونید در بخش نظرات همین مطلب با من به اشتراک بذارید.

ایده های مرتبط با پزشکی

هوش مصنوعی در علم پزشکی، جایگاه خاصی در سال‌های اخیر داشته. چرا که همه دانشمندان کامپیوتر و همچنین پزشکی، دریافتند که با استفاده از راه‌حل‌های هوشمند، می‌تونند به حد قابل توجهی، خطاهای پزشکی رو کاهش بدند. همچنین تحقیقات دارو و واکسن هم به شدت سریع‌تر می‌تونن انجام بدند. برای مثال، همین دنیاگیری ویروس کرونا که در سال ۲۰۱۹ آغاز شد و کماکان ادامه داره رو بررسی کنیم، بارها از این که از هوش مصنوعی برای پیدا کردن ترکیبات دارویی موثر بر ویروس استفاده شده، صحبت کردند. همچنین در پروسه ساخت واکسن هم بسیاری از مراحل رو به ماشین سپردند و به هوش ماشینی اعتماد کردند. شاید یکی از دلایلی که واکسن این بیماری انقدر سریع ساخته شد، استفاده از همین راهکارهای هوشمند در تولید بوده.

بینایی ماشین هم استثناء نیست و طبیعتا می‌تونه خیلی به کمک افراد بیاد. در این بخش، تعداد زیادی از ایده‌هایی که می‌تونه به پزشک‌ها در شناخت بهتر مشکلات بیمارهاشون کمک کنه رو فهرست کردم و خب بد نیست اگر شما هم سراغش برید و سعی کنید یکیش رو پیاده کنید (این بخش می‌تونه برای دانشجویان مهندسی پزشکی و پزشکی؛ بسیار مفید باشه)

  • تشخیص نوع تومور مغزی (تصویر این بخش، پروژه‌ای که خودم انجام دادم)
  • تشخیص رتینوپاتی دیابتی در اشخاص مبتلا به دیابت
  • تشخیص MS و مراحل مختلف اون بر اساس MRI
  • تشخیص سلول‌های سرطانی
  • تشخیص میزان درگیری ریه در بیماری‌های تنفسی (مانند COVID-19)
  • تشخیص ناهنجاری‌های پوستی
  • تشخیص آسیب‌های استخوان
  • تشخیص آسیب‌دیدگی‌ها و پوسیدگی‌های دندان

طبیعتا این‌ها، همه کارهایی که می‌تونیم در حوزه پزشکی با کمک بینایی ماشین و پردازش تصویر انجام بدیم نیستن و این دامنه می‌تونه به شدت گسترده‌تر باشه. طبیعیه که گستردگی این دامنه به خلاقیت خودتون و نیازهاتون برمی‌گرده. همچنین طبیعتا اگر شما دانشجوی مهندسی پزشکی یا رشته پزشکی و رشته‌های مرتبط باشید، احتمالا ایده‌های بهتری خواهید داشت.

سایر حوزه‌ها

چندین و چند حوزه دیگر هست که خب مثل باقی حوزه‌های پوشش داده شده در این مطلب، نمیشه ایده‌های پروژه‌های بینایی ماشین و پردازش تصویرشون رو فهرست کرد. به همین خاطر، توضیح اجمالی راجع به هر کدوم می‌دم تا شما ببینید که کدوم حوزه رو بیشتر دوست خواهید داشت و در کدوم حوزه ممکنه بتونید ایده‌پردازی بهتری داشته باشید.

تشخیص حرکت یا Action Detection

این حوزه به طور خاص، می‌تونه برای کارهایی مثل تشخیص و ترجمه همزمان زبان اشاره (لینک)، تشخیص حرکات ورزشی و یا تشخیص «نیت» افراد بشه. برای مثال، می‌تونیم سیستمی بسازیم که حرکات بعدی فرد در یک نبرد تن به تن (مثل مسابقه بوکس) رو پیش‌بینی کنه و به مربی‌ها و نوآموزهای اون رشته اطلاع بده.

خودروهای خودران

خودروهای خودران یا Self-Driving که پیش‌تر هم ازشون در همین وبلاگ صحبت کرده بودم (لینک) می‌تونن با استفاده از بینایی ماشین و پردازش تصویر، تابلوهای راهنمایی، رفتار سایر رانندگان، موانع در مسیر و … رو تشخیص بدند. این حوزه البته پیچیدگی زیادی داره اما کار کردن روی بخش‌های مختلفش می‌تونه برای یادگیری جوانب مختلف ماجرا جذاب و جالب و مفید باشه.

مصرف انرژی

حوزه انرژی هم حوزه جالبی می‌تونه برای پروژه‌های بینایی ماشین باشه. برای مثال OCR ای که بتونه دیتای کنتور گاز/برق رو به متن تبدیل کنه و اون رو با یک مرکز محاسبه قیمت، چک کنه و قیمت رو به ما اعلام کنه. همچنین می‌شه عکس‌های حرارتی از خانه‌ها و … تهیه کرد و با استفاده از بینایی ماشین دقیقا بررسی کرد که کجاها انرژی بیشتری داره از دست میره و … .

این پروژه‌ها به خودی خود شاید جالب به نظر نرسن اما ترکیبشون با IoT و هوشمندسازی در سطوح دیگر، طبیعتا می‌تونه جذاب و حتی پول‌ساز هم باشه.

کشاورزی

این هم گفتن نداره، شما کافیه که یک سری عکس هوایی از زمین‌های کشاورزی داشته باشید. احتمالا خیلی راحت بتونید سیستمی توسعه بدید که آفات رو شناسایی کنه. همینطور می‌تونید نوع خاک و … هم از روی این عکس‌ها طبقه‌بندی کنید و پیشنهاد بدید که چه محصولی در این زمین کشت بشه بهتره. در حوزه مصرف انرژی هم می‌تونید یکی از پروژه‌ها رو بردارید بیارید اینجا و ازش بهره‌برداری کنید. چی از این بهتر؟

ضمن این که امنیت زمین کشاورزی و گلخانه، بررسی نور و رنگ و … هم می‌تونن اینجا کاربردی باشند.

جمع‌بندی مطلب

در این مطلب، ایده‌هایی که می‌تونید بعنوان یک پروژه تفریحی یا جدی پیاده‌سازی کنید رو بررسی کردیم. همچنین این ایده‌ها، به جز این که می‌تونن رزومه خوبی برای شما بسازند طبیعتا می‌تونن پایه یک کسب و کار و یا یک استارتاپ باشند که شانس خوبی برای به پول رسیدن داره. به همین خاطر هم ممنون میشم اگر هر کدوم از این ایده‌ها رو پیاده‌سازی کردید در بخش کامنت همین مطلب در موردش بنویسید و به من اطلاع بدید تا ببینم چه کردید.
همچنین لازم به ذکره که اگر دوست دارید مطالب فنی/علمی دیگری از من بخونید، می‌تونید به ویرگول من هم مراجعه کنید. در پایان هم بابت وقتی که گذاشتید، ازتون تشکر می‌کنم و امیدوارم در آینده باز هم بتونم در این وبلاگ، مطلب بنویسم.

 

Share

با هوش مصنوعی، ریاضی ۱ رو پاس کن!

دقیقا دو هفته پیش، در نسخه انگلیسی وبلاگ در مورد YOLOv5 نوشتم (لینک) و توضیح دادم که چرا این مدل هوش مصنوعی برای تشخیص اشیاء رو دوست دارم (و حتی چرا شما باید دوستش داشته باشید) و خب طبیعتا دوست داشتم یک پروژه خیلی خیلی ساده و در عین حال باحال هم با این مدل انجام بدم.

ایده‌های زیادی در سر داشتم. برای مثال ایده بازی Red Light – Green Light که در سریال اسکوییدگیم همه دیدیم. اما این ایده علیرغم خوب بودنش، آنچنان کاربردی نبود. پس تصمیم من برآن شد که یک نرم‌افزار دیگر توسعه بدم. نرم‌افزاری که هم چالش داشته باشه، هم در نهایت یک کاربرد درست ازش بشه درآورد.

نمی‌دونم شما یادتونه یا نه، اما نرم‌افزار سیمبولب، دروانی خیلی خاص و معروف شد. به همین خاطر، تصمیم من هم این شد که سیمبولب رو دوباره بسازم و بعد از این که نتایج مورد نظرم رو گرفتم در موردش وبلاگ بنویسم. پس این شما و این ماجرایی که من داشتم تا این نرم‌افزار رو بسازم.

نتیجه حل مساله توسط هوش مصنوعی

گام اول: طرح مساله

در هر پروژه‌ای، اولین گام اینه که مطرح کنیم چه مشکلی رو باید حل کنیم. یا به قول دنیل کوهن Look for the pain. خب دردی که ما اینجا به دنبال حل کردنش بودیم، چی بود؟ این که بسیاری از دانش‌آموزا و دانشجوها سر ریاضی عمومی یا Calculus مشکل دارند. این مشکل ریشه‌ش کجاست؟ برای من شخصا مهم نیست که این ریشه رو بررسی کنم (البته به معنای این نیست که نظری در موردش ندارم، اما از حوصله این مطلب خارجه).

حالا درد این که بسیاری از دانشجوها و دانش‌آموزها مشکل دارند، چطور میشه براشون یک مسکن خوب تجویز کرد؟ بعنوان یک مهندس هوش مصنوعی، یا بهتر بگم مهندس بینایی ماشین در ذهنم این ایده چرخید و اون این بود که:

یک نرم‌افزار هوش مصنوعی وجود داشته باشه که از روی عکس مساله، پاسخ نهایی یا راه‌حل رو به افراد بده.

و این پروژه، در نظر پروژه بسیار بسیار بزرگی بود اما در نهایت، پروژه ساده‌ای شد. در ادامه، در راهی که طی شد توضیح خواهم داد.

گام دوم: انتخاب ابزار

گام دوم برای من، انتخاب ابزار بود. اول از همه می‌خواستم برم سراغ OCR های آماده برای تشخیص مسائل پارامتری مثل x و y و … . اما بعد دیدم که اینجا علاوه بر حروف و اعداد، نشانه‌ها هم هستند. ضمن این که به شکلی باید توان و … هم تشخیص داد. پس کمی پروژه رو نگه داشتم تا به ابزارها فکر کنم.

بعد از مدتی تحقیق و تفحص، به دارک‌نت رسیدم که برای ترین کردن YOLOv3 و YOLOv4 استفاده میشه و خب دارک‌نت مشکلات زیادی هم با خودش به همراه داره. برای مثال کاملا در سی‌پلاس‌پلاس نوشته شده و روی سیستم‌های مختلف باید از نو کامپایل بشه. با CPU درست کار نمی‌کنه. کامپایل کردنش روی مک یا ویندوز دردسره و انتقال دادنش به Google Colab هم می‌تونه تا حد زیادی مشکل‌ساز بشه.

بعد از اون الگوریتم YOLOv5 رو کشف کردم. تقریبا همه مراحل کاملا پایتونی پیش می‌رفت و این عالی بود. کم کم دیدم که میشه بعد از ترین کردن قضیه، از pytorch هم استفاده کرد و اشیاء رو تشخیص داد و از اون بهتر این بود که در تشخیص اشیاء، می‌شد خروجی pandas هم گرفت که مختصات شیء مورد نظر به همراه لیبلش در اون data frame خاص موجود بودند. پس به این شکل تشخیص این که ما با چه چیزی روبرو هستیم هم ساده‌تر از گذشته می‌شد.

وقتی این ابزار رو با چند چیز مختلف تست کردم، نوبت این رسید که در این پروژه حتما ازش استفاده کنم. اما این تمام ماجرا نیست. دقیقا وقتی که سمت OCR ماجرا هندل می‌شد، یک بحث خیلی مهم می‌موند. بحث این که چطوری باید مساله حل بشه؟ برای حل مساله هم از Wolfram Alpha گفتم کمک می‌گیرم.

خب حالا نوبتی هم باشه، نوبت اینه که داده‌های مورد نیاز رو جمع کنیم. قبل‌تر در مورد راه‌هایی که شما می‌تونید برای جمع‌آوری داده استفاده کنید، صحبت کردم و می‌تونید از اینجا بخونیدش.

نمونه داده‌های پروژه
نمونه داده‌های استفاده شده در این پروژه

گام سوم: جمع‌آوری داده

برای جمع‌آوری داده‌ها، نیازمند این بودم که روی چند سطح مختلف (وایت‌برد، کاغذ A4 و همچنین کاغذ خط‌دار) و با چند دست‌خط مختلف، مسائل ریاضی رو بنویسم. بعد از نوشتن مسائل ریاضی، از دوستانم خواهش کردم که روی صفحات مختلف و همچنین وایت‌برد، مسائل ریاضی رو بنویسند.

بعد از این که مسائل ریاضی رو روی این سطوح و با دست‌خط‌های مختلف داشتم، نوبت عکاسی ازشون بود. از هر بار نوشتن، چندین عکس از چند زاویه گرفتم. چرا که زوایای مختلف باعث میشن توزیع نور هم در تصاویر یکسان نباشه و این خودش یک مرحله data augmentation رو برای من کاهش می‌داد.

حالا یه حجم زیادی داده دارم، باید بعدش چی کار کنم؟ پاسخ ساده‌ست. الان زمانیه که ما وارد مرحله پیش‌پردازش داده میشیم.

گام چهارم: پیش‌پردازش داده

بعد از این که ما داده‌های مورد نیاز خودمون رو جمع کردیم، نیازمند اینیم که داده رو پیش‌پردازش کنیم. به طور کلی، پیش‌پردازش داده به پروسه‌ای گفته میشه که در اون قراره داده ها تمیز بشن، تغییر کنند (یا به قولی data augmentation رخ بده)، برچسب زده بشن و داده‌های غیرلازم (یا همون نویز) دور ریخته بشه.

اولین مرحله برای من اینجا، تکه تکه کردن عکس بود. شاید فکر کنید که برای تکه تکه کردن عکس، از ابزار خاصی استفاده کردم یا کدی زدم. باید بگم که خیر، ابزارم دقیقا ادوبی فتوشاپ و ابزار Slice بود. بعدش با قابلیت save for web آمدم و عکس‌های قطعه‌قطعه شده رو ذخیره کردم. پس از ذخیره نهایی عکس‌ها، نیاز بود که عکس‌ها برچسب زده بشن.

برچسب‌ها، در مرحله آموزش مدل، به ما کمک می‌کنند که اشیاء رو در تصاویر پیدا کنیم. این برچسب‌ها در مراحل بعدتر به کمک ما میان تا بتونیم مسائل یافت شده رو به ولفرام‌آلفا بدیم تا برامون حلش کنه. پس لازم بود که این اتفاقات بیفته.

پروسه برچسب‌زنی

گام پنجم: آموزش مدل YOLOv5

و اما گام یکی مونده به آخر دقیقا این بود که مدل آموزش داده بشه. آموزش این مدل با pytorch به شدت سرراست و راحته و کلش اجرا کردن یک دستور در ترمیناله. باز با این حال، مشکلات عدیده‌ای داشتم. برای مثال روی لپتاپ شخصی چون GPU مناسب نداشتم، آموزش به شدت طولانی می‌شد. آموزش رو به Google Colab منتقل کردم و چون پلن رایگان داشتم، اونجا هم یک سری داستان جدیدتر پیش آمد. اما بهرحال هرطور که شد، مدل آموزش داده شد و نتایج خوبی هم ازش گرفتم.

در مورد آموزش مدل و نحوه کار اون به زودی محتوای آموزشی جدیدی تولید خواهد شد که به تفصیل در اون توضیح میدم چطور می‌تونید YOLOv5 رو خودتون آموزش بدید و باهاش کار کنید. در حال حاضر، توضیح مراحل آموزش تا حد زیادی از حوصله این پست وبلاگ خارجه.

و گام نهایی: آزمایش مدل و نوشتن رابط ولفرام آلفا

پس از این که مدل آموزش داده شد، نیاز بود چندین خط کد پایتون نوشته شه برای چند منظور. اول این که وزن‌هایی که لازم بود از مدل آموزش‌داده‌شده، لود کنه. دوم این که یک عکس رو از ورودی بگیره و مراحل inference رو روش انجام بده و در نهایت، اگر کاربرخواست اون رو بفرسته به ولفرام آلفا و مرورگر رو براش باز کنه.

برای این مرحله، برخلاف باقی مراحل وقت زیادی نذاشتم ولی با این حال کدش (بدون وزن‌ها) در گیت‌هاب شخصی من موجوده و می‌تونید نگاهی بندازید. البته که به زودی گیت‌هاب بروزرسانی میشه و شما قادر خواهید بود که وزن‌ها رو هم دانلود کنید. اما فعلا وزن‌ها در دسترس نیستند.

در نهایت هم برای این که عملکرد قضیه رو ببینید، این ویدئو کوتاه رو می‌تونید تماشا کنید که هم inference رو تست می‌کنیم هم حل مساله با ولفرام رو:

جمع‌بندی و مشکلات این نرم‌افزار

این پروژه به عنوان یک پروژه تفریحی، واقعا تفریح خوب و سالمی بود و کلی یادگیری برای من داشت. یادگیری دقیق‌تر و عمیق‌تر YOLOv5، یادگیری دقیق‌تر و عمیق‌تر PyTorch و از همه مهم‌تر درگیر شدن با چند مساله و به قولی، دردهای دنیای واقعی. از نتیجه کاملا راضی بودم و هستم، اما فکر نکنم در آینده این پروژه خیلی برام راضی‌کننده باشه.

احتمالا بعد از مدتی به این پروژه برگردم و بزرگترین مشکلش – یعنی شباهت زیاد ورودی‌ها به هم – رو طور دیگری هندل کنم. برای این که ببینیم یه چیزی در پوزیشن توان یه چیز دیگه قرار گرفته یه چاره‌ای بیاندیشم و … . خلاصه که راه برای بهبودش زیاده و این بهبود‌ها رو شخصا پیگیر هستم که در این پروژه اعمال کنم. شاید هم لازم باشه داده ورودی رو افزایش داد یا حتی مدل مورد استفاده رو عوض کرد.

در نهایت، از شما بابت وقتی که برای خوندن این مطلب گذاشتید، ممنونم. امیدوارم که این مطلب مفید واقع شده باشه و به دردتون خورده باشه. ضمن این که اگر به این تیپ مسائل و مطالب علاقمند هستید، می‌تونید من رو در ویرگول هم دنبال کنید و اونجا هم مطالبم رو بخونید. اگرچه در ویرگول عمده مطالبم مرتبط با بیزنس، موفقیت و ایناست.

در نهایت از شما خواهش می‌کنم که اگر این مطلب براتون مفید بود، یک قهوه به انتخاب خودتون مهمانم کنید تا موقع نوشیدن قهوه به یادتون باشم و از این دست مطالب، بیشتر تولید کنم.

Share

داستان پروژه جبیر – استیو جابز نه، خود خودم (قسمت آخر)

در دو پست قبلی (+، +) در مورد پروژه جبیر با شما صحبت کردم و توضیح دادم که ایده‌ش از کجا اومد و چی شد و چه کردیم. قسمت دوم یکم پرش قلم من زیاد بود چون موضوعات زیادی رو شامل می‌شد اما خب نیاز بود که گفته بشه. حالا رسیدیم به قسمت آخر. در این قسمت، میخوام از این بگم که در جشنواره خوارزمی چه گذشت و چرا جشنواره خوارزمی شروعی بود بر پایان این پروژه.

بذارید قبل از هرچیزی، یک مرور کلی داشته باشیم بر دو قسمت قبلی. در قسمت اول، توضیح دادم که من شیفته اپل شده بودم و می‌خواستم مثل استیو جابز، یک شخصیت مهم در دنیای تکنولوژی باشم و همون قدر شناخته بشم و همونقدر هم ثروتمند (بالاخره آرزو بر نوجوانان عیب نیست، هست؟) و تصمیمم این شد که یک سیستم عامل بسازم و بعد از کلی تحقیق و توسعه؛ نتیجه این شد که یک سیستم عامل مبتنی بر گنو/لینوکس و توزیع اوبونتو بسازم. اسم این پروژه هم گذاشتیم جبیر.

در قسمت دوم، از فراز و نشیب‌های فنی این قضیه گفتم. از این گفتم که چی شد که اینطوری شد و چی شد که ساخته شد. بذارید ساده‌تر و مفصل‌تر بگم، اول گفتم که فاز تحقیقم چی بود و چه کردم و چه چیزایی خوندم. بعد گفتم که چرا تصمیم گرفتم بیام سراغ سیستم‌عامل‌های متن‌باز موجود مثل لینوکس یا BSD و در نهایت گفتم چرا لینوکس رو انتخاب کردم. بعدش از عادت Distro Hopping گفتم (این عادت یعنی که شما بیایید و توزیع‌های مختلفی تست کنید و همیشه روی یک توزیع ثابت نمونید) بعدش هم گفتم چی شد که مینت و اوبونتو رو به عنوان مبنا در نظر گرفتم و چطور نسخه‌های اولیه جبیر ساخته شد.

بعد از اون، از انتشار جبیر و اشتباهاتی که در ساخت این پروژه شد نوشتم. بعد از این موضوع، وارد بحث نسخه ۴ که نسخه جنجالی جبیر بود شدیم (نسخه‌ای که به اینترنت متصل نمی‌شد، به همراه نظر جادی و تبعاتش) و بعد از اون چه شد که به سراغ BSD رفتیم و همین موضوع هم مزید بر علت شد که جبیر روز به روز به پایان خودش، نزدیک‌تر بشه.

جشنواره خوارزمی

جشنواره خوارزمی، یک جشنواره‌ست که در سطوح مختلف (چه مقطع تحصیلی و چه تقسیمات جغرافیایی) برگزار می‌شه و یکی از اهدافش، اینه که به مخترعین و مبدعین و محققین جوان کمک کنه تا نتایج کارهاشون دیده بشه. مقام آوردن در این جشنواره، خودش یک سری امتیاز خاص به همراه داره که این امتیازات عبارتند از دانشگاه بدون کنکور رفتن (طبیعتا در رشته‌ای که پروژه/اختراع ارائه کنید) و معافیت سربازی و این‌ها. البته این‌ها مال اون زمان بود و الان نمی‌دونم چطور شده ولی فکر نمی‌کنم تغییری کرده باشه.

احتمالا اگر الان این رو خوندید و دبیرستانی هستید، براتون خیلی دغدغه شده که حتما در این جشنواره‌ها شرکت کنید، ولی خواهش می‌کنم که قبلش حتما مطلبی که اول این پست لینک شده رو یه نگاه بندازید. قدیمیه ولی ارزشش رو داره. خلاصه بگذریم؛ چیزی که اینجا مهمه اینه که شما بدونید اگر طرحتون به زعم داوران جشنواره واقعا خوب بیاد، امتیازاتی دریافت می‌کنید که می‌تونه شما رو به اهداف زندگیتون نزدیک کنه.

حقیقتا من از وقتی بچه‌تر بودم، بچه‌هایی که به این جشنواره راه پیدا می‌کردند رو از تلویزیون و روزنامه و … دنبال می‌کردم، دلم می‌خواست روزی مثل اون‌ها باشم. مادامی که در تهران در مقطع راهنمایی تحصیل می‌کردم خبری از این جشنواره برای دانش‌آموزان راهنمایی نبود (سالی که ما شرکت کردیم ولی بود) و همین امر، باعث شده بود که من با این تیپ جشنواره‌ها غریبه باشم. اما در دبیرستان اوضاع فرق کرد. ما این پروژه رو شروع کرده بودیم. بخصوص سال دوم دبیرستان که بودم، رضا باقرزاده عزیز هم به من پیوست و با هم پروژه جبیر رو پیش می‌بردیم.

یک روز، ما از مدیر مدرسه‌مون خواستیم که سالن اجتماعات مدرسه رو در اختیارمون بذاره و از بچه‌هایی که اون ساعت خاص، بیکارن دعوت کنه که بیان و پروژه ما رو ببینن. این هم خودش یکی از حرکات «استیو جابز»گونه بود 🙂 خلاصه این اتفاق افتاد و از قضا، مدیر مدرسه هم خودش اومد در اون جلسه دورهمی حضور پیدا کرد. این قضیه برای ما خیلی خوب بود چرا که حسابی در چشم مدیر مدرسه، درخشیده بودیم.

اما این تمام ماجرا نبود …

محمدرضا حقیری (چپ) و رضا باقرزاده (راست) - توسعه‌دهندگان پروژه جبیر

روز بعد اون کنفرانس، مدیر مدرسه از من و رضا درخواست کرد که جزییات پروژه رو براش بنویسیم. من هم یک صفحه A4 نوشتم تحویلش دادم. یک هفته بعد، ما رو از سر کلاس (که اگر اشتباه نکنم دینی بود) خواستند به دفتر. ما اول کمی ترسیده بودیم (بهرحال سیستم آموزشی ما ایجاب می‌کنه که از دفتر بترسیم 😂) و وقتی رفتیم، دیدیم یک آقای میانسالی هم اونجا هستند. مدیر مدرسه به ما گفت که ایشون از مسولین آموزش و پرورش استان هرمزگانن و پروژه ما در مرحله استانی خوارزمی پذیرفته شده.

ایشون گفت که روز بعدش، بریم پیشش. پرسیدیم بعد مدرسه؟ گفت نه، از مدیرتون اجازه بگیرید و دو زنگی رو ما در خدمتتون هستیم. ما هم از این بابت خوشحال شدیم. می‌دونید چرا؟ چون بالاخره دو زنگ پیچوندن هم خودش صفای خودش رو داشت. حالا از این حال و هوا بیاییم بیرون. ما فرداش رفتیم پیش ایشون. ایشون ما رو برد پیش مسولین خوارزمی و کلی تحویلمون گرفتند. این تحویل‌گیری‌ها البته دلیل داشت! دو سه سالی بود که از استان هرمزگان در رشته کامپیوتر هیچ پروژه‌ای معرفی نشده بود و این‌ها هم از این موضوع حسابی خوشحال بودند.

خلاصه که این دوستان، به ما گفتند یک A4 کافی نیست و در قالب یک پرپوزال باید در مورد پروژه بنویسیم. من و رضا هم گفتیم پس ما می‌ریم روی این کار می‌کنیم و می‌آییم پیش شما. اون خانمی که در آموزش پرورش به ما گفت که بعدا بریم پیشش، گفت که چهارشنبه ها عصر هم حضور داره در همون دفتر و نیازی نیست کلاس رو بخاطر قرار با ایشون بپیچونیم. خلاصه کلام که ما رفتیم و یک فایل ۲۰-۳۰ صفحه‌ای با عنوان «سیستم‌عامل جبیر» نوشتیم و این رو پرینت کردیم و در طلق و شیرازه قرار دادیم و چهارشنبه بردیم پیش ایشون.

بعد از کمی بررسی، غلط‌های این پرپوزال رو به ما گفت و ما اون رو اصلاح کردیم. بعدش به ما گفتند که تا تیرماه حدودا صبر کنیم (و این ماجرا حدودای فروردین اتفاق افتاد اگر درست یادم باشه). ما هم به درس و مشقمون رسیدیم و امتحان دادیم. اما خب اینجا یک سری اتفاق خاص هم افتاد.اتفاقاتی که به نوبه خودشون جذاب و جالب بودند.

جشنواره خوارزمی استانی

جشنواره استانی، برخلاف کشوری، اینطوری نیست که شما بری از پروژه دفاع کنی. بر اساس همون توضیحاتی که از پروژه‌ها ارائه شده، داوری می‌کنند و اونایی که حس میشه شانس خوبی برای مقام کشوری آوردن دارند انتخاب میشن. بعد از این، این مورد به صاحبان ایده و پروژه، ابلاغ میشه.

در همین حین، ما که سخت مشغول کار روی جبیر بودیم و حتی یادمه که دونفری با رضا می‌رفتیم پیش خدمات کامپیوتری‌ها که مجابشون کنیم که یکی دو تا سیستم بدن دست ما که روش جبیر نصب کنیم (شاید باورتون نشه ولی یکی از پلن‌های من، برای هر توزیعی که درش نقشی داشتم تولید کامپیوترهای رومیزی با همون سیستم‌عامل هم بوده) و معمولا اون‌ها هم یه چراغ سبز الکی نشون میدادن، یک باره به تلفن رضا زنگ زدند. رضا گفت «آقای …؟» و بعد گوشی رو روی اسپیکر گذاشت و به ما اعلام شد که در استانی، رتبه اول شدیم (لینک خبر).

در مورد تاریخ خبر باید به شما بگم که این اخبار، بعد از برگزاری جشنواره کار شدند. یعنی ما تیر ماه خبر داشتیم از این که در استانی پذیرفته شدیم ولی ظاهرا قوانینی که روی جشنواره حاکمه، ایجاب می‌کرد که تا زمان شروع جشنواره سال بعد خبری ازش کار نشه. خلاصه بگذریم. ما دو تا هم خوشحال و سرخوش گفتیم که فرداش می‌ریم آموزش پرورش.

در آموزش و پرورش، بیش از گذشته تحویلمون گرفتند! این بار به ما گفتند که نیازه تا فیلمی بگیریم که هردو توش باشیم (البته ما دو فیلم مجزا گرفتیم. چرا که رضا بیشتر روی جنبه UI و ظاهری قضیه کار می‌کرد و من روی بیس سیستم) و بعد یک پرپوزال دیگر بنویسیم که یک سری ملاحظات خاص رو درش رعایت کرده باشیم. این ملاحظات شامل نحوه فهرست‌بندی، استفاده از فونت و … بودند. خلاصه ما دوتا CD و یک کتابچه تحویل دادیم و بعدش مدت نسبتا طولانی، از هم دور شدیم.

جشنواره خوارزمی کشوری

مرداد ماه بود و من به همراه مادرم چند روزی (فکر کنم دو هفته!) آمدیم تهران. در همین روزها، یادمه که رضا به من زنگ زد. بهش گفتم چه خبر؟ چه کارا می‌کنی؟ و خیلی عادی حرف زد. برای من این موضوع خیلی جالب بود که چطور تونسته بود اونقدر خونسرد باشه و یهو من رو غافلگیر کنه :)) پای تلفن به من گفت که «فلانی زنگ زد و گفت که اوایل شهریور باید تهران باشیم که از پروژه دفاع کنیم.

خلاصه بعد برگشت من به بندر، قرار شد با رضا بریم و در مورد این پروسه بپرسیم. به ما گفتند که داورا اینطورین و باید چه کنید و … (که با تقریب خوبی البته درست نبود) و به ما پولی دادند که بلیت هواپیما تهیه کنیم و با هواپیما بریم تهران. همچنین بودجه‌ای به ما دادند که لباس‌های متحدالشکل تهیه کنیم و ما هم دوتا پیراهن گرفتیم که لعنت خدا هم گرونش بود، ولی سال ۹۱ بابت هر پیراهن ۶۰ هزار تومان پول دادیم 😂.

خلاصه ۵ شهریور ۹۱ شد. ما رفتیم فرودگاه بندرعباس و سوار یک عدد ایرباس A300 هواپیمایی ماهان شدیم و به سمت فرودگاه مهرآباد تهران پرواز کردیم. در تهران هم مسول آموزش و پرورش هرمزگان (همون آقای میانسالی که کارهای ما رو انجام داده بود) آمد و ما رو به خوابگاه دانشجویی دانشگاه تربیت دبیری شهید رجایی برد. حقیقتا تا حد خوبی حالمون گرفته شد، چرا که به ما گفته شده بود برای ما هتل رزرو شده و از این دست چرت و پرتا. ولی خب ایرادی نداشت، فرداش روز بزرگی بود.

فرداش رفتیم. ظهر شد و دعوت شدیم که بریم داخل اتاق. داخل اتاق، سه‌تا آقا نشسته بودند که علی‌الظاهر، اساتید کامپیوتر همون دانشگاه بودند (اینجا این رو بگم که بعدا روش بحث صورت بگیره، اگر جشنواره خوارزمی یک جشنواره کشوریه، آیا بهتر نیست که فراخوانی زده شه و از اساتید و صاحب‌نظران کل کشور خواسته شه که داوطلب بشن؟ چرا فقط یک دانشگاه خاص؟) و یک سری سوال پرسیدند. ما وقتی داشتیم صحبت می‌کردیم و …؛ من اشاره کردم که جبیر مبتنی بر گنو/لینوکس ساخته شده. یادمه یکی اونجا خندید و گفت «پس مثل همون لینوکس فارسیه‌ست…».

حالا شما خودتون حساب کنید که این که این دوستان زده بودند تو کانال مسخره‌بازی، چقدر به ما فشار آورد. خلاصه ما ارائه و دفاعمون رو تحویل دادیم و آمدیم بیرون. ناهاری بر بدن زدیم و کمی تهران‌گردی کردیم و بعدش هم رفتیم سمت فرودگاه. دقیقا یادمه بعد از این که مسول آموزش پرورش ما رو ترک کرد، ما کاری نداشتیم که انجام بدیم پس با رضا نشستیم به خوندن آموزش Bash و اسکریپت‌نویسی 😁

خلاصه به سمت بندرعباس برگشتیم و بعد از اعلام نتایج، فهمیدیم که رتبه قابل قبولی در این جشنواره کسب نکردیم. این خودش یک شکست بسیار بسیار بزرگ برای ما محسوب می‌شد. گرچه کادر مدرسه تاکید داشتند سال بعدش هم شرکت کنیم ولی حقیقتا ما سال بعد تصمیم داشتیم دیگه شرکت نکنیم و همین هم شد. این دقیقا اینجا به این معنا بود که پروژه هم داره تا حد خوبی به آخرای خودش نزدیک میشه.

رفتن روی BSD، بزرگترین اشتباه

هنوز که هنوزه، من سیستم‌عامل FreeBSD رو به شدت دوست دارم و محاله وقتی نسخه جدید میده، نصبش نکنم و باهاش کمی بازی نکنم. اما حقیقت امر این بود که BSD ها – به جز مک – واقعا برای استفاده دسکتاپ و روزمره مناسب نیستند. حتی روی سرور و روتر و … (که BSDها حرف‌های به شدت زیادی برای گفتن دارند) هم معمولا انتخاب خوب و اول نمی‌تونن باشند.

یکی از مهم‌ترین دلایل، اینه که BSDها معمولا ساپورت سخت‌افزاریشون اونقدری که باید و شاید، خوب نیست. دلیل دیگری که به ذهنم می‌رسه اینه که استفاده از BSDها به شدت محدوده و بین هزاران شرکت و استارتاپی که مبتنی بر لینوکس هستند، شاید فقط Netflix, WhatsApp و Sony باشند که از FreeBSD (یا نسخه‌های دیگر BSDها) استفاده کنند. همین امر، باعث شده که BSDها مستندات کمتر و جوامع کوچکتری داشته باشند.

و البته اشتباه دیگری که داشتم این بود که فکر می‌کردم اگر برم روی BSD و یه بخش خوبی از رابط کاربری هم خودم بسازم (که تاحدی این کار رو کرده بودم) و مجوز اون هم BSD قرار بدم، شاید بتونم کد رو ببندم. اما هیچ کس نبود بهم این نکته رو گوشزد کنه که بستن کد برای پروژه‌ای که تیم کوچکی داره و ساپورت مالی نمیشه و سرمایه‌گذار خاصی هم نداره، سم مطلقه.

خلاصه با پیاده‌سازی نه چندان بد، تفکرات اشتباه و صد البته واکنش‌های عجیب و غریب جوامع نرم‌افزار آزاد و متن‌باز ایران، این پروژه باز بیش‌تر و بیش‌تر روی سراشیب سقوط قرار گرفت. اما حقیقت امر اینه که یکی از بزرگترین تیرهای خلاص این قضیه رو، همین جامعه نرم‌افزار آزاد به این پروژه وارد کرد.

واکنش‌های جامعه نرم‌افزار آزاد ایران و پیامدهایش

من اصلا دوست ندارم در نقش قربانی فرو برم و شکست‌ها و عدم موفقیتم رو گردن کسی بندازم. حقیقتا از این رفتار به شدت بدم میاد و اگر ببینم کسی چنین رفتاری داره خیلی سریع، از دایره دوستی و حتی آشنایی من ممکنه حذف بشه. پس امیدوارم این بند خاص از مطلب من، این حس رو القاء نکنه که در نقش قربانی فرو رفتم.

بگذریم، جامعه نرم‌افزار آزاد ایران، که در حال حاضر عمدتا حول اوبونتو و در فروم اوبونتو متمرکز شده تقریبا (و این تمرکز هم خودش سم مهلکیه) رفتارهای عجیب و جالبی دارند. این جامعه عموما اینطوری بود که خیلی سخت افرادی که بیرون گود بودند رو می‌پذیرفت و خیلی وقت‌ها هم نمی‌تونستند یک سری موضوعات خاص رو بپذیرند. به همین دلیل، رفتارها بیشتر شبیه گنگسترها و یاکوزاها می‌شد. حقیقتا در مقابل پروژه جبیر هم تا حد زیادی به این شکل برخورد نشان دادند.

برخوردهایی از این دست که «چرا به فلان پروژه کمک نمی‌کنی؟» اصلا از نظرم بد نیست. خیلی هم خوبه و خیلی راحت می‌تونه شما رو مجاب کنه که نیاز نیست چرخ رو از اول اختراع کنید. اما خب، گاهی برخوردها سمت ترولینگ و قلدری سایبری پیش می‌رفت. مثلا شخصی میومد می‌گفت «بیا کرنل رو بکن داروین» و بعد چند نفر ادامه می‌دادند. نکته جالب هم این که از سادگی من هم به عنوان یک نوجوان، تا حد خوبی بهره‌کشی شده بود اینجا. من الان دانشی دارم که بهم می‌گه که تعویض کرنل بسیار سخته، و در بعضی موارد کاملا ناممکن. اما اون موقع من چنین آگاهی‌ای نداشتم.

خلاصه بگم که کم کم به جایی رسید که من دیگه می‌فهمیدم کجاها ملت دارند دستم میندازن. حقیقتا خوشم اومده بود که خودم همراه شم با این قضیه و تا می‌تونم چرت و پرت ببافم. اما خب حقیقتا این به ضرر من شد چرا بعدتر، برچسب ترول به من چسبید و از جامعه کاملا پاک شد. جامعه‌ای که تقریبا همیشه نشون داده با افراد جدید – صرفنظر از این که آدم‌های خوبین یا بد – چنین برخوردی رو داشته و خب این برخوردها، نتایج خوبی هم نداشته. برای مثال، خود من از سال ۹۳ تا ۹۶ واقعا در این جامعه هیچ حضور فعالی نداشتم و ۹۶ دوباره برگشتم بهش. سال ۹۹ هم موارد مشابهی پیش آمد و دلخوری‌هایی ساخته شد.

خلاصه بگذریم از این موضوع، می‌خواستم صرفا این موضوع رو شفاف کنم که جامعه، از دور ممکنه قشنگ به نظر برسه اما خب درونش نیازمند سازگاری بالا و همرنگ جماعت شدنه. حقیقتا من هم شخصی نیستم که بخوام همرنگ جماعت باشم، به همین خاطر ممکنه در جوامع مختلف، متضرر بشم 😁

سخن آخر

اول از همه از شما ممنونم که این مطلب رو خوندید و تا اینجا اومدید. دوم، میخوام ازتون دعوت کنم که علاوه بر این وبلاگ، ویرگول هم می‌تونید مطالب من رو بخونید ولی در ویرگول معمولا انقدر حرافی نمی‌کنم 🙂 و در نهایت، میخوام یک جمع‌بندی کلی روی این سه قسمت بکنم و بگم که به پایان آمد این دفتر، حکایت همچنان باقیست.

حقیقتا بعد از شکست پروژه جبیر، من یک درس بزرگ گرفتم. درسی که بهم گفت «نیاز نیست استیو جابز دوم باشی، تو خود خودت باش» و این درس به نظرم بزرگترین نکته شخصیتی بود که می‌تونستم از انجام چنین پروژه‌ای دریافت کنم. درس و نکته بعدی هم این بود که حرف‌های اطرافیان می‌تونه به شدت روی روان آدم تاثیر بذاره و نباید گذاشت این حرف‌ها، از ما یک موجود کینه‌ای بسازه که بعدتر نیازمند انتقا‌م‌گیری و پرونده‌سازی و فلان باشه. درس‌های شخصیتی و روانی این پروژه، واقعا برای من مهم و ارزنده بودند.

از نظر فنی هم، درس‌های خوبی گرفتم. برای مثال اندازه افرادی که LPIC 1, 2 می‌گذرونند از لینوکس یاد گرفتم. تا حد خوبی پایتون یاد گرفتم. حتی همین امر باعث شد که بعدتر، روبی یاد بگیرم و … . همچنین یاد گرفتم که نیاز نیست برای متفاوت بودن حتما به سمت BSD رفت بلکه یک رابط کاربری متفاوت هم می‌تونه به خودی خود، تا حد خوبی تاثیر مثبت روی ذهن افراد داشته باشه.

از منظر بیزنسی هم بخواهیم نگاه کنیم یک درس خیلی خوب گرفتم. اون این که «وقتی تیم کوچیکه یا پروژه تک‌نفره جلو میره نیازی نیست که کد، بسته باشه. اتفاقا باز بودن کد به نفع توئه». و همین باعث شد از اون به بعد عمده پروژه‌های من روی گیتهابم قرار بگیرند.

خلاصه که یک پروژه شکست‌خورده، می‌تونه پر از درس برای ما باشه. مهم اینه که ما بخواهیم همیشه در سوگ بمونیم؟ یا این که به قدری سوگواری کنیم و بعد از اون سوگواری به سمت انجام یک پروژه جدیدتر قدم برداریم. نمی‌دونم فیلم Whiplash رو دیدید یا نه، اما در صحنه‌ای یکی از شخصیت‌ها میگه «چارلی پارکر وقتی با اون صحنه مواجه شد، اول سوگواری کرد. بعد یک روز کامل استراحت کرد و بعدش اونقدر تمرین کرد که ما امروز ازش حرف بزنیم». پس باید گفت که این ماییم که انتخاب می‌کنیم چارلی پارکر باشیم، یا اون نوازنده‌ای که با یک شکست، کلا ساز و نوازندگی رو میذاره کنار.

در پایان، مجددا از شما بابت وقتی که برای خوندن این مطلب گذاشتید تشکر می‌کنم. همچنین امیدوارم که این تجربه شکست طولانی، تونسته باشه برای شما جرقه‌ یا کمکی باشه در هندل کردن پروژه‌هاتون یا حداقل بهتون کمک کرده باشه که چطور با پروژه‌های شکست خورده کنار بیایید. امیدوارم که در آینده نزدیک، بتونم با مطالب بیشتری در خدمت شما باشم.

Share