Large Hadron Collider kaj Odnoklassniki

Daŭrigante la temon de maŝinlernado-konkuradoj sur Habré, ni ŝatus prezenti legantojn al du pliaj platformoj. Ili certe ne estas tiom grandegaj kiel kaggle, sed ili certe meritas atenton.

Large Hadron Collider kaj Odnoklassniki

Persone, mi ne tro ŝatas kaggle pro pluraj kialoj:

  • unue la konkursoj tie ofte daŭras kelkajn monatojn, kaj aktiva partopreno postulas multe da peno;
  • due, publikaj kernoj (publikaj solvoj). Kaggle-anoj konsilas trakti ilin kun la trankvilo de tibetaj monaĥoj, sed fakte estas sufiĉe domaĝe, kiam io, pri kio vi laboris dum unu aŭ du monatoj, subite montriĝas sur arĝenta plado por ĉiuj.

Feliĉe, maŝinlernado-konkuradoj estas okazigitaj sur aliaj platformoj, kaj kelkaj el ĉi tiuj konkursoj estos diskutitaj.

IDAO SNA Hackathon 2019
Oficiala lingvo: la angla,
organizantoj: Yandex, Sberbank, HSE
Oficiala rusa lingvo,
organizantoj: Mail.ru Group
Reta Rondo: Jan 15 — Feb 11, 2019;
Surloka Finalo: Apr 4-6, 2019
rete - de la 7-a de februaro ĝis la 15-a de marto;
eksterrete - de la 30-a de marto ĝis la 1-a de aprilo.
Uzante certan aron de datenoj pri partiklo en la Granda Koliziigilo de Hadronoj (trajektorio, impeto, kaj aliaj sufiĉe kompleksaj fizikaj parametroj), determini ĉu ĝi estas muono aŭ ne.
El ĉi tiu deklaro, 2 taskoj estis identigitaj:
— en unu vi nur devis sendi vian antaŭdiron,
- kaj en la alia - la kompleta kodo kaj modelo por antaŭdiro, kaj la ekzekuto estis kondiĉigita de sufiĉe striktaj restriktoj pri rultempo kaj memoruzo
Por la SNA Hackathon-konkurado, protokoloj de enhavmontradoj de malfermaj grupoj en uzantaj novaĵoj por februaro-marto 2018 estis kolektitaj. La testaro enhavas la lastan semajnon kaj duonon de marto. Ĉiu enskribo en la protokolo enhavas informojn pri tio, kio estis montrita kaj al kiu, same kiel kiel la uzanto reagis al ĉi tiu enhavo: taksis ĝin, komentis, ignoris ĝin aŭ kaŝis ĝin de la feed.
La esenco de la taskoj de la SNA Hackathon estas rangigi ĉiun uzanton de la socia reto Odnoklassniki sian nutradon, levante kiel eble plej alte tiujn afiŝojn, kiuj ricevos "klason".
En la reta stadio, la tasko estis dividita en 3 partojn:
1. rangigi postenojn laŭ diversaj kunlaboraj trajtoj
2. rangigi afiŝojn laŭ la bildoj, kiujn ili enhavas
3. rangu afiŝojn laŭ la teksto, kiun ili enhavas
Kompleksa kutima metriko, io kiel ROC-AUC Meza ROC-AUC de uzanto
Premioj por la unua etapo - T-ĉemizoj por N lokoj, trapaso al la dua etapo, kie estis pagitaj loĝejoj kaj manĝoj dum la konkurso.
Dua fazo - ??? (Pro certaj kialoj, mi ne ĉeestis en la premioceremonio kaj ne povis ekscii, kiaj estis la premioj finfine). Ili promesis tekkomputilojn al ĉiuj membroj de la venkinta teamo
Premioj por la unua etapo - T-ĉemizoj por la 100 plej bonaj partoprenantoj, trairo al la dua etapo, kie estis pagitaj vojaĝoj al Moskvo, loĝado kaj manĝoj dum la konkurso. Ankaŭ, al la fino de la unua etapo, premioj estis anoncitaj por la plej bona en 3 taskoj ĉe etapo 1: ĉiuj gajnis RTX 2080 TI-vidkarton!
La dua etapo estis teamstadio, teamoj konsistis el 2 ĝis 5 homoj, premioj:
1-a loko - 300 000 rubloj
2-a loko - 200 000 rubloj
3-a loko - 100 000 rubloj
premio de la ĵurio - 100 rubloj
Oficiala telegrama grupo, ~190 partoprenantoj, komunikado en la angla, demandoj devis atendi kelkajn tagojn por respondo Oficiala grupo en telegramo, ~1500 partoprenantoj, aktiva diskutado de taskoj inter partoprenantoj kaj organizantoj
La organizantoj disponigis du bazajn solvojn, simplajn kaj altnivelajn. Simpla postulis malpli ol 16 GB da RAM, kaj altnivela memoro ne konvenis en 16. Samtempe, iomete rigardante antaŭen, la partoprenantoj ne povis signife superi la altnivelan solvon. Ne estis malfacilaĵoj en lanĉo de ĉi tiuj solvoj. Oni devas rimarki, ke en la progresinta ekzemplo estis komento kun sugesto pri kie komenci plibonigi la solvon. Bazaj primitivaj solvoj estis disponigitaj por ĉiu el la taskoj, kiuj estis facile superitaj de la partoprenantoj. En la fruaj tagoj de la konkurso, partoprenantoj renkontis plurajn malfacilaĵojn: unue, la datumoj estis donitaj en Apache Parquet-formato, kaj ne ĉiuj kombinaĵoj de Python kaj la pargeta pako funkciis sen eraroj. La dua malfacilaĵo estis elŝuti bildojn el la poŝta nubo; nuntempe ne estas facila maniero elŝuti grandan kvanton da datumoj samtempe. Rezulte, ĉi tiuj problemoj prokrastis la partoprenantojn dum kelkaj tagoj.

