هوش مصنوعی:‌ با هم یاد بگیریم (۲)

  • یوسف مهرداد بی‌بالان

بخش گذشته (لینک)

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

در مبحث حرکت در درس فیزیک،‌ نقطه‌ای را به عنوان مبدا در نظر می‌گرفتیم. موقعیت متحرک را هم روی محور افقی (محور ایکس) نشان می‌دادیم. مثلن اگر متحرک در سمت راست مبدا مختصات و به فاصله ۵ متری آن بود آن را به صورت بردار مثبت ۵ (+۵) نشان می‌دادیم. اگر متحرک به اندازه ۷ متر به سمت چپ حرکت می‌کرد، میزان جابه‌جایی آن را به صورت بردار منفی ۷ (-۷) نشان می‌دادیم. برای پیدا کردن مقصد متحرک کافی است که دو بردار +۵ و -۷ یعنی مبدای حرکت و میزان جا به جایی متحرک را با هم جمع کنیم تا به مقصد یعنی منفی ۲ (-۲) برسیم. در اینجا اگر سه متحرک الف،‌ ب، پ داشته باشیم که بردار مکان آنها +۴ و +۱۳ و +۱۵ باشد می‌توانیم نتیجه بگیریم که دو متحرک ب و پ که فاصله‌ی بردار آنها ۲ است به هم نزدیک‌ترند تا دو متحرک الف و ب که فاصله‌ی دو بردار آنها ۱۱ است.

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

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

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

برادر – مرد + زن = ؟

احتمالن درست حدس زدید! نتیجه‌ی این عملیات ریاضی که بردار +۱۲ خواهد بود باید محل قرار گرفتن کلمه‌ی «خواهر» در دستگاه مختصات باشد.
حالا به این پرسش پاسخ دهید:
گیلان – رشت + کردستان = ؟
بله! پاسخ باید برابر با سنندج باشد اگر مکانیزم بردارسازی ما به اندازه کافی دقیق و درست باشد.

با این مقدمه نگاهی بندازیم به ویدیوهای زیر که تلاش دارد نشان دهد چگونه می‌توان کلمات را در نقاط مختلف یک فضا جاسازی کرد.
ویدیوی یک: از ابتدا تا دقیقه ۶
لینک
A Complete Overview of Word Embeddings by AssemblyAI

ویدیوی دو: از دقیقه ۶:۳۰ تا دقیقه ۱۰:۳۰
لینک
What Are Word Embeddings? by Under The Hood

هوش مصنوعی:‌ با هم یاد بگیریم (۱)

  • یوسف مهرداد بی‌بالان

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

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



درس ۱: پرامپت‌نویسی
منبع:‌ Master the Perfect ChatGPT Prompt Formula
آدرس: لینک

گزیده:
قبلن استک‌اورفلو (stackoverflow) همیشه جلوی من باز بود و ازش برای برنامه‌نویسی استفاده می‌کردم. الان به جاش چت GenAI جلوم بازه ولی اصلن احساس نمی‌کنم یک برنامه‌نویس‌ام. احساس می‌کنم شدم یک مدیر میانی‌ که باید مودبانه و با خواهش از کارآموز نابغه و غیرقابل پیش‌بینی‌ام بخوام که «لطفن رنگ اون دکمه (button) توی فرم رو آبی‌ش کن» 😄
به نقل از خود GenAI 😄

کتاب «چگونه تصمیم بگیریم»

  • یوسف مهرداد بی‌بالان

همان طور که قبلن نوشتم، در یک گروه کوچک و دوستانه کتاب‌هایی را به شیوه‌ی «آهسته و پیوسته» می‌خوانیم و با هم در مورد آنها گفتگو می‌کنیم. این بار نوبت به کتاب «چگونه تصمیم بگیریم: ابزارهای ساده برای انتخاب‌های بهتر» (How to Decide: Simple Tools for Making Better Choices) اثر آنی دوک (Annie Duke) رسید.

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

