Penumbuk Hadron Besar dan Odnoklassniki

Melanjutkan tema kompetisi pembelajaran mesin di Habré, kami ingin memperkenalkan dua platform lagi kepada pembaca. Mereka tentu saja tidak sebesar kaggle, tapi mereka pasti patut mendapat perhatian.

Penumbuk Hadron Besar dan Odnoklassniki

Secara pribadi, saya tidak terlalu menyukai kaggle karena beberapa alasan:

  • pertama, kompetisi di sana sering kali berlangsung selama beberapa bulan, dan partisipasi aktif membutuhkan banyak usaha;
  • kedua, kernel publik (solusi publik). Penganut Kaggle menyarankan untuk memperlakukan mereka dengan ketenangan seperti biksu Tibet, namun kenyataannya sangat disayangkan ketika sesuatu yang telah Anda upayakan selama satu atau dua bulan tiba-tiba ternyata disajikan di piring perak untuk semua orang.

Untungnya, kompetisi pembelajaran mesin diadakan di platform lain, dan beberapa kompetisi ini akan dibahas.

IDAO Hackathon SNA 2019
Bahasa resmi: Inggris,
penyelenggara: Yandex, Bank Tabungan, HSE
bahasa resmi Rusia,
penyelenggara: Grup Mail.ru
Putaran Online: 15 Jan — 11 Februari 2019;
Final di Tempat: 4-6 April 2019
online - mulai 7 Februari hingga 15 Maret;
offline - mulai 30 Maret hingga 1 April.
Dengan menggunakan sekumpulan data tertentu tentang sebuah partikel di Large Hadron Collider (lintasan, momentum, dan parameter fisik lain yang agak rumit), tentukan apakah itu muon atau bukan
Dari pernyataan ini, 2 tugas diidentifikasi:
— di salah satunya Anda hanya perlu mengirimkan prediksi Anda,
- dan di sisi lain - kode lengkap dan model untuk prediksi, dan eksekusinya tunduk pada pembatasan yang cukup ketat pada waktu berjalan dan penggunaan memori
Untuk kompetisi SNA Hackathon, log tampilan konten dari grup terbuka di feed berita pengguna untuk Februari-Maret 2018 dikumpulkan. Set tes berisi satu setengah minggu terakhir bulan Maret. Setiap entri dalam log berisi informasi tentang apa yang ditampilkan dan kepada siapa, serta bagaimana reaksi pengguna terhadap konten ini: memberi peringkat, berkomentar, mengabaikannya, atau menyembunyikannya dari umpan.
Inti dari tugas SNA Hackathon adalah memberi peringkat pada setiap pengguna jejaring sosial Odnoklassniki pada feed mereka, menaikkan setinggi mungkin postingan yang akan menerima "kelas".
Pada tahap online, tugas dibagi menjadi 3 bagian:
1. memberi peringkat pada postingan menurut berbagai karakteristik kolaboratif
2. memberi peringkat pada postingan berdasarkan gambar yang dikandungnya
3. memberi peringkat pada postingan berdasarkan teks yang dikandungnya
Metrik khusus yang kompleks, seperti ROC-AUC Rata-rata ROC-AUC menurut pengguna
Hadiah untuk tahap pertama - T-shirt untuk N tempat, lolos ke tahap kedua, di mana akomodasi dan makan dibayar selama kompetisi
Fase kedua - ??? (Untuk alasan tertentu, saya tidak hadir pada upacara penghargaan dan tidak dapat mengetahui apa hadiahnya pada akhirnya). Mereka menjanjikan laptop kepada seluruh anggota tim pemenang
Hadiah untuk tahap pertama - T-shirt untuk 100 peserta terbaik, lolos ke tahap kedua, di mana perjalanan ke Moskow, akomodasi dan makan selama kompetisi dibayar. Selain itu, menjelang akhir tahap pertama, hadiah diumumkan untuk yang terbaik dalam 3 tugas di tahap 1: semua orang memenangkan kartu video RTX 2080 TI!
Tahap kedua adalah babak beregu, tim terdiri dari 2 sampai 5 orang, hadiah:
Juara 1 - 300 rubel
Juara 2 - 200 rubel
Juara 3 - 100 rubel
hadiah juri - 100 rubel
Grup telegram resmi, ~190 peserta, komunikasi dalam bahasa Inggris, pertanyaan harus menunggu beberapa hari untuk mendapatkan jawaban Grup resmi di telegram, ~1500 peserta, diskusi tugas aktif antara peserta dan penyelenggara
Penyelenggara memberikan dua solusi dasar, sederhana dan lanjutan. Sederhana membutuhkan kurang dari 16 GB RAM, dan memori tingkat lanjut tidak muat untuk 16 GB. Pada saat yang sama, dengan sedikit melihat ke depan, para peserta tidak mampu mengungguli solusi lanjutan secara signifikan. Tidak ada kesulitan dalam meluncurkan solusi ini. Perlu dicatat bahwa dalam contoh lanjutan terdapat komentar dengan petunjuk tentang di mana harus mulai meningkatkan solusi. Solusi primitif dasar diberikan untuk setiap tugas, yang dengan mudah dilampaui oleh para peserta. Pada awal-awal kompetisi, peserta menemui beberapa kesulitan: pertama, data diberikan dalam format Apache Parket, dan tidak semua kombinasi Python dan paket parket berfungsi tanpa kesalahan. Kesulitan kedua adalah mendownload gambar dari mail cloud, saat ini tidak ada cara mudah untuk mendownload data dalam jumlah besar sekaligus. Akibatnya, masalah tersebut membuat peserta tertunda selama beberapa hari.

