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
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
Pada artikel ini, kami akan menunjukkan cara menjalankan server REST dengan model NLP terlatih, siap digunakan tanpa konfigurasi atau pelatihan tambahan apa pun.
Pemasangan DeepPavlov
Di sini dan di bawah, instruksi untuk Linux akan diberikan. Untuk Windows, lihat 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
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:
- Kami menginstal dependensi model yang ditentukan dalam konfigurasinya ke dalam lingkungan virtual aktif:
python -m deeppavlov install ner_ontonotes_bert_mult
- 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.
- 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
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
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
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
Sumber: www.habr.com