IDAO. Unua etapo

La tasko estis klasifiki muonajn/ne-muonajn partiklojn laŭ iliaj trajtoj. La ĉefa trajto de ĉi tiu tasko estis la ĉeesto de peza kolumno en la trejnaj datumoj, kiun la organizantoj mem interpretis kiel konfidon pri la respondo por ĉi tiu linio. La problemo estis, ke sufiĉe multaj vicoj enhavis negativajn pezojn.

Large Hadron Collider kaj Odnoklassniki

Pensinte kelkajn minutojn pri la linio kun la sugesto (la sugesto simple atentigis ĉi tiun funkcion de la pezokolono) kaj konstrui ĉi tiun grafikaĵon, ni decidis kontroli 3 opciojn:

1) inversigi la celon de linioj kun negativaj pezoj (kaj pezoj laŭe)
2) movu la pezojn al la minimuma valoro tiel ke ili komenciĝu de 0
3) ne uzu kordpezojn

La tria opcio montriĝis la plej malbona, sed la unuaj du plibonigis la rezulton, la plej bona estis opcio n-ro 1, kiu tuj venigis nin al la nuna dua loko en la unua tasko kaj unue en la dua.
Large Hadron Collider kaj Odnoklassniki
Nia sekva paŝo estis revizii la datumojn por mankantaj valoroj. La organizantoj donis al ni jam kombitajn datumojn, kie mankis sufiĉe da valoroj, kaj ili estis anstataŭigitaj per -9999.

Ni trovis mankantajn valorojn en la kolumnoj MatchedHit_{X,Y,Z}[N] kaj MatchedHit_D{X,Y,Z}[N], kaj nur kiam N=2 aŭ 3. Kiel ni komprenas, iuj partikloj ne faris. preterpasu ĉiujn 4 detektilojn , kaj haltis aŭ sur la 3-a aŭ 4-a plato. La datumoj ankaŭ enhavis Lextra_{X,Y}[N] kolumnojn, kiuj ŝajne priskribas la samon kiel MatchedHit_{X,Y,Z}[N], sed uzante ian ekstrapolon. Ĉi tiuj magraj divenoj sugestis, ke Lextra_{X,Y}[N] povus esti anstataŭigita por la mankantaj valoroj en MatchedHit_{X,Y,Z}[N] (nur por X kaj Y koordinatoj). MatchedHit_Z[N] estis bone plenigita kun la mediano. Ĉi tiuj manipuladoj permesis al ni atingi la 1-an mezan lokon en ambaŭ taskoj.

Large Hadron Collider kaj Odnoklassniki

Konsiderante ke ili nenion donis por gajni la unuan etapon, ni povus halti tie, sed ni daŭrigis, desegnis kelkajn belajn bildojn kaj elpensis novajn funkciojn.

Large Hadron Collider kaj Odnoklassniki

