در ادامه موضوع مسابقات یادگیری ماشینی در Habré، مایلیم دو پلتفرم دیگر را به خوانندگان معرفی کنیم. آنها مطمئناً به بزرگی Kaggle نیستند، اما قطعاً شایسته توجه هستند.
من شخصاً به چند دلیل زیاد کگل را دوست ندارم:
اولاً ، مسابقات در آنجا اغلب چندین ماه طول می کشد و مشارکت فعال مستلزم تلاش زیادی است.
دوم، هسته های عمومی (راه حل های عمومی). طرفداران Kaggle توصیه می کنند که با آنها با آرامش راهبان تبتی رفتار کنید، اما در واقعیت بسیار شرم آور است وقتی چیزی که یک یا دو ماه برای آن تلاش کرده اید ناگهان معلوم شود که در یک بشقاب نقره ای برای همه گذاشته شده است.
خوشبختانه مسابقات یادگیری ماشینی روی پلتفرم های دیگر برگزار می شود و یکی دو تا از این مسابقات مورد بحث قرار خواهد گرفت.
زبان رسمی: انگلیسی
سازمان دهندگان: Yandex، Sberbank، HSE
زبان رسمی روسی،
سازمان دهندگان: Mail.ru Group
دور آنلاین: 15 ژانویه - 11 فوریه 2019;
فینال در محل: 4-6 آوریل 2019
آنلاین - از 7 فوریه تا 15 مارس؛
آفلاین - از 30 مارس تا 1 آوریل.
با استفاده از مجموعه خاصی از داده ها در مورد یک ذره در برخورد دهنده بزرگ هادرون (مسیر، تکانه و سایر پارامترهای فیزیکی نسبتاً پیچیده)، تعیین کنید که آیا آن یک میون است یا خیر.
از این بیانیه، 2 وظیفه مشخص شد:
- در یکی فقط باید پیش بینی خود را ارسال می کردید،
- و در دیگری - کد و مدل کامل برای پیشبینی، و اجرا مشمول محدودیتهای نسبتاً شدیدی در زمان اجرا و استفاده از حافظه بود.
برای مسابقه هکاتون SNA، گزارشهای نمایش محتوا از گروههای باز در فیدهای اخبار کاربران برای فوریه تا مارس 2018 جمعآوری شد. مجموعه تست شامل هفته و نیم آخر اسفند است. هر ورودی در گزارش حاوی اطلاعاتی در مورد آنچه نشان داده شده است و به چه کسی، و همچنین نحوه واکنش کاربر به این محتوا است: آن را رتبه بندی کرده، نظر داده، آن را نادیده گرفته یا آن را از فید پنهان کرده است.
ماهیت وظایف SNA Hackathon این است که به هر کاربر شبکه اجتماعی Odnoklassniki فید خود را رتبه بندی کند و پست هایی را که "کلاس" دریافت می کنند تا حد امکان بالا می برد.
در مرحله آنلاین، کار به 3 قسمت تقسیم شد:
1. رتبه بندی پست ها بر اساس ویژگی های مختلف مشارکتی
2. رتبه بندی پست ها بر اساس تصاویر موجود در آنها
3. پست ها را با توجه به متن آنها رتبه بندی کنید
متریک سفارشی پیچیده، چیزی شبیه ROC-AUC
میانگین ROC-AUC توسط کاربر
جوایز مرحله اول - تی شرت برای N مکان، عبور به مرحله دوم، جایی که اقامت و غذا در طول مسابقه پرداخت شد.
فاز دوم - ??? (به دلایل خاصی در مراسم اهدای جوایز حضور نداشتم و نتوانستم جوایز را در نهایت بدانم). آنها به همه اعضای تیم برنده قول لپ تاپ دادند
جوایز مرحله اول - تی شرت برای 100 شرکت کننده برتر، عبور به مرحله دوم، جایی که سفر به مسکو، اقامت و غذا در طول مسابقه پرداخت شد. همچنین در پایان مرحله اول جوایزی برای بهترین ها در 3 کار در مرحله 1 اعلام شد: همه برنده یک کارت گرافیک RTX 2080 TI شدند!
مرحله دوم به صورت تیمی بود، تیم های 2 تا 5 نفره، جوایز:
مقام اول - 1 روبل
مقام اول - 2 روبل
مقام اول - 3 روبل
جایزه هیئت داوران - 100 روبل
گروه رسمی تلگرام، ~ 190 شرکت کننده، ارتباط به زبان انگلیسی، سوالات باید چندین روز برای پاسخ منتظر ماند
گروه رسمی در تلگرام ~1500 شرکت کننده بحث فعال وظایف بین شرکت کنندگان و برگزارکنندگان
برگزارکنندگان دو راه حل اساسی ساده و پیشرفته ارائه کردند. Simple به کمتر از 16 گیگابایت رم نیاز داشت و حافظه پیشرفته در 16 قرار نمی گرفت. در عین حال، با نگاهی به آینده، شرکت کنندگان نتوانستند به طور قابل توجهی از راه حل پیشرفته پیشی بگیرند. هیچ مشکلی در راه اندازی این راه حل ها وجود نداشت. لازم به ذکر است که در مثال پیشرفته نظری با اشاره به اینکه از کجا باید بهبود راه حل را شروع کرد وجود داشت.
راه حل های اولیه اولیه برای هر یک از وظایف ارائه شد که به راحتی توسط شرکت کنندگان پیشی گرفت. در روزهای اولیه مسابقه، شرکت کنندگان با چندین مشکل مواجه شدند: اولاً، داده ها در قالب Apache Parquet ارائه می شدند و همه ترکیبات Python و بسته پارکت بدون خطا کار نمی کردند. مشکل دوم بارگیری تصاویر از ابر ایمیل بود؛ در حال حاضر هیچ راه آسانی برای دانلود همزمان حجم زیادی از داده ها وجود ندارد. در نتیجه این مشکلات شرکت کنندگان را چند روز به تاخیر انداخت.
IDAO. مرحله اول
وظیفه طبقه بندی ذرات میون / غیر میون بر اساس ویژگی های آنها بود. ویژگی کلیدی این کار وجود ستون وزنی در داده های تمرین بود که خود برگزارکنندگان آن را به عنوان اطمینان به پاسخ این خط تعبیر کردند. مشکل این بود که تعداد کمی از ردیف ها دارای وزن منفی بودند.
پس از چند دقیقه فکر کردن در مورد خط با اشاره (اشاره به سادگی توجه را به این ویژگی ستون وزن جلب کرد) و ساخت این نمودار، تصمیم گرفتیم 3 گزینه را بررسی کنیم:
1) معکوس کردن هدف خطوط با وزن منفی (و وزن بر این اساس)
2) وزن ها را به حداقل مقدار تغییر دهید تا از 0 شروع شوند
3) از وزنه های رشته ای استفاده نکنید
گزینه سوم بدترین بود، اما دو گزینه اول نتیجه را بهبود بخشید، بهترین گزینه شماره 1 بود که بلافاصله ما را به مقام دوم فعلی در کار اول و اول در کار دوم رساند.
گام بعدی ما بررسی داده ها برای مقادیر از دست رفته بود. سازماندهندگان دادههای از قبل شانهشده را به ما دادند، که در آن مقادیر کمی از دست رفته بود، و آنها با -9999 جایگزین شدند.
ما مقادیر گمشده را در ستونهای MatchedHit_{X,Y,Z}[N] و MatchedHit_D{X,Y,Z}[N] یافتیم و فقط زمانی که N=2 یا 3 باشد. همانطور که میدانیم، برخی از ذرات از هر 4 آشکارساز عبور کرد و روی صفحه 3 یا 4 متوقف شد. دادهها همچنین حاوی ستونهای Lextra_{X,Y}[N] بودند که ظاهراً همان چیزی را توصیف میکنند که MatchedHit_{X,Y,Z}[N]، اما از نوعی برونیابی استفاده میکند. این حدسهای ناچیز نشان میدهد که Lextra_{X,Y}[N] میتواند جایگزین مقادیر از دست رفته در MatchedHit_{X,Y,Z}[N] شود (فقط برای مختصات X و Y). MatchedHit_Z[N] به خوبی با میانه پر شد. این دستکاری ها به ما این امکان را داد که در هر دو کار به مقام اول برسیم.
با توجه به اینکه برای پیروزی در مرحله اول چیزی ندادند، میتوانستیم همینجا متوقف شویم، اما ادامه دادیم، چند تصویر زیبا کشیدیم و به ویژگیهای جدیدی رسیدیم.
به عنوان مثال، متوجه شدیم که اگر نقاط تلاقی یک ذره را با هر یک از چهار صفحه آشکارساز رسم کنیم، می بینیم که نقاط روی هر یک از صفحات به 5 مستطیل با نسبت ابعاد 4 به 5 گروه بندی شده و در مرکز آن قرار دارند. نقطه (0,0) و در مستطیل اول هیچ نقطه ای وجود ندارد.
شماره صفحه / ابعاد مستطیل
1
2
3
4
5
بشقاب 1
500h625
1000h1250
2000h2500
4000h5000
8000h10000
بشقاب 2
520h650
1040h1300
2080h2600
4160h5200
8320h10400
بشقاب 3
560h700
1120h1400
2240h2800
4480h5600
8960h11200
بشقاب 4
600h750
1200h1500
2400h3000
4800h6000
9600h12000
پس از تعیین این ابعاد، ما 4 ویژگی دسته بندی جدید را برای هر ذره اضافه کردیم - تعداد مستطیلی که در آن هر صفحه را قطع می کند.
ما همچنین متوجه شدیم که به نظر می رسد ذرات از مرکز به طرفین پراکنده می شوند و این ایده به وجود آمد که به نوعی "کیفیت" این پراکندگی را ارزیابی کنیم. در حالت ایدهآل، احتمالاً میتوان بسته به نقطه برخاستن، نوعی سهمی «ایدهآل» ایجاد کرد و انحراف از آن را تخمین زد، اما ما خود را به خط مستقیم «ایدهآل» محدود کردیم. با ایجاد چنین خطوط مستقیم ایده آل برای هر نقطه ورودی، ما توانستیم انحراف معیار مسیر هر ذره را از این خط مستقیم محاسبه کنیم. از آنجایی که میانگین انحراف برای هدف = 1 152 و برای هدف = 0 390 بود، ما به طور آزمایشی این ویژگی را خوب ارزیابی کردیم. و در واقع، این ویژگی بلافاصله در صدر مفیدترین ها قرار گرفت.
ما خوشحال شدیم و انحراف هر 4 نقطه تقاطع برای هر ذره از خط مستقیم ایده آل را به عنوان 4 ویژگی اضافی اضافه کردیم (و همچنین به خوبی کار کردند).
پیوندهایی به مقالات علمی در مورد موضوع مسابقه که توسط برگزارکنندگان به ما داده شد، این ایده را ایجاد کرد که ما از اولین نفر برای حل این مشکل فاصله داریم و احتمالاً نوعی نرم افزار تخصصی وجود دارد. پس از کشف یک مخزن در github که در آن متدهای IsMuonSimple، IsMuon، IsMuonLoose پیاده سازی شده بودند، آنها را با تغییرات جزئی به سایت خود منتقل کردیم. خود روش ها بسیار ساده بودند: به عنوان مثال، اگر انرژی کمتر از یک آستانه خاص باشد، پس یک میون نیست، در غیر این صورت یک میون است. چنین ویژگی های ساده بدیهی است که نمی تواند افزایشی را در مورد استفاده از تقویت گرادیان ایجاد کند، بنابراین ما "فاصله" قابل توجه دیگری را به آستانه اضافه کردیم. این ویژگی ها نیز اندکی بهبود یافته اند. شاید با تحلیل دقیقتر روشهای موجود، میتوان روشهای قویتری را یافت و به نشانهها اضافه کرد.
در پایان مسابقه، راه حل «سریع» را برای مشکل دوم کمی تغییر دادیم؛ در پایان، در موارد زیر با خط پایه تفاوت داشت:
در ردیف هایی با وزن منفی هدف معکوس شد
پر کردن مقادیر از دست رفته در MatchedHit_{X,Y,Z}[N]
کاهش عمق به 7
کاهش نرخ یادگیری به 0.1 (0.19 بود)
در نتیجه، ویژگیهای بیشتری را امتحان کردیم (نه خیلی موفقیت آمیز)، پارامترهای انتخاب شده و آموزش catboost، lightgbm و xgboost، ترکیبهای مختلف پیشبینیها را امتحان کردیم و قبل از باز کردن خصوصی، با اطمینان در کار دوم برنده شدیم، و در مرحله اول جزو کارمندان بودیم. رهبران
پس از باز کردن بخش خصوصی، ما در رتبه 10 برای کار اول و 1 برای کار دوم قرار داشتیم. همه رهبران با هم قاطی شدند و سرعت در خصوصی بیشتر از جدول بود. به نظر می رسد که داده ها طبقه بندی ضعیفی داشتند (یا برای مثال ردیف هایی با وزن منفی در خصوصی وجود نداشت) و این کمی خسته کننده بود.
SNA Hackathon 2019 - متن. مرحله اول
وظیفه رتبه بندی پست های کاربران در شبکه اجتماعی Odnoklassniki بر اساس متن آنها بود؛ علاوه بر متن، چند ویژگی دیگر پست (زبان، مالک، تاریخ و زمان ایجاد، تاریخ و زمان مشاهده) وجود داشت. ).
به عنوان رویکردهای کلاسیک برای کار با متن، دو گزینه را برجسته می کنم:
نگاشت هر کلمه در یک فضای برداری n بعدی به طوری که کلمات مشابه دارای بردارهای مشابه باشند (بیشتر در مقاله ما، سپس یا یافتن میانگین کلمه برای متن یا استفاده از مکانیسم هایی که موقعیت نسبی کلمات را در نظر می گیرند (CNN، LSTM/GRU).
استفاده از مدل هایی که می توانند بلافاصله با کل جملات کار کنند. مثلا برت. در تئوری، این رویکرد باید بهتر عمل کند.
از آنجایی که این اولین تجربه من با متون بود، آموزش دادن به کسی اشتباه است، بنابراین خودم آموزش خواهم داد. اینها نکاتی است که در ابتدای مسابقه به خودم می دهم:
قبل از اینکه برای آموزش چیزی بدوید، به داده ها نگاه کنید! علاوه بر خود متن، داده ها چندین ستون داشتند و می توان خیلی بیشتر از من از آنها برداشت. ساده ترین کار این است که به معنای رمزگذاری هدف برای برخی از ستون ها انجام شود.
از همه داده ها درس نگیرید! داده های زیادی وجود داشت (حدود 17 میلیون ردیف) و استفاده از همه آنها برای آزمایش فرضیه ها مطلقاً ضروری نبود. آموزش و پیش پردازش بسیار کند بود، و من بدیهی است که وقت داشتم تا فرضیه های جالب تری را آزمایش کنم.
<توصیه بحث برانگیز> نیازی به جستجوی مدل قاتل نیست. من مدت زیادی را صرف کشف المو و برت کردم، به این امید که آنها فوراً مرا به مکانی بلند ببرند، و در نتیجه از تعبیههای از پیش آموزش داده شده FastText برای زبان روسی استفاده کردم. من نمی توانستم با المو به سرعت بهتری برسم و با برت هنوز هم فرصت پیدا نکردم.
<توصیه بحث برانگیز> نیازی نیست به دنبال یک ویژگی قاتل باشید. با نگاه کردن به داده ها، متوجه شدم که حدود 1 درصد از متون در واقع حاوی متن نیستند! اما پیوندهایی به برخی منابع وجود داشت و من یک تجزیه کننده ساده نوشتم که سایت را باز کرد و عنوان و توضیحات را بیرون آورد. ایده خوبی به نظر می رسید، اما بعد از آن من رانده شدم و تصمیم گرفتم تمام پیوندها را برای همه متن ها تجزیه کنم و دوباره زمان زیادی را از دست دادم. همه اینها بهبود قابل توجهی را در نتیجه نهایی ایجاد نکرد (اگرچه من به عنوان مثال ریشه یابی کردم).
ویژگی های کلاسیک کار می کنند. برای مثال، ما در گوگل، «ویژگیهای متن را به هم میزنیم»، همه چیز را میخوانیم و اضافه میکنیم. TF-IDF و همچنین ویژگیهای آماری مانند طول متن، کلمات و میزان علائم نگارشی، بهبودی را ارائه کردند.
اگر ستونهای DateTime وجود دارد، ارزش آن را دارد که آنها را به چندین ویژگی جداگانه (ساعات، روزهای هفته و غیره) تجزیه کنید. اینکه کدام ویژگی ها باید برجسته شوند باید با استفاده از نمودارها / برخی از معیارها تجزیه و تحلیل شوند. در اینجا، از روی هوس، همه چیز را به درستی انجام دادم و ویژگی های لازم را برجسته کردم، اما یک تحلیل معمولی ضرری نداشت (مثلاً همانطور که در فینال انجام دادیم).
در نتیجه مسابقه، یک مدل keras را با کانولوشن کلمه و دیگری را بر اساس LSTM و GRU آموزش دادم. هر دوی آنها از تعبیههای FastText از پیش آموزشدیده برای زبان روسی استفاده کردند (من تعدادی جاسازی دیگر را امتحان کردم، اما اینها بهترین کارکردند). پس از معدل گیری از پیش بینی ها، از بین 7 شرکت کننده، رتبه هفتم نهایی را کسب کردم.
پس از مرحله اول منتشر شد مقاله نیکولای آنوخین، که مقام دوم را کسب کرد (او خارج از رقابت شرکت کرد) و راه حل او تا چند مرحله راه حل من را تکرار کرد، اما به دلیل مکانیسم توجه query-key-value فراتر رفت.
مرحله دوم OK & IDAO
مراحل دوم مسابقات تقریباً متوالی برگزار شد، بنابراین تصمیم گرفتم آنها را با هم ببینیم.
ابتدا، من و تیم تازه به دست آمده به دفتر چشمگیر شرکت Mail.ru رسیدیم، جایی که وظیفه ما ترکیب مدل های سه آهنگ از مرحله اول - متن، تصاویر و همکاری بود. کمی بیشتر از 2 روز برای این کار در نظر گرفته شد که معلوم شد بسیار کم است. در واقع، ما فقط توانستیم نتایج خود را از مرحله اول تکرار کنیم بدون اینکه هیچ دستاوردی از ادغام دریافت کنیم. در نهایت رتبه 5 را گرفتیم اما نتوانستیم از مدل متنی استفاده کنیم. پس از بررسی راه حل های سایر شرکت کنندگان، به نظر می رسد که ارزش تلاش برای خوشه بندی متون و افزودن آنها به مدل همکاری داشته باشد. یک عارضه جانبی این مرحله برداشت های جدید، ملاقات و ارتباط با شرکت کنندگان و برگزارکنندگان باحال و همچنین کمبود شدید خواب بود که ممکن است نتیجه مرحله نهایی IDAO را تحت تأثیر قرار دهد.
وظیفه در مرحله نهایی IDAO 2019 پیش بینی زمان انتظار برای سفارش رانندگان تاکسی Yandex در فرودگاه بود. در مرحله 2، 3 وظیفه = 3 فرودگاه شناسایی شد. برای هر فرودگاه، اطلاعات دقیقه به دقیقه در مورد تعداد سفارش تاکسی برای شش ماه ارائه می شود. و به عنوان داده های آزمایشی، داده های ماه بعد و دقیقه به دقیقه در مورد سفارشات 2 هفته گذشته ارائه شد. زمان کمی وجود داشت (1,5 روز)، کار کاملاً مشخص بود، فقط یک نفر از تیم به مسابقه آمد - و در نتیجه، تا پایان یک مکان غم انگیز بود. ایده های جالب شامل تلاش برای استفاده از داده های خارجی بود: آب و هوا، ترافیک و آمار سفارش تاکسی Yandex. اگرچه برگزارکنندگان نگفته اند که این فرودگاه ها چیست، بسیاری از شرکت کنندگان تصور می کردند که آنها شرمتیوو، دوموددوو و ونوکوو هستند. اگرچه این فرض بعد از مسابقه رد شد، اما ویژگیهایی، برای مثال، دادههای آب و هوای مسکو نتایج را هم در اعتبارسنجی و هم در جدول امتیازات بهبود بخشید.
نتیجه
مسابقات ML باحال و جالب هستند! در اینجا استفاده از مهارتها در تجزیه و تحلیل دادهها و مدلها و تکنیکهای حیلهگر را خواهید یافت و به سادگی از عقل سلیم استقبال میشود.
ML در حال حاضر مجموعه عظیمی از دانش است که به نظر می رسد به طور تصاعدی در حال رشد است. من برای خودم هدف گذاشتم که با حوزه های مختلف (سیگنال ها، تصاویر، جداول، متن) آشنا شوم و از قبل متوجه شدم که چقدر برای مطالعه وجود دارد. به عنوان مثال، پس از این مسابقات تصمیم گرفتم مطالعه کنم: الگوریتم های خوشه بندی، تکنیک های پیشرفته برای کار با کتابخانه های تقویت کننده گرادیان (به ویژه، کار با CatBoost در GPU)، شبکه های کپسول، مکانیسم توجه پرس و جو-کلید-مقدار.
نه به تنهایی! بسیاری از مسابقات دیگر وجود دارد که در آن ها حداقل یک تی شرت راحت تر است و شانس بیشتری برای جوایز دیگر وجود دارد.
برقراری ارتباط! در حال حاضر جامعه بزرگی در زمینه یادگیری ماشینی و تجزیه و تحلیل داده ها وجود دارد، گروه های موضوعی در تلگرام، اسلک و افراد جدی از Mail.ru، Yandex و سایر شرکت ها به سوالات پاسخ می دهند و به مبتدیان و کسانی که راه خود را در این زمینه ادامه می دهند کمک می کنند. از دانش
به همه کسانی که از نکته قبلی الهام گرفته اند توصیه می کنم که بازدید کنند دیتا فست - یک کنفرانس بزرگ رایگان در مسکو، که در تاریخ 10-11 می برگزار می شود.