IDAO. Tahap pertama

Tugasnya adalah mengklasifikasikan partikel muon/non-muon menurut karakteristiknya. Fitur utama dari tugas ini adalah adanya kolom bobot dalam data pelatihan, yang ditafsirkan oleh penyelenggara sendiri sebagai keyakinan akan jawaban baris ini. Masalahnya adalah cukup banyak baris yang mengandung bobot negatif.

Penumbuk Hadron Besar dan Odnoklassniki

Setelah berpikir selama beberapa menit tentang garis dengan petunjuk (petunjuk tersebut hanya menarik perhatian ke fitur kolom bobot ini) dan membuat grafik ini, kami memutuskan untuk memeriksa 3 opsi:

1) membalikkan target garis dengan bobot negatif (dan bobot yang sesuai)
2) menggeser bobot ke nilai minimum sehingga dimulai dari 0
3) jangan gunakan beban senar

Opsi ketiga ternyata yang terburuk, tetapi dua opsi pertama meningkatkan hasilnya, yang terbaik adalah opsi No. 1, yang langsung membawa kami ke posisi kedua saat ini di tugas pertama dan pertama di tugas kedua.
Penumbuk Hadron Besar dan Odnoklassniki
Langkah kami selanjutnya adalah meninjau data untuk mencari nilai yang hilang. Penyelenggara memberi kami data yang sudah disisir, di mana ada beberapa nilai yang hilang, dan digantikan oleh -9999.

Kami menemukan nilai yang hilang di kolom MatchedHit_{X,Y,Z}[N] dan MatchedHit_D{X,Y,Z}[N], dan hanya ketika N=2 atau 3. Seperti yang kami pahami, beberapa partikel tidak melewati keempat detektor, dan berhenti di pelat ke-4 atau ke-3. Data juga berisi kolom Lextra_{X,Y}[N], yang tampaknya menggambarkan hal yang sama seperti MatchedHit_{X,Y,Z}[N], tetapi menggunakan semacam ekstrapolasi. Tebakan kecil ini menunjukkan bahwa Lextra_{X,Y}[N] dapat menggantikan nilai yang hilang di MatchedHit_{X,Y,Z}[N] (hanya untuk koordinat X dan Y). MatchedHit_Z[N] diisi dengan median dengan baik. Manipulasi ini memungkinkan kami mencapai posisi perantara pertama di kedua tugas.

Penumbuk Hadron Besar dan Odnoklassniki

Mengingat mereka tidak memberikan apa pun untuk memenangkan tahap pertama, kami bisa saja berhenti di situ, tetapi kami melanjutkan, menggambar beberapa gambar yang indah dan menghadirkan fitur-fitur baru.

Penumbuk Hadron Besar dan Odnoklassniki

