Wielki Zderzacz Hadronów i Odnoklassniki

Kontynuując temat konkursów uczenia maszynowego na Habré, chcielibyśmy przedstawić czytelnikom jeszcze dwie platformy. Z pewnością nie są tak ogromne jak kaggle, ale zdecydowanie zasługują na uwagę.

Wielki Zderzacz Hadronów i Odnoklassniki

Osobiście nie przepadam za kagglem z kilku powodów:

  • po pierwsze, zawody tam trwają często kilka miesięcy, a aktywny udział wymaga dużego wysiłku;
  • po drugie, jądra publiczne (rozwiązania publiczne). Zwolennicy Kaggle radzą traktować ich ze spokojem tybetańskich mnichów, ale w rzeczywistości to wielka szkoda, gdy coś, nad czym pracowałeś przez miesiąc lub dwa, nagle okazuje się być wyłożone na srebrnej tacy dla wszystkich.

Na szczęście konkursy uczenia maszynowego odbywają się na innych platformach i kilka z tych konkursów zostanie omówione.

IDAO Hackaton SNA 2019
Język urzędowy: angielski,
organizatorzy: Yandex, Sbierbank, HSE
Oficjalny język rosyjski,
organizatorzy: Grupa Mail.ru
Runda online: 15 stycznia – 11 lutego 2019 r.;
Finał na miejscu: 4–6 kwietnia 2019 r
online - od 7 lutego do 15 marca;
offline - od 30 marca do 1 kwietnia.
Korzystając z pewnego zestawu danych o cząstce w Wielkim Zderzaczu Hadronów (trajektoria, pęd i inne dość złożone parametry fizyczne), określ, czy jest to mion, czy nie
Na podstawie tego zestawienia zidentyfikowano 2 zadania:
— w jednym wystarczyło wysłać swoją prognozę,
- a w drugim - kompletny kod i model przewidywania, a wykonanie podlegało dość rygorystycznym ograniczeniom dotyczącym czasu działania i wykorzystania pamięci
Na potrzeby konkursu SNA Hackathon zebrano dzienniki wyświetleń treści z grup otwartych w kanałach informacyjnych użytkowników w okresie od lutego do marca 2018 r. Zbiór testowy zawiera ostatnie półtora tygodnia marca. Każdy wpis w logu zawiera informację o tym, co i komu zostało pokazane, a także jak użytkownik zareagował na tę treść: ocenił ją, skomentował, zignorował lub ukrył przed kanałem.
Istotą zadań SNA Hackathon jest uszeregowanie każdego użytkownika sieci społecznościowej Odnoklassniki na jego kanale, podnosząc jak najwyżej te posty, które otrzymają „klasę”.
Na etapie online zadanie zostało podzielone na 3 części:
1. oceniaj posty według różnych cech współpracy
2. oceniaj posty na podstawie zawartych w nich obrazów
3. ranguj posty według zawartego w nich tekstu
Złożona niestandardowa metryka, coś w rodzaju ROC-AUC Średni ROC-AUC według użytkownika
Nagrody za I etap – koszulki za N miejsc, przejście do II etapu, gdzie podczas zawodów opłacono zakwaterowanie i wyżywienie
Druga faza - ??? (Z pewnych powodów nie byłem obecny na ceremonii wręczenia nagród i nie udało mi się ostatecznie dowiedzieć, jakie były nagrody). Obiecali laptopy wszystkim członkom zwycięskiej drużyny
Nagrody za pierwszy etap – koszulki dla 100 najlepszych uczestników, przejście do drugiego etapu, w ramach którego opłacony został przejazd do Moskwy, zakwaterowanie i wyżywienie podczas zawodów. Ponadto pod koniec pierwszego etapu ogłoszono nagrody dla najlepszych w 3 zadaniach w etapie 1: każdy wygrał kartę graficzną RTX 2080 TI!
Drugi etap miał charakter zespołowy, drużyny liczyły od 2 do 5 osób, nagrody:
1. miejsce - 300 000 rubli
2. miejsce - 200 000 rubli
3. miejsce - 100 000 rubli
nagroda jury - 100 000 rubli
Oficjalna grupa telegramowa, ~190 uczestników, komunikacja w języku angielskim, pytania musiały czekać kilka dni na odpowiedź Oficjalna grupa w telegramie, ~1500 uczestników, aktywna dyskusja na temat zadań pomiędzy uczestnikami i organizatorami
Organizatorzy przewidzieli dwa podstawowe rozwiązania, proste i zaawansowane. Simple wymagało mniej niż 16 GB RAM-u, a zaawansowana pamięć nie zmieściła się w 16. Jednocześnie patrząc trochę w przyszłość, uczestnicy nie byli w stanie znacząco przewyższyć zaawansowanego rozwiązania. Nie było żadnych trudności z uruchomieniem tych rozwiązań. Warto zaznaczyć, że w zaawansowanym przykładzie pojawił się komentarz z podpowiedzią od czego zacząć ulepszanie rozwiązania. Do każdego z zadań przewidziano podstawowe, prymitywne rozwiązania, które uczestnicy z łatwością pokonali. Na początku konkursu uczestnicy napotkali kilka trudności: po pierwsze, dane podano w formacie Apache Parquet i nie wszystkie kombinacje Pythona i pakietu parkietowego działały bez błędów. Drugą trudnością było pobieranie zdjęć z chmury pocztowej, w tej chwili nie ma łatwego sposobu na pobranie dużej ilości danych na raz. W rezultacie problemy te opóźniły uczestników o kilka dni.

