Halo kabeh! Kita mbukak seri artikel sing ditujokake kanggo ngrampungake masalah praktis sing ana gandhengane karo pangolahan basa alami (Natural Language Processing utawa mung NLP) lan nggawe agen dialog (chatbots) nggunakake perpustakaan sumber terbuka.
Tugas NLP kalebu nemtokake sentimen teks, ngurai entitas sing dijenengi, nemtokake apa sing dikarepake interlocutor saka bot sampeyan: pesen pizza utawa entuk informasi latar mburi, lan liya-liyane. Sampeyan bisa maca liyane babagan tugas lan metode NLP
Ing artikel iki, kita bakal nuduhake sampeyan carane mbukak server REST kanthi model NLP sing wis dilatih, siap digunakake tanpa konfigurasi utawa latihan tambahan.
Instalasi DeepPavlov
Ing kene lan ing ngisor iki, instruksi kanggo Linux bakal diwenehake. Kanggo Windows, deleng kita
- Gawe lan aktifake lingkungan virtual kanthi versi Python sing didhukung saiki:
virtualelnv env -p python3.7 source env/bin/activate
- Instal DeepPavlov ing lingkungan virtual:
pip install deeppavlov
Ngluncurake server REST kanthi model DeepPavlov
Sadurunge kita miwiti server karo model DeepPavlov pisanan, iku bakal migunani kanggo pirembagan bab sawetara fitur saka arsitektur perpustakaan.
Sembarang model ing DP kalebu:
- kode Python;
- Komponen sing bisa didownload - asil latihan serial ing data tartamtu (embeddings, bobot saka jaringan syaraf, etc.);
- A file konfigurasi (sabanjuré diarani minangka config), kang ngemot informasi bab kelas digunakake model, URL komponen diundhuh, dependensi Python, etc.
Kita bakal ngandhani luwih lengkap babagan apa sing ana ing jero DeepPavlov ing artikel ing ngisor iki, saiki cukup kanggo ngerti:
- Sembarang model ing DeepPavlov diidentifikasi kanthi jeneng konfigurasi;
- Kanggo mbukak model, sampeyan kudu ngundhuh komponen saka server DeepPavlov;
- Uga, kanggo mbukak model, sampeyan kudu nginstal perpustakaan Python sing digunakake.
Model pisanan sing bakal diluncurake yaiku Multilingual Named Entity Recognition (NER). Model kasebut nggolongake tembung teks miturut jinis entitas sing dijenengi (jeneng sing tepat, jeneng geografis, jeneng mata uang, lan liya-liyane). Jeneng konfigurasi kanggo versi NER paling anyar:
ner_ontonotes_bert_mult
Kita miwiti server REST kanthi model:
- Kita nginstal dependensi model sing ditemtokake ing konfigurasi menyang lingkungan virtual sing aktif:
python -m deeppavlov install ner_ontonotes_bert_mult
- Download komponen model serial saka server DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_mult
Komponen serial bakal diundhuh menyang direktori ngarep DeepPavlov, sing minangka standar
~/.deeppavlov
Nalika ndownload, hash komponen sing wis diundhuh dicenthang nglawan hash komponen sing ana ing server. Yen ana sing cocog, download dilewati lan file sing ana digunakake. Ukuran komponen sing diundhuh bisa beda-beda rata-rata saka 0.5 nganti 8 Gb, ing sawetara kasus tekan 20 Gb sawise unzip.
- Kita miwiti server REST kanthi model:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Minangka asil saka nglakokaké printah iki, server REST karo model bakal dibukak ing port 5005 mesin inang (port standar 5000).
Sawise miwiti model kasebut, Swagger kanthi dokumentasi API lan kemampuan kanggo nyoba bisa ditemokake ing URL http://127.0.0.1:5005
. Ayo nyoba model kasebut kanthi ngirim menyang titik pungkasan http://127.0.0.1:5005/model
Panjaluk POST kanthi konten JSON ing ngisor iki:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Nanggepi kita kudu nampa JSON ing ngisor iki:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Nggunakake conto iki, kita bakal nganalisa DeepPavlov REST API.
API DeepPavlov
Saben model DeepPavlov nduweni paling sethithik siji argumen input. Ing REST API, argumen dijenengi, jenenge minangka kunci kamus sing mlebu. Umume kasus, argumentasi minangka teks sing kudu diproses. Informasi luwih lengkap babagan argumen lan nilai sing dibalekake dening model bisa ditemokake ing bagean MODEL saka dokumentasi
Ing conto kasebut, dhaptar rong senar dikirim menyang argumen x, sing saben diwenehi markup sing kapisah. Ing DeepPavlov, kabeh model njupuk dhaptar (batch) nilai sing diproses kanthi mandiri.
Istilah "batch" nuduhake lapangan machine learning lan nuduhake kumpulan nilai input independen sing diproses dening algoritma utawa jaringan saraf bebarengan. Pendekatan iki ngidini sampeyan ngurangi (asring Ngartekno) wektu model ngolah siji unsur saka kumpulan dibandhingake karo nilai sing padha liwati menyang input kanthi kapisah. Nanging asil pangolahan ditanggepi mung sawise kabeh unsur wis diproses. Mulane, nalika nggawe batch mlebu, perlu kanggo njupuk menyang akun kacepetan model lan wektu Processing sing dibutuhake kanggo saben unsur individu.
Yen ana sawetara bantahan kanggo model DeepPavlov, saben wong nampa kumpulan nilai dhewe, lan ing output model tansah mrodhuksi siji kumpulan jawaban. Unsur-unsur batch metu minangka asil ngolah unsur-unsur batch mlebu kanthi indeks sing padha.
Ing conto ing ndhuwur, asil model kasebut yaiku ngrusak saben senar dadi token (tembung lan tandha wacan) lan nggolongake token kasebut relatif marang entitas sing dijenengi (jeneng organisasi, mata uang) sing diwakili. Saiki model ner_ontonotes_bert_mult bisa ngenali 18 jinis entitas sing dijenengi, katrangan rinci bisa ditemokake
Model out-of-the-box liyane dening DeepPavlov
Saliyane NER, model out-of-the-box ing ngisor iki kasedhiya ing DeepPavlov nalika nulis:
Wangsulan Pitakonan Teks
Wangsulana pitakon ing teks kasebut kanthi potongan teks kasebut. Konfigurasi model: squad_ru_bert_infer
Tuladha panyuwunan:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Asil:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Deteksi Penghinaan
Deteksi anané penghinaan marang wong sing dituju teks kasebut (ing wektu nulis - mung kanggo basa Inggris). Konfigurasi model: insults_kaggle_conv_bert
Tuladha panyuwunan:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Asil:
[
["Not Insult"],
["Insult"]
]
Analisis sentimen
Klasifikasi sentimen teks (positif, netral, negatif). Konfigurasi model: rusentiment_elmo_twitter_cnn
Tuladha panyuwunan:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Asil:
[
["positive"],
["neutral"],
["negative"]
]
Deteksi Paraphrase
Nemtokake manawa rong teks sing beda nduweni teges sing padha. Konfigurasi model: stand_paraphraser_en
Panjaluk:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Asil:
[
[1],
[0]
]
Dhaptar saiki kabeh model DeepPavlov sing metu saka kothak bisa ditemokake
kesimpulan
Ing artikel iki, kita kenal karo DeepPavlov API lan sawetara kemampuan pangolahan teks saka perpustakaan sing diwenehake metu saka kothak. Sampeyan kudu eling yen kanggo tugas NLP, asil paling apik bakal digayuh nalika nglatih model ing set data sing cocog karo area subyek (domain) tugas kasebut. Kajaba iku, luwih akeh model ora bisa, ing prinsip, dilatih kanggo kabeh kahanan.
Ing artikel ing ngisor iki, kita bakal ndeleng setelan tambahan perpustakaan, ngluncurake DeepPavlov saka Docker, lan banjur pindhah menyang model latihan. Lan aja lali yen DeepPavlov duwe
Source: www.habr.com