DeepPavlov untuk pengembang: Alat # 1 NLP dan membuat chatbots

Halo semuanya! Kami membuka serangkaian artikel yang ditujukan untuk memecahkan masalah praktis terkait dengan Pemrosesan Bahasa Alami (atau hanya NLP) dan membuat agen interaktif (chat bot) menggunakan perpustakaan open-source DeepPavlov , yang dikembangkan oleh tim kami dari Laboratorium Sistem Saraf dan Pembelajaran Jauh MIPT. Tujuan utama dari siklus ini adalah untuk memperkenalkan DeepPavlov ke berbagai pengembang dan menunjukkan bagaimana menyelesaikan masalah aplikasi NLP tanpa memiliki pengetahuan yang mendalam dalam Pembelajaran Mesin dan PhD dalam Matematika.

Tugas NLP termasuk menentukan nada suara teks, mengurai entitas bernama, menentukan apa yang diinginkan pihak lain dari bot Anda: memesan pizza atau mendapatkan informasi bantuan dan banyak lagi. Anda dapat membaca lebih lanjut tentang tugas dan metode NLP di sini .

Dalam artikel ini, kami akan menunjukkan kepada Anda bagaimana menjalankan REST North dengan model NLP yang sudah dilatih sebelumnya yang siap digunakan tanpa konfigurasi atau pelatihan tambahan.

Semua artikel siklus:
1. DeepPavlov untuk pengembang: Alat NLP # 1 dan membuat bot obrolan
2. DeepPavlov untuk pengembang: # 2 pengaturan dan penyebaran



Instal DeepPavlov


Selanjutnya, instruksi untuk Linux akan diberikan. Untuk Windows, lihat dokumentasi kami .

  • Buat dan aktifkan lingkungan virtual dengan versi Python yang didukung saat ini:

    virtualelnv env -p python3.7 source env/bin/activate 
  • Instal DeepPavlov di lingkungan virtual:

     pip install deeppavlov 

Menjalankan server REST dengan model DeepPavlov


Sebelum kami meluncurkan server dengan model DeepPavlov untuk pertama kalinya, akan berguna untuk membicarakan beberapa fitur arsitektur perpustakaan.

Setiap model dalam DP terdiri dari:

  • Kode python;
  • Komponen yang dapat diunduh - hasil pembelajaran serial pada data spesifik (embedding, bobot jaringan saraf, dll.);
  • File konfigurasi (selanjutnya disebut sebagai config), yang berisi informasi tentang kelas yang digunakan oleh model, URL komponen yang diunduh, dependensi Python, dan banyak lagi.

Kami akan memberi tahu Anda lebih banyak tentang apa yang ada di bawah naungan DeepPavlov dalam artikel-artikel berikut, karena sekarang kami hanya perlu tahu bahwa:

  • Model apa pun di DeepPavlov diidentifikasi dengan nama konfigurasinya;
  • Untuk menjalankan model, Anda perlu mengunduh komponennya dari server DeepPavlov;
  • Juga, untuk menjalankan model, Anda harus menginstal pustaka Python yang digunakan olehnya.

Model pertama yang akan kami luncurkan adalah Pengenalan Entitas Bernama multibahasa (NER). Model mengklasifikasikan kata-kata teks sesuai dengan jenis entitas yang dinamai (nama yang tepat, nama geografis, nama mata uang, dan lainnya). Nama konfigurasi untuk versi NER terbaru:

 ner_ontonotes_bert_mult 

Kami memulai server REST dengan model:

  1. Instal dependensi model yang ditentukan dalam konfigurasi di lingkungan virtual aktif:

     python -m deeppavlov install ner_ontonotes_bert_mult 
  2. Unduh komponen model serial dari server DeepPavlov:

     python -m deeppavlov download ner_ontonotes_bert_mult 

    Komponen berseri akan diunduh ke direktori home DeepPavlov, yang terletak secara default
     ~/.deeppavlov 
    Saat mengunduh, hash dari komponen yang sudah diunduh diperiksa terhadap hash dari komponen yang terletak di server. Jika ada kecocokan, unduhan dilewati dan file yang ada digunakan. Ukuran komponen yang diunduh dapat bervariasi rata-rata 0,5 hingga 8 Gb, dalam beberapa kasus mencapai 20 Gb setelah membuka ritsleting.
  3. Kami memulai server REST dengan model:

     python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005 

Sebagai hasil dari perintah ini, server REST dengan model pada port 5005 dari mesin host akan diluncurkan (port default adalah 5000).

Setelah menginisialisasi model, Swagger dengan dokumentasi API dan kemampuan untuk menguji, dapat ditemukan di URL http: http://127.0.0.1:5005 . Kami akan menguji model dengan mengirimkan titik akhir dengan konten JSON berikut ke http: //127.0.0.1►005/model permintaan POST:

 { "x": [ "        .", " -      15 " ] } 