Misalnya, kita menemukan bahwa jika kita memplot titik potong sebuah partikel dengan keempat pelat detektor, kita dapat melihat bahwa titik-titik pada masing-masing pelat dikelompokkan menjadi 5 persegi panjang dengan rasio aspek 4 banding 5 dan berpusat di titik (0,0), dan di Tidak ada titik pada persegi panjang pertama.

Nomor plat / dimensi persegi panjang 1 2 3 4 5
Piring 1 500h625 1000h1250 2000h2500 4000h5000 8000h10000
Piring 2 520h650 1040h1300 2080h2600 4160h5200 8320h10400
Piring 3 560h700 1120h1400 2240h2800 4480h5600 8960h11200
Piring 4 600h750 1200h1500 2400h3000 4800h6000 9600h12000

Setelah menentukan dimensi ini, kami menambahkan 4 fitur kategoris baru untuk setiap partikel - jumlah persegi panjang yang memotong setiap pelat.

Penumbuk Hadron Besar dan Odnoklassniki

Kami juga memperhatikan bahwa partikel-partikel tersebut tampak menyebar ke sisi pusat dan muncul ide untuk mengevaluasi “kualitas” hamburan ini. Idealnya, mungkin saja kita dapat menghasilkan semacam parabola yang “ideal” tergantung pada titik masuknya dan memperkirakan penyimpangannya, namun kita membatasi diri kita pada garis lurus yang “ideal”. Setelah membuat garis lurus ideal untuk setiap titik masuk, kami dapat menghitung simpangan baku lintasan setiap partikel dari garis lurus tersebut. Karena deviasi rata-rata untuk target = 1 adalah 152, dan untuk target = 0 adalah 390, kami secara sementara menilai fitur ini baik. Dan memang, fitur ini langsung menjadi salah satu fitur paling berguna.

Kami senang dan menambahkan deviasi keempat titik perpotongan setiap partikel dari garis lurus ideal sebagai 4 fitur tambahan (dan fitur tersebut juga berfungsi dengan baik).

Tautan ke artikel ilmiah tentang topik kompetisi, yang diberikan kepada kami oleh penyelenggara, memunculkan gagasan bahwa kami bukanlah orang pertama yang memecahkan masalah ini dan, mungkin, ada semacam perangkat lunak khusus. Setelah menemukan repositori di github tempat metode IsMuonSimple, IsMuon, IsMuonLoose diterapkan, kami mentransfernya ke situs kami dengan sedikit modifikasi. Metodenya sendiri sangat sederhana: misalnya, jika energinya kurang dari ambang batas tertentu, maka itu bukan muon, sebaliknya disebut muon. Fitur sederhana seperti itu jelas tidak dapat memberikan peningkatan jika menggunakan peningkatan gradien, jadi kami menambahkan “jarak” signifikan lainnya ke ambang batas. Fitur-fitur ini juga sedikit ditingkatkan. Mungkin, dengan menganalisis metode yang ada secara lebih menyeluruh, kita dapat menemukan metode yang lebih kuat dan menambahkannya ke dalam tanda-tandanya.

Di akhir kompetisi, kami sedikit mengubah solusi “cepat” untuk masalah kedua; pada akhirnya, berbeda dari baseline dalam poin-poin berikut:

  1. Pada baris dengan bobot negatif, targetnya dibalik
  2. Mengisi nilai yang hilang di MatchedHit_{X,Y,Z}[N]
  3. Mengurangi kedalaman menjadi 7
  4. Mengurangi kecepatan pembelajaran menjadi 0.1 (sebelumnya 0.19)

Hasilnya, kami mencoba lebih banyak fitur (tidak terlalu berhasil), memilih parameter dan melatih catboost, lightgbm, dan xgboost, mencoba campuran prediksi yang berbeda dan sebelum membuka pribadi, kami dengan percaya diri menang pada tugas kedua, dan pada tugas pertama kami termasuk di antara yang pemimpin.

Setelah membuka private kami berada di peringkat 10 untuk tugas pertama dan peringkat 1 untuk tugas kedua. Semua pemimpin ikut campur, dan kecepatan secara pribadi lebih tinggi daripada di libboard. Tampaknya data tersebut memiliki stratifikasi yang buruk (atau misalnya tidak ada baris dengan bobot negatif secara pribadi) dan hal ini agak membuat frustrasi.

SNA Hackathon 2019 - Teks. Tahap pertama

