این سند اولین مورد از یک سری دو قسمتی است که موضوع مهندسی داده و مهندسی ویژگی برای یادگیری ماشین (ML) را با تمرکز بر وظایف یادگیری نظارت شده بررسی می کند. این بخش اول بهترین روشها برای پیشپردازش دادهها در خط لوله ML در Google Cloud را مورد بحث قرار میدهد. این سند بر استفاده از TensorFlow و کتابخانه منبع باز TensorFlow Transform ( tf.Transform
) برای تهیه داده ها، آموزش مدل و ارائه مدل برای پیش بینی تمرکز دارد. این سند چالشهای پیشپردازش دادهها برای ML را برجسته میکند و گزینهها و سناریوها را برای انجام تبدیل دادهها در Google Cloud به طور موثر توصیف میکند.
این سند فرض میکند که شما با BigQuery ، Dataflow ، Vertex AI و TensorFlow Keras API آشنا هستید.
سند دوم، پیش پردازش داده برای ML با Google Cloud ، یک آموزش گام به گام برای نحوه اجرای خط لوله tf.Transform
ارائه می دهد.
معرفی
ML به شما کمک می کند به طور خودکار الگوهای پیچیده و بالقوه مفید را در داده ها پیدا کنید. این الگوها در یک مدل ML فشرده میشوند که سپس میتواند در نقاط داده جدید استفاده شود - فرآیندی به نام پیشبینی یا انجام استنتاج .
ساخت یک مدل ML یک فرآیند چند مرحله ای است. هر مرحله چالش های فنی و مفهومی خود را ارائه می دهد. این مجموعه دو قسمتی بر روی وظایف یادگیری نظارت شده و فرآیند انتخاب، تبدیل، و تقویت داده های منبع برای ایجاد سیگنال های پیش بینی قدرتمند برای متغیر هدف تمرکز دارد. این عملیات دانش حوزه را با تکنیک های علم داده ترکیب می کند. عملیات جوهره مهندسی ویژگی هستند.
اندازه مجموعه داده های آموزشی برای مدل های واقعی ML می تواند به راحتی برابر یا بیشتر از یک ترابایت (TB) باشد. بنابراین، شما به چارچوبهای پردازش داده در مقیاس بزرگ نیاز دارید تا این مجموعه دادهها را به طور کارآمد و توزیعشده پردازش کنید. هنگامی که از یک مدل ML برای پیشبینی استفاده میکنید، باید همان تبدیلهایی را که برای دادههای آموزشی استفاده کردید، در نقاط داده جدید اعمال کنید. با اعمال همان تبدیل ها، مجموعه داده زنده را به روشی که مدل انتظار دارد به مدل ML ارائه می دهید.
این سند این چالشها را برای سطوح مختلف دانهبندی عملیات مهندسی ویژگی مورد بحث قرار میدهد: تجمعهای سطح نمونه، تمام گذر، و پنجره زمانی. این سند همچنین گزینه ها و سناریوهای انجام تبدیل داده برای ML در Google Cloud را توضیح می دهد.
این سند همچنین یک نمای کلی از TensorFlow Transform ( tf.Transform
) ارائه میکند، کتابخانهای برای TensorFlow که به شما امکان میدهد از طریق خطوط لوله پیشپردازش داده، تبدیل داده در سطح نمونه و گذر کامل را تعریف کنید. این خطوط لوله با پرتو آپاچی اجرا میشوند و مصنوعاتی را ایجاد میکنند که به شما امکان میدهند همان تغییر شکلها را در هنگام پیشبینی اعمال کنید.
پیش پردازش داده ها برای ML
این بخش به معرفی عملیات پیش پردازش داده ها و مراحل آمادگی داده می پردازد. همچنین انواع عملیات پیش پردازش و دانه بندی آنها را مورد بحث قرار می دهد.
مهندسی داده در مقایسه با مهندسی ویژگی
پیش پردازش داده ها برای ML هم شامل مهندسی داده و هم مهندسی ویژگی است. مهندسی داده فرآیند تبدیل داده های خام به داده های آماده است. سپس مهندسی ویژگی، داده های آماده شده را تنظیم می کند تا ویژگی های مورد انتظار مدل ML را ایجاد کند. این اصطلاحات معانی زیر را دارند:
- داده های خام (یا فقط داده ها )
- داده ها به شکل منبع خود، بدون هیچ گونه آمادگی قبلی برای ML. در این زمینه، داده ها ممکن است به صورت خام (در یک دریاچه داده) یا به شکل تبدیل شده (در یک انبار داده) باشند. دادههای تبدیلشده در انبار دادهها ممکن است از شکل خام اصلی خود تبدیل شده باشند تا برای تجزیه و تحلیل استفاده شوند. با این حال، در این زمینه، داده های خام به این معنی است که داده ها به طور خاص برای وظیفه ML شما آماده نشده اند. اگر دادهها از سیستمهای جریانی ارسال شوند که در نهایت مدلهای ML را برای پیشبینی فراخوانی میکنند، دادههای خام نیز در نظر گرفته میشوند.
- داده های آماده شده
- مجموعه داده در فرم آماده برای کار ML شما: منابع داده تجزیه شده، به هم پیوسته و در یک فرم جدولی قرار داده شده است. دادههای آمادهشده جمعآوری و با جزئیات درست خلاصه میشوند - برای مثال، هر ردیف در مجموعه داده نشاندهنده یک مشتری منحصر به فرد است، و هر ستون اطلاعات خلاصهای را برای مشتری نشان میدهد، مانند کل هزینه شده در شش هفته گذشته. در جدول داده های آماده شده، ستون های نامربوط حذف شده اند و رکوردهای نامعتبر فیلتر شده اند. برای وظایف یادگیری تحت نظارت، ویژگی هدف وجود دارد.
- ویژگی های مهندسی شده
- مجموعه داده با ویژگیهای تنظیمشدهای که توسط مدل مورد انتظار است - یعنی ویژگیهایی که با انجام برخی عملیات خاص ML بر روی ستونهای مجموعه داده آمادهشده ایجاد میشوند، و ایجاد ویژگیهای جدید برای مدل شما در طول آموزش و پیشبینی، همانطور که بعدا توضیح داده شد. در عملیات پیش پردازش نمونه هایی از این عملیات عبارتند از مقیاس بندی ستون های عددی به مقداری بین 0 و 1، مقادیر برش، و ویژگی های طبقه بندی یک کدگذاری داغ .
نمودار زیر، شکل 1، مراحلی را نشان می دهد که در تهیه داده های از پیش پردازش شده درگیر است:
در عمل، داده های یک منبع اغلب در مراحل مختلف آمادگی هستند. به عنوان مثال، یک فیلد از یک جدول در انبار داده شما ممکن است مستقیماً به عنوان یک ویژگی مهندسی شده استفاده شود. در همان زمان، فیلد دیگری در همان جدول ممکن است قبل از تبدیل شدن به یک ویژگی مهندسی شده، نیاز به تغییرات داشته باشد. به طور مشابه، مهندسی داده و عملیات مهندسی ویژگی ممکن است در یک مرحله پیش پردازش داده ترکیب شوند.
عملیات پیش پردازش
پیش پردازش داده شامل چندین عملیات است. هر عملیات برای کمک به ML در ساخت مدل های پیش بینی بهتر طراحی شده است. جزئیات این عملیات پیش پردازش خارج از محدوده این سند است، اما برخی از عملیات به طور خلاصه در این بخش توضیح داده شده است.
برای داده های ساخت یافته، عملیات پیش پردازش داده ها شامل موارد زیر است:
- پاکسازی داده ها: حذف یا تصحیح سوابقی که دارای مقادیر خراب یا نامعتبر از داده های خام هستند، و حذف رکوردهایی که تعداد زیادی ستون را از دست داده اند.
- انتخاب و پارتیشن بندی نمونه ها: انتخاب نقاط داده از مجموعه داده ورودی برای ایجاد آموزش، ارزیابی (اعتبارسنجی) و مجموعه های آزمایشی . این فرآیند شامل تکنیکهایی برای نمونهگیری تصادفی تکرارپذیر، نمونهبرداری بیش از حد کلاسهای اقلیت و تقسیمبندی طبقهای است.
- تنظیم ویژگی: بهبود کیفیت یک ویژگی برای ML، که شامل مقیاس بندی و عادی سازی مقادیر عددی، نسبت دادن مقادیر از دست رفته، برش نقاط پرت و تنظیم مقادیری است که دارای توزیع های منحرف هستند.
- تبدیل ویژگی: تبدیل یک ویژگی عددی به یک ویژگی طبقهبندی (از طریق سطلسازی )، و تبدیل ویژگیهای دستهبندی به یک نمایش عددی (از طریق رمزگذاری یکبار، یادگیری با شمارش ، تعبیههای پراکنده ویژگی و غیره). برخی از مدل ها فقط با ویژگی های عددی یا دسته بندی کار می کنند، در حالی که برخی دیگر می توانند ویژگی های نوع ترکیبی را مدیریت کنند. حتی زمانی که مدلها هر دو نوع را مدیریت میکنند، میتوانند از نمایشهای متفاوت (عددی و دستهبندی) یک ویژگی بهره ببرند.
- استخراج ویژگی: کاهش تعداد ویژگیها با ایجاد نمایش دادههای با ابعاد پایینتر و قدرتمندتر با استفاده از تکنیکهایی مانند PCA ، تعبیه استخراج و هش کردن .
- انتخاب ویژگی: انتخاب زیرمجموعهای از ویژگیهای ورودی برای آموزش مدل، و نادیده گرفتن موارد نامربوط یا اضافی، با استفاده از روشهای فیلتر یا پوشش . در صورتی که ویژگیها تعداد زیادی از مقادیر را از دست داده باشند، انتخاب ویژگی میتواند به سادگی شامل حذف ویژگیها باشد.
- ساخت ویژگی: ایجاد ویژگیهای جدید با استفاده از تکنیکهای معمولی، مانند بسط چند جملهای (با استفاده از توابع ریاضی تک متغیره) یا تلاقی ویژگی (برای ثبت تعاملات ویژگی). ویژگیها را نیز میتوان با استفاده از منطق تجاری از دامنه مورد استفاده ML ساخت.
وقتی با دادههای بدون ساختار (مثلاً تصاویر، صدا یا اسناد متنی) کار میکنید، یادگیری عمیق با تا کردن آن در معماری مدل، جایگزین مهندسی ویژگیهای مبتنی بر دانش میشود. لایه کانولوشن یک پیش پردازنده ویژگی خودکار است. ساختن معماری مدل مناسب نیاز به دانش تجربی از داده ها دارد. علاوه بر این، مقداری پیش پردازش مورد نیاز است، مانند موارد زیر:
- برای اسناد متنی: ریشهبندی و واژهسازی ، محاسبه TF-IDF ، و استخراج n گرم ، جستجوی جاسازی.
- برای تصاویر: برش، تغییر اندازه، برش، تاری گاوسی و فیلترهای قناری.
- برای همه انواع داده ها (از جمله متن و تصویر): آموزش انتقال ، که لایه های آخر مدل کاملاً آموزش دیده را به عنوان یک مرحله مهندسی ویژگی در نظر می گیرد.
دانه بندی پیش پردازش
این بخش در مورد جزئیات انواع تبدیل داده ها بحث می کند. این نشان میدهد که چرا این دیدگاه هنگام تهیه نقاط داده جدید برای پیشبینیها با استفاده از تبدیلهایی که بر روی دادههای آموزشی اعمال میشوند، حیاتی است.
عملیات پیش پردازش و تبدیل را می توان بر اساس دانه بندی عملیات به صورت زیر دسته بندی کرد:
تحولات سطح نمونه در طول آموزش و پیش بینی . اینها تبدیلات مستقیمی هستند، که در آن فقط مقادیری از همان نمونه برای تبدیل مورد نیاز است. برای مثال، تبدیلهای سطح نمونه ممکن است شامل بریدن مقدار یک ویژگی به مقداری آستانه، گسترش چند جملهای ویژگی دیگر، ضرب دو ویژگی، یا مقایسه دو ویژگی برای ایجاد یک پرچم بولی باشد.
این تبدیل ها باید در طول آموزش و پیش بینی به طور یکسان اعمال شوند، زیرا مدل بر روی ویژگی های تبدیل شده آموزش داده می شود، نه بر روی مقادیر ورودی خام. اگر داده ها به طور یکسان تبدیل نشده باشند، آنگاه مدل بد رفتار می کند زیرا با داده هایی ارائه می شود که دارای توزیع مقادیری است که با آن آموزش ندیده است. برای اطلاعات بیشتر، به بحث چولگی در خدمت آموزش در بخش چالش های پیش پردازش مراجعه کنید.
تبدیلهای پاس کامل در طول تمرین، اما تبدیلهای سطح نمونه در طول پیشبینی . در این سناریو، تبدیل ها حالتی هستند، زیرا از برخی آمارهای از پیش محاسبه شده برای انجام تبدیل استفاده می کنند. در طول آموزش، کل داده های آموزشی را برای محاسبه مقادیری مانند حداقل، حداکثر، میانگین و واریانس برای تبدیل داده های آموزشی، داده های ارزیابی و داده های جدید در زمان پیش بینی تجزیه و تحلیل می کنید.
به عنوان مثال، برای عادی سازی یک ویژگی عددی برای آموزش، میانگین آن (μ) و انحراف استاندارد آن (σ) را در کل داده های آموزشی محاسبه می کنید. این محاسبات عملیات تمام گذر (یا تجزیه و تحلیل ) نامیده می شود. هنگامی که مدل را برای پیشبینی ارائه میکنید، مقدار یک نقطه داده جدید نرمال میشود تا از انحراف در ارائه آموزش جلوگیری شود. بنابراین، مقادیر μ و σ که در طول آموزش محاسبه میشوند برای تنظیم مقدار ویژگی استفاده میشوند، که عملیات سطح نمونه ساده زیر است:
$$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$تبدیل های تمام گذر شامل موارد زیر است:
- مقیاسبندی MinMax ویژگیهای عددی با استفاده از min و max محاسبهشده از مجموعه داده آموزشی.
- مقیاس بندی استاندارد (نرمال سازی امتیاز z) ویژگی های عددی با استفاده از μ و σ محاسبه شده بر روی مجموعه داده آموزشی.
- سطل سازی ویژگی های عددی با استفاده از چندک.
- وارد کردن مقادیر گمشده با استفاده از میانه (ویژگی های عددی) یا حالت (ویژگی های طبقه بندی).
- تبدیل رشته ها (مقادیر اسمی) به اعداد صحیح (شاخص ها) با استخراج تمام مقادیر متمایز (واژگان) یک ویژگی طبقه بندی ورودی.
- شمارش وقوع یک اصطلاح (مقدار ویژگی) در تمام اسناد (نمونهها) برای محاسبه TF-IDF.
- محاسبه PCA ویژگیهای ورودی برای نمایش دادهها در فضایی با ابعاد پایینتر (با ویژگیهای وابسته به خطی).
شما باید فقط از داده های آموزشی برای محاسبه آماری مانند μ، σ، min و max استفاده کنید. اگر دادههای آزمایش و ارزیابی را برای این عملیات اضافه کنید، اطلاعاتی را از دادههای ارزیابی و آزمایش برای آموزش مدل به بیرون درز میکنید. انجام این کار بر قابلیت اطمینان نتایج آزمون و ارزیابی تأثیر می گذارد. برای اطمینان از اعمال یک تبدیل ثابت به همه مجموعههای داده، از همان آمار محاسبهشده از دادههای آموزشی برای تغییر دادههای آزمون و ارزیابی استفاده میکنید.
تجمعات تاریخی در طول آموزش و پیش بینی . این شامل ایجاد مجموعههای تجاری، مشتقات و پرچمها بهعنوان سیگنالهای ورودی برای کار پیشبینی است - برای مثال، ایجاد معیارهای اخیر، فرکانس و پولی (RFM) برای مشتریان برای ایجاد مدلهای تمایل. این نوع ویژگیها را میتوان از قبل محاسبه کرد و در یک فروشگاه ویژگی ذخیره کرد تا در طول آموزش مدل، امتیازدهی دستهای و سرویسدهی پیشبینی آنلاین استفاده شود. شما همچنین می توانید مهندسی ویژگی های اضافی (به عنوان مثال، تبدیل و تنظیم) را قبل از آموزش و پیش بینی در این مجموعه ها انجام دهید.
تجمیعهای تاریخی در طول آموزش، اما تجمعهای بیدرنگ در طول پیشبینی . این رویکرد شامل ایجاد یک ویژگی با خلاصه کردن مقادیر بلادرنگ در طول زمان است. در این رویکرد، مواردی که باید تجمیع شوند از طریق بندهای پنجره زمانی تعریف میشوند. به عنوان مثال، اگر می خواهید مدلی را آموزش دهید که زمان سفر تاکسی را بر اساس معیارهای ترافیکی مسیر در 5 دقیقه آخر، در 10 دقیقه آخر، در 30 دقیقه آخر و در موارد دیگر تخمین بزند، می توانید از این روش استفاده کنید. فواصل همچنین می توانید از این رویکرد برای پیش بینی خرابی یک قطعه موتور بر اساس میانگین متحرک دما و مقادیر ارتعاش محاسبه شده در 3 دقیقه گذشته استفاده کنید. اگرچه این تجمیعها را میتوان به صورت آفلاین برای آموزش آماده کرد، اما در زمان ارائه از یک جریان داده محاسبه میشوند.
بهطور دقیقتر، وقتی دادههای آموزشی را آماده میکنید، اگر مقدار تجمیع شده در دادههای خام نباشد، مقدار در مرحله مهندسی داده ایجاد میشود. داده های خام معمولاً در یک پایگاه داده با فرمت
(entity, timestamp, value)
ذخیره می شوند. در مثال های قبلی،entity
شناسه بخش مسیر برای مسیرهای تاکسی و شناسه بخش موتور برای خرابی موتور است. می توانید از عملیات پنجره سازی برای محاسبه استفاده کنید(entity, time_index, aggregated_value_over_time_window)
و از ویژگی های تجمیع به عنوان ورودی برای آموزش مدل خود استفاده کنید.هنگامی که مدل برای پیشبینی بلادرنگ (آنلاین) ارائه میشود، مدل ویژگیهای مشتقشده از مقادیر تجمیع شده را به عنوان ورودی انتظار دارد. بنابراین، میتوانید از یک فناوری پردازش جریان مانند Apache Beam برای محاسبه انبوهها از نقاط داده بلادرنگ که در سیستم شما جریان مییابند استفاده کنید. فناوری پردازش جریانی، دادههای بلادرنگ را بر اساس پنجرههای زمانی با رسیدن نقاط داده جدید جمعآوری میکند. شما همچنین می توانید مهندسی ویژگی های اضافی (به عنوان مثال، تبدیل و تنظیم) را قبل از آموزش و پیش بینی در این مجموعه ها انجام دهید.
خط لوله ML در Google Cloud
این بخش اجزای اصلی یک خط لوله معمولی سرتاسر را برای آموزش و ارائه مدل های TensorFlow ML در Google Cloud با استفاده از خدمات مدیریت شده مورد بحث قرار می دهد. همچنین در مورد جایی که میتوانید دستههای مختلف عملیات پیشپردازش دادهها را پیادهسازی کنید و چالشهای رایجی که ممکن است هنگام اجرای چنین تبدیلهایی با آنها مواجه شوید، بحث میکند. بخش How tf.Transform Works نشان می دهد که چگونه کتابخانه TensorFlow Transform به رفع این چالش ها کمک می کند.
معماری سطح بالا
نمودار زیر، شکل 2، یک معماری سطح بالا از یک خط لوله معمولی ML را برای آموزش و ارائه مدل های TensorFlow نشان می دهد. برچسبهای A، B و C در نمودار به مکانهای مختلف خط لوله اشاره میکنند که پیشپردازش دادهها میتواند انجام شود. جزئیات مربوط به این مراحل در بخش زیر ارائه شده است.
خط لوله شامل مراحل زیر است:
- پس از وارد کردن دادههای خام، دادههای جدولی در BigQuery و سایر دادهها مانند تصاویر، صدا و ویدیو در فضای ذخیرهسازی ابری ذخیره میشوند. قسمت دوم این مجموعه از داده های جدولی ذخیره شده در BigQuery به عنوان مثال استفاده می کند.
- مهندسی داده (آماده سازی) و مهندسی ویژگی در مقیاس با استفاده از Dataflow اجرا می شوند. این اجرا مجموعههای آموزش، ارزیابی و آزمایش آماده ML را تولید میکند که در Cloud Storage ذخیره میشوند. در حالت ایدهآل، این مجموعه دادهها به عنوان فایلهای TFRecord ذخیره میشوند که فرمت بهینهسازی شده برای محاسبات TensorFlow است.
- بسته آموزشی مدل TensorFlow به Vertex AI Training ارسال میشود که از دادههای از پیش پردازش شده مراحل قبلی برای آموزش مدل استفاده میکند. خروجی این مرحله یک TensorFlow SavedModel آموزش دیده است که به Cloud Storage صادر می شود.
- مدل آموزشدیده TensorFlow در Vertex AI Prediction بهعنوان سرویسی که دارای یک REST API است استفاده میشود تا بتوان از آن برای پیشبینیهای آنلاین استفاده کرد. از همین مدل می توان برای کارهای پیش بینی دسته ای نیز استفاده کرد.
- پس از استقرار مدل بهعنوان REST API، برنامههای مشتری و سیستمهای داخلی میتوانند با ارسال درخواستهایی با برخی نقاط داده و دریافت پاسخهایی از مدل با پیشبینی، API را فراخوانی کنند.
- برای هماهنگی و خودکارسازی این خط لوله، میتوانید از Vertex AI Pipelines به عنوان زمانبندی برای فراخوانی مراحل آمادهسازی داده، آموزش مدل و استقرار مدل استفاده کنید.
همچنین میتوانید از Vertex AI Feature Store برای ذخیره ویژگیهای ورودی برای پیشبینی استفاده کنید. به عنوان مثال، میتوانید به صورت دورهای ویژگیهای مهندسی شده را از آخرین دادههای خام ایجاد کرده و آنها را در فروشگاه ویژگیهای Vertex AI ذخیره کنید. برنامه های سرویس گیرنده ویژگی های ورودی مورد نیاز را از Vertex AI Feature Store واکشی می کنند و برای دریافت پیش بینی ها به مدل ارسال می کنند.
پیش پردازش را کجا انجام دهیم
در شکل 2، برچسب های A، B و C نشان می دهند که عملیات پیش پردازش داده ها می تواند در BigQuery، Dataflow یا TensorFlow انجام شود. بخش های زیر نحوه عملکرد هر یک از این گزینه ها را شرح می دهد.
گزینه A: BigQuery
به طور معمول، منطق در BigQuery برای عملیات زیر پیاده سازی می شود:
- نمونه گیری: انتخاب تصادفی زیر مجموعه ای از داده ها.
- فیلتر کردن: حذف نمونه های نامربوط یا نامعتبر.
- پارتیشن بندی: تقسیم داده ها برای تولید آموزش، ارزیابی و مجموعه های تست.
اسکریپتهای BigQuery SQL را میتوان بهعنوان پرسوجو منبع برای خط لوله پیشپردازش Dataflow، که مرحله پردازش داده در شکل 2 است، استفاده کرد. برای مثال، اگر سیستمی در کانادا استفاده میشود و انبار داده دارای تراکنشهایی از سراسر جهان است، فیلتر کردن به دریافت داده های آموزشی فقط در کانادا به بهترین وجه در BigQuery انجام می شود. مهندسی ویژگی در BigQuery ساده و مقیاسپذیر است و از پیادهسازی تغییرات ویژگیها در سطح نمونه و تجمیعهای تاریخی پشتیبانی میکند.
با این حال، توصیه میکنیم که از BigQuery برای مهندسی ویژگیها فقط در صورتی استفاده کنید که از مدل خود برای پیشبینی دستهای (امتیاز) استفاده میکنید، یا اگر ویژگیها از قبل در BigQuery محاسبه شدهاند، اما در Vertex AI Feature Store ذخیره شدهاند تا در حین پیشبینی آنلاین استفاده شوند. اگر قصد دارید مدل را برای پیشبینیهای آنلاین مستقر کنید، و اگر ویژگی مهندسی شده را در فروشگاه ویژگیهای آنلاین ندارید، باید عملیات پیشپردازش SQL را برای تبدیل نقاط داده خام که سایر سیستمها تولید میکنند، تکرار کنید. به عبارت دیگر، شما باید منطق را دو بار پیاده سازی کنید: یک بار در SQL برای پیش پردازش داده های آموزشی در BigQuery، و بار دوم در منطق برنامه ای که مدل را برای پیش پردازش نقاط داده آنلاین برای پیش بینی مصرف می کند.
به عنوان مثال، اگر برنامه مشتری شما به زبان جاوا نوشته شده است، باید منطق را در جاوا دوباره پیاده سازی کنید. این میتواند خطاهایی را بهدلیل ناهماهنگیهای پیادهسازی ایجاد کند، همانطور که در بخش چولهای در خدمت آموزش چالشهای پیشپردازش بعداً در این سند توضیح داده شد. همچنین برای حفظ دو پیاده سازی متفاوت هزینه اضافی است. هر زمان که منطق SQL را برای پیش پردازش داده های آموزشی تغییر می دهید، باید پیاده سازی جاوا را بر این اساس به داده های پیش پردازش در زمان ارائه تغییر دهید.
اگر از مدل خود فقط برای پیشبینی دستهای استفاده میکنید (به عنوان مثال، با استفاده از پیشبینی دستهای Vertex AI)، و اگر دادههای امتیازدهی شما از BigQuery گرفته شده است، میتوانید این عملیات پیشپردازش را به عنوان بخشی از اسکریپت BigQuery SQL پیادهسازی کنید. در آن صورت، میتوانید از همان اسکریپت SQL پیشپردازش برای آمادهسازی دادههای آموزشی و امتیازدهی استفاده کنید.
تبدیل های حالتی کامل برای پیاده سازی در BigQuery مناسب نیستند. اگر از BigQuery برای تبدیلهای تمام گذر استفاده میکنید، به جداول کمکی برای ذخیره مقادیر مورد نیاز تبدیلهای حالتی، مانند میانگینها و واریانسها برای مقیاسبندی ویژگیهای عددی، نیاز دارید. علاوه بر این، پیاده سازی تبدیل های تمام گذر با استفاده از SQL در BigQuery پیچیدگی بیشتری در اسکریپت های SQL ایجاد می کند و وابستگی پیچیده ای بین آموزش و اسکریپت های SQL امتیازدهی ایجاد می کند.
گزینه B: Dataflow
همانطور که در شکل 2 نشان داده شده است، می توانید عملیات پیش پردازش محاسباتی گران قیمت را در Apache Beam پیاده سازی کنید و آنها را در مقیاس با استفاده از Dataflow اجرا کنید. Dataflow یک سرویس مقیاس خودکار کاملاً مدیریت شده برای پردازش دسته ای و جریانی داده است. هنگامی که از Dataflow استفاده می کنید، برخلاف BigQuery می توانید از کتابخانه های تخصصی خارجی نیز برای پردازش داده ها استفاده کنید.
جریان داده میتواند تبدیلهای سطح نمونه، و تبدیل ویژگیهای تجمع تاریخی و بلادرنگ را انجام دهد. به ویژه، اگر مدلهای ML شما انتظار یک ویژگی ورودی مانند total_number_of_clicks_last_90sec
را دارند، توابع پنجرهسازی پرتو Apache میتوانند این ویژگیها را بر اساس جمعآوری مقادیر پنجرههای زمانی دادههای رویدادهای بلادرنگ (جریانسازی) محاسبه کنند (به عنوان مثال، رویدادهای کلیک). در بحث قبلی در مورد دانه بندی تبدیل ها ، این به عنوان "تجمیع های تاریخی در طول آموزش، اما تجمعات بلادرنگ در طول پیش بینی" نامیده می شد.
نمودار زیر، شکل 3، نقش Dataflow را در پردازش داده های جریان برای پیش بینی های زمان واقعی نشان می دهد.
همانطور که در شکل 3 نشان داده شده است، در طول پردازش، رویدادهایی به نام نقاط داده در Pub/Sub وارد می شوند. Dataflow این نقاط داده را مصرف می کند، ویژگی ها را بر اساس مجموعات در طول زمان محاسبه می کند و سپس API مدل ML مستقر شده را برای پیش بینی فراخوانی می کند. پیشبینیها سپس به یک صف Pub/Sub خروجی ارسال میشوند. از Pub/Sub، پیشبینیها را میتوان توسط سیستمهای پاییندستی مانند نظارت یا کنترل مصرف کرد، یا میتوان آنها را (مثلاً بهعنوان اعلان) به مشتری اصلی درخواستکننده بازگرداند. پیشبینیها همچنین میتوانند در یک ذخیرهگاه داده با تأخیر کم مانند Cloud Bigtable برای واکشی بلادرنگ ذخیره شوند. همچنین میتوان از Cloud Bigtable برای جمعآوری و ذخیرهسازی این مجموعههای بیدرنگ استفاده کرد تا در صورت نیاز برای پیشبینی بتوان آنها را جستجو کرد.
همان پیادهسازی Apache Beam را میتوان برای پردازش دستهای دادههای آموزشی که از یک دیتا استور آفلاین مانند BigQuery میآیند و دادههای بیدرنگ پردازش جریانی برای ارائه پیشبینیهای آنلاین استفاده کرد.
در سایر معماری های معمولی، مانند معماری نشان داده شده در شکل 2، برنامه مشتری مستقیماً API مدل مستقر شده را برای پیش بینی های آنلاین فراخوانی می کند. در آن صورت، اگر عملیات پیشپردازش در Dataflow برای آمادهسازی دادههای آموزشی پیادهسازی شود، عملیات روی دادههای پیشبینی که مستقیماً به مدل میرود اعمال نمیشوند. بنابراین، تغییراتی مانند اینها باید در طول ارائه برای پیشبینیهای آنلاین در مدل ادغام شوند.
جریان داده را می توان با محاسبه آمارهای مورد نیاز در مقیاس برای انجام تبدیل تمام گذر استفاده کرد. با این حال، این آمار باید در جایی ذخیره شود تا در حین پیش بینی برای تبدیل نقاط داده پیش بینی استفاده شود. با استفاده از کتابخانه TensorFlow Transform ( tf.Transform
)، میتوانید این آمارها را بهجای ذخیره در جای دیگر، مستقیماً در مدل جاسازی کنید. این رویکرد بعداً در نحوه کار tf.Transform توضیح داده شده است.
گزینه C: TensorFlow
همانطور که در شکل 2 نشان داده شده است، می توانید عملیات پیش پردازش و تبدیل داده ها را در خود مدل TensorFlow پیاده سازی کنید. همانطور که در شکل نشان داده شده است، پیش پردازشی که برای آموزش مدل TensorFlow پیاده سازی می کنید، زمانی که مدل صادر شده و برای پیش بینی ها به کار گرفته می شود، بخشی جدایی ناپذیر از مدل می شود. تبدیل در مدل TensorFlow را می توان به یکی از روش های زیر انجام داد:
- پیاده سازی تمام منطق تبدیل سطح نمونه در تابع
input_fn
و در تابعserving_fn
. تابعinput_fn
یک مجموعه داده را با استفاده ازtf.data.Dataset
API برای آموزش یک مدل آماده می کند. تابعserving_fn
داده ها را برای پیش بینی ها دریافت و آماده می کند. - با استفاده از لایه های پیش پردازش Keras یا ایجاد لایه های سفارشی ، کد تبدیل را مستقیماً در مدل TensorFlow خود قرار دهید.
کد منطقی تبدیل در تابع serving_fn
رابط سرویس SavedModel شما را برای پیشبینی آنلاین تعریف میکند. اگر همان تبدیلهایی را که برای آمادهسازی دادههای آموزشی استفاده شدهاند، در کد منطقی تبدیل تابع serving_fn
پیادهسازی کنید، تضمین میکند که همان تبدیلها به نقاط داده پیشبینی جدید هنگام ارائه آنها اعمال میشود.
با این حال، از آنجایی که مدل TensorFlow هر نقطه داده را به طور مستقل یا در یک دسته کوچک پردازش میکند، نمیتوانید تجمیعها را از همه نقاط داده محاسبه کنید. در نتیجه، تبدیل های تمام گذر نمی توانند در مدل TensorFlow شما پیاده سازی شوند.
چالش های پیش پردازش
چالش های اصلی پیاده سازی پیش پردازش داده ها به شرح زیر است:
چوله آموزشی-سرویس . انحراف تمرین-سرویس به تفاوت بین اثربخشی (عملکرد پیش بینی کننده) در حین تمرین و در حین سرو اشاره دارد. این انحراف می تواند ناشی از عدم تطابق بین نحوه مدیریت داده ها در آموزش و خطوط لوله سرویس دهی باشد. به عنوان مثال، اگر مدل شما بر روی یک ویژگی تغییر لگاریتمی آموزش دیده باشد، اما در حین ارائه با ویژگی خام ارائه شود، ممکن است خروجی پیشبینی دقیق نباشد.
اگر تبدیلها به بخشی از خود مدل تبدیل شوند، میتوان آنطور که قبلاً در گزینه C: TensorFlow توضیح داده شد، تبدیلهای سطح نمونه را انجام داد. در آن صورت، رابط سرویس دهی مدل (تابع
serving_fn
) انتظار داده های خام را دارد، در حالی که مدل به صورت داخلی این داده ها را قبل از محاسبه خروجی تبدیل می کند. تحولات همان تغییراتی است که در نقاط داده های آموزش خام و پیش بینی اعمال شد.تحولات پاس کامل شما نمی توانید تبدیل های تمام گذر مانند تغییر مقیاس و نرمال سازی را در مدل TensorFlow خود پیاده سازی کنید. در تبدیلهای تمام گذر، برخی از آمارها (مثلاً مقادیر
max
وmin
برای مقیاسبندی ویژگیهای عددی) باید از قبل روی دادههای آموزشی محاسبه شوند، همانطور که در گزینه B توضیح داده شده است: جریان داده . سپس مقادیر باید در جایی ذخیره شوند تا در طول خدمت مدل برای پیشبینی برای تبدیل نقاط داده خام جدید به عنوان تبدیلهای سطح نمونه استفاده شوند، که از انحراف در خدمت آموزشی جلوگیری میکند. می توانید از کتابخانه TensorFlow Transform (tf.Transform
) برای جاسازی مستقیم آمار در مدل TensorFlow خود استفاده کنید. این رویکرد بعداً در نحوه کار tf.Transform توضیح داده شده است.آماده سازی داده ها از قبل برای کارایی آموزش بهتر . اجرای تحولات سطح نمونه به عنوان بخشی از مدل می تواند کارایی فرآیند آموزش را کاهش دهد. این تنزل به این دلیل اتفاق میافتد که همان دگرگونیها به طور مکرر برای دادههای آموزشی مشابه در هر دوره اعمال میشوند. تصور کنید که دادههای آموزشی خام با 1000 ویژگی دارید و ترکیبی از تبدیلهای سطح نمونه را برای ایجاد 10000 ویژگی اعمال میکنید. اگر این تبدیلها را به عنوان بخشی از مدل خود پیادهسازی کنید، و سپس دادههای آموزشی خام را به مدل بدهید، این 10000 عملیات N بار در هر نمونه اعمال میشوند، جایی که N تعداد دورهها است. بهعلاوه، اگر از شتابدهندهها (GPU یا TPU) استفاده میکنید، در حالی که CPU این تغییرات را انجام میدهد، بیکار میمانند، که استفاده کارآمدی از شتابدهندههای پرهزینه شما نیست.
در حالت ایدهآل، دادههای آموزشی قبل از آموزش با استفاده از تکنیک توضیح داده شده در گزینه B: جریان داده ، که در آن 10000 عملیات تبدیل تنها یک بار در هر نمونه آموزشی اعمال میشوند، تبدیل میشوند. سپس داده های آموزشی تبدیل شده به مدل ارائه می شود. هیچ تغییر دیگری اعمال نمی شود و شتاب دهنده ها همیشه مشغول هستند. علاوه بر این، استفاده از Dataflow به شما کمک می کند تا با استفاده از یک سرویس کاملاً مدیریت شده، مقادیر زیادی از داده ها را در مقیاس پیش پردازش کنید.
آماده سازی داده های آموزشی از قبل می تواند کارایی تمرین را بهبود بخشد. با این حال، پیادهسازی منطق تبدیل خارج از مدل (رویکردهایی که در گزینه A: BigQuery یا گزینه B: Dataflow توضیح داده شده است) مشکل انحراف ارائه خدمات آموزشی را حل نمیکند. مگر اینکه ویژگی مهندسی شده را در فروشگاه ویژگی ذخیره کنید تا هم برای آموزش و هم برای پیشبینی استفاده شود، منطق تبدیل باید در جایی پیادهسازی شود تا روی نقاط داده جدیدی که برای پیشبینی میآیند اعمال شود، زیرا رابط مدل انتظار دادههای تغییر یافته را دارد. کتابخانه TensorFlow Transform (
tf.Transform
) می تواند به شما کمک کند تا به این مشکل رسیدگی کنید، همانطور که در بخش زیر توضیح داده شده است.
tf.Transform چگونه کار می کند
کتابخانه tf.Transform
برای تبدیل هایی که نیاز به پاس کامل دارند مفید است. خروجی کتابخانه tf.Transform
به عنوان یک نمودار TensorFlow صادر می شود که منطق تبدیل سطح نمونه و آمار محاسبه شده از تبدیل های تمام گذر را نشان می دهد تا برای آموزش و ارائه استفاده شود. استفاده از نمودار یکسان برای آموزش و سرویس دهی می تواند از انحراف جلوگیری کند، زیرا در هر دو مرحله تغییرات یکسانی اعمال می شود. علاوه بر این، کتابخانه tf.Transform
میتواند در یک خط لوله پردازش دستهای در Dataflow اجرا شود تا دادههای آموزشی را از قبل آماده کند و کارایی آموزش را بهبود بخشد.
نمودار زیر، شکل 4، نشان می دهد که چگونه کتابخانه tf.Transform
داده ها را برای آموزش و پیش بینی پیش پردازش و تبدیل می کند. این فرآیند در بخش های زیر توضیح داده شده است.
داده های آموزش و ارزیابی را تغییر دهید
شما داده های آموزشی خام را با استفاده از تبدیل پیاده سازی شده در tf.Transform
Apache Beam APIs پیش پردازش می کنید و آن را در مقیاس در Dataflow اجرا می کنید. پیش پردازش در مراحل زیر انجام می شود:
- مرحله تجزیه و تحلیل: در طول مرحله تجزیه و تحلیل، آمارهای مورد نیاز (مانند میانگین، واریانس و کمیت) برای تبدیل های حالت بر روی داده های آموزشی با عملیات تمام گذر محاسبه می شود. این فاز مجموعه ای از مصنوعات تبدیل، از جمله نمودار
transform_fn
را تولید می کند. گرافtransform_fn
یک گراف TensorFlow است که منطق تبدیل را به عنوان عملیات سطح نمونه دارد. این شامل آمار محاسبه شده در مرحله تجزیه و تحلیل به عنوان ثابت است. - فاز تبدیل: در طول فاز تبدیل، نمودار
transform_fn
به داده های آموزشی خام اعمال می شود، جایی که آمار محاسبه شده برای پردازش رکوردهای داده ها (مثلاً برای مقیاس بندی ستون های عددی) به صورت سطح نمونه استفاده می شود.
یک رویکرد دو فازی مانند این به چالش پیش پردازش انجام تبدیلهای تمام گذر میپردازد.
هنگامی که داده های ارزیابی از پیش پردازش می شوند، با استفاده از منطق در نمودار transform_fn
و آمار محاسبه شده از مرحله تجزیه و تحلیل در داده های آموزشی، فقط عملیات سطح نمونه اعمال می شود. به عبارت دیگر، برای محاسبه آمارهای جدید مانند μ و σ، برای نرمال کردن ویژگیهای عددی در دادههای ارزیابی، دادههای ارزیابی را به صورت کامل تجزیه و تحلیل نمیکنید. در عوض، شما از آمار محاسبه شده از داده های آموزشی برای تبدیل داده های ارزیابی در سطح نمونه استفاده می کنید.
دادههای آموزش و ارزیابی تبدیل شده در مقیاس با استفاده از Dataflow آماده میشوند، قبل از اینکه برای آموزش مدل استفاده شوند. این فرآیند تهیه داده دسته ای به چالش پیش پردازش آماده سازی داده ها از جلو برای بهبود بهره وری آموزش می پردازد. همانطور که در شکل 4 نشان داده شده است ، رابط داخلی مدل از ویژگی های تبدیل شده انتظار دارد.
تحولات را به مدل صادر شده وصل کنید
همانطور که اشاره شد ، نمودار transform_fn
که توسط خط لوله tf.Transform
تولید می شود ، به عنوان یک نمودار Tensorflow صادر شده ذخیره می شود. نمودار صادر شده از منطق تحول به عنوان عملیات در سطح نمونه و کلیه آمار محاسبه شده در تحولات کامل به عنوان ثابت نمودار تشکیل شده است. هنگامی که مدل آموزش دیده برای خدمت صادر می شود ، نمودار transform_fn
به عنوان بخشی از عملکرد serving_fn
به SaveDmodel وصل می شود.
در حالی که این مدل را برای پیش بینی ارائه می دهد ، رابط کاربری مدل انتظار می رود نقاط داده در قالب خام (یعنی قبل از هرگونه تحول). با این حال ، رابط داخلی مدل انتظار داده های موجود در قالب تبدیل شده را دارد.
نمودار transform_fn
، که اکنون بخشی از مدل است ، تمام منطق پیش پردازش را در نقطه داده های ورودی اعمال می کند. در عملکرد سطح نمونه در طول پیش بینی ، از ثابت های ذخیره شده (مانند μ و σ برای عادی سازی ویژگی های عددی) استفاده می کند. بنابراین ، نمودار transform_fn
نقطه داده خام را به قالب تبدیل شده تبدیل می کند. قالب تبدیل شده همان چیزی است که توسط رابط داخلی مدل به منظور تولید پیش بینی انتظار می رود ، همانطور که در شکل 4 نشان داده شده است.
این مکانیسم چالش پیش پردازش را در زمینه آموزش و پرورش حل می کند ، زیرا همان منطق (اجرای) که برای تبدیل داده های آموزش و ارزیابی استفاده می شود ، برای تبدیل نقاط داده جدید در طول پیش بینی استفاده می شود.
خلاصه گزینه های پیش پردازش
در جدول زیر گزینه های پیش پردازش داده ها که این سند در مورد آن بحث کرده است خلاصه می شود. در جدول ، "N/A" مخفف "کاربردی نیست".
گزینه پیش پردازش داده ها | سطح (تحولات بدون تابعیت) | تمام پاس در طول آموزش و سطح نمونه در طول خدمت (تحولات مطبوع) | تجمع زمان واقعی (پنجره) در طول آموزش و خدمت (تحولات جریان) |
---|---|---|---|
BigQuery (SQL) | امتیاز دهی دسته ای: OK - همان اجرای تحول در هنگام آموزش و امتیاز دهی دسته ای روی داده ها اعمال می شود. پیش بینی آنلاین: توصیه نمی شود -شما می توانید داده های آموزش را پردازش کنید ، اما این امر منجر به آموزش SKEW می شود زیرا شما با استفاده از ابزارهای مختلف ، داده ها را پردازش می کنید. | امتیاز دهی دسته ای: توصیه نمی شود . پیش بینی آنلاین: توصیه نمی شود . اگرچه می توانید از آمار محاسبه شده با استفاده از BigQuery به عنوان مثال در سطح گروه/تحولات آنلاین استفاده کنید ، اما کار ساده ای نیست زیرا باید یک فروشگاه آمار را حفظ کنید که در طول آموزش جمع شود و در طول پیش بینی استفاده شود. | امتیاز دهی دسته ای: N/A- مجامع مانند اینها بر اساس رویدادهای زمان واقعی محاسبه می شوند. پیش بینی آنلاین: توصیه نمی شود -شما می توانید داده های آموزش را پردازش کنید ، اما این امر منجر به آموزش SKEW می شود زیرا شما با استفاده از ابزارهای مختلف ، داده ها را پردازش می کنید. |
DataFlow (پرتوی آپاچی) | امتیاز دهی دسته ای: OK - همان اجرای تحول در هنگام آموزش و امتیاز دهی دسته ای روی داده ها اعمال می شود. پیش بینی آنلاین: OK - IF داده ها در زمان خدمت از میخانه/Sub تهیه می شود که توسط DataFlow مصرف می شود. در غیر این صورت ، منجر به آموزش و پرورش می شود. | امتیاز دهی دسته ای: توصیه نمی شود . پیش بینی های آنلاین: توصیه نمی شود . اگرچه می توانید از آمار محاسبه شده با استفاده از DataFlow به عنوان مثال در سطح گروه/تحولات آنلاین استفاده کنید ، اما کار ساده ای نیست زیرا باید یک فروشگاه آمار را حفظ کنید که در طول آموزش جمع شود و در طول پیش بینی استفاده شود. | امتیاز دهی دسته ای: N/A- مجامع مانند اینها بر اساس رویدادهای زمان واقعی محاسبه می شوند. پیش بینی آنلاین: OK - همان تحول پرتو Apache در هنگام آموزش (دسته ای) و خدمت (جریان) روی داده ها اعمال می شود. |
DataFlow (Apache Beam + TFT) | امتیاز دهی دسته ای: OK - همان اجرای تحول در هنگام آموزش و امتیاز دهی دسته ای به داده ها اعمال می شود. پیش بینی آنلاین: توصیه می شود -از آموزش و پرورش جلوگیری می کند و داده های آموزش را از جلو تهیه می کند. | امتیاز دهی دسته ای: توصیه می شود . پیش بینی آنلاین: توصیه می شود . هر دو استفاده توصیه می شود زیرا منطق تحول و آمار محاسبه شده در طول آموزش به عنوان یک نمودار Tensorflow که برای خدمت به مدل صادر شده وصل شده است ، ذخیره می شوند. | امتیاز دهی دسته ای: N/A- مجامع مانند اینها بر اساس رویدادهای زمان واقعی محاسبه می شوند. پیش بینی آنلاین: OK - همان تحول پرتو Apache در هنگام آموزش (دسته ای) و خدمت (جریان) روی داده ها اعمال می شود. |
tensorflow * | امتیاز دهی دسته ای: توصیه نمی شود . پیش بینی آنلاین: توصیه نمی شود . برای بهره وری آموزش در هر دو مورد ، بهتر است داده های آموزش را در جلو تهیه کنید. | امتیاز دهی دسته ای: امکان پذیر نیست . پیش بینی آنلاین: امکان پذیر نیست . | امتیاز دهی دسته ای: N/A- مجامع مانند اینها بر اساس رویدادهای زمان واقعی محاسبه می شوند. پیش بینی آنلاین: امکان پذیر نیست . |
* با TensorFlow ، تحولات مانند عبور ، تعبیه و رمزگذاری یک داغ باید به عنوان ستون های feature_columns
به صورت اعلامیه انجام شود.
بعدش چی
- برای اجرای یک خط لوله
tf.Transform
و اجرای آن با استفاده از DataFlow ، قسمت دوم این سری را بخوانید ، پیش پردازش داده برای ML با استفاده از TensorFlow Transform . - تخصص Coursera را در ML با TensorFlow در Google Cloud انجام دهید.
- در مورد بهترین روشهای مهندسی ML در قوانین ML اطلاعات کسب کنید.
- برای معماری های مرجع بیشتر ، نمودارها و بهترین شیوه ها ، راه حل های ابری TFX را کشف کنید.