گزیده:
کیفیت نتایج یک تصمیم مانعی است در برابر توانایی درک ما از کیفیت آن تصمیم‌. آنی دوک

The quality of the outcome casts a shadow over our ability to see the quality of the decision.


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

بختک!

  • یوسف مهرداد بی‌بالان

تو شبِ سیا
تو شبِ تاریک
از چپ و از راست
از دور و نزدیک
یه نفر داره
جار می‌زنه، جار:
آهای غمی كه
مثلِ یه بختک
رو سینه‌ی من
شده‌ای آوار
از گلوی من
دستاتو، وردار


شعر خاله یادگار از حسین منزوی
صدای شاعر (لینک)


سال نو

  • یوسف مهرداد بی‌بالان

چو فردا روز نوروز است و نوروز جهان آید
رود این سال فرتوت و یکی سال جوان آید

از این خوابم چنین یابم که سالی خوش روان آید
که آن نامهربان یارم، به خوابم مهربان آید
«میرزاده عشقی»

نوروزتان فرخنده.
بهترین‌ها را برای‌تان آرزومندم.

برنامه‌نویسی دلی! – بخش دو

  • یوسف مهرداد بی‌بالان

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

فارستر: پس بیا به اون [یکی از استادهای دانشگاه و عضو کمیته ارزشیابی] نشون بدیم که تو چه کاری می‌تونی انجام بدی.
جمال: چرا چیزهایی که برای خودمون می‌نویسیم … همیشه خیلی بهتر از چیزهایی‌اند که برای دیگران می‌نویسیم؟
فارستر: زود باش.
– بشین.
– شروع کن.
جمال: چی رو شروع کنم؟
فارستر: نوشتن رو

در این لحظه، فارستر شروع به تایپ می‌کنه.
جمال: داری چه کار می‌کنی؟
فارستر: دارم می‌نویسم، همون کاری که تو قراره بکنی… وقتی که شروع کنی به فشردن اون کلیدها [ی ماشین تحریر].

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

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

برنامه‌نویسی دلی! – بخش یک

  • یوسف مهرداد بی‌بالان

پیش‌گفتار یک: نگاه ریاضی‌گونه و نگاه مهندسی‌گونه به برنامه‌نویسی

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

برای نمونه در نگاه ریاضی‌گونه به برنامه‌نویسی شما ابتدا باید ساختار داده‌ها (data structure) را تعیین کنید و بعد با نگاه رویه‌گونه و الگوریتمی به کمک تابع یا رویه (procedure or function) راه‌حل‌تان را به گام‌هایی بشکنید و همین گام‌ها را تکرار کنید. روی کاغذ، در کامپیوتر یا در ذهن‌تان،‌ ابتدا باید این اجزا فکر کنید و بعد کدنویسی رو شروع کنید. البته می‌توانید کمی فکر کنید و بعد کد بنویسید و بعد باز هم فکر کنید و کد بنویسید و …

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

از این منظر،‌ نگرش روش‌های تکراری-تدریجی (iterative-incremental) نیز همین گونه است فقط «به همه چیز فکر کن بعد کد بنویس» به «یک کم فکر کن یک کم کد بنویس بعد دوباره فکر کن …». تلاش بر این است که اندازه و مدت آماده کردن طراحی و سپس پیاده‌سازی آن کاهش پیدا کند.

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

برداشت من این است که اگر از این منظر به روش‌های توسعه‌ی نرم‌افزار نگاه کنیم همه‌ی آنها بر این بنیان استوارند که «اول فکر کن بعد کد بنویس»!

در یکی دو نوشته‌ی بعدی در نظر دارم کمی در این باره بنویسم و ایده‌ای را با شما مطرح کنم.

گزیده:

برنامه‌نویس کیه؟
برنامه‌نویس، ماشینی یه که قهوه [ یا چایی] رو به کد تبدیل می‌کنه!

برای خروج از جستجو کلید ESC را بفشارید