Tugasnya adalah memberi peringkat postingan pengguna di jejaring sosial Odnoklassniki berdasarkan teks yang dikandungnya; selain teks, ada beberapa karakteristik postingan lainnya (bahasa, pemilik, tanggal dan waktu pembuatan, tanggal dan waktu melihat ).

Sebagai pendekatan klasik untuk bekerja dengan teks, saya akan menyoroti dua opsi:

  1. Memetakan setiap kata ke dalam ruang vektor berdimensi n sedemikian rupa sehingga kata-kata yang serupa memiliki vektor-vektor yang serupa (baca lebih lanjut di artikel kami), lalu mencari kata rata-rata untuk teks tersebut atau menggunakan mekanisme yang memperhitungkan posisi relatif kata (CNN, LSTM/GRU).
  2. Menggunakan model yang dapat langsung bekerja dengan seluruh kalimat. Misalnya, Bert. Secara teori, pendekatan ini seharusnya bekerja lebih baik.

Karena ini adalah pengalaman pertama saya dengan teks, mengajar seseorang adalah salah, jadi saya akan belajar sendiri. Berikut tips yang akan saya berikan pada diri saya sendiri di awal kompetisi:

  1. Sebelum Anda berlari untuk mengajarkan sesuatu, lihatlah datanya! Selain teks itu sendiri, datanya memiliki beberapa kolom dan Anda dapat memeras lebih banyak dari kolom tersebut daripada yang saya lakukan. Hal paling sederhana adalah melakukan pengkodean target rata-rata untuk beberapa kolom.
  2. Jangan belajar dari semua data! Ada banyak data (sekitar 17 juta baris) dan sama sekali tidak perlu menggunakan semuanya untuk menguji hipotesis. Pelatihan dan pra-pemrosesan berjalan cukup lambat, dan saya jelas punya waktu untuk menguji hipotesis yang lebih menarik.
  3. <Nasihat kontroversial> Tidak perlu mencari model yang keren. Saya menghabiskan waktu lama mencari tahu Elmo dan Bert, berharap mereka akan segera membawa saya ke posisi yang tinggi, dan sebagai hasilnya saya menggunakan embeddings FastText yang sudah dilatih sebelumnya untuk bahasa Rusia. Saya tidak dapat mencapai kecepatan yang lebih baik dengan Elmo, dan saya masih belum punya waktu untuk memikirkannya dengan Bert.
  4. <Nasihat kontroversial> Tidak perlu mencari satu fitur mematikan. Melihat datanya, saya perhatikan sekitar 1 persen teks sebenarnya tidak berisi teks! Tapi ada link ke beberapa sumber, dan saya menulis parser sederhana yang membuka situs dan mengeluarkan judul dan deskripsi. Sepertinya ide yang bagus, tapi kemudian saya terbawa suasana dan memutuskan untuk mengurai semua tautan untuk semua teks dan sekali lagi kehilangan banyak waktu. Semua ini tidak memberikan peningkatan yang signifikan pada hasil akhir (walaupun saya menemukan stemming, misalnya).
  5. Fitur klasik berfungsi. Kita google, misalnya “fitur teks kaggle”, membaca dan menambahkan semuanya. TF-IDF memberikan peningkatan, begitu pula fitur statistik seperti panjang teks, kata, dan jumlah tanda baca.
  6. Jika ada kolom DateTime, ada baiknya menguraikannya menjadi beberapa fitur terpisah (jam, hari dalam seminggu, dll.). Fitur mana yang harus disorot harus dianalisis menggunakan grafik/beberapa metrik. Di sini, secara tiba-tiba, saya melakukan semuanya dengan benar dan menyoroti fitur-fitur yang diperlukan, tetapi analisis normal tidak ada salahnya (misalnya, seperti yang kami lakukan di final).

Penumbuk Hadron Besar dan Odnoklassniki

Sebagai hasil dari kompetisi tersebut, saya melatih satu model keras dengan konvolusi kata, dan satu lagi berdasarkan LSTM dan GRU. Keduanya menggunakan penyematan FastText terlatih untuk bahasa Rusia (saya mencoba sejumlah penyematan lainnya, tetapi penyematan inilah yang bekerja paling baik). Setelah rata-rata prediksi, saya menempati posisi ke-7 terakhir dari 76 peserta.

