Velký hadronový urychlovač a Odnoklassniki

Pokračujeme v tématu soutěží strojového učení na Habré a rádi bychom čtenářům představili další dvě platformy. Rozhodně nejsou tak obrovské jako kaggle, ale rozhodně si zaslouží pozornost.

Velký hadronový urychlovač a Odnoklassniki

Osobně nemám kaggle příliš rád z několika důvodů:

  • za prvé, soutěže tam často trvají několik měsíců a aktivní účast vyžaduje velké úsilí;
  • za druhé, veřejná jádra (veřejná řešení). Přívrženci Kaggle doporučují zacházet s nimi s klidem tibetských mnichů, ale ve skutečnosti je to docela škoda, když se něco, na čem pracujete měsíc nebo dva, najednou objeví na stříbrném podnose pro všechny.

Naštěstí se soutěže strojového učení pořádají na jiných platformách a o pár těchto soutěžích bude řeč.

IDAO SNA Hackathon 2019
Úřední jazyk: angličtina,
organizátoři: Yandex, Sberbank, HSE
Oficiální ruský jazyk,
organizátoři: Mail.ru Group
Online kolo: 15. ledna — 11. února 2019;
Finále na místě: 4.–6. dubna 2019
online - od 7. února do 15. března;
offline – od 30. března do 1. dubna.
Pomocí určitého souboru dat o částici ve Velkém hadronovém urychlovači (dráha, hybnost a další poměrně složité fyzikální parametry) určete, zda se jedná o mion nebo ne.
Z tohoto prohlášení byly identifikovány 2 úkoly:
— v jednom jste prostě museli poslat svou předpověď,
- a ve druhé - kompletní kód a model pro predikci a provádění podléhalo poměrně přísným omezením na dobu běhu a využití paměti
Pro soutěž SNA Hackathon byly shromážděny protokoly zobrazení obsahu z otevřených skupin v uživatelských zpravodajských kanálech za únor až březen 2018. Testovací sada obsahuje poslední týden a půl března. Každý záznam v protokolu obsahuje informace o tom, co a komu bylo zobrazeno, a také o tom, jak uživatel na tento obsah reagoval: ohodnotil jej, okomentoval, ignoroval nebo skryl ve zdroji.
Podstatou úkolů SNA Hackathon je ohodnotit každého uživatele sociální sítě Odnoklassniki jeho feed a zvýšit co nejvýše ty příspěvky, které dostanou „třídu“.
V online fázi byl úkol rozdělen do 3 částí:
1. seřaďte pozice podle různých charakteristik spolupráce
2. seřaďte příspěvky podle obrázků, které obsahují
3. seřaďte příspěvky podle textu, který obsahují
Komplexní vlastní metrika, něco jako ROC-AUC Průměrná ROC-AUC podle uživatele
Ceny za první stupeň - trička pro N míst, přechod do druhého stupně, kde se hradilo ubytování a strava v průběhu soutěže
Druhá fáze - ??? (Z určitých důvodů jsem u předávání cen nebyl a nepodařilo se mi zjistit, o jaké ceny nakonec šlo). Všem členům vítězného týmu slíbili notebooky
Ceny za první etapu - trička pro 100 nejlepších účastníků, průjezd do druhé etapy, kde se hradilo cestování do Moskvy, ubytování a strava během soutěže. Ke konci první fáze byly také vyhlášeny ceny pro nejlepší ve 3 úkolech ve fázi 1: každý vyhrál grafickou kartu RTX 2080 TI!
Druhá fáze byla týmová, týmy se skládaly ze 2 až 5 osob, ceny:
1. místo - 300 000 rublů
2. místo - 200 000 rublů
3. místo - 100 000 rublů
cena poroty - 100 000 rublů
Oficiální telegramová skupina, ~190 účastníků, komunikace v angličtině, dotazy musely čekat několik dní na odpověď Oficiální skupina v telegramu, ~1500 účastníků, aktivní diskuse o úkolech mezi účastníky a organizátory
Organizátoři poskytli dvě základní řešení, jednoduché a pokročilé. Simple vyžadoval méně než 16 GB RAM a pokročilá paměť se do 16 nevešla. Zároveň, při pohledu trochu dopředu, nebyli účastníci schopni výrazně překonat pokročilé řešení. Při zavádění těchto řešení nebyly žádné potíže. Nutno podotknout, že v pokročilém příkladu byl komentář s nápovědou, kde začít řešení vylepšovat. U každého z úkolů byla poskytnuta základní primitivní řešení, která účastníci snadno překonali. V prvních dnech soutěže se účastníci potýkali s několika problémy: za prvé, data byla zadána ve formátu Apache Parquet a ne všechny kombinace Pythonu a parketového balíčku fungovaly bez chyb. Druhým problémem bylo stahování obrázků z poštovního cloudu, v tuto chvíli neexistuje jednoduchý způsob, jak stáhnout velké množství dat najednou. V důsledku toho tyto problémy zdržely účastníky na několik dní.