Ekzemple, ni trovis, ke se ni reprezentas la intersekcpunktojn de partiklo kun ĉiu el la kvar detektilaj platoj, ni povas vidi ke la punktoj sur ĉiu el la platoj estas grupigitaj en 5 rektangulojn kun bildformato de 4 ĝis 5 kaj centritaj ĉe la punkto (0,0), kaj en Ne estas punktoj en la unua rektangulo.

Plato n-ro / rektangulo dimensioj 1 2 3 4 5
Telero 1 500h625 1000h1250 2000h2500 4000h5000 8000h10000
Telero 2 520h650 1040h1300 2080h2600 4160h5200 8320h10400
Telero 3 560h700 1120h1400 2240h2800 4480h5600 8960h11200
Telero 4 600h750 1200h1500 2400h3000 4800h6000 9600h12000

Determininte ĉi tiujn dimensiojn, ni aldonis 4 novajn kategoriajn trajtojn por ĉiu partiklo - la nombro de la rektangulo en kiu ĝi intersekcas ĉiun platon.

Large Hadron Collider kaj Odnoklassniki

Ni ankaŭ rimarkis, ke la partikloj ŝajnis disiĝi al la flankoj de la centro kaj ekestis la ideo iel taksi la "kvaliton" de ĉi tiu disvastigo. Ideale, verŝajne eblus elpensi ian "idealan" parabolon depende de la ekflugo kaj taksi la devion de ĝi, sed ni limigis nin al la "ideala" rekto. Konstruinte tiajn idealajn rektliniojn por ĉiu enirpunkto, ni povis kalkuli la norman devion de la trajektorio de ĉiu partiklo de ĉi tiu rekto. Ĉar la averaĝa devio por celo = 1 estis 152, kaj por celo = 0 ĝi estis 390, ni provizore taksis ĉi tiun funkcion kiel bona. Kaj efektive, ĉi tiu funkcio tuj atingis la supron de la plej utilaj.

Ni ĝojis kaj aldonis la devion de ĉiuj 4 intersekcpunktoj por ĉiu partiklo de la ideala rekta linio kiel pliajn 4 ecojn (kaj ili ankaŭ bone funkciis).

Ligiloj al sciencaj artikoloj pri la temo de la konkurso, donitaj al ni de la organizantoj, instigis la ideon, ke ni estas malproksime de la unuaj, kiuj solvis tiun ĉi problemon kaj, eble, ekzistas ia speciala programaro. Malkovrinte deponejon sur github, kie la metodoj IsMuonSimple, IsMuon, IsMuonLoose estis efektivigitaj, ni transdonis ilin al nia retejo kun malgrandaj modifoj. La metodoj mem estis tre simplaj: ekzemple, se la energio estas malpli ol certa sojlo, tiam ĝi ne estas muono, alie ĝi estas muono. Tiaj simplaj funkcioj evidente ne povus doni pliiĝon en la kazo de uzado de gradienta akcelo, do ni aldonis alian signifan "distancon" al la sojlo. Ĉi tiuj funkcioj ankaŭ estis iomete plibonigitaj. Eble, analizante ekzistantajn metodojn pli detale, eblis trovi pli fortajn metodojn kaj aldoni ilin al la signoj.

Ĉe la fino de la konkurso, ni iomete tajlis la "rapidan" solvon por la dua problemo; finfine ĝi diferencis de la bazlinio en la sekvaj punktoj:

  1. En vicoj kun negativa pezo la celo estis inversigita
  2. Plenigitaj mankantaj valoroj en MatchedHit_{X,Y,Z}[N]
  3. Reduktita profundo al 7
  4. Reduktita lernadoprocento al 0.1 (estis 0.19)

Kiel rezulto, ni provis pli da funkcioj (ne tre sukcese), elektis parametrojn kaj trejnis catboost, lightgbm kaj xgboost, provis malsamajn miksaĵojn de antaŭdiroj kaj antaŭ malfermi la privatan ni memfide venkis en la dua tasko, kaj en la unua ni estis inter la gvidantoj.

Post malfermi la privatan ni estis en la 10-a loko por la 1-a tasko kaj 3-a por la dua. Ĉiuj gvidantoj miksiĝis, kaj la rapideco private estis pli alta ol sur la libtabulo. Ŝajnas, ke la datumoj estis malbone stratigitaj (aŭ ekzemple ne estis vicoj kun negativaj pezoj en la privata) kaj ĉi tio estis iom frustranta.