Sebagai tanggapan, kita harus mendapatkan JSON ini:

 [ [ ["", "", "", "", "", "", "", "", "", "."], ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"] ], [ ["", "", "-", "", "", "", "", "", "", "15", ""], ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"] ] ] 

Untuk contoh-contoh ini, kami akan menganalisis REST API DeepPavlov.

API DeepPavlov


Setiap model DeepPavlov memiliki setidaknya satu argumen input. Di REST API, argumen diberi nama, namanya adalah kunci dari kamus yang masuk. Dalam kebanyakan kasus, argumen adalah teks yang perlu diproses. Anda dapat mempelajari lebih lanjut tentang argumen dan nilai yang dikembalikan oleh model di bagian MODEL pada dokumentasi DeepPavlov.

Dalam contoh tersebut, daftar dua baris diteruskan ke argumen x, yang masing-masing diberi markup terpisah. Di DeepPavlov, semua model menerima sebagai input daftar (kumpulan) nilai yang diproses secara independen.

Istilah "kumpulan" mengacu pada bidang pembelajaran mesin dan mengacu pada paket nilai input independen yang diproses oleh algoritma atau jaringan saraf pada saat yang sama. Pendekatan ini memungkinkan Anda untuk mengurangi (sering - secara signifikan) waktu pemrosesan model dari satu elemen batch dibandingkan dengan nilai yang sama yang ditransfer ke input secara terpisah. Tetapi hasil pemrosesan dikeluarkan hanya setelah memproses semua elemen. Oleh karena itu, ketika membentuk batch yang masuk, perlu untuk mempertimbangkan kecepatan model dan waktu pemrosesan yang diperlukan untuk masing-masing elemen individual.

Dalam hal ada beberapa argumen dari model DeepPavlov, masing-masing dari mereka memiliki kumpulan nilai-nilai sendiri, dan pada output model selalu memberikan satu kumpulan jawaban. Elemen-elemen dari batch yang keluar adalah hasil dari elemen-elemen pemrosesan dari batch yang masuk dengan indeks yang sama.

Dalam contoh di atas, hasil model adalah penguraian setiap baris menjadi token (kata dan tanda baca) dan klasifikasi token relatif terhadap entitas yang bernama (nama organisasi, mata uang) yang diwakilinya. Saat ini, model ner_ontonotes_bert_mult mampu mengenali 18 jenis entitas bernama, deskripsi rinci dapat ditemukan di sini .

DeepPavlov model out-of-the-box lainnya


Selain NER di DeepPavlov, model out-of-the-box berikut tersedia pada saat penulisan:

Menjawab Pertanyaan Teks


Jawaban atas pertanyaan untuk teks adalah bagian dari teks ini. Model config : squad_ru_bert_infer

Contoh permintaan:

 { "context_raw": [ "DeepPavlov   .", " -      15 ." ], "question_raw": [ "  DeepPavlov?", "     ?" ] } 

Hasil:

 [ [" ", 27, 31042.484375], ["15 ", 39, 1049.598876953125] ] 

Deteksi penghinaan


Identifikasi adanya penghinaan kepada orang yang kepadanya teks tersebut ditujukan (pada saat penulisan, hanya untuk bahasa Inggris). Konfigurasi model: insults_kaggle_conv_bert

Contoh permintaan:

 { "x": [ "Money talks, bullshit walks.", "You are not the brightest one." ] } 

Hasil:

 [ ["Not Insult"], ["Insult"] ] 

Analisis sentimen


Klasifikasi nada suara teks (positif, netral, negatif). Konfigurasi model: rusentiment_elmo_twitter_cnn

Contoh permintaan:

 { "x": [ "   DeepPavlov.", "    DeepPavlov.", "    ." ] } 

Hasil:

 [ ["positive"], ["neutral"], ["negative"] ] 

Deteksi parafrase


Menentukan apakah dua teks berbeda memiliki makna yang sama. Model config : stand_paraphraser_ru

Minta:

 { "text_a": [ "   ,  .", "      ." ], "text_b": [ " ,     ,   .", "       ." ] } 

Hasil:

 [ [1], [0] ] 

Daftar saat ini semua model DeepPavlov out-of-the-box selalu dapat ditemukan di sini .

Kesimpulan


Dalam artikel ini, kami memperkenalkan API DeepPavlov dan beberapa kemampuan pemrosesan teks dari perpustakaan yang disediakan di luar kotak. Harus diingat bahwa untuk setiap tugas NLP, hasil terbaik akan dicapai ketika melatih model pada kumpulan data yang sesuai dengan domain subjek (domain) dari tugas tersebut. Selain itu, bahkan lebih banyak model pada prinsipnya tidak dapat dilatih untuk semua kesempatan.

Dalam artikel berikut, kami akan mempertimbangkan pengaturan perpustakaan tambahan, meluncurkan DeepPavlov dari Docker, dan setelah itu kami akan beralih ke model pengajaran. Dan jangan lupa bahwa DeepPavlov memiliki forum - ajukan pertanyaan Anda tentang perpustakaan dan model. Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id472890/


All Articles