VKCup 2020 Stage I. A Long Way



Hari ini kita akan mempertimbangkan kompetisi VkCup 2020 dan tugas tahap kualifikasi pertama. Orang-orang dari Singer berjanji bahwa di semua tahap itu akan sulit, tetapi menarik. Dan apa, sebenarnya, masih dibutuhkan?

Seperti yang Anda tahu, keinginan untuk keunggulan, mengasah keterampilan sendiri untuk ketajaman yang mirip dengan baja Damaskus, melekat di setiap spesialis di bidang apa pun. Contoh massa ini. Dari lukisan-lukisan seniman yang penuh warna, yang masing-masing menghabiskan sebagian dari kehidupan (saya bahkan akan mengatakan yang terbaik), yang dapat terbuang sia-sia saat mengunjungi acara-acara sosial. Sebelum program keygen - aktivator perangkat lunak, yang masing-masing berisi musik 8-bit, algoritma aktivasi dan animasi, dengan hati-hati dan hati-hati diubah ke dalam file, berukuran hanya beberapa puluh kilobyte. Art, apapun yang orang katakan.

Dan tidak, ini bukan artikel lain tentang pengembangan diri, jujur, jujur. Aku, sebenarnya, apa. Dalam diri kita masing-masing ada keinginan untuk memecahkan masalah-masalah yang tidak sepele di bidang kita. Selain itu, keinginan untuk melakukan ini lebih baik daripada kebanyakan orang di sekitar. Itu alami. Dan, menurut saya, kompetisi Machine Learning, ini adalah kesempatan bagus untuk ini. Terkadang perlu memberi kebebasan pada semangat kompetisi.

Kami akan mempertimbangkan VKCup 2020, kejuaraan untuk analisis data dari VKontakte, yaitu, tiga tahapnya, dengan final di St. Petersburg. Mari kita mulai dengan kualifikasi pertama. Ya, ada waktu, dan Petersburg, meskipun merupakan ibukota budaya, tidak suka keterlambatan dan cacat. Jadi kami berkenan untuk berurusan dengan urusan sesegera mungkin, tuan, pria sopir taksi tidak diharapkan untuk ditemukan, dan karena itu jauh.



Saya pikir banyak yang sudah mengalami tugas NLP. Dalam hal ini, tugas tahap kualifikasi pertama, yang menetapkan sendiri tugas memilih 256 orang yang melewati tahap kedua, adalah analisis masalah game Clover, yaitu, memprediksi pertanyaan mana yang diajukan oleh editor profesional dan yang oleh pengguna biasa.

Ukuran data adalah sekitar 40.000 baris, di mana 10.000 adalah dataset uji yang dengannya kualitas model akan diperkirakan, dan 30.000 lainnya adalah kumpulan data yang tersisa. Metrik uji adalah AUC ROC - area di bawah kurva kesalahan.

Data tampak sebagai berikut, di



mana ID adalah pengidentifikasi pertanyaan, Jawaban adalah variabel biner yang nilainya harus diprediksi (1 - pertanyaan diajukan oleh editor, nol 0 - oleh pengguna). Pertanyaan - pertanyaan itu sendiri.

Tampaknya tugasnya cukup sederhana, tetapi semuanya jauh dari kasus. Pendekatan standar, seperti Word2Vec, BERT, dan model NLP baru-ketinggalan jaman lainnya, menghasilkan kualitas yang relatif rendah, sekitar 0,7, yang bahkan tidak membuatnya menjadi seratus pertama. Oleh karena itu, mengingat bahwa iblis, seperti orang-orang LEGO, hidup dalam perincian, mempertimbangkan dataset secara lebih rinci dan mengembangkan solusi yang akan relatif lebih efektif.

Untuk mulai dengan, selama EDA awal, Anda dapat melihat bahwa pengguna sering menggunakan karakter atipikal, menulis kata-kata dalam huruf kapital, kadang-kadang tidak dengan huruf kapital di awal kalimat, melupakan tanda tanya, menggunakan kutipan aneh. Mereka juga menyalin pertanyaan editor, meneruskannya sebagai pertanyaan mereka sendiri. Dan fitur menarik lainnya.

Mari kita mulai dengan garis dasar. Menggunakan ukuran TF-IDF (Term Frequency - Inverted Document Frequency), kami mendapatkan sparsematrix, yang kemudian kami masukkan ke dalam gradien boost.
Hanya satu definisi, TF-IDF adalah ukuran statistik yang digunakan untuk menilai pentingnya sebuah kata dalam konteks dokumen yang merupakan bagian dari kumpulan dokumen atau kumpulan. Bobot kata sebanding dengan frekuensi penggunaan kata dalam dokumen dan berbanding terbalik dengan frekuensi penggunaan kata di semua dokumen koleksi.

Untuk mengurangi pelatihan ulang model, kita akan mengurangi jumlah token maksimum dan menyusun matriks parameter awal, yang akan terdiri dari kombinasi dua yang lebih kecil: satu bagian adalah matriks TF-IDF, di mana urutan simbol yang dipisahkan oleh spasi bertindak sebagai token, sebenarnya ini adalah kata-kata, dan yang lainnya bagian ini adalah matriks di mana urutan simbol dari panjang tertentu bertindak sebagai token.



Itu terlihat cukup bagus, namun, itu bisa dan harus lebih baik. Ini adalah bagian pertama dari pipa. Dalam hal ini, "P" adalah singkatan dari "Publik", ini adalah indikator yang menunjukkan seberapa banyak model mencetak pada bagian terbuka dari sampel uji. Dan "F" adalah singkatan untuk "Final", hasil pada bagian tersembunyi dari data yang diterbitkan setelah akhir kompetisi.

Selanjutnya, kami akan menambahkan beberapa data ke dataset, yang umumnya tidak dilarang oleh aturan. Dan apa yang tidak dilarang sesuai dengan itu diizinkan. Di Internet Anda dapat menemukan sejumlah dataset dengan pertanyaan kuis. Jika kami mengunduhnya dan menandainya sebagai pertanyaan pengguna.



Gagasan ini, ini adalah pedang bermata dua dan pertanyaan perselisihan. Jika Anda mengambil pertanyaan dari buku khusus apa pun, model tersebut akan mengalami disonansi. Di satu sisi, gaya penulisan dekat dengan editorial, di sisi lain, pengguna yang licik telah lama mem-spammed mereka dengan pesan pribadi dari game publik "Clover". Oleh karena itu, kami tidak akan menggunakannya, kami akan melindungi model dari gangguan bipolar modeliness.

Seperti yang saya katakan sebelumnya, pengguna memiliki kelalaian dalam memformat pertanyaan mereka, jadi kami akan mengekstraknya menggunakan ekspresi reguler reguler. Kami akan menulis ekspresi reguler untuk memeriksa keberadaan tanda tanya, untuk mengidentifikasi berbagai jenis kutipan, untuk mencari huruf kapital ,, ,. Dan kami akan melatih model pada tanda-tanda ini. Selain itu, prediksi sebelumnya akan menjadi pertanda tambahan. Ini akan membantu untuk memperbaiki prediksi model sebelumnya.

Dengan demikian, model dua tingkat diimplementasikan di mana hasil peningkatan pada matriks jarang TF-IDF disesuaikan dengan meningkatkan atribut tabel yang diperoleh dengan menggunakan ekspresi reguler.



Ini cukup untuk posisi ke-5 di papan peringkat pribadi dari 318. Sesuatu dapat diperbaiki dan dioptimalkan, tetapi waktu semakin habis. Dengan satu atau lain cara, ini sudah cukup untuk melangkah lebih jauh. Dan perfeksionisme yang berlebihan menyebabkan kegugupan. Bagaimanapun, sampai jumpa lagi, cinta ML, tetap tenang dan tetap disini. Selanjutnya akan lebih menarik ...

→ Kode dalam repositori Github

All Articles