DeepPavlov untuk pengembang: Alat NLP #1 dan pembuatan chatbot

Halo semua! Kami membuka serangkaian artikel yang ditujukan untuk memecahkan masalah praktis terkait pemrosesan bahasa alami (Natural Language Processing atau hanya NLP) dan membuat agen dialog (chatbots) menggunakan perpustakaan sumber terbuka dalamPavlov, yang sedang dikembangkan oleh tim kami di Laboratorium MIPT Sistem Saraf dan Pembelajaran Mendalam. Tujuan utama dari seri ini adalah untuk memperkenalkan DeepPavlov kepada berbagai pengembang dan menunjukkan bagaimana Anda dapat memecahkan masalah NLP terapan tanpa memiliki pengetahuan mendalam tentang Pembelajaran Mesin dan PhD di bidang Matematika.

Tugas NLP termasuk menentukan sentimen teks, mengurai entitas bernama, menentukan apa yang diinginkan lawan bicara dari bot Anda: memesan pizza atau mendapatkan informasi latar belakang, dan banyak lagi. Anda dapat membaca lebih lanjut tentang tugas dan metode NLP di sini.

Pada artikel ini, kami akan menunjukkan cara menjalankan server REST dengan model NLP terlatih, siap digunakan tanpa konfigurasi atau pelatihan tambahan apa pun.

DeepPavlov untuk pengembang: Alat NLP #1 dan pembuatan chatbot

Pemasangan DeepPavlov

Di sini dan di bawah, instruksi untuk Linux akan diberikan. Untuk Windows, lihat kami dokumentasi

  • 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
    

Meluncurkan server REST dengan model DeepPavlov

Sebelum kita meluncurkan server dengan model DeepPavlov untuk pertama kalinya, ada baiknya kita membicarakan beberapa fitur arsitektur perpustakaan.

Setiap model dalam DP terdiri dari:

  • kode piton;
  • Komponen yang dapat diunduh - hasil pelatihan berseri pada data tertentu (penyematan, bobot jaringan saraf, dll.);
  • File konfigurasi (selanjutnya disebut konfigurasi), yang berisi informasi tentang kelas yang digunakan oleh model, URL komponen yang diunduh, dependensi Python, dll.

Kami akan memberi tahu Anda lebih banyak tentang apa yang ada di balik DeepPavlov di artikel berikut, untuk saat ini cukup bagi kami untuk mengetahuinya:

  • Model apa pun di DeepPavlov diidentifikasi berdasarkan nama konfigurasinya;
  • Untuk menjalankan model, Anda perlu mengunduh komponennya dari server DeepPavlov;
  • Selain itu, untuk menjalankan model, Anda perlu menginstal pustaka Python yang digunakannya.

Model pertama yang akan kami luncurkan adalah Named Entity Recognition (NER) multibahasa. Model mengklasifikasikan kata-kata teks menurut jenis entitas yang memiliki nama tersebut (nama diri, nama geografis, nama mata uang, dan lain-lain). Nama konfigurasi untuk NER versi terbaru saat ini:

ner_ontonotes_bert_mult

Kami meluncurkan server REST dengan model:

  1. Kami menginstal dependensi model yang ditentukan dalam konfigurasinya ke dalam 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 serial 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 rata-rata dapat bervariasi dari 0.5 hingga 8 Gb, dalam beberapa kasus mencapai 20 Gb setelah di-unzip.

  3. Kami meluncurkan server REST dengan model:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

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

Setelah menginisialisasi model, Swagger dengan dokumentasi API dan kemampuan pengujian dapat ditemukan di URL http://127.0.0.1:5005. Mari kita uji modelnya dengan mengirimkannya ke titik akhir http://127.0.0.1:5005/model Permintaan POST dengan konten JSON berikut:

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

Sebagai tanggapan, kita akan menerima JSON berikut:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

Dengan menggunakan contoh ini, kami akan menganalisis DeepPavlov REST API.

API DeepPavlov

Setiap model DeepPavlov memiliki setidaknya satu argumen masukan. Di REST API, argumen diberi nama, namanya adalah kunci kamus yang masuk. Dalam kebanyakan kasus, argumen adalah teks yang perlu diproses. Informasi lebih lanjut tentang argumen dan nilai yang dikembalikan oleh model dapat ditemukan di bagian MODEL dalam dokumentasi dalamPavlov