IDAO. První etapa

Úkolem bylo klasifikovat mionové/nemionové částice podle jejich charakteristik. Klíčovým rysem tohoto úkolu byla přítomnost sloupce váhy v tréninkových datech, což samotní organizátoři interpretovali jako důvěru v odpověď pro tento řádek. Problém byl v tom, že poměrně dost řádků obsahovalo záporné váhy.

Velký hadronový urychlovač a Odnoklassniki

Po několika minutách přemýšlení o linii s nápovědou (nápověda jednoduše upozornila na tuto vlastnost sloupce hmotnosti) a vytvoření tohoto grafu jsme se rozhodli zkontrolovat 3 možnosti:

1) invertujte cíl čar se zápornými váhami (a odpovídajícími váhami)
2) posuňte váhy na minimální hodnotu tak, aby začínaly od 0
3) nepoužívejte strunová závaží

Třetí možnost dopadla nejhůře, ale první dvě vylepšily výsledek, nejlepší byla možnost č. 1, která nás hned vynesla na průběžné druhé místo v první úloze a první ve druhé.
Velký hadronový urychlovač a Odnoklassniki
Naším dalším krokem bylo zkontrolovat data, zda v nich chybí hodnoty. Pořadatelé nám dali již očesaná data, kde chybělo docela dost hodnot a ty byly nahrazeny -9999.

Našli jsme chybějící hodnoty ve sloupcích MatchedHit_{X,Y,Z}[N] a MatchedHit_D{X,Y,Z}[N], a to pouze tehdy, když N=2 nebo 3. Jak víme, některé částice ne projít všechny 4 detektory a zastavit se buď na 3. nebo 4. desce. Data také obsahovala sloupce Lextra_{X,Y}[N], které zjevně popisují totéž jako MatchedHit_{X,Y,Z}[N], ale používají nějakou extrapolaci. Tyto skrovné odhady naznačovaly, že Lextra_{X,Y}[N] by mohla být nahrazena chybějícími hodnotami v MatchedHit_{X,Y,Z}[N] (pouze pro souřadnice X a Y). MatchedHit_Z[N] byl dobře vyplněn mediánem. Tyto manipulace nám umožnily dosáhnout 1. mezimísta v obou úlohách.

Velký hadronový urychlovač a Odnoklassniki

Vzhledem k tomu, že za vítězství v první etapě nic nedali, mohli jsme se tam zastavit, ale pokračovali jsme, nakreslili krásné obrázky a přišli s novými funkcemi.

Velký hadronový urychlovač a Odnoklassniki

Například jsme zjistili, že pokud vyneseme průsečíky částice s každou ze čtyř detekčních desek, můžeme vidět, že body na každé z desek jsou seskupeny do 5 obdélníků s poměrem stran 4 ku 5 a vystředěny na bod (0,0) a v prvním obdélníku nejsou žádné body.

Číslo desky / rozměry obdélníku 1 2 3 4 5
Deska 1 500 × 625 1000 × 1250 2000 × 2500 4000 × 5000 8000 × 10000
Deska 2 520 × 650 1040 × 1300 2080 × 2600 4160 × 5200 8320 × 10400
Deska 3 560 × 700 1120 × 1400 2240 × 2800 4480 × 5600 8960 × 11200
Deska 4 600 × 750 1200 × 1500 2400 × 3000 4800 × 6000 9600 × 12000

Po určení těchto rozměrů jsme přidali 4 nové kategoriální znaky pro každou částici - číslo obdélníku, ve kterém protíná každou desku.

Velký hadronový urychlovač a Odnoklassniki

Také jsme si všimli, že se částice jakoby rozptylovaly do stran od středu a vznikl nápad nějak vyhodnotit „kvalitu“ tohoto rozptylu. Ideálně by asi šlo vymyslet nějakou „ideální“ parabolu v závislosti na bodu vzletu a odhadnout odchylku od ní, ale my jsme se omezili na „ideální“ přímku. Po zkonstruování takových ideálních přímek pro každý vstupní bod jsme byli schopni vypočítat směrodatnou odchylku trajektorie každé částice od této přímky. Protože průměrná odchylka pro cíl = 1 byla 152 a pro cíl = 0 byla 390, předběžně jsme tuto vlastnost vyhodnotili jako dobrou. A skutečně, tato funkce se okamžitě dostala na vrchol těch nejužitečnějších.

Byli jsme potěšeni a přidali jsme odchylku všech 4 průsečíků pro každou částici od ideální přímky jako další 4 prvky (a také fungovaly dobře).