IDAO. Pierwszy etap

Zadanie polegało na sklasyfikowaniu cząstek mionowych i niemionowych według ich charakterystyki. Kluczową cechą tego zadania była obecność w danych treningowych kolumny masy, co sami organizatorzy zinterpretowali jako pewność odpowiedzi na tę linię. Problem polegał na tym, że sporo wierszy zawierało wagi ujemne.

Wielki Zderzacz Hadronów i Odnoklassniki

Po kilkuminutowym zastanowieniu się nad linią z podpowiedzią (podpowiedź po prostu zwróciła uwagę na tę cechę kolumny wagi) i zbudowaniu tego wykresu, postanowiliśmy sprawdzić 3 opcje:

1) odwróć cel linii o ujemnych wagach (i odpowiednio wagach)
2) przesunąć wagi do wartości minimalnej tak, aby zaczynały się od 0
3) nie używaj ciężarów ciągów

Najgorsza okazała się trzecia opcja, ale dwie pierwsze poprawiły wynik, najlepsza była opcja nr 1, która od razu wyprowadziła nas na obecne drugie miejsce w pierwszym zadaniu i pierwsze w drugim.
Wielki Zderzacz Hadronów i Odnoklassniki
Następnym krokiem było sprawdzenie danych pod kątem brakujących wartości. Organizatorzy podali nam już przeczesane dane, w których brakowało sporo wartości i zastąpiono je wartością -9999.

Brakujące wartości znaleźliśmy w kolumnach MatchedHit_{X,Y,Z}[N] i MatchedHit_D{X,Y,Z}[N] i to tylko wtedy, gdy N=2 lub 3. Jak rozumiemy, niektóre cząstki nie przejść przez wszystkie 4 detektory i zatrzymać się na 3. lub 4. płycie. Dane zawierały także kolumny Lextra_{X,Y}[N], które najwyraźniej opisują to samo, co MatchedHit_{X,Y,Z}[N], ale przy użyciu pewnego rodzaju ekstrapolacji. Te skromne domysły sugerowały, że Lextra_{X,Y}[N] można zastąpić brakującymi wartościami w MatchedHit_{X,Y,Z}[N] (tylko dla współrzędnych X i Y). MatchedHit_Z[N] był dobrze wypełniony medianą. Te manipulacje pozwoliły nam w obu zadaniach zająć I miejsce pośrednie.

Wielki Zderzacz Hadronów i Odnoklassniki

Biorąc pod uwagę, że nie dali nic za wygranie pierwszego etapu, mogliśmy na tym poprzestać, ale kontynuowaliśmy, narysowaliśmy kilka pięknych zdjęć i wymyśliliśmy nowe funkcje.

Wielki Zderzacz Hadronów i Odnoklassniki