Dalam contoh, daftar dua string diteruskan ke argumen x, yang masing-masing diberi markup terpisah. Di DeepPavlov, semua model mengambil daftar (batch) nilai sebagai masukan yang diproses secara independen.

Istilah “batch” mengacu pada bidang pembelajaran mesin dan mengacu pada kumpulan nilai masukan independen yang diproses oleh algoritma atau jaringan saraf secara bersamaan. Pendekatan ini memungkinkan Anda mengurangi (seringkali secara signifikan) waktu model memproses satu elemen batch dibandingkan dengan nilai yang sama yang diteruskan ke input secara terpisah. Namun hasil pengolahan baru dikeluarkan setelah semua elemen diproses. Oleh karena itu, saat membuat batch masuk, kecepatan model dan waktu pemrosesan yang diperlukan untuk setiap elemen individualnya perlu diperhitungkan.

Jika ada beberapa argumen pada model DeepPavlov, masing-masing argumen menerima kumpulan nilainya sendiri, dan pada output model selalu menghasilkan satu kumpulan jawaban. Elemen batch keluar merupakan hasil pengolahan elemen batch masuk dengan indeks yang sama.

Dalam contoh di atas, hasil dari model ini adalah memecah setiap string menjadi token (kata dan tanda baca) dan mengklasifikasikan token tersebut relatif terhadap entitas bernama (nama organisasi, mata uang) yang diwakilinya. Saat ini modelnya ner_ontonotes_bert_mult mampu mengenali 18 jenis entitas bernama, penjelasan rinci dapat ditemukan di sini.

Model out-of-the-box lainnya dari DeepPavlov

Selain NER, model siap pakai berikut ini tersedia di DeepPavlov pada saat penulisan:

Menjawab Pertanyaan Teks

Jawablah pertanyaan pada teks dengan penggalan teks ini. Konfigurasi model: skuad_ru_bert_infer

Contoh permintaan:

{
  "context_raw": [
    "DeepPavlov разрабатывается лабораторией МФТИ.",
    "В юго-западной Руси стог жита оценен в 15 гривен."
  ],
  "question_raw": [
    "Кем разрабатывается DeepPavlov?",
    "Сколько стоил стог жита на Руси?"
  ]
}

Hasilnya:

[
  ["лабораторией МФТИ", 27, 31042.484375],
  ["15 гривен", 39, 1049.598876953125]
]

Deteksi Penghinaan

Deteksi adanya penghinaan terhadap orang yang dituju teks tersebut (pada saat penulisan - hanya untuk bahasa Inggris). Konfigurasi model: penghinaan_kaggle_conv_bert

Contoh permintaan:


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

Hasilnya:

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

Analisis Sentimen

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

Contoh permintaan:

{
  "x": [
    "Мне нравится библиотека DeepPavlov.",
    "Я слышал о библиотеке DeepPavlov.",
    "Меня бесят тролли и анонимусы."
  ]
}

Hasilnya:

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

Deteksi Parafrase

Menentukan apakah dua teks yang berbeda mempunyai makna yang sama. Konfigurasi model: stand_paraphraser_en

Minta:

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

Hasilnya:

[
  [1],
  [0]
]

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

Kesimpulan

Dalam artikel ini, kita mengenal DeepPavlov API dan beberapa kemampuan pemrosesan teks dari perpustakaan yang disediakan secara langsung. Perlu diingat bahwa untuk tugas NLP apa pun, hasil terbaik akan dicapai saat melatih model pada kumpulan data yang sesuai dengan bidang subjek (domain) tugas tersebut. Selain itu, pada prinsipnya, lebih banyak model tidak dapat dilatih untuk semua situasi.

Pada artikel berikut kita akan melihat pengaturan tambahan perpustakaan, meluncurkan DeepPavlov dari Docker, dan kemudian kita akan beralih ke model pelatihan. Dan jangan lupa bahwa DeepPavlov punya forum – ajukan pertanyaan Anda tentang perpustakaan dan model. Terima kasih atas perhatian Anda!

Sumber: www.habr.com

Tambah komentar