Hoi allegearre! Wy iepenje in searje artikels wijd oan it oplossen fan praktyske problemen yn ferbân mei natuerlike taalferwurking (natuerlike taalferwurking of gewoan NLP) en it meitsjen fan dialoochaginten (chatbots) mei in iepen boarne bibleteek
NLP-taken omfetsje it fêststellen fan it sentimint fan 'e tekst, it parsearjen fan neamde entiteiten, bepale wat de petearpartner fan jo bot wol: pizza bestelle of eftergrûnynformaasje krije, en folle mear. Jo kinne mear lêze oer NLP-taken en -metoaden
Yn dit artikel sille wy jo sjen litte hoe't jo in REST-tsjinner útfiere mei foarôf oplaat NLP-modellen, klear om te brûken sûnder ekstra konfiguraasje of training.
Ynstallaasje fan DeepPavlov
Hjir en hjirûnder sille ynstruksjes foar Linux wurde jûn. Foar Windows, sjoch ús
- Meitsje en aktivearje in firtuele omjouwing mei de hjoeddeistige stipe ferzje fan Python:
virtualelnv env -p python3.7 source env/bin/activate
- Ynstallearje DeepPavlov yn in firtuele omjouwing:
pip install deeppavlov
In REST-tsjinner starte mei it DeepPavlov-model
Foardat wy foar it earst in server mei it DeepPavlov-model lansearje, sil it nuttich wêze om te praten oer guon funksjes fan 'e arsjitektuer fan' e bibleteek.
Elk model yn DP bestiet út:
- Python koade;
- Downloadbare komponinten - serialisearre trainingsresultaten op spesifike gegevens (ynbêdingen, gewichten fan neurale netwurken, ensfh.);
- In konfiguraasjetriem (hjirnei oantsjutten as de konfiguraasje), dy't ynformaasje befettet oer de klassen brûkt troch it model, URL's fan ynladen komponinten, Python-ôfhinklikens, ensfh.
Wy sille jo mear fertelle oer wat ûnder de motorkap fan DeepPavlov is yn 'e folgjende artikels, foar no is it genôch foar ús om te witten dat:
- Elk model yn DeepPavlov wurdt identifisearre troch de namme fan syn konfiguraasje;
- Om it model út te fieren, moatte jo de komponinten fan 'e DeepPavlov-tsjinners downloade;
- Ek, om it model út te fieren, moatte jo de Python-biblioteken ynstallearje dy't it brûkt.
It earste model dat wy sille lansearje sil meartalige Named Entity Recognition (NER) wêze. It model klassifisearret tekstwurden neffens it type neamde entiteiten dêr't se ta hearre (eigennammen, geografyske nammen, nammen fan faluta, en oaren). Konfiguraasjenamme foar de aktuele lêste ferzje fan NER:
ner_ontonotes_bert_mult
Wy lansearje de REST-tsjinner mei it model:
- Wy ynstallearje de modelôfhinklikens spesifisearre yn har konfiguraasje yn 'e aktive firtuele omjouwing:
python -m deeppavlov install ner_ontonotes_bert_mult
- Download serialisearre modelkomponinten fan DeepPavlov-tsjinners:
python -m deeppavlov download ner_ontonotes_bert_mult
De serialisearre komponinten sille wurde downloade nei de DeepPavlov-thúsmap, dy't standert leit
~/.deeppavlov
By it ynladen wurdt de hash fan al ynladen komponinten kontrolearre tsjin de hashes fan komponinten dy't op de tsjinner lizze. As der in wedstriid is, wurdt de ynlaad oerslein en wurde besteande bestannen brûkt. De maten fan ynladen komponinten kinne yn trochsneed fariearje fan 0.5 oant 8 Gb, yn guon gefallen berikke 20 Gb nei it unzipen.
- Wy lansearje de REST-tsjinner mei it model:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
As gefolch fan it útfieren fan dit kommando sil in REST-tsjinner mei in model wurde lansearre op poarte 5005 fan 'e hostmasine (de standertpoarte is 5000).
Nei it inisjalisearjen fan it model is Swagger mei API-dokumintaasje en de mooglikheid om te testen te finen op 'e URL http://127.0.0.1:5005
. Litte wy it model testje troch it nei it einpunt te stjoeren http://127.0.0.1:5005/model
POST-fersyk mei de folgjende JSON-ynhâld:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
As antwurd moatte wy de folgjende JSON ûntfange:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Mei dizze foarbylden sille wy de DeepPavlov REST API analysearje.
API DeepPavlov
Elk DeepPavlov-model hat op syn minst ien ynfierargumint. Yn 'e REST API wurde arguminten neamd, har nammen binne de kaaien fan it ynkommende wurdboek. Yn 'e measte gefallen is it argumint de tekst dy't ferwurke wurde moat. Mear ynformaasje oer arguminten en wearden weromjûn troch modellen is te finen yn 'e seksje MODELS fan' e dokumintaasje
Yn it foarbyld waard in list fan twa stringen trochjûn oan argumint x, wêrfan elk in aparte markearring krige. Yn DeepPavlov nimme alle modellen as ynfier in list (batch) fan wearden dy't ûnôfhinklik wurde ferwurke.
De term "batch" ferwiist nei it fjild fan masine learen en ferwiist nei in partij ûnôfhinklike ynfierwearden dy't tagelyk ferwurke binne troch in algoritme as neuraal netwurk. Dizze oanpak lit jo (faak signifikant) de tiid ferminderje dat it model ien elemint fan in batch ferwurket yn ferliking mei deselde wearde dy't apart oan 'e ynfier wurdt trochjûn. Mar it ferwurkingsresultaat wurdt allinich útjûn nei't alle eleminten binne ferwurke. Dêrom, by it generearjen fan in ynkommende batch, sil it nedich wêze om rekken te hâlden mei de snelheid fan it model en de fereaske ferwurkingstiid foar elk fan syn yndividuele eleminten.
As d'r ferskate arguminten binne foar it DeepPavlov-model, krijt elk fan har in eigen batch fan wearden, en by de útfier produsearret it model altyd ien batch fan antwurden. De eleminten fan 'e útgeande batch binne de resultaten fan it ferwurkjen fan de eleminten fan' e ynkommende batches mei deselde yndeks.
Yn it boppesteande foarbyld wie it resultaat fan it model om elke tekenrige yn tokens (wurden en ynterpunksjetekens) te brekken en it token te klassifisearjen relatyf oan de neamde entiteit (organisaasjenamme, faluta) dy't it fertsjintwurdiget. Op it stuit it model ner_ontonotes_bert_mult steat fan werkennen 18 soarten neamd entiteiten, in detaillearre beskriuwing kin fûn wurde
Oare out-of-the-box modellen troch DeepPavlov
Neist NER binne de folgjende out-of-the-box-modellen te krijen yn DeepPavlov op it stuit fan dit skriuwen:
Tekstfraach beantwurdzje
Beantwurdzje de fraach nei de tekst mei in fragmint fan dizze tekst. Model konfiguraasje: squad_ru_bert_infer
Foarbyld fersyk:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Resultaat:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Insult Detection
Deteksje fan 'e oanwêzigens fan in belediging foar de persoan oan wa't de tekst is rjochte (op it momint fan skriuwen - allinich foar Ingelsk). Model konfiguraasje: insults_kaggle_conv_bert
Foarbyld fersyk:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Resultaat:
[
["Not Insult"],
["Insult"]
]
Sentimint analyse
Klassifikaasje fan tekstsentimint (posityf, neutraal, negatyf). Model konfiguraasje: rusentiment_elmo_twitter_cnn
Foarbyld fersyk:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Resultaat:
[
["positive"],
["neutral"],
["negative"]
]
Parafrase Detection
Bepale oft twa ferskillende teksten hawwe deselde betsjutting. Model konfiguraasje: stand_paraphraser_ru
Fersyk:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Resultaat:
[
[1],
[0]
]
De hjoeddeistige list fan alle out-of-the-box DeepPavlov-modellen kin altyd fûn wurde
konklúzje
Yn dit artikel hawwe wy kunde makke mei de DeepPavlov API en guon fan 'e tekstferwurkingsmooglikheden fan' e bibleteek út 'e doaze. It moat betocht wurde dat foar elke NLP-taak it bêste resultaat sil wurde berikt by it oplieden fan it model op in dataset dy't oerienkomt mei it ûnderwerpgebiet (domein) fan 'e taak. Derneist kinne noch mear modellen yn prinsipe net foar alle situaasjes trainearre wurde.
Yn 'e folgjende artikels sille wy sjen nei ekstra ynstellingen fan' e bibleteek, lansearje DeepPavlov fan Docker, en dan sille wy trochgean nei trainingsmodellen. En ferjit net dat DeepPavlov hat
Boarne: www.habr.com