Setelah tahap pertama diterbitkan artikel oleh Nikolai Anokhin, yang menempati posisi kedua (dia berpartisipasi di luar kompetisi), dan solusinya sampai tahap tertentu mengulangi solusi saya, tetapi dia melangkah lebih jauh karena mekanisme perhatian nilai kunci kueri.

Tahap kedua OK & IDAO

Kompetisi tahap kedua berlangsung hampir berturut-turut, jadi saya memutuskan untuk menontonnya bersama.

Pertama, saya dan tim yang baru diakuisisi berakhir di kantor perusahaan Mail.ru yang mengesankan, di mana tugas kami adalah menggabungkan model tiga lagu dari tahap pertama - teks, gambar, dan kolaborasi. Sedikit lebih dari 2 hari diberikan untuk ini, yang ternyata sangat sedikit. Faktanya, kami hanya mampu mengulangi hasil tahap pertama tanpa memperoleh keuntungan apa pun dari merger. Pada akhirnya kami menempati posisi ke-5, tetapi kami tidak dapat menggunakan model teks. Setelah melihat solusi dari peserta lain, tampaknya ada baiknya mencoba mengelompokkan teks dan menambahkannya ke model kolaborasi. Efek samping dari tahap ini adalah kesan baru, pertemuan dan komunikasi dengan peserta dan penyelenggara yang keren, serta kurang tidur, yang mungkin mempengaruhi hasil tahap akhir IDAO.

Tugas pada tahap Final IDAO 2019 adalah memprediksi waktu tunggu pesanan pengemudi taksi Yandex di bandara. Pada tahap 2, 3 tugas = 3 bandara diidentifikasi. Untuk setiap bandara, diberikan data menit demi menit mengenai jumlah pesanan taksi selama enam bulan. Dan sebagai data uji, data pesanan bulan berikutnya dan menit demi menit selama 2 minggu terakhir diberikan. Waktunya singkat (1,5 hari), tugasnya cukup spesifik, hanya satu orang dari tim yang datang ke kompetisi - dan sebagai hasilnya, itu adalah tempat yang menyedihkan menjelang akhir. Ide menarik termasuk upaya menggunakan data eksternal: cuaca, kemacetan lalu lintas, dan statistik pesanan taksi Yandex. Meski penyelenggara tidak menyebutkan bandara apa itu, banyak peserta berasumsi bahwa bandara tersebut adalah Sheremetyevo, Domodedovo, dan Vnukovo. Meskipun asumsi ini terbantahkan setelah kompetisi, fitur-fitur, misalnya, dari data cuaca Moskow meningkatkan hasil baik pada validasi maupun pada papan peringkat.

Kesimpulan

  1. Kompetisi ML keren dan menarik! Di sini Anda akan menemukan penggunaan keterampilan dalam analisis data, dan dalam model dan teknik yang cerdik, dan akal sehat sangat diterima.
  2. ML sudah menjadi kumpulan pengetahuan yang sangat besar yang tampaknya berkembang secara eksponensial. Saya menetapkan tujuan untuk mengenal berbagai bidang (sinyal, gambar, tabel, teks) dan sudah menyadari betapa banyak yang harus dipelajari. Misalnya, setelah kompetisi ini saya memutuskan untuk mempelajari: algoritme pengelompokan, teknik lanjutan untuk bekerja dengan pustaka peningkatan gradien (khususnya, bekerja dengan CatBoost pada GPU), jaringan kapsul, mekanisme perhatian nilai kunci kueri.
  3. Bukan hanya dengan kaggle! Masih banyak kompetisi lain yang lebih mudah untuk mendapatkan setidaknya sebuah T-shirt, dan peluang untuk mendapatkan hadiah lainnya lebih besar.
  4. Menyampaikan! Sudah ada komunitas besar di bidang pembelajaran mesin dan analisis data, ada kelompok tematik di telegram, slack, dan orang-orang serius dari Mail.ru, Yandex, dan perusahaan lain menjawab pertanyaan dan membantu pemula dan mereka yang melanjutkan jalur mereka di bidang ini pengetahuan.
  5. Saya menyarankan semua orang yang terinspirasi oleh poin sebelumnya untuk berkunjung festival data — konferensi gratis besar di Moskow, yang akan berlangsung pada 10-11 Mei.

Sumber: www.habr.com

Tambah komentar