یادگیری عمیق در حوزه یادگیری ماشین و تولید برنامههای هوشمند به یک استاندارد نانوشته تبدیل شده است و در بسیاری از مسائلی که قصد داریم کامپیوتر رفتاری شبیه انسان در تشخیص اشیاء در تصاویر، دسته بندی مطالب، ترجمه متون، برچسبزنی اخبار، سنجش احساسات، توصیف خودکار یک عکس و مانند آن انجام دهد، به سراغ یادگیری عمیق میرویم. هر چند یادگیری عمیق برای ساخت یک مدل دقیق از دنیای واقعی، نیاز به دادههای آموزشی فراوانی دارد تا خروجی دقیق و مناسبی تولید کند اما اگر حجم داده مناسبی برای اینکار داشته باشیم، میتوانیم روی خروجی بسیار دقیق این مدل در بسیاری از کاربردها، حساب کنیم.
چندی پیش شرکت عظیم اوبر که قبلاً هم در مورد معماری آن در سایت مهندسی داده، مطلبی را منتشر کرده بودیم، از کتابخانه لودویگ رونمایی کرد که به کمک آن و بدون نیاز به حتی یک خط کدنویسی، میتوانید مدلهای پیشبینی کننده مختلفی را تولید کرده و از آنها در برنامههای واقعی استفاده کنید. گامی که استفاده از 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. Dick | By 2021, the World War has killed millions, driving entire species into extinction and sending mankind off-planet. … | path-to-image/do-android-cover.jpg | sci-fi | 9.32 |
War and Peace | Leo Tolstoy | War 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.jpg | historical | 5.42 |
The Name of the Rose | Umberto Eco | In 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.jpg | historical | 16.99 |
… | … | … | … | … | … |
و میخواهیم بر اساس دادههای نام نویسنده، عنوان، توصیف و عکس جلد کتاب، قیمت و ژانر آن را پیشبینی کنیم. فایلی با نام model_definition.yaml
در همان پوشه حاوی دادهها ایجاد میکنیم و تنظیمات زیر را در آن وارد میکنیم :
برای ساخت مدل هم کافیست دستور زیر را در خط فرمان وارد کنیم :
همانطور که میبینید برای ساخت یک مدل یادگیری عمیق تنها دو پارامتر آدرس فایل داده و آدرس فایل پیکربندی را وارد کردهایم. با این دستور، لودویگ دادهها را به مجموعه آموزش، ارزیابی و آزمون تقسیم میکند، چهار کدکننده برای دادههای ورودی، یک ترکیب کننده ورودیها و دو تا هم کدگشا به تعداد خروجیهای ذکر شده در فایل پیکربندی، تولید میکند. بعد از این مرحله مقدماتی، شروع به ساخت مدل بر اساس دادهها (ی مجموعه آموزش) میکند و تا رسیدن به زمانی که دقت مدل دیگر افزایش نیابد و یا به تعداد ذکر شده epoches
برسیم، متوقف نمیشود. منظور از epoch
هم یک دور پردازش کامل دادهها در شبکه عصبی (توصیف غیر رسمی البته) است.
میتوانید به کمک TensorBoard
هم پیشرفت مرحله به مرحله کار را مشاهده کنید. بعد از اتمام مرحله ساخت مدل، برای پیشبینی دادههای جدید و استفاده از آن هم کافی است دستور زیر را اجرا کنید :
همانطور که میبینید برای استفاده از مدل کافی است دادههای جدید و آدرس مدل را به لودویگ بدهیم تا خروجی مورد نظر ما را تولید کند.
برای نمایش خروجی مدل هم می توانیم از دستور زیر کمک بگیریم :
تولید API برای استفاده واقعی از دادهها
همانطور که دیدید، ساخت مدل در لودویگ یک امر بسیار ساده و سهل الوصول است اما در کاربردهای واقعی نیاز داریم که بتوانیم از مدل ایجاد شده برای پاسخ دهی سریع به نیازهای مشتری و بازار استفاده کنیم مثلاً پیشبینی کنیم که کاربر چه محصولی را در کنار محصول فعلی خریداری خواهد کرد و همان را به سرعت به اون نمایش دهیم با تخفیف ویژه. برای اینکار می توانیم به راحتی از پایتون استفاده کنیم و مدل ساخته شده به را به صورت زیر به کار بگیریم. البته فرآیند ساخت مدل را هم میتوانیم به صورت کامل در پایتون انجام دهیم :
تنظیمات پیشرفته
برای سفارشی کردن فرآيند تولید مدل، گزینههای زیادی پیش روی کاربران حرفهای وجود دارد. مثلاً اگر خواسته باشیم برای کدکردن متون به جای استفاده از CNN
که پیشفرض لودویگ است از RNN
های دوطرفه LSTM
استفاده کنیم، بخش عنوان در کد پیکربندی فوق را باید به صورت زیر اصلاح کنیم :
پارامترهای فاز آموزش را هم میتوانیم به دلخواه تغییر بدهیم مشابه زیر :
سایر مثالهای کاربردی
سایت رسمی لودویگ مثالهای عملی بسیار زیادی دارد می توانید از آنها در پروژههای عملی خود استفاده کنید. مثلاً برای شناسایی موجودیتهای نامدار اگر دادههای ورودی ما به شکل زیر باشد :
utterance | tag |
---|---|
John Smith was born in New York on July 21st 1982 | Person Person O O O City City O Date Date Date |
Jane Smith was born in Boston on May 1st 1973 | Person Person O O O City City O Date Date Date |
My friend Carlos was born in San Jose | O O Person O O O City City |
کافی است فایل تنظیمات خود را به شکل زیر آماده کنیم تا به سرعت مدلی داشته باشیم که بتواند با دقت مناسب، موجودیتهای نامدار را برای ما تعیین کند :
دست در دست هم دهیم به مهر / فارسی خویش را کنیم آباد
حال که صحبت از موجودیتهای نامدار شد، مناسب دیدم پروژه متنکاوی فارسییار را هم معرفی کنم که به کمک خیرین و علاقهمندان به حوزه پردازش متون فارسی، امکانی را فراهم کرده است که افراد بتوانند در اوقات فراغت خود، جملههای فارسی را برای شناخت موجودیتهای نامدار (اشخاص، مکانها، زمانها، رویدادها) برچسبگذاری کنند تا از این طریق، حجم زیادی از دادههای برچسبخورده، ایجاد شود و بتوان از آن برای ساخت مدلهای پیشگو کننده حرفهای بهره جُست.
اگر به زبان فارسی و گسترش استفاده از آن در دنیای هوش مصنوعی علاقهدارید، روزی پنج دقیقه هم برای این پروژه وقت بگذارید تا به کمک هم بتوانیم یک منبع غنی از کتابخانههای پردازش متن فارسی داشته باشیم.
نتیجهگیری
لودویگ هنوز در ابتدای راه است اما همانطور که دیدید، سهولت بسیار زیاد آن، نویدبخش آینده بسیار خوبی برای آن است. بخصوص اینکه انکودرهای زیادی در حال افزوده شدن به آن هستند مانند Transformer, ELMo, and BERT
برای متن و DenseNet and FractalNet
برای تصاویر .
از طرفی امکان ساخت کدکنندهها و کدگشاهای سفارشی برای کاربران هم به راحتی فراهم است که این نکته هم کاربران را به ساخت برنامههای کاربردی حرفهای و سفارشی، به کمک لودویگ تشویق میکند.