دورهمی ۴۳ کرمهای کامپیوتر که ۷ دی ۱۴۰۳ با ارائهی شهراد حکمتیفرید در مورد یادگیری تقویتی (Reinforced Learning) برگزار شد. دوست تازه واردمون (که چند روز از ورودش به جمعمون نمیگذشت!) درمورد روش Q learning که یکی از روش های یادگیری تقویتی هست ارائه داد. توی این ارائه سناریوی ماهنشین رو به نمایش گذاشت.
یادگیری تقویتی (Reinforced Learning) چیه؟
یهروش یادگیری ماشین که برنامه از طریق آزمونوخطا و همچنین دریافت تشویق و اخطار، وظایف مختلفی رو یاد میگیره. این تکنیک مثل بسیاری از تکنیکهای دیگه، از دنیای واقعی الهام گرفته شده. درست مثل اهلیکردن یک حیوان، بابت تصمیمات مناسب، تشویق و برای تصمیمات نادرست، تنبیه درنظر گرفته میشه.
آنچه که گذشت
درآغاز این دورهمی، شهرداد عزیز کد نوشتهشده در یک فایل Jupyter Notebook (در انتهای این پست ضمیمه شده) رو توضیح داد و بعد بهچهگونگی تنظیم پارامترهای مختلف الگوریتم پرداخت. مسئله موردبررسی، ماهنشین بود که باید روی سطحی مناسب و مسطح فرود میاومد. این مسئله رو میتونید توی farama.org (http://farama.org/) پیدا کنید.
رای توضیح باید گفت که مدل، پیش از یادگیری، مهارت درستی نداشت و بههمیندلیل، سقوط میکرد. پساز انجام حدود ۳۰۰ اپیزود (منظور از اپیزود، دفعات شبیهسازی برای یادگیری هست)، شرط لازم برای اتمام شبیهسازی برقرار شد و مدل درنهایت بانتیجهای راضیکننده، مسئله رو حل کرد.
سلام! جعفر هستم و این اولین نوشتهام توی وبلاگ کرم های کامپیوتره 🙂
حالا قراره درباره چی حرف بزنم؟ یک چند وقتی درگیر این بودم که لیبرهترنسلیت که یک مترجم آزاده(این) رو برای زبان فارسی بهبود بدم. یعنی کاری کنم که ترجمه بهتری برای زبان فارسی داشته باشه.
قبلش بگم که لیبره ترنسلیت چیه؟
لیبره ترنسلیت یک نرمافزار ترجمه ماشینی آزاده که بر پایه کتابخانههای آرگوز ترنسلیت(argos-translate) توسعه داده شده که با یک رابط تحت وب به صورت سرویس ترجمه ماشینی نامتمرکز در دسترسه. مثلا نمونهای که توسط توسعهدهندگانش مدیریت میشه اینه:
درباره نحوه کارکرد و زبانهایی که پشتیبانی میکنه میتونید توی صفحه گیتهابشون بخونید.
حالا من میخواستم چیکار کنم؟
با توجه به اینکه لیبره ترنسلیت یک مدل هوشمصنوعی ترجمه ماشینی(البته نه دقیقا یک مدل) هستش ساختار کلیاش اینه که با یک حجم بالایی داده ترجمه به دو زبان(مبدا مثلا فارسی و مقصد مثلا انگلیسی که دوتا مدل آموزش میبینه یکی مبدا به مقصد و یکی برعکسش) نیاز داره، که اینجا هدفمون فارسی بود. اولین کار این بود که ببینیم مشکل این کیفیت پایین ترجمه چیه. رفتم یک دوری زدم و به داده هایی که مدل فارسی باهاش آموزش دیده رسیدم. حدود پنج میلیون خط ترجمه که کیفیت جالبی هم نداشت.
راهکار این بود که داده های بهتری جمع کنیم و مدل جدید آموزش بدیم. این کار رو کردیم و دوستانی هم کمک بسیاری کردند در این مسیر و حدود ۲ میلیون خط ترجمه جمع شد(عموما سر هم کردن دیتاست های آزاد دیگه). یک دوست عزیز دیگهای لطف کردند سخت افزارشون رو برای آموزش مدل در اختیار من گذاشتن(برای آموزش اینجور مدلها به سخت افزار قوی از جمله GPU قوی نیازه که من ندارم :) و مدل رو با حدود پنج ساعت پردازش آموزش دادیم، اما خروجی از مدل لیبره ترنسلیت هم بدتر بود!
با عیبیابی به این نتیجه رسیدیم که هم کیفیت این دادهها کافی نیست و هم حجمشون. مشکل دیگه این بود که بخش قابل توجهی از دادهها ترجمه واژهنامهوار (و نه جمله در برابر جمله) بود که کار رو خراب میکرد.
یک مدتی گذشت در همین موضوع من یک برنامه ای چیدم برای حلش و یک ارائهای در دورهمیهای کرمهای کامپیوتر دادم. با این موضوع که که چه کنیم که مشکل رو حل کنیم. دوستان لطف کردن کمک کردن و همچنین حمایت بیشتر :))
خواستیم شروع کنیم من یک مقدار اسکریپت برای خودکار کردن استخراج داده، از اینترنت و تبدیلشون به ترجمه با گوگل ترنسلیت، نوشتم و یکم داده جمع شد، بعد از چند روز که داشتم توی اینترنت چرخ میزدم به این لینک رسیدم:
https://opus.nlpl.eu/NLLB/en&fa/v1/NLLB
همینجا بود که فهمیدیم این همه کار به قولی الکی بوده :/ یعنی چی؟ یعنی ما برنامه داشتیم با کلی پردازش و بازبینی انسانی ۵ میلیون خط ترجمه خوب جمع کنیم اما اینجا حجم بسیار بزرگی یعنی ۲۵ میلیون خط ترجمه انگلیسی به فارسی به حجم ۴۷ گیگابایت خوابیده بود!
حالا چرا پیگیر آموزش مدل نشدم؟
اول اینکه من سخت افزار لازم رو برای آموزش نداشتم، و اینکه اگه کسی مثل دفعه قبل زحمت آموزش رو میکشید مثلا با اون سختافزار قبل (یعنی گرافیک با ۱۲ گیگابایت حافظه ویدئویی) و اگه زمان آموزش رو خطی فرض کنیم ۶۲.۵ ساعت نیاز بود که گرافیک جون بکنه که با این حجم داده مدل رو آموزش بده! و این از توان من خارجه.
و باید چیکار کرد؟
این کار متاسفانه خارج از توان منه. اما اگر کسی بخواد این کار رو انجام بده نیاز داره به کارت گرافیک قوی و زمان برای آموزش یا اگه اینها رو نداره میشه دو سه روزی یک سرور GPU دار اجاره کنه و این کار رو انجام بده، البته کمک دیگهای برای این کار نیاز باشه من میتونم همین چند خط تجربهای که سر این موضوع کسب کردم در اختیارش بذارم 🙂
حدود ۴ سال پیش با پروژهٔ آواهای مشترک موزیلا آشنا شدم. آن زمان مجموعه دادهٔ (Dataset) فارسی پروژه تنها حدود ۲ گیگابایت بود. الآن زبان فارسی تقریبا ۱۰ گیگابایت مجموعه داده دارد. در این مطلب راجع به پروژه و اهمیت آن برای پروژههای یادگیری ماشینی و هوش مصنوعی توضیح میدهم. البته موضوع دورهمی نهم کرمهای کامپیوتر هم در همین مورد بود.