ابزار و کتابخانه ها
موضوعات داغ

یادگیری عمیق بدون درد و خونریزی با لودویگ

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

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

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

بنابراین اگر به دنبال :

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

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

مزایای لودویگ در مقایسه با سایر ابزارهای یادگیری عمیق

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

نحوه کار لودویگ

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

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

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

شروع کار با لودویگ

برای کار با لودویگ تنها به دو مورد زیر نیاز دارید :

  • داده‌ها به صورت جدولی (Tabular) – مشابه با یک فایل اکسل (یا CSV‌ که داده‌ها با ویرگول از هم جدا شده باشند)
  • یک فایل پیکربندی در قالب YAML

برای نصب لودویگ هم کافی‌ است مشابه با سایر کتابخانه‌های پایتون دستور pip install ludwig را اجرا کنید. البته پیش‌نیازهای آن و چند کتابخانه‌ای که باید حتماً در سیستم شما نصب شده باشند در این آدرس به تفصیل ذکر شده است.

بررسی یک مثال عملی

فرض کنید مجموعه داده‌های تعداد زیادی کتاب را به صورت زیر داریم :

title author description cover genre price
Do Androids Dream of Electric Sheep?Philip K. DickBy 2021, the World War has killed millions, driving entire species into extinction and sending mankind off-planet. …path-to-image/do-android-cover.jpgsci-fi9.32
War and PeaceLeo TolstoyWar and Peace broadly focuses on Napoleon’s invasion of Russia in 1812 and follows three of the most well-known characters in literature…path-to-image/war-and-peace-cover.jpghistorical5.42
The Name of the RoseUmberto EcoIn 1327, Brother William of Baskerville is sent to investigate a wealthy Italian abbey whose monks are suspected of heresy. ..path-to-image/name-of-the-rose-cover.jpghistorical16.99

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

Plain Text

برای ساخت مدل هم کافیست دستور زیر را در خط فرمان وارد کنیم :

Shell

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

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

Shell

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

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

Shell

تولید API‌ برای استفاده واقعی از داده‌ها

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

Python

تنظیمات پیشرفته

برای سفارشی کردن فرآيند تولید مدل، گزینه‌های زیادی پیش روی کاربران حرفه‌ای وجود دارد. مثلاً اگر خواسته باشیم برای کدکردن متون به جای استفاده از CNN که پیش‌فرض لودویگ است از RNN های دوطرفه LSTM‌ استفاده کنیم، بخش عنوان در کد پیکربندی فوق را باید به صورت زیر اصلاح کنیم :

Plain Text

پارامترهای فاز آموزش را هم می‌توانیم به دلخواه تغییر بدهیم مشابه زیر :

Plain Text

سایر مثالهای کاربردی

سایت رسمی لودویگ مثال‌های عملی بسیار زیادی دارد می توانید از آنها در پروژه‌های عملی خود استفاده کنید. مثلاً برای شناسایی موجودیت‌های نامدار اگر داده‌های ورودی ما به شکل زیر باشد :

utterancetag
John Smith was born in New York on July 21st 1982Person Person O O O City City O Date Date Date
Jane Smith was born in Boston on May 1st 1973Person Person O O O City City O Date Date Date
My friend Carlos was born in San JoseO O Person O O O City City

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

Plain Text

دست در دست هم دهیم به مهر / فارسی خویش را کنیم آباد

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

نتیجه‌گیری

لودویگ هنوز در ابتدای راه است اما همانطور که دیدید، سهولت بسیار زیاد آن، نویدبخش آینده بسیار خوبی برای آن است. بخصوص اینکه انکودرهای زیادی در حال افزوده شدن به آن هستند مانند Transformer, ELMo, and BERT برای متن و DenseNet and FractalNet برای تصاویر .

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

امتیاز کاربران: ۴٫۶ ( ۱ رای)

مجتبی بنائی

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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

دکمه بازگشت به بالا