Na przykład odkryliśmy, że jeśli nakreślimy punkty przecięcia cząstki z każdą z czterech płytek detektora, zobaczymy, że punkty na każdej z płytek są pogrupowane w 5 prostokątów o proporcjach 4 do 5 i wyśrodkowanych w punkcie punkt (0,0) oraz w pierwszym prostokącie nie ma punktów.

Nr płyty / wymiary prostokąta 1 2 3 4 5
Płyta 1 500 × 625 1000 × 1250 2000 × 2500 4000 × 5000 8000 × 10000
Płyta 2 520 × 650 1040 × 1300 2080 × 2600 4160 × 5200 8320 × 10400
Płyta 3 560 × 700 1120 × 1400 2240 × 2800 4480 × 5600 8960 × 11200
Płyta 4 600 × 750 1200 × 1500 2400 × 3000 4800 × 6000 9600 × 12000

Po określeniu tych wymiarów dodaliśmy 4 nowe cechy kategoryczne dla każdej cząstki - numer prostokąta, w którym przecina ona każdą płytkę.

Wielki Zderzacz Hadronów i Odnoklassniki

Zauważyliśmy również, że cząstki zdawały się rozpraszać na boki od środka i zrodził się pomysł, aby w jakiś sposób ocenić „jakość” tego rozpraszania. W idealnym przypadku prawdopodobnie byłoby możliwe wymyślenie jakiejś „idealnej” paraboli w zależności od punktu startu i oszacowanie odchylenia od niej, ale ograniczyliśmy się do „idealnej” linii prostej. Po skonstruowaniu takich idealnych linii prostych dla każdego punktu wejścia byliśmy w stanie obliczyć odchylenie standardowe trajektorii każdej cząstki od tej linii prostej. Ponieważ średnie odchylenie dla celu = 1 wyniosło 152, a dla celu = 0 390, wstępnie oceniliśmy tę cechę jako dobrą. I rzeczywiście, ta funkcja od razu znalazła się na szczycie listy najbardziej przydatnych.

Byliśmy zachwyceni i dodaliśmy odchylenie wszystkich 4 punktów przecięcia każdej cząstki od idealnej linii prostej jako dodatkowe 4 cechy (i one również działały dobrze).

Linki do artykułów naukowych na temat konkursu, przekazane nam przez organizatorów, skłoniły nas do wniosku, że nie jesteśmy pierwsi, którzy rozwiązali ten problem i być może istnieje jakieś specjalistyczne oprogramowanie. Po odkryciu repozytorium na githubie, w którym zaimplementowano metody IsMuonSimple, IsMuon, IsMuonLoose, przenieśliśmy je na naszą stronę z niewielkimi modyfikacjami. Same metody były bardzo proste: na przykład, jeśli energia jest mniejsza niż określony próg, to nie jest to mion, w przeciwnym razie jest to mion. Tak proste cechy oczywiście nie mogły dać podwyżki w przypadku zastosowania wzmocnienia gradientowego, dlatego do progu dodaliśmy kolejną znaczącą „odległość”. Te funkcje również zostały nieco ulepszone. Być może, dokładniej analizując istniejące metody, udało się znaleźć silniejsze metody i dodać je do znaków.

Na koniec konkursu nieco zmodyfikowaliśmy „szybkie” rozwiązanie drugiego zadania, ostatecznie różniło się ono od bazowego w następujących punktach:

  1. W rzędach z ujemną wagą cel został odwrócony
  2. Uzupełniono brakujące wartości w MatchedHit_{X,Y,Z}[N]
  3. Zmniejszono głębokość do 7
  4. Zmniejszono szybkość uczenia się do 0.1 (poprzednio 0.19)

W rezultacie wypróbowaliśmy więcej funkcji (niezbyt skutecznie), dobraliśmy parametry i wyszkoliliśmy catboost, lightgbm i xgboost, próbowaliśmy różnych mieszanek przewidywań i przed otwarciem prywatnego pewnie wygraliśmy w drugim zadaniu, a przy pierwszym znaleźliśmy się w gronie liderzy.

Po otwarciu prywatnego byliśmy na 10 miejscu przy pierwszym zadaniu i 1 przy drugim. Wszyscy prowadzący się pomieszali, a prędkość prywatnie była większa niż na tablicy. Wygląda na to, że dane były słabo rozwarstwione (lub na przykład w prywatnych danych nie było wierszy z ujemnymi wagami), co było nieco frustrujące.