Odkazy na vědecké články k tématu soutěže, které nám organizátoři poskytli, podnítily myšlenku, že nejsme zdaleka první, kdo tento problém řeší, a možná existuje nějaký specializovaný software. Po objevení úložiště na githubu, kde byly implementovány metody IsMuonSimple, IsMuon, IsMuonLoose, jsme je s drobnými úpravami přenesli na naše stránky. Samotné metody byly velmi jednoduché: pokud je například energie nižší než určitý práh, pak to není mion, jinak je to mion. Takové jednoduché funkce samozřejmě nemohly přinést zvýšení v případě použití zesílení gradientu, takže jsme k prahu přidali další významnou „vzdálenost“. Tyto funkce byly také mírně vylepšeny. Možná, že důkladnější analýzou existujících metod bylo možné najít silnější metody a přidat je do značek.

„Rychlé“ řešení druhého problému jsme na konci soutěže mírně upravili, nakonec se od základní linie lišilo v následujících bodech:

  1. V řádcích se zápornou váhou byl cíl převrácen
  2. Doplněny chybějící hodnoty v MatchedHit_{X,Y,Z}[N]
  3. Snížená hloubka na 7
  4. Snížená rychlost učení na 0.1 (byla 0.19)

Ve výsledku jsme vyzkoušeli více funkcí (nepříliš úspěšně), vybrali parametry a natrénovali catboost, lightgbm a xgboost, vyzkoušeli různé prolínání predikcí a před otevřením privátu jsme suverénně vyhráli na druhém úkolu a na prvním jsme byli mezi nejlepšími. vedoucí.

Po otevření privátu jsme byli na 10. místě za 1. úkol a 3. za druhý. Všichni vůdci se pomíchali a rychlost v soukromí byla vyšší než na libboardu. Zdá se, že data byla špatně stratifikována (nebo například v soukromí nebyly žádné řádky se zápornými váhami) a to bylo trochu frustrující.

SNA Hackathon 2019 - Texty. První etapa

Úkolem bylo seřadit příspěvky uživatelů na sociální síti Odnoklassniki podle textu, který obsahovaly, kromě textu bylo ještě pár charakteristik příspěvku (jazyk, vlastník, datum a čas vytvoření, datum a čas zobrazení ).

Jako klasické přístupy k práci s textem bych zdůraznil dvě možnosti:

  1. Mapování každého slova do n-rozměrného vektorového prostoru tak, aby podobná slova měla podobné vektory (více v náš článek), pak buď najít průměrné slovo pro text, nebo použít mechanismy, které berou v úvahu relativní polohu slov (CNN, LSTM/GRU).
  2. Používání modelů, které mohou okamžitě pracovat s celými větami. Například Bert. Teoreticky by tento přístup měl fungovat lépe.

Jelikož to byla moje první zkušenost s texty, bylo by špatné někoho učit, tak to budu učit sám. Toto jsou tipy, které bych si dal na začátku soutěže:

  1. Než poběžíte něco učit, podívejte se na data! Kromě samotného textu měla data několik sloupců a dalo se z nich vymáčknout mnohem více než já. Nejjednodušší je provést střední cílové kódování pro některé sloupce.
  2. Neučte se ze všech dat! Dat bylo hodně (asi 17 milionů řádků) a absolutně nebylo nutné všechna použít k testování hypotéz. Trénink a předběžné zpracování byly poměrně pomalé a zjevně bych měl čas otestovat zajímavější hypotézy.
  3. <kontroverzní rada> Není třeba hledat zabijácký model. Strávil jsem dlouhou dobu zjišťováním Elma a Berta a doufal jsem, že mě okamžitě vezmou na vysoké místo, a ve výsledku jsem použil FastText předem natrénované vložení pro ruský jazyk. S Elmem jsem nemohl dosáhnout lepší rychlosti a stejně jsem neměl čas na to přijít s Bertem.
  4. <kontroverzní rada> Není třeba hledat jednu zabijáckou vlastnost. Při pohledu na data jsem si všiml, že asi 1 procento textů ve skutečnosti neobsahuje text! Ale byly tam odkazy na nějaké zdroje a já jsem napsal jednoduchý analyzátor, který otevřel web a vytáhl název a popis. Zdálo se to jako dobrý nápad, ale pak jsem se nechal unést a rozhodl se analyzovat všechny odkazy pro všechny texty a opět jsem ztratil spoustu času. To vše nepřineslo výrazné zlepšení konečného výsledku (i když jsem například přišel na stemming).
  5. Klasické funkce fungují. My Google, například, "text features kaggle", číst a přidat vše. TF-IDF poskytlo vylepšení, stejně jako statistické funkce, jako je délka textu, slova a množství interpunkce.
  6. Pokud existují sloupce DateTime, vyplatí se je rozdělit do několika samostatných funkcí (hodiny, dny v týdnu atd.). Které funkce by měly být zvýrazněny, by měly být analyzovány pomocí grafů/některých metrik. Tady jsem z rozmaru udělal vše správně a zvýraznil potřebné vlastnosti, ale normální rozbor by neuškodil (např. jako jsme to udělali ve finále).

