بر اساس سخنرانی های من در Highload++ و DataFest Minsk 2019.
امروزه برای بسیاری، پست بخشی جدایی ناپذیر از زندگی آنلاین است. با کمک آن، مکاتبات تجاری را انجام می دهیم، انواع اطلاعات مهم مربوط به امور مالی، رزرو هتل، ثبت سفارش و موارد دیگر را ذخیره می کنیم. در اواسط سال 2018، ما یک استراتژی محصول برای توسعه ایمیل تدوین کردیم. پست مدرن چگونه باید باشد؟
نامه باید باشد هوشمندانه، یعنی کمک به کاربران در جهت یابی حجم فزاینده اطلاعات: فیلتر، ساختار و ارائه آن به راحت ترین روش. او باید باشد مفید، به شما امکان می دهد وظایف مختلفی را درست در صندوق پستی خود حل کنید، به عنوان مثال، جریمه پرداخت کنید (عملکردی که متاسفانه من از آن استفاده می کنم). و در عین حال، البته، نامه باید محافظت از اطلاعات، قطع هرزنامه و محافظت در برابر هک را فراهم کند، یعنی، امن.
این حوزه ها تعدادی از مشکلات کلیدی را تعریف می کنند که بسیاری از آنها را می توان به طور موثر با استفاده از یادگیری ماشین حل کرد. در اینجا نمونههایی از ویژگیهای موجود از قبل توسعهیافته به عنوان بخشی از استراتژی وجود دارد - یکی برای هر جهت.
- پاسخ هوشمندانه. Mail دارای ویژگی پاسخ هوشمند است. شبکه عصبی متن نامه را تجزیه و تحلیل می کند، معنی و هدف آن را درک می کند و در نتیجه سه گزینه پاسخ مناسب را ارائه می دهد: مثبت، منفی و خنثی. این به صرفه جویی قابل توجهی در زمان پاسخ دادن به نامه ها کمک می کند و همچنین اغلب به روشی غیر استاندارد و خنده دار پاسخ می دهد.
- گروه بندی ایمیل هامربوط به سفارشات در فروشگاه های اینترنتی ما اغلب به صورت آنلاین خرید می کنیم و به عنوان یک قاعده، فروشگاه ها می توانند برای هر سفارش چندین ایمیل ارسال کنند. به عنوان مثال، از AliExpress، بزرگترین سرویس، حروف زیادی برای یک سفارش وارد می شود و ما محاسبه کردیم که در حالت ترمینال تعداد آنها می تواند به 29 برسد. بنابراین، با استفاده از مدل Named Entity Recognition، شماره سفارش را استخراج می کنیم. و اطلاعات دیگر از متن و گروه بندی تمام حروف در یک موضوع. همچنین اطلاعات اولیه سفارش را در یک کادر جداگانه نمایش می دهیم که کار با این نوع ایمیل را آسان می کند.
- ضد فیشینگ. فیشینگ یک نوع ایمیل جعلی به خصوص خطرناک است که با کمک آن مهاجمان سعی می کنند اطلاعات مالی (از جمله کارت های بانکی کاربر) و ورود به سیستم را به دست آورند. چنین نامه هایی از نامه های واقعی ارسال شده توسط سرویس، از جمله بصری، تقلید می کنند. بنابراین، با کمک Computer Vision، لوگوها و سبک طراحی حروف را از شرکت های بزرگ (به عنوان مثال Mail.ru، Sber، Alfa) تشخیص می دهیم و این را همراه با متن و سایر ویژگی های موجود در طبقه بندی کننده های هرزنامه و فیشینگ خود در نظر می گیریم. .
فراگیری ماشین
به طور کلی کمی در مورد یادگیری ماشین در ایمیل. نامه یک سیستم بسیار بارگذاری شده است: به طور متوسط 1,5 میلیارد نامه در روز از سرورهای ما برای 30 میلیون کاربر DAU عبور می کند. حدود 30 سیستم یادگیری ماشینی از تمام عملکردها و ویژگی های لازم پشتیبانی می کنند.
هر حرف از یک خط لوله طبقه بندی کامل عبور می کند. ابتدا اسپم ها را قطع می کنیم و ایمیل های خوبی می گذاریم. کاربران اغلب متوجه کار آنتی اسپم نمی شوند، زیرا 95-99٪ از هرزنامه ها حتی در پوشه مناسب نیز ختم نمی شوند. تشخیص هرزنامه بخش بسیار مهمی از سیستم ما و سخت ترین آن است، زیرا در زمینه ضد هرزنامه سازگاری دائمی بین سیستم های دفاعی و حمله وجود دارد که یک چالش مهندسی مداوم را برای تیم ما فراهم می کند.
سپس حروف را از افراد و روبات ها جدا می کنیم. ایمیلهای افراد مهمترین هستند، بنابراین ویژگیهایی مانند پاسخ هوشمند را برای آنها ارائه میکنیم. نامههای روباتها به دو بخش تقسیم میشوند: تراکنشی - این نامههای مهم خدمات هستند، به عنوان مثال، تأیید خرید یا رزرو هتل، امور مالی و اطلاعاتی - اینها تبلیغات تجاری، تخفیفها هستند.
ما معتقدیم که ایمیل های تراکنشی از نظر اهمیت با مکاتبات شخصی برابری می کنند. آنها باید در دسترس باشند، زیرا ما اغلب نیاز داریم به سرعت اطلاعات مربوط به یک سفارش یا رزرو بلیط هواپیما را پیدا کنیم و زمان خود را صرف جستجوی این نامه ها می کنیم. بنابراین، برای راحتی، به طور خودکار آنها را به شش دسته اصلی تقسیم می کنیم: سفر، سفارشات، مالی، بلیط، ثبت نام و در نهایت جریمه.
نامه های اطلاعاتی بزرگترین و احتمالاً کم اهمیت ترین گروه هستند که نیازی به پاسخ فوری ندارند، زیرا اگر کاربر چنین نامه ای را نخواند هیچ چیز قابل توجهی در زندگی او تغییر نخواهد کرد. در رابط جدید خود، آنها را به دو رشته تقسیم می کنیم: شبکه های اجتماعی و خبرنامه ها، بنابراین صندوق ورودی را به صورت بصری پاک می کنیم و فقط پیام های مهم را قابل مشاهده می کنیم.
عملیات
تعداد زیادی از سیستم ها باعث ایجاد مشکلات زیادی در عملکرد می شوند. از این گذشته، مدلها مانند هر نرمافزاری به مرور زمان از بین میروند: ویژگیها خراب میشوند، ماشینها از کار میافتند، کدها کج میشوند. علاوه بر این، دادهها دائماً در حال تغییر هستند: دادههای جدید اضافه میشوند، الگوهای رفتار کاربر تغییر میکنند، و غیره، بنابراین مدلی بدون پشتیبانی مناسب در طول زمان بدتر و بدتر عمل میکند.
ما نباید فراموش کنیم که هر چه یادگیری ماشین عمیقتر به زندگی کاربران نفوذ کند، تأثیر بیشتری بر اکوسیستم میگذارد و در نتیجه، ضررهای مالی یا سود بیشتری میتوانند دریافت کنند. بنابراین، در تعداد فزایندهای از حوزهها، بازیکنان با کار الگوریتمهای ML سازگار میشوند (نمونههای کلاسیک عبارتند از تبلیغات، جستجو و آنتی اسپمهایی که قبلاً ذکر شد).
همچنین، وظایف یادگیری ماشین یک ویژگی خاص دارند: هر تغییر، حتی جزئی، در سیستم می تواند کار زیادی را با مدل ایجاد کند: کار با داده، آموزش مجدد، استقرار، که می تواند هفته ها یا ماه ها طول بکشد. بنابراین، هرچه محیطی که مدلهای شما در آن کار میکنند سریعتر تغییر کند، تلاش بیشتری برای حفظ آنها نیاز دارد. یک تیم میتواند سیستمهای زیادی ایجاد کند و از این بابت خوشحال باشد، اما تقریباً تمام منابع خود را صرف نگهداری از آنها کند، بدون اینکه فرصت انجام کار جدیدی را داشته باشد. ما یک بار در تیم آنتی اسپم با چنین وضعیتی مواجه شدیم. و آنها به این نتیجه رسیدند که پشتیبانی باید خودکار باشد.
اتوماسیون
چه چیزی را می توان خودکار کرد؟ تقریباً همه چیز، در واقع. من چهار حوزه را که زیرساخت یادگیری ماشین را تعریف می کنند شناسایی کرده ام:
- جمع آوری داده ها؛
- آموزش اضافی؛
- استقرار
- تست و نظارت
اگر محیط ناپایدار باشد و دائماً در حال تغییر باشد، کل زیرساخت اطراف مدل بسیار مهمتر از خود مدل است. ممکن است یک طبقهبندی خطی قدیمی خوب باشد، اما اگر ویژگیهای مناسبی را به آن بدهید و بازخورد خوبی از کاربران دریافت کنید، بسیار بهتر از مدلهای مدرن با تمام زنگها و سوتها کار میکند.
حلقه بازخورد
این چرخه ترکیبی از جمع آوری داده ها، آموزش اضافی و استقرار - در واقع، کل چرخه به روز رسانی مدل است. چرا مهم است؟ به برنامه ثبت نام در ایمیل نگاه کنید:
یک توسعه دهنده یادگیری ماشینی یک مدل ضد ربات را پیاده سازی کرده است که از ثبت نام ربات ها در ایمیل جلوگیری می کند. نمودار به مقداری کاهش می یابد که فقط کاربران واقعی باقی می مانند. همه چی عالیه! اما چهار ساعت می گذرد، ربات ها اسکریپت های خود را تغییر می دهند و همه چیز به حالت عادی باز می گردد. در این پیادهسازی، توسعهدهنده یک ماه وقت صرف افزودن ویژگیها و آموزش مجدد مدل کرد، اما هرزنامهنویس توانست در چهار ساعت خود را با آن سازگار کند.
برای اینکه خیلی دردناک نباشیم و بعداً مجبور نباشیم همه چیز را دوباره انجام دهیم، ابتدا باید به این فکر کنیم که حلقه بازخورد چگونه خواهد بود و در صورت تغییر محیط چه خواهیم کرد. بیایید با جمع آوری داده ها شروع کنیم - این سوخت الگوریتم های ما است.
جمع آوری داده ها
واضح است که برای شبکههای عصبی مدرن، هر چه دادهها بیشتر باشد، بهتر است و در واقع توسط کاربران محصول تولید میشوند. کاربران میتوانند با علامتگذاری دادهها به ما کمک کنند، اما ما نمیتوانیم از این موضوع سوء استفاده کنیم، زیرا در برخی مواقع کاربران از تکمیل مدلهای شما خسته میشوند و به محصول دیگری روی میآورند.
یکی از رایج ترین اشتباهات (در اینجا من به Andrew Ng اشاره می کنم) تمرکز بیش از حد بر معیارهای مجموعه داده آزمایشی است، و نه بر بازخورد از کاربر، که در واقع معیار اصلی کیفیت کار است، زیرا ما ایجاد می کنیم. یک محصول برای کاربر اگر کاربر کار مدل را نفهمد یا دوست نداشته باشد، همه چیز خراب می شود.
بنابراین کاربر باید همیشه بتواند رای دهد و ابزاری برای بازخورد در اختیار او قرار گیرد. اگر فکر می کنیم نامه ای مربوط به امور مالی به صندوق پستی رسیده است، باید آن را علامت گذاری کنیم "مالی" و دکمه ای را بکشیم که کاربر می تواند روی آن کلیک کند و بگوید این مالی نیست.
کیفیت بازخورد
بیایید در مورد کیفیت بازخورد کاربران صحبت کنیم. اولا، شما و کاربر می توانید معانی مختلفی را در یک مفهوم قرار دهید. برای مثال، شما و مدیران محصولتان فکر میکنید که «مالی» به معنای نامههای بانک است و کاربر فکر میکند که نامهای از مادربزرگ درباره حقوق بازنشستگیاش نیز به امور مالی اشاره دارد. ثانیاً، کاربرانی وجود دارند که بیخیال عاشق فشار دادن دکمهها بدون هیچ منطقی هستند. ثالثاً، کاربر ممکن است در نتیجه گیری خود عمیقاً اشتباه کند. یک مثال قابل توجه از عمل ما، پیاده سازی یک طبقه بندی کننده است
و فراموش نکنیم که دکمهها نه تنها توسط افراد، بلکه توسط انواع رباتهایی که وانمود میکنند یک مرورگر هستند نیز قابل کلیک هستند. بنابراین بازخورد خام برای یادگیری خوب نیست. با این اطلاعات چه کاری می توانید انجام دهید؟
ما از دو روش استفاده می کنیم:
- بازخورد از ML مرتبط. به عنوان مثال، ما یک سیستم آنتی ربات آنلاین داریم که همانطور که اشاره کردم، بر اساس تعداد محدودی از علائم، سریع تصمیم می گیرد. و یک سیستم دوم و آهسته وجود دارد که بعد از واقعیت کار می کند. اطلاعات بیشتری در مورد کاربر، رفتار او و غیره دارد. در نتیجه آگاهانه ترین تصمیم گرفته می شود و بر این اساس از دقت و کاملی بالاتری برخوردار است. شما می توانید تفاوت عملکرد این سیستم ها را به عنوان داده های آموزشی به سیستم اول هدایت کنید. بنابراین، یک سیستم ساده تر همیشه سعی می کند به عملکرد سیستم پیچیده تر نزدیک شود.
- طبقه بندی کلیک کنید. شما به سادگی می توانید هر کلیک کاربر را طبقه بندی کنید، اعتبار و قابلیت استفاده آن را ارزیابی کنید. ما این کار را در ایمیل ضد هرزنامه، با استفاده از ویژگی های کاربر، تاریخچه، ویژگی های فرستنده، خود متن و نتیجه طبقه بندی کننده ها انجام می دهیم. در نتیجه، ما یک سیستم خودکار دریافت می کنیم که بازخورد کاربر را تأیید می کند. و از آنجایی که نیاز به بازآموزی بسیار کمتری دارد، کار آن می تواند مبنایی برای همه سیستم های دیگر شود. اولویت اصلی در این مدل دقت است، زیرا آموزش مدل بر روی داده های نادرست مملو از عواقب است.
در حالی که ما در حال تمیز کردن دادهها و آموزش بیشتر سیستمهای ML خود هستیم، نباید کاربران را فراموش کنیم، زیرا برای ما هزاران، میلیونها خطا در نمودار آمار است و برای کاربر، هر باگ یک تراژدی است. علاوه بر این که کاربر باید به نحوی با خطای شما در محصول زندگی کند، پس از دریافت بازخورد، انتظار دارد که وضعیت مشابهی در آینده برطرف شود. بنابراین، همیشه ارزش دارد که به کاربران نه تنها فرصت رای دادن، بلکه برای اصلاح رفتار سیستمهای ML نیز داده شود، به عنوان مثال، اکتشافات شخصی برای هر کلیک بازخورد ایجاد شود؛ در مورد ایمیل، این میتواند قابلیت فیلتر کردن باشد. چنین نامه هایی توسط فرستنده و عنوان برای این کاربر.
همچنین باید بر اساس برخی گزارش ها یا درخواست ها برای پشتیبانی در حالت نیمه اتوماتیک یا دستی مدلی بسازید تا دیگر کاربران دچار مشکلات مشابه نشوند.
اکتشافی برای یادگیری
دو مشکل با این اکتشافی و عصا وجود دارد. اولین مورد این است که نگهداری از تعداد روزافزون عصاها دشوار است، چه رسد به کیفیت و عملکرد آنها در مسافت طولانی. مشکل دوم این است که خطا ممکن است مکرر نباشد و چند کلیک برای آموزش بیشتر مدل کافی نخواهد بود. به نظر می رسد در صورت اعمال رویکرد زیر می توان این دو اثر نامرتبط را به طور قابل توجهی خنثی کرد.
- ما یک عصا موقت ایجاد می کنیم.
- ما داده ها را از آن به مدل ارسال می کنیم، آن به طور منظم خود را به روز می کند، از جمله در داده های دریافتی. البته در اینجا مهم است که اکتشافی از دقت بالایی برخوردار باشد تا از کیفیت داده های مجموعه آموزشی کاسته نشود.
- سپس مانیتورینگ را تنظیم می کنیم تا عصا را فعال کند و اگر بعد از مدتی عصا دیگر کار نمی کند و کاملاً توسط مدل پوشانده می شود، می توانید با خیال راحت آن را بردارید. حالا بعید است که این مشکل دوباره تکرار شود.
بنابراین یک ارتش از عصا بسیار مفید است. نکته اصلی این است که خدمات آنها فوری است و دائمی نیست.
آموزش تکمیلی
بازآموزی فرآیند افزودن داده های جدید به دست آمده در نتیجه بازخورد کاربران یا سایر سیستم ها و آموزش مدل موجود بر روی آن است. ممکن است چندین مشکل با آموزش اضافی وجود داشته باشد:
- این مدل ممکن است به سادگی از آموزش های اضافی پشتیبانی نکند، اما فقط از ابتدا یاد می گیرد.
- در هیچ کجای کتاب طبیعت نوشته نشده است که آموزش های تکمیلی قطعا کیفیت کار در تولید را بهبود می بخشد. اغلب برعکس اتفاق می افتد، یعنی فقط وخامت ممکن است.
- تغییرات می توانند غیرقابل پیش بینی باشند. این یک نکته نسبتاً ظریف است که ما برای خودمان شناسایی کرده ایم. حتی اگر یک مدل جدید در یک تست A/B نتایج مشابهی را در مقایسه با مدل فعلی نشان دهد، این بدان معنا نیست که یکسان عمل خواهد کرد. کار آنها ممکن است تنها در یک درصد متفاوت باشد، که ممکن است خطاهای جدیدی را به همراه داشته باشد یا موارد قدیمی را که قبلاً اصلاح شده اند، برگرداند. هم ما و هم کاربران از قبل می دانیم که چگونه با خطاهای فعلی زندگی کنیم، و وقتی تعداد زیادی خطای جدید ایجاد می شود، کاربر ممکن است متوجه نشود که چه اتفاقی می افتد، زیرا او انتظار رفتار قابل پیش بینی دارد.
بنابراین، مهمترین چیز در آموزش اضافی این است که اطمینان حاصل شود که مدل بهبود یافته یا حداقل بدتر نشده است.
اولین چیزی که وقتی در مورد آموزش اضافی صحبت می کنیم، رویکرد یادگیری فعال است. این یعنی چی؟ برای مثال، طبقهبندیکننده تعیین میکند که آیا ایمیل به امور مالی مرتبط است یا خیر، و در اطراف مرز تصمیمگیری آن، نمونهای از نمونههای برچسبگذاری شده را اضافه میکنیم. این به خوبی جواب می دهد، مثلاً در تبلیغات که بازخوردهای زیادی وجود دارد و می توانید مدل را به صورت آنلاین آموزش دهید. و اگر بازخورد کمی وجود داشته باشد، نمونه ای بسیار مغرضانه نسبت به توزیع داده های تولید دریافت می کنیم، که بر اساس آن ارزیابی رفتار مدل در طول عملیات غیرممکن است.
در واقع هدف ما حفظ الگوهای قدیمی، مدلهای شناخته شده و دستیابی به الگوهای جدید است. تداوم در اینجا مهم است. مدلی که اغلب برای عرضه آن زحمت زیادی کشیدیم، در حال حاضر کار می کند، بنابراین می توانیم روی عملکرد آن تمرکز کنیم.
مدل های مختلفی در پست استفاده می شود: درختان، خطی، شبکه های عصبی. برای هر کدام ما الگوریتم آموزشی اضافی خود را می سازیم. در فرآیند آموزش اضافی، ما نه تنها داده های جدید، بلکه اغلب ویژگی های جدیدی را نیز دریافت می کنیم که در تمام الگوریتم های زیر در نظر می گیریم.
مدل های خطی
فرض کنید رگرسیون لجستیک داریم. ما یک مدل ضرر از اجزای زیر ایجاد می کنیم:
- LogLoss در داده های جدید.
- وزن ویژگی های جدید را منظم می کنیم (به موارد قدیمی دست نمی زنیم).
- ما همچنین از داده های قدیمی یاد می گیریم تا الگوهای قدیمی را حفظ کنیم.
- و، شاید، مهمترین چیز: تنظیم هارمونیکی را اضافه می کنیم، که تضمین می کند که وزن ها نسبت به مدل قدیمی مطابق با هنجار تغییر زیادی نخواهند کرد.
از آنجایی که هر جزء Loss دارای ضرایبی است، میتوانیم مقادیر بهینه را برای کار خود از طریق اعتبارسنجی متقاطع یا بر اساس الزامات محصول انتخاب کنیم.
Деревья
بیایید به سراغ درختان تصمیم برویم. ما الگوریتم زیر را برای آموزش تکمیلی درختان گردآوری کرده ایم:
- این تولیدی جنگلی متشکل از 100-300 درخت را اداره می کند که بر روی یک مجموعه داده قدیمی آموزش داده شده است.
- در پایان M = 5 قطعه را حذف می کنیم و 2M = 10 قطعه جدید را اضافه می کنیم که روی کل مجموعه داده آموزش دیده اند، اما با وزن بالا برای داده های جدید، که طبیعتاً تغییر تدریجی در مدل را تضمین می کند.
بدیهی است که با گذشت زمان، تعداد درختان به شدت افزایش مییابد و باید به صورت دورهای از آنها کاسته شود تا زمانبندیها برآورده شود. برای انجام این کار، از تقطیر دانش (KD) که اکنون در همه جا حاضر است استفاده می کنیم. به طور خلاصه در مورد اصل عملکرد آن.
- ما مدل "پیچیده" فعلی را داریم. ما آن را روی مجموعه داده های آموزشی اجرا می کنیم و توزیع احتمال کلاس را در خروجی دریافت می کنیم.
- در مرحله بعد، مدل دانشجو (مدلی که در این مورد دارای درختان کمتری است) را آموزش می دهیم تا نتایج مدل را با استفاده از توزیع کلاس به عنوان متغیر هدف تکرار کند.
- در اینجا ذکر این نکته ضروری است که ما به هیچ وجه از نشانه گذاری مجموعه داده استفاده نمی کنیم و بنابراین می توانیم از داده های دلخواه استفاده کنیم. البته ما از یک نمونه داده از جریان رزمی به عنوان نمونه آموزشی برای مدل دانشجویی استفاده می کنیم. بنابراین، مجموعه آموزشی به ما امکان می دهد از دقت مدل اطمینان حاصل کنیم، و نمونه جریان عملکرد مشابهی را در توزیع تولید تضمین می کند، و تعصب مجموعه آموزشی را جبران می کند.
ترکیب این دو تکنیک (افزودن درختان و کاهش دوره ای تعداد آنها با استفاده از تقطیر دانش) معرفی الگوهای جدید و تداوم کامل را تضمین می کند.
با کمک KD، ما همچنین عملیات مختلفی را روی ویژگی های مدل انجام می دهیم، مانند حذف ویژگی ها و کار بر روی شکاف ها. در مورد ما، تعدادی ویژگی آماری مهم (توسط فرستنده، هش متن، URL ها و غیره) داریم که در پایگاه داده ذخیره می شوند که تمایل به شکست دارند. البته این مدل برای چنین توسعه رویدادها آماده نیست، زیرا موقعیت های شکست در مجموعه آموزشی رخ نمی دهد. در چنین مواردی، ما تکنیکهای KD و تقویت را ترکیب میکنیم: هنگام آموزش بخشی از دادهها، ویژگیهای لازم را حذف یا تنظیم مجدد میکنیم و برچسبهای اصلی (خروجیهای مدل فعلی) را میگیریم و مدل دانشآموز یاد میگیرد که این توزیع را تکرار کند. .
ما متوجه شدیم که هرچه دستکاری مدل جدیتر رخ دهد، درصد نمونه نخ مورد نیاز بیشتر است.
حذف ویژگی، ساده ترین عملیات، تنها به بخش کوچکی از جریان نیاز دارد، زیرا تنها چند ویژگی تغییر می کند و مدل فعلی در همان مجموعه آموزش داده شده است - تفاوت حداقل است. برای ساده سازی مدل (کاهش تعداد درختان چندین بار)، 50 تا 50 مورد نیاز است. و برای حذف ویژگی های آماری مهم که عملکرد مدل را به طور جدی تحت تاثیر قرار می دهد، حتی جریان بیشتری برای تسطیح کردن کار مورد نیاز است. مدل جدید مقاوم در برابر حذف بر روی انواع حروف.
FastText
بیایید به سراغ FastText برویم. به شما یادآوری می کنم که نمایش (Embedding) یک کلمه از مجموع تعبیه خود کلمه و تمام حرف N-گرم آن، معمولاً سه گرام تشکیل شده است. از آنجایی که تریگرامهای بسیار زیادی وجود دارد، از Bucket Hashing استفاده میشود، یعنی کل فضا را به یک نقشه هشمپ ثابت تبدیل میکند. در نتیجه، ماتریس وزن با ابعاد لایه داخلی در هر تعداد کلمه + سطل به دست می آید.
با آموزش اضافی، علائم جدید ظاهر می شود: کلمات و سه خط. هیچ چیز قابل توجهی در آموزش پیگیری استاندارد از فیس بوک اتفاق نمی افتد. فقط وزنهای قدیمی با آنتروپی متقابل بر روی دادههای جدید بازآموزی میشوند. بنابراین، از ویژگیهای جدید استفاده نمیشود؛ البته، این رویکرد دارای تمام معایبی است که در بالا توضیح داده شد مرتبط با غیرقابل پیشبینی بودن مدل در تولید است. به همین دلیل FastText را کمی تغییر دادیم. همه وزنهای جدید (کلمات و سهگرامها) را اضافه میکنیم، کل ماتریس را با آنتروپی متقاطع گسترش میدهیم و منظمسازی هارمونیک را با قیاس با مدل خطی اضافه میکنیم، که تغییر ناچیز در وزنهای قدیمی را تضمین میکند.
CNN
شبکه های Convolutional کمی پیچیده تر هستند. اگر آخرین لایه ها در CNN تکمیل شوند، مطمئناً می توانید تنظیم هارمونیک را اعمال کنید و تداوم را تضمین کنید. اما اگر آموزش اضافی کل شبکه مورد نیاز باشد، دیگر نمی توان چنین تنظیمی را برای همه لایه ها اعمال کرد. با این حال، یک گزینه برای آموزش تعبیههای تکمیلی از طریق Triplet Loss وجود دارد (
باخت سه گانه
با استفاده از یک کار ضد فیشینگ به عنوان مثال، اجازه دهید از دست دادن سه گانه به طور کلی نگاه کنیم. ما از لوگوی خود و همچنین نمونه های مثبت و منفی از لوگوهای شرکت های دیگر استفاده می کنیم. ما فاصله بین اولی را به حداقل میرسانیم و فاصله بین دومی را به حداکثر میرسانیم، این کار را با یک شکاف کوچک انجام میدهیم تا از فشردگی بیشتر کلاسها اطمینان حاصل کنیم.
اگر شبکه را بیشتر آموزش دهیم، فضای متریک ما کاملاً تغییر می کند و کاملاً با قبلی ناسازگار می شود. این یک مشکل جدی در مسائلی است که از بردارها استفاده می کنند. برای غلبه بر این مشکل، در حین آموزش، جاسازی های قدیمی را با هم ترکیب می کنیم.
ما داده های جدیدی را به مجموعه آموزشی اضافه کرده ایم و نسخه دوم مدل را از ابتدا آموزش می دهیم. در مرحله دوم، شبکه خود را بیشتر آموزش می دهیم (Finetuning): ابتدا آخرین لایه تکمیل می شود و سپس کل شبکه Unfrozen می شود. در فرآیند آهنگسازی سه قلوها، ما تنها بخشی از جاسازی ها را با استفاده از مدل آموزش دیده محاسبه می کنیم، بقیه را با استفاده از مدل قدیمی محاسبه می کنیم. بنابراین، در فرآیند آموزش اضافی، از سازگاری فضاهای متریک v1 و v2 اطمینان حاصل می کنیم. یک نسخه منحصر به فرد از منظم سازی هارمونیک.
کل معماری
اگر کل سیستم را با استفاده از آنتی اسپم به عنوان مثال در نظر بگیریم، آنگاه مدلها مجزا نیستند، بلکه درون یکدیگر قرار گرفتهاند. ما عکس، متن و سایر ویژگیها میگیریم، با استفاده از CNN و Fast Text، جاسازیها را دریافت میکنیم. سپس، طبقهبندیکنندهها در بالای جاسازیها اعمال میشوند که امتیازاتی را برای کلاسهای مختلف (انواع حروف، هرزنامه، وجود لوگو) ارائه میکنند. سیگنال ها و علائم در حال حاضر وارد جنگل درختان شده اند تا تصمیم نهایی گرفته شود. طبقهبندیکنندههای منفرد در این طرح امکان تفسیر بهتر نتایج سیستم و بهطور خاصتر بازآموزی اجزا را در صورت بروز مشکل، بهجای تغذیه همه دادهها در درختهای تصمیمگیری بهصورت خام فراهم میکنند.
در نتیجه، ما تداوم را در هر سطح تضمین می کنیم. در سطح پایین در CNN و Fast Text از تنظیم هارمونیک استفاده می کنیم، برای طبقه بندی کننده ها در وسط نیز از تنظیم هارمونیک و کالیبراسیون نرخ برای ثبات توزیع احتمال استفاده می کنیم. خوب، تقویت درخت به صورت تدریجی یا با استفاده از تقطیر دانش آموزش داده می شود.
به طور کلی، حفظ چنین سیستم یادگیری ماشینی تودرتو معمولاً دردسرساز است، زیرا هر جزء در سطح پایینتر منجر به بهروزرسانی کل سیستم بالا میشود. اما از آنجایی که در تنظیمات ما، هر جزء کمی تغییر میکند و با قبلی سازگار است، کل سیستم را میتوان تکه تکه بدون نیاز به آموزش مجدد کل ساختار بهروزرسانی کرد، که به آن اجازه میدهد بدون سربار جدی پشتیبانی شود.
مستقر کنید
ما جمعآوری دادهها و آموزشهای اضافی انواع مختلف مدلها را مورد بحث قرار دادهایم، بنابراین به سمت استقرار آنها در محیط تولید میرویم.
تست A/B
همانطور که قبلاً گفتم، در فرآیند جمعآوری دادهها، معمولاً نمونهای مغرضانه دریافت میکنیم که ارزیابی عملکرد تولید مدل از آن غیرممکن است. بنابراین، هنگام استقرار، مدل باید با نسخه قبلی مقایسه شود تا بفهمیم کارها واقعاً چگونه پیش میروند، یعنی آزمایشهای A/B را انجام دهیم. در واقع، فرآیند ارائه و تجزیه و تحلیل نمودارها کاملاً معمولی است و به راحتی می توان آن را خودکار کرد. ما مدلهای خود را بهتدریج به 5، 30، 50 درصد و 100 درصد کاربران عرضه میکنیم، در حالی که تمام معیارهای موجود در پاسخهای مدل و بازخورد کاربر را جمعآوری میکنیم. در مورد برخی موارد پرت جدی، ما به طور خودکار مدل را به عقب برمی گردانیم و برای سایر موارد، با جمع آوری تعداد کافی کلیک کاربر، تصمیم می گیریم درصد را افزایش دهیم. در نتیجه، مدل جدید را به طور کاملاً خودکار به 50 درصد از کاربران میرسانیم و عرضه برای کل مخاطبان توسط یک شخص تأیید میشود، اگرچه این مرحله میتواند خودکار باشد.
با این حال، فرآیند تست A/B فضایی را برای بهینه سازی فراهم می کند. واقعیت این است که هر تست A/B بسیار طولانی است (در مورد ما بسته به میزان بازخورد از 6 تا 24 ساعت طول می کشد) که آن را بسیار گران و با منابع محدود می کند. علاوه بر این، برای سرعت بخشیدن به زمان کلی آزمون A/B، به درصد بالایی از جریان برای آزمون نیاز است (بهکارگیری یک نمونه آماری معنیدار برای ارزیابی معیارها در درصد کمی میتواند زمان بسیار زیادی طول بکشد)، که باعث میشود تعداد اسلات های A/B بسیار محدود است. بدیهی است که ما فقط باید امیدوار کننده ترین مدل ها را آزمایش کنیم که در طول فرآیند آموزش اضافی تعداد زیادی از آنها را دریافت می کنیم.
برای حل این مشکل، طبقهبندیکننده جداگانهای را آموزش دادیم که موفقیت آزمون A/B را پیشبینی میکند. برای انجام این کار، ما آمار تصمیم گیری، دقت، یادآوری و سایر معیارها را در مجموعه آموزشی، در مورد معوق و نمونه از جریان به عنوان ویژگی در نظر می گیریم. ما همچنین مدل را با مدل فعلی در تولید، با اکتشاف مقایسه می کنیم و پیچیدگی مدل را در نظر می گیریم. با استفاده از تمام این ویژگیها، طبقهبندیکننده آموزشدیده در تاریخچه آزمون، مدلهای نامزد را ارزیابی میکند، در مورد ما اینها جنگلهای درختان هستند، و تصمیم میگیرد که از کدام یک در آزمون A/B استفاده کند.
در زمان اجرا، این رویکرد به ما اجازه داد تا تعداد تست های موفق A/B را چندین برابر افزایش دهیم.
تست و نظارت
آزمایش و نظارت، به طرز عجیبی، به سلامتی ما آسیب نمی رساند، بلکه برعکس، آن را بهبود می بخشد و ما را از استرس های غیرضروری رها می کند. آزمایش به شما امکان میدهد از خرابی جلوگیری کنید و نظارت به شما امکان میدهد آن را به موقع تشخیص دهید تا تأثیر آن بر کاربران کاهش یابد.
درک این نکته مهم است که دیر یا زود سیستم شما همیشه اشتباه می کند - این به دلیل چرخه توسعه هر نرم افزار است. در ابتدای توسعه سیستم همیشه باگ های زیادی وجود دارد تا زمانی که همه چیز حل شود و مرحله اصلی نوآوری کامل شود. اما با گذشت زمان، آنتروپی عوارض خود را می گیرد و خطاها دوباره ظاهر می شوند - به دلیل تخریب اجزای اطراف و تغییر در داده ها، که در ابتدا در مورد آن صحبت کردم.
در اینجا می خواهم به این نکته اشاره کنم که هر سیستم یادگیری ماشینی باید از نقطه نظر سود آن در کل چرخه عمر آن در نظر گرفته شود. نمودار زیر نمونه ای از نحوه عملکرد سیستم برای گرفتن یک نوع نادر از هرزنامه را نشان می دهد (خط در نمودار نزدیک به صفر است). یک روز، به دلیل یک ویژگی نادرست ذخیره شده، او دیوانه شد. خوشبختانه، هیچ نظارتی برای راهاندازی غیرعادی وجود نداشت؛ در نتیجه، سیستم شروع به ذخیره حروف در مقادیر زیاد در پوشه «هرزنامه» در مرز تصمیمگیری کرد. علیرغم اصلاح عواقب آن، این سیستم قبلاً آنقدر اشتباه کرده است که حتی تا پنج سال دیگر هزینه خود را نخواهد پرداخت. و این یک شکست کامل از نقطه نظر چرخه عمر مدل است.
بنابراین، یک چیز ساده مانند نظارت می تواند در زندگی یک مدل کلیدی شود. علاوه بر معیارهای استاندارد و واضح، توزیع پاسخها و امتیازات مدل و همچنین توزیع مقادیر ویژگیهای کلیدی را در نظر میگیریم. با استفاده از واگرایی KL، میتوانیم توزیع فعلی را با توزیع تاریخی یا مقادیر موجود در تست A/B با بقیه جریان مقایسه کنیم، که به ما امکان میدهد به ناهنجاریها در مدل پی ببریم و تغییرات را به موقع برگردانیم.
در بیشتر موارد، اولین نسخههای سیستمهای خود را با استفاده از روشهای اکتشافی ساده یا مدلهایی که در آینده به عنوان نظارت استفاده میکنیم، راهاندازی میکنیم. به عنوان مثال، ما مدل NER را در مقایسه با نمونه های معمولی برای فروشگاه های آنلاین خاص نظارت می کنیم و اگر پوشش طبقه بندی کننده در مقایسه با آنها کاهش یابد، دلایل آن را درک می کنیم. استفاده مفید دیگر از اکتشافی!
نمایش نتایج: از
بیایید دوباره ایده های کلیدی مقاله را مرور کنیم.
- Fibdeck. ما همیشه در مورد کاربر فکر می کنیم: چگونه او با اشتباهات ما زندگی می کند، چگونه می تواند آنها را گزارش کند. فراموش نکنید که کاربران منبع بازخورد خالص برای مدلهای آموزشی نیستند و باید با کمک سیستمهای ML کمکی پاک شوند. اگر امکان جمع آوری سیگنال از کاربر وجود نداشته باشد، ما به دنبال منابع جایگزین بازخورد، به عنوان مثال، سیستم های متصل هستیم.
- آموزش تکمیلی. نکته اصلی در اینجا تداوم است، بنابراین ما بر مدل تولید فعلی تکیه می کنیم. ما مدل های جدیدی را آموزش می دهیم تا به دلیل تنظیم هارمونیک و ترفندهای مشابه، تفاوت چندانی با مدل قبلی نداشته باشند.
- مستقر کنید. استقرار خودکار بر اساس معیارها زمان پیاده سازی مدل ها را تا حد زیادی کاهش می دهد. نظارت بر آمار و توزیع تصمیم گیری، تعداد سقوط از کاربران برای خواب آرام و آخر هفته پربار شما الزامی است.
خوب، امیدوارم این به شما کمک کند تا سیستمهای ML خود را سریعتر بهبود بخشید، آنها را سریعتر به بازار عرضه کنید، و آنها را قابل اعتمادتر و کمتر استرسزا کنید.
منبع: www.habr.com