SNA Hackathon 2019 - Teksty. Pierwszy etap

Zadanie polegało na uszeregowaniu postów użytkowników w serwisie społecznościowym Odnoklassniki na podstawie zawartego w nich tekstu; oprócz samego tekstu uwzględniano jeszcze kilka cech charakterystycznych wpisu (język, właściciel, data i godzina utworzenia, data i godzina przeglądania ).

Jako klasyczne podejście do pracy z tekstem wyróżniłbym dwie opcje:

  1. Mapowanie każdego słowa na n-wymiarową przestrzeń wektorową w taki sposób, że podobne słowa mają podobne wektory (więcej informacji znajdziesz w nasz artykuł), a następnie albo znaleźć przeciętne słowo w tekście, albo skorzystać z mechanizmów uwzględniających względne położenie słów (CNN, LSTM/GRU).
  2. Używanie modeli, które mogą natychmiast współpracować z całymi zdaniami. Na przykład Berta. Teoretycznie takie podejście powinno działać lepiej.

Ponieważ było to moje pierwsze doświadczenie z tekstami, błędem byłoby kogoś uczyć, więc nauczę się siebie. Oto wskazówki, jakie dałabym sobie na początku zawodów:

  1. Zanim zaczniesz czegoś uczyć, spójrz na dane! Oprócz samego tekstu dane miały kilka kolumn i można było z nich wycisnąć znacznie więcej niż ja. Najprościej jest zrobić średnie kodowanie docelowe dla niektórych kolumn.
  2. Nie ucz się na podstawie wszystkich danych! Danych było bardzo dużo (około 17 milionów wierszy) i absolutnie nie było potrzeby wykorzystywania ich wszystkich do testowania hipotez. Uczenie i przetwarzanie wstępne były dość powolne i oczywiście miałbym czas na przetestowanie ciekawszych hipotez.
  3. <Kontrowersyjne rady> Nie ma co szukać zabójczego modelu. Spędziłem dużo czasu rozmyślając nad Elmo i Bertem, mając nadzieję, że natychmiast zabiorą mnie na wysokie miejsce, w wyniku czego skorzystałem z wstępnie wytrenowanych osadzań FastText dla języka rosyjskiego. Z Elmo nie mogłem osiągnąć większej prędkości, a z Bertem wciąż nie miałem czasu, żeby to rozgryźć.
  4. <Kontrowersyjne rady> Nie ma potrzeby szukać jednej zabójczej funkcji. Patrząc na dane, zauważyłem, że około 1 procent tekstów tak naprawdę nie zawiera tekstu! Ale były tam linki do niektórych zasobów, więc napisałem prosty parser, który otwierał witrynę i pobierał tytuł i opis. Wydawało mi się to dobrym pomysłem, ale potem dałem się ponieść emocjom i zdecydowałem się przeanalizować wszystkie linki do wszystkich tekstów i znowu straciłem dużo czasu. Wszystko to nie przełożyło się na znaczącą poprawę końcowego wyniku (choć wymyśliłem np. stemming).
  5. Klasyczne funkcje działają. Wyszukujemy na przykład „tekstowe funkcje kaggle”, czytamy i dodajemy wszystko. TF-IDF zapewnił poprawę, podobnie jak funkcje statystyczne, takie jak długość tekstu, słowa i ilość znaków interpunkcyjnych.
  6. Jeśli istnieją kolumny DateTime, warto je rozłożyć na kilka odrębnych cech (godziny, dni tygodnia itp.). To, które cechy należy wyróżnić, należy przeanalizować za pomocą wykresów/niektórych metryk. Tutaj dla kaprysu zrobiłem wszystko poprawnie i podkreśliłem niezbędne funkcje, ale normalna analiza nie zaszkodzi (na przykład tak, jak zrobiliśmy to w finale).

Wielki Zderzacz Hadronów i Odnoklassniki

W wyniku konkursu wytrenowałem jeden model kerasowy ze splotem słów, a drugi oparty na LSTM i GRU. Obydwa korzystali z wstępnie wytrenowanych osadzań FastText dla języka rosyjskiego (próbowałem wielu innych osadzań, ale te działały najlepiej). Po uśrednieniu przewidywań zająłem finałowe 7 miejsce na 76 uczestników.