SNA Hackathon 2019 - Tekstoj. Unua etapo

La tasko estis rangigi uzantajn afiŝojn en la socia reto Odnoklassniki surbaze de la teksto, kiun ili enhavis; krom la teksto, estis kelkaj pliaj trajtoj de la afiŝo (lingvo, posedanto, dato kaj tempo de kreado, dato kaj tempo de spektado). ).

Kiel klasikaj aliroj al laboro kun teksto, mi reliefigus du eblojn:

  1. Mapo de ĉiu vorto en n-dimensia vektora spaco tia ke similaj vortoj havas similajn vektorojn (legu pli en nia artikolo), tiam aŭ trovante la mezan vorton por la teksto aŭ uzante mekanismojn kiuj konsideras la relativan pozicion de vortoj (CNN, LSTM/GRU).
  2. Uzante modelojn, kiuj povas tuj labori kun tutaj frazoj. Ekzemple, Bert. En teorio, ĉi tiu aliro devus funkcii pli bone.

Ĉar tio estis mia unua sperto kun tekstoj, estus malĝuste instrui iun, do mi instruos min. Jen la konsiletoj, kiujn mi donus al mi komence de la konkurso:

  1. Antaŭ ol vi kuros por instrui ion, rigardu la datumojn! Krom la teksto mem, la datumoj havis plurajn kolumnojn kaj eblis elpremi multe pli el ili ol mi. La plej simpla afero estas signifi celkodigon por iuj el la kolumnoj.
  2. Ne lernu de ĉiuj datumoj! Estis multaj datumoj (ĉirkaŭ 17 milionoj da vicoj) kaj tute ne necesis uzi ĉiujn por testi hipotezojn. Trejnado kaj antaŭtraktado estis sufiĉe malrapidaj, kaj mi evidente estus havinta tempon por testi pli interesajn hipotezojn.
  3. <Kontroversa konsilo> Ne necesas serĉi murdan modelon. Mi pasigis longan tempon eltrovi Elmon kaj Bert, esperante ke ili tuj kondukos min al alta loko, kaj sekve mi uzis FastText antaŭtrejnitaj enkonstruaĵoj por la rusa lingvo. Mi ne povis atingi pli bonan rapidecon kun Elmo, kaj mi ankoraŭ ne havis tempon por eltrovi ĝin kun Bert.
  4. <Kontroversa konsilo> Ne necesas serĉi unu mortigan funkcion. Rigardante la datumojn, mi rimarkis, ke ĉirkaŭ 1 procento de la tekstoj fakte ne enhavas tekston! Sed estis ligiloj al iuj rimedoj, kaj mi skribis simplan analizilon, kiu malfermis la retejon kaj eltiris la titolon kaj priskribon. Ŝajnis bona ideo, sed tiam mi forlogis kaj decidis analizi ĉiujn ligilojn por ĉiuj tekstoj kaj denove perdis multan tempon. Ĉio ĉi ne provizis signifan plibonigon en la fina rezulto (kvankam mi eltrovis, ekzemple, devenon).
  5. Klasikaj funkcioj funkcias. Ni Guglos, ekzemple, "text features kaggle", legas kaj aldonas ĉion. TF-IDF disponigis plibonigon, same kiel statistikajn ecojn kiel ekzemple tekstolongo, vortoj, kaj la kvanto de interpunkcio.
  6. Se estas DateTime-kolumnoj, indas analizi ilin en plurajn apartajn funkciojn (horoj, tagoj de la semajno, ktp.). Kiuj trajtoj devus esti elstarigitaj devus esti analizitaj per grafeoj/kelkaj metrikoj. Ĉi tie, laŭkaprice, mi faris ĉion ĝuste kaj reliefigis la necesajn trajtojn, sed normala analizo ne malutilus (ekzemple, kiel ni faris ĉe la finalo).

Large Hadron Collider kaj Odnoklassniki

Kiel rezulto de la konkurso, mi trejnis unu keras-modelon kun vortkonvolucio, kaj alian bazitan sur LSTM kaj GRU. Ambaŭ uzis antaŭtrejnitajn FastText-enkonstruaĵojn por la rusa lingvo (mi provis kelkajn aliajn enkonstruaĵojn, sed ĉi tiuj estis kiuj plej bone funkciis). Post averaĝe la antaŭdiroj, mi prenis la finan 7-an lokon el 76 partoprenantoj.