Velký hadronový urychlovač a Odnoklassniki

V důsledku soutěže jsem trénoval jeden model keras s konvolucí slov a další založený na LSTM a GRU. Oba používali předem natrénované vložení FastTextu pro ruský jazyk (zkoušel jsem řadu dalších vložení, ale tyto fungovaly nejlépe). Po zprůměrování předpovědí jsem obsadil konečné 7. místo ze 76 účastníků.

Po první etapě byla zveřejněna článek Nikolaje Anokhina, který obsadil druhé místo (účastnil se mimo soutěž), ​​a jeho řešení do určité fáze opakovalo moje, ale šel dále díky mechanismu pozornosti dotaz-klíč-hodnota.

Druhý stupeň OK & IDAO

Druhé fáze soutěží probíhaly téměř za sebou, a tak jsem se rozhodl, že se na ně podívám společně.

Nejprve jsem s nově získaným týmem skončil v působivé kanceláři společnosti Mail.ru, kde bylo naším úkolem spojit modely tří tratí z první etapy - text, obrázky a spolupráce. Na to bylo vyhrazeno o něco více než 2 dny, což se ukázalo jako velmi málo. Ve skutečnosti jsme byli schopni pouze zopakovat naše výsledky z první fáze, aniž bychom získali nějaké zisky z fúze. Nakonec jsme obsadili 5. místo, ale nepodařilo se nám použít textový model. Po zhlédnutí řešení ostatních účastníků se zdá, že stálo za to zkusit texty seskupit a přidat do modelu spolupráce. Vedlejším efektem této etapy byly nové dojmy, setkání a komunikace s pohodovými účastníky a organizátory a také silný nedostatek spánku, který mohl ovlivnit výsledek závěrečné fáze IDAO.

Úkolem závěrečné fáze IDAO 2019 bylo předpovědět čekací dobu na objednávku pro taxikáře Yandex na letišti. Ve fázi 2 byly identifikovány 3 úkoly = 3 letiště. U každého letiště jsou uvedeny minutové údaje o počtu objednávek taxi za šest měsíců. A jako testovací data byla uvedena data dalšího měsíce a minuta po minutě o objednávkách za poslední 2 týdny. Času bylo málo (1,5 dne), úkol byl dost specifický, z týmu se dostavil jen jeden člověk - a ve výsledku to bylo ke konci smutné místo. Mezi zajímavé nápady patřily pokusy o použití externích dat: počasí, dopravní zácpy a statistiky objednávek taxi Yandex. I když organizátoři neuvedli, co to je za letiště, mnozí účastníci předpokládali, že se jednalo o Šeremetěvo, Domodědovo a Vnukovo. Ačkoli byl tento předpoklad po soutěži vyvrácen, funkce, například údaje o počasí v Moskvě, zlepšily výsledky jak při ověřování, tak ve výsledkové tabulce.

Závěr

  1. ML soutěže jsou skvělé a zajímavé! Zde najdete využití dovedností v analýze dat a v mazaných modelech a technikách a prostě zdravý rozum je vítán.
  2. ML je již obrovské množství znalostí, které, jak se zdá, exponenciálně roste. Dal jsem si za cíl seznámit se s různými oblastmi (signály, obrázky, tabulky, text) a už jsem si uvědomil, kolik je toho ke studiu. Například po těchto soutěžích jsem se rozhodl studovat: shlukovací algoritmy, pokročilé techniky pro práci s knihovnami zvyšujícími gradient (zejména práce s CatBoost na GPU), kapslové sítě, mechanismus pozornosti dotaz-klíč-hodnota.
  3. Ne jen kaggle! Existuje mnoho dalších soutěží, kde je snazší získat alespoň tričko, a je více šancí na další ceny.
  4. Komunikovat! V oblasti strojového učení a analýzy dat již existuje velká komunita, existují tematické skupiny v telegramu, slack a seriózní lidé z Mail.ru, Yandex a dalších společností odpovídají na otázky a pomáhají začátečníkům a těm, kteří pokračují v cestě v této oblasti. znalosti.
  5. Všem, kteří se inspirovali předchozím bodem, doporučuji navštívit datafest — velká svobodná konference v Moskvě, která se bude konat ve dnech 10. – 11. května.

Zdroj: www.habr.com

Přidat komentář