Po pierwszym etapie został opublikowany artykuł Nikołaja Anokhina, który zajął drugie miejsce (udział poza konkursem), a jego rozwiązanie do pewnego etapu powtarzało moje, ale poszedł dalej ze względu na mechanizm uwagi zapytanie-klucz-wartość.

Drugi etap OK i IDAO

Drugie etapy konkursów odbywały się niemal kolejno po sobie, dlatego postanowiłem przyjrzeć się im łącznie.

Najpierw ja i nowo nabyty zespół trafiliśmy do imponującego biura firmy Mail.ru, gdzie naszym zadaniem było połączenie modeli trzech ścieżek z pierwszego etapu – tekstu, zdjęć i collabu. Przeznaczono na to nieco ponad 2 dni, co okazało się bardzo mało. Tak naprawdę udało nam się jedynie powtórzyć wyniki z pierwszego etapu, nie uzyskując żadnych korzyści z fuzji. Ostatecznie zajęliśmy 5 miejsce, ale nie udało nam się skorzystać z modelu tekstowego. Po zapoznaniu się z rozwiązaniami innych uczestników wydaje się, że warto było pokusić się o pogrupowanie tekstów i dodanie ich do modelu collab. Efektem ubocznym tego etapu były nowe wrażenia, spotkania i komunikacja z fajnymi uczestnikami i organizatorami, a także dotkliwy brak snu, który mógł mieć wpływ na wynik finałowego etapu IDAO.

Zadaniem na etapie finałowym IDAO 2019 było przewidzenie czasu oczekiwania taksówkarzy Yandex na lotnisko na zamówienie. Na etapie 2 zidentyfikowano 3 zadania = 3 lotniska. Dla każdego lotniska podawane są minuta po minucie liczba zamówień taksówek za sześć miesięcy. A jako dane testowe podano kolejny miesiąc oraz dane minuta po minucie dotyczące zamówień z ostatnich 2 tygodni. Czasu było mało (1,5 dnia), zadanie było dość specyficzne, na zawody przyjechała tylko jedna osoba z ekipy - w rezultacie było to smutne miejsce pod koniec. Ciekawymi pomysłami były próby wykorzystania danych zewnętrznych: pogody, korków czy statystyk zamówień taksówek Yandex. Choć organizatorzy nie podali, jakie to były lotniska, wielu uczestników przypuszczało, że były to Szeremietiewo, Domodiedowo i Wnukowo. Chociaż założenie to zostało obalone po zawodach, na przykład dane z Moskwy poprawiły wyniki zarówno w walidacji, jak i na tablicy wyników.

wniosek

  1. Zawody ML są fajne i ciekawe! Tutaj znajdziesz zastosowanie umiejętności analizy danych oraz przebiegłych modeli i technik, a po prostu zdrowy rozsądek jest mile widziany.
  2. ML to już ogromny zasób wiedzy, który wydaje się rosnąć wykładniczo. Postawiłem sobie za cel zapoznanie się z różnymi obszarami (sygnały, obrazy, tabele, tekst) i już zdałem sobie sprawę, ile jest do przestudiowania. Na przykład po tych konkursach zdecydowałem się uczyć: algorytmów grupowania, zaawansowanych technik pracy z bibliotekami wzmacniającymi gradient (w szczególności pracy z CatBoost na GPU), sieci kapsułowych, mechanizmu uwagi zapytanie-klucz-wartość.
  3. Nie samym kagglem! Jest wiele innych konkursów, w których łatwiej jest zdobyć chociaż koszulkę, a są większe szanse na inne nagrody.
  4. Komunikować się! Istnieje już duża społeczność z zakresu uczenia maszynowego i analizy danych, są grupy tematyczne w telegramie, slacku i poważni ludzie z Mail.ru, Yandex i innych firm odpowiadają na pytania i pomagają początkującym i tym, którzy kontynuują swoją drogę w tej dziedzinie wiedzy.
  5. Polecam odwiedzić każdemu, kogo zainspirował poprzedni punkt festiwal danych — duża bezpłatna konferencja w Moskwie, która odbędzie się w dniach 10–11 maja.

Źródło: www.habr.com

Dodaj komentarz