Post la unua etapo ĝi estis publikigita artikolo de Nikolao Anoĥin, kiu prenis la duan lokon (li partoprenis eksterkonkurs), kaj lia solvo ĝis iu etapo ripetis la mian, sed li iris plu pro la demando-ŝlosil-valora atentmeĥanismo.

Dua etapo OK & IDAO

La duaj etapoj de la konkursoj okazis preskaŭ sinsekve, do mi decidis kune rigardi ilin.

Unue, mi kaj la nove akirita teamo alvenis en la impona oficejo de la kompanio Mail.ru, kie nia tasko estis kombini la modelojn de tri trakoj de la unua etapo - teksto, bildoj kaj kunlaborado. Iom pli ol 2 tagoj estis asignitaj por tio, kio montriĝis tre malmulte. Fakte, ni nur povis ripeti niajn rezultojn de la unua etapo sen ricevi ajnajn gajnojn de la fuzio. Fine ni prenis la 5-an lokon, sed ni ne povis uzi la tekstan modelon. Rigardante la solvojn de aliaj partoprenantoj, ŝajnas, ke indas provi kolekti la tekstojn kaj aldoni ilin al la kunlabora modelo. Flanka efiko de ĉi tiu etapo estis novaj impresoj, renkontiĝo kaj komunikado kun bonegaj partoprenantoj kaj organizantoj, same kiel severa manko de dormo, kiu eble influis la rezulton de la fina etapo de IDAO.

La tasko ĉe la Fina etapo de IDAO 2019 estis antaŭdiri la atendan tempon por mendo por Yandex-taksiistoj en la flughaveno. En la etapo 2, 3 taskoj = 3 flughavenoj estis identigitaj. Por ĉiu flughaveno, minuto-post-minute datumoj pri la nombro da taksiomendoj dum ses monatoj estas donitaj. Kaj kiel testaj datumoj, la sekva monato kaj minuto-post-minuta datumoj pri mendoj dum la pasintaj 2 semajnoj estis donitaj. Estis malmulte da tempo (1,5 tagoj), la tasko estis sufiĉe specifa, nur unu persono el la teamo venis al la konkurso - kaj kiel rezulto, ĝi estis malĝoja loko al la fino. Interesaj ideoj inkludis provojn uzi eksterajn datumojn: vetero, trafikŝtopiĝoj kaj Yandex-taksiaj mendostatistikoj. Kvankam la organizantoj ne diris, kio estas tiuj flughavenoj, multaj partoprenantoj supozis, ke ili estas Ŝeremetjevo, Domodedovo kaj Vnukovo. Kvankam ĉi tiu supozo estis refutita post la konkurso, trajtoj, ekzemple, de Moskva veterdatumo plibonigis la rezultojn kaj pri validumado kaj sur la gvidtabulo.

konkludo

  1. ML-konkuradoj estas bonegaj kaj interesaj! Ĉi tie vi trovos la uzadon de kapabloj en analizo de datumoj, kaj en ruzaj modeloj kaj teknikoj, kaj simple komuna prudento estas bonvena.
  2. ML jam estas grandega scio, kiu ŝajnas kreski eksponente. Mi celis al mi konatiĝi kun diversaj areoj (signaloj, bildoj, tabeloj, teksto) kaj jam komprenis kiom multe estas por studi. Ekzemple, post ĉi tiuj konkursoj mi decidis studi: clustering-algoritmoj, altnivelaj teknikoj por labori kun gradient-akcelado-bibliotekoj (precipe, labori kun CatBoost sur la GPU), kapsulretoj, la demanda-ŝlosila-valora atentmekanismo.
  3. Ne nur per kaggle! Estas multaj aliaj konkursoj, kie estas pli facile akiri almenaŭ T-ĉemizon, kaj estas pli da ŝancoj por aliaj premioj.
  4. Komuniku! Jam ekzistas granda komunumo en la kampo de maŝina lernado kaj analizo de datumoj, ekzistas temaj grupoj en telegramo, malstreĉo, kaj seriozaj homoj de Mail.ru, Yandex kaj aliaj kompanioj respondas demandojn kaj helpas komencantojn kaj tiujn, kiuj daŭrigas sian vojon en ĉi tiu kampo. de scio.
  5. Mi konsilas al ĉiuj, kiuj estis inspiritaj de la antaŭa punkto, viziti datumfesto — grava libera konferenco en Moskvo, kiu okazos la 10-11-an de majo.

fonto: www.habr.com

Aldoni komenton