Kita sering berbicara tentang teknologi dan perpustakaan yang berasal dan terbentuk di Yandex. Bahkan, kami setidaknya menerapkan dan mengembangkan solusi pihak ketiga.
Hari ini saya akan memberi tahu komunitas Habr tentang salah satu contoh tersebut. Anda akan belajar mengapa kami mengajarkan jaringan saraf BERT untuk menemukan kesalahan ketik di berita utama, dan tidak menggunakan model yang sudah jadi, mengapa Anda tidak dapat mengambil dan menjalankan BERT pada beberapa kartu video dan bagaimana kami menggunakan fitur kunci dari teknologi ini - mekanisme perhatian.

Tantangan
Yandex.News adalah layanan yang mengumpulkan berita dari publikasi yang terhubung dengan kami. Ini bukan hanya berita media yang paling banyak dibaca dan dikutip di halaman utama, tetapi juga bagian
tematik atau bahkan pilihan pribadi dari semua publikasi. Bagaimanapun, ini adalah ribuan situs dan jutaan judul, dari mana mesin harus membentuk pilihan setiap beberapa menit.
Ini adalah mesin, karena kami tidak pernah melakukan intervensi dalam gambar hari ini: kami tidak menambahkan berita di sana secara manual, kami tidak menghapusnya dari sana (tidak peduli seberapa besar keinginan kami), kami tidak mengedit berita utama. Sekitar ini sudah rusak banyak salinan. Pendekatan yang sepenuhnya algoritmik memiliki pro dan kontra. Sesuatu yang bisa kita tingkatkan dengan teknologi, sesuatu yang tidak. Meskipun ada kesalahan pengejaan atau kesalahan ketik pada judul, kami tidak memperbaikinya. Kami telah menambahkan favicons publikasi ke berita utama sehingga jelas dari mana berita itu berasal. Ini sebagian membantu, tetapi kami tidak menerima kesalahan dan mulai mencari cara untuk menghilangkannya tanpa membuat perubahan pada teks.
Jika tidak mungkin untuk memperbaiki kesalahan, maka Anda dapat melatih mesin untuk menemukan header yang, karena kesalahan, tidak cocok untuk bagian atas. Selain itu, Yandex memiliki spesialisasi dalam morfologi Rusia sejak saat nama tersebut belum ditemukan. Tampaknya kita mengambil jaringan saraf - dan intinya ada di topi.
Alat-alatnya
Yandex memiliki teknologi
Speller untuk menemukan dan memperbaiki kesalahan. Berkat
pustaka pembelajaran mesin
CatBoost, Speller dapat mendekripsi kata-kata yang tidak dapat dikenali ("kata sifat" โ "teman sekelas") dan mempertimbangkan konteks ketika mencari kesalahan ketik ("musik miss" โ "musik unduhan"). Tampaknya Speller ideal untuk tugas kita, tetapi tidak.
Ejaan (dikenal secara internal sebagai wali pencarian) sudah diasah pada tingkat arsitektur untuk menyelesaikan tugas yang sama sekali berbeda: untuk membantu pengguna mengembalikan formulir permintaan yang benar. Dalam Pencarian, tidak begitu penting apakah kasus tersebut dipilih dengan benar, huruf kapital atau koma ditempelkan. Di sana, lebih penting bagi permintaan pencarian "Haminguel" untuk menebak bahwa orang itu ada dalam pikiran Hemingway.
Kesalahan dalam tajuk utama dibuat oleh orang-orang yang relatif melek yang tidak mungkin menulis Haminguel. Tetapi persetujuan yang salah ("penerbangan ditunda"), kata-kata yang hilang ("pemuda mencoba mobil") dan huruf kapital tambahan ("Presiden Bank") adalah hal biasa. Akhirnya, ada kalimat yang benar secara formal "Aku akan memperbaiki Gorky Street di Pskov", yang tidak akan dijaga oleh wali yang normal (yah, bagaimana jika ini adalah janji dari penulis?), Tapi ini jelas merupakan berita utama yang manja. Selain itu, dalam Berita tugasnya tidak sama dengan di Pencarian: bukan untuk memperbaiki kesalahan ketik dan kesalahan, tetapi untuk mendeteksi mereka.
Kami memiliki pilihan lain, misalnya, model yang didasarkan pada DSSM (jika menarik, kami secara singkat berbicara tentang pendekatan ini dalam posting tentang
algoritma Palekh ), tetapi mereka juga memiliki keterbatasan. Misalnya, urutan kata tidak diperhitungkan dengan sempurna.
Secara umum, alat yang sudah jadi tidak cocok untuk tugas kita, atau terbatas. Jadi, Anda perlu membuat sendiri - untuk melatih model Anda. Dan ini adalah alasan yang bagus untuk bekerja dengan teknologi BERT, yang menjadi tersedia bagi pengembang pada 2018 dan menunjukkan hasil yang mengesankan.
Memperkenalkan BERT
Masalah utama dari masalah pemrosesan bahasa alami modern (NLP) adalah menemukan cukup contoh yang ditandai oleh orang untuk melatih jaringan saraf. Jika Anda membutuhkan pertumbuhan yang berkualitas, maka sampel pelatihan harus sangat besar - jutaan dan miliaran contoh. Pada saat yang sama, ada banyak tugas di NLP dan semuanya berbeda. Mengumpulkan data dalam volume yang sama untuk setiap tugas itu lama, mahal, dan seringkali mustahil. Bahkan untuk perusahaan terbesar di dunia.
Tetapi ada opsi untuk mengatasi masalah ini - dengan bantuan pelatihan dalam dua tahap. Pada awalnya, jaringan saraf diajarkan struktur bahasa untuk waktu yang lama dan mahal pada tubuh besar miliaran kata (ini adalah pra-pelatihan). Kemudian jaringan dengan cepat dan murah dipelintir untuk tugas tertentu - misalnya, untuk membagi ulasan menjadi baik dan buruk (ini adalah fine-tuning). Cukup sekitar 10 ribu contoh ditandai di
Tolok .
Teknologi BERT (Representasi Encoder Dua Arah dari Transformer) didasarkan pada gagasan ini. Idenya sendiri bukanlah hal baru dan telah diterapkan sebelumnya, tetapi ada perbedaan yang signifikan. Transformer adalah arsitektur jaringan saraf yang memungkinkan Anda memperhitungkan seluruh konteks sekaligus, termasuk ujung kalimat yang lain dan pergantian partisipan di suatu tempat di tengah. Dan ini perbedaannya dari arsitektur modis sebelumnya, yang memperhitungkan konteksnya. Misalnya, jaringan saraf LSTM memiliki panjang konteks puluhan kata yang terbaik, dan di sini semuanya 200.
Di
GitHub , kode sumber TensorFlow dan bahkan model universal pra-terlatih dalam 102 bahasa tersedia, dari Rusia ke volapyuk. Ambil, tampaknya, solusi di luar kotak - dan dapatkan hasilnya segera. Tapi tidak.
Ternyata model universal dalam teks-teks Rusia menunjukkan kualitas yang jauh lebih rendah daripada model bahasa Inggris, memecahkan rekor dalam teks-teks bahasa Inggris (yang, Anda lihat, logis). Dalam teks-teks Rusia, ia kehilangan model internal kami tentang DSSM.
Oke, Anda dapat melakukan pra-mendidik diri sendiri - untungnya, Yandex memiliki cukup teks dan pengalaman bahasa Rusia dalam pembelajaran mesin. Namun ada nuansa. Butuh satu tahun untuk belajar!
Faktanya adalah bahwa BERT diarahkan untuk prosesor tensor Google (TPU), oleh karena itu di luar kotak itu dapat bekerja dengan hanya satu kartu video (GPU). Dan mustahil untuk memparalelkan dahi seseorang dengan
horovod apa pun: mentransfer 400 megabita data dari satu kartu ke kartu lainnya pada setiap langkah sangat mahal, paralelisasi akan menjadi sia-sia. Apa yang harus dilakukan
Optimasi
Mereka mulai mencari ide dan solusi yang dapat mempercepat masalah ini secara signifikan. Pertama-tama, kami memperhatikan bahwa setiap angka dalam model kami menempati 32 bit memori (standar float untuk angka di komputer). Tampaknya kecil, tetapi ketika Anda memiliki 100 juta bobot, maka ini sangat penting. Kami tidak membutuhkan keakuratan seperti itu di mana-mana, jadi kami memutuskan untuk mengonversi sebagian angka menjadi format 16-bit (inilah yang disebut pelatihan presisi campuran).
Sepanjang jalan, dengan bantuan banyak file dan kruk, kami mengacaukan kompilasi XLA, mengandalkan
komit NVIDIA yang masih mentah. Berkat ini, kartu NVIDIA Tesla V100 kami (server kecil dari mereka berdiri sebagai apartemen di daerah murah Moskow) dapat sepenuhnya mengungkapkan potensi mereka karena aritmatika 16-bit pada Tensor Cores.
Kami hanya tertarik pada tajuk utama berbahasa Rusia, tetapi model multibahasa, yang kami ambil sebagai dasar, dilatih dalam ratusan bahasa, termasuk bahkan volapuk buatan. Kata-kata dari semua bahasa yang diterjemahkan ke dalam ruang vektor disimpan dalam model. Selain itu, Anda tidak dapat mengambilnya dan menghapusnya dari sana - saya harus berkeringat untuk mengurangi ukuran kamus.
Dan satu hal lagi. Jika Anda seorang ilmuwan dan komputer Anda ada di bawah meja, maka Anda dapat mengkonfigurasi ulang semua yang ada untuk setiap tugas tertentu. Tetapi dalam cloud computing nyata, di mana ribuan mesin dikonfigurasi dengan cara yang sama, itu cukup bermasalah, misalnya, untuk membangun kembali kernel untuk setiap fitur TensorFlow baru. Oleh karena itu, kami menghabiskan banyak upaya untuk mengumpulkan versi paket yang dapat dilakukan oleh semua chip bermodel baru, dan tidak memerlukan pembaruan radikal dan konfigurasi ulang kartu video di cloud.
Secara umum, peras semua jus di mana pun mereka bisa. Dan kami berhasil. Tahun berubah menjadi seminggu.
Pelatihan
Membangun dataset yang tepat biasanya merupakan bagian tersulit dari pekerjaan itu. Pertama, kami mempelajari pengelompokan pada tiga juta judul yang ditandai dengan toloker. Tampaknya banyak, tetapi hanya 30 ribu dari mereka - dengan kesalahan ketik. Di mana mendapatkan lebih banyak contoh?
Kami memutuskan untuk melihat mana judul media itu sendiri yang benar. Ada lebih dari 2 juta dalam sejarah Yandex. Berita Baru. Bingo! Meskipun terlalu dini untuk bersukacita.
Ternyata sangat sering media mengulang berita utama bukan karena kesalahan. Rincian baru terungkap - dan editor mengganti satu kata dengan yang benar. Oleh karena itu, kami membatasi diri pada koreksi dengan perbedaan antara versi hingga tiga huruf (meskipun masih ada suara di sini: "ditemukan dua" - menjadi "ditemukan tiga"). Jadi kami mencetak satu juta kesalahan ketik. Kami pertama-tama mempelajari pilihan besar ini dengan noise, dan kemudian pada tanda tolker kecil tanpa noise.
Kualitas
Dalam tugas-tugas seperti itu, adalah kebiasaan untuk mengukur akurasi dan kelengkapan. Dalam kasus kami, akurasi adalah proporsi putusan yang benar di antara semua putusan tentang kesalahan dalam header. Kelengkapan - proporsi header kesalahan yang kami tangkap di antara semua header kesalahan. Baik itu dan yang lain di dunia ideal harus bercita-cita 100%. Tetapi dalam tugas pembelajaran mesin, indikator-indikator ini cenderung bertentangan. Artinya, semakin kita memutar akurasinya, semakin lengkap kelengkapannya. Begitu juga sebaliknya.
Dalam pendekatan kami sebelumnya berdasarkan DSSM, kami telah mencapai akurasi 95% (yaitu 5% vonis positif palsu). Ini sudah merupakan indikator yang cukup tinggi. Oleh karena itu, kami memutuskan untuk mempertahankan tingkat akurasi yang sama dan melihat bagaimana kelengkapan berubah dengan model baru. Dan dia melonjak dari 21 menjadi 78%. Dan itu pasti sukses.
Di sini mungkin untuk mengakhiri itu, tetapi saya ingat janji untuk berbicara tentang perhatian.
Jaringan saraf dengan spidol
Secara umum diterima bahwa jaringan saraf adalah kotak hitam. Kami memberi makan sesuatu ke input dan mendapatkan sesuatu ke output. Mengapa dan bagaimana sebuah misteri.
Keterbatasan ini dimaksudkan untuk menghindari jaringan saraf yang ditafsirkan. BERT adalah salah satunya. Penafsirannya terletak pada mekanisme perhatian. Secara kasar, di setiap lapisan jaringan saraf kita mengulangi teknik yang sama: kita melihat kata-kata tetangga dengan โperhatianโ yang berbeda dan memperhitungkan interaksi dengan mereka. Sebagai contoh, ketika jaringan saraf memproses kata ganti "dia", itu "hati-hati melihat" pada kata benda yang merujuk "dia".
Gambar di bawah ini menunjukkan dalam berbagai warna merah apa kata token "melihat" di, yang mengumpulkan informasi tentang seluruh judul untuk lapisan classifier akhir. Jika salah ketik kata - perhatian menyorotinya, jika kata-kata tidak konsisten - maka keduanya (dan, mungkin, tergantung pada mereka).

Di tempat ini, omong-omong, orang dapat melihat potensi penuh dari jaringan saraf. Tidak ada tahap pelatihan apakah model kami tahu persis di mana kesalahan ketik dalam contoh berada: ia hanya tahu bahwa seluruh judul tidak benar. Dan dia masih belajar bahwa "sekolah untuk 1224 tempat" tidak benar untuk ditulis karena angka yang tidak konsisten, dan dia secara khusus menyoroti angka 4.
Kami tidak berhenti pada kesalahan ketik dan mulai menerapkan pendekatan baru tidak hanya untuk mencari kesalahan, tetapi juga untuk mengidentifikasi header yang usang. Tapi ini adalah kisah yang sangat berbeda dengan yang kami harap akan kembali ke Habr dalam waktu dekat.
Tautan yang bermanfaat bagi mereka yang ingin mempelajari topik tersebut