Hej alle! Vi åbner en række artikler om at løse praktiske problemer relateret til naturlig sprogbehandling (Natural Language Processing eller blot NLP) og skabe dialogagenter (chatbots) ved hjælp af et open source-bibliotek
NLP-opgaver omfatter at bestemme følelsen af teksten, at analysere navngivne entiteter, at bestemme, hvad samtalepartneren ønsker fra din bot: Bestil pizza eller få baggrundsinformation og meget mere. Du kan læse mere om NLP opgaver og metoder
I denne artikel viser vi dig, hvordan du kører en REST-server med forudtrænede NLP-modeller, klar til brug uden yderligere konfiguration eller træning.
Installation af DeepPavlov
Her og nedenfor vil instruktioner til Linux blive givet. For Windows, se vores
- Opret og aktiver et virtuelt miljø med den nuværende understøttede version af Python:
virtualelnv env -p python3.7 source env/bin/activate
- Installer DeepPavlov i et virtuelt miljø:
pip install deeppavlov
Lancering af en REST-server med DeepPavlov-modellen
Før vi starter en server med DeepPavlov-modellen for første gang, vil det være nyttigt at tale om nogle funktioner i bibliotekets arkitektur.
Enhver model i DP består af:
- Python kode;
- Komponenter, der kan downloades - serialiserede træningsresultater på specifikke data (indlejringer, vægte af neurale netværk osv.);
- En konfigurationsfil (herefter benævnt config), som indeholder information om de klasser, som modellen bruger, URL'er på downloadede komponenter, Python-afhængigheder osv.
Vi vil fortælle dig mere om, hvad der er under hætten på DeepPavlov i de følgende artikler, for nu er det nok for os at vide det:
- Enhver model i DeepPavlov er identificeret med navnet på dens konfiguration;
- For at køre modellen skal du downloade dens komponenter fra DeepPavlov-serverne;
- For at køre modellen skal du også installere de Python-biblioteker, den bruger.
Den første model, vi lancerer, vil være flersproget navngivet enhedsgenkendelse (NER). Modellen klassificerer tekstord efter typen af navngivne enheder, som de tilhører (egennavne, geografiske navne, navne på valutaer og andre). Konfigurationsnavn for den aktuelle seneste version af NER:
ner_ontonotes_bert_mult
Vi starter REST-serveren med modellen:
- Vi installerer de modelafhængigheder, der er angivet i dens konfiguration, i det aktive virtuelle miljø:
python -m deeppavlov install ner_ontonotes_bert_mult
- Download serialiserede modelkomponenter fra DeepPavlov-servere:
python -m deeppavlov download ner_ontonotes_bert_mult
De serialiserede komponenter vil blive downloadet til DeepPavlov-hjemmemappen, som er placeret som standard
~/.deeppavlov
Når du downloader, kontrolleres hashen af allerede downloadede komponenter mod hashen af komponenter, der er placeret på serveren. Hvis der er et match, springes overførslen over, og eksisterende filer bruges. Størrelsen af downloadede komponenter kan variere i gennemsnit fra 0.5 til 8 Gb, i nogle tilfælde når de 20 Gb efter unzip.
- Vi starter REST-serveren med modellen:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Som et resultat af udførelse af denne kommando vil en REST-server med en model blive lanceret på port 5005 på værtsmaskinen (standardporten er 5000).
Efter initialisering af modellen kan Swagger med API-dokumentation og muligheden for at teste findes på URL'en http://127.0.0.1:5005
. Lad os teste modellen ved at sende den til slutpunktet http://127.0.0.1:5005/model
POST-anmodning med følgende JSON-indhold:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Som svar bør vi modtage følgende JSON:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Ved hjælp af disse eksempler vil vi analysere DeepPavlov REST API.
API DeepPavlov
Hver DeepPavlov-model har mindst ét input-argument. I REST API navngives argumenter, deres navne er nøglerne til den indgående ordbog. I de fleste tilfælde er argumentet den tekst, der skal behandles. Mere information om argumenter og værdier returneret af modeller kan findes i sektionen MODELLER i dokumentationen
I eksemplet blev en liste med to strenge sendt til argument x, som hver fik separat markering. I DeepPavlov tager alle modeller som input en liste (batch) af værdier, der behandles uafhængigt.
Udtrykket "batch" refererer til området maskinlæring og refererer til en batch af uafhængige inputværdier, der behandles af en algoritme eller neuralt netværk samtidigt. Denne tilgang giver dig mulighed for at reducere (ofte betydeligt) den tid, modellen behandler et element af en batch sammenlignet med den samme værdi, der sendes til input separat. Men behandlingsresultatet udstedes først, når alle elementer er blevet behandlet. Derfor, når du genererer en indgående batch, vil det være nødvendigt at tage højde for modellens hastighed og den nødvendige behandlingstid for hvert af dets individuelle elementer.
Hvis der er flere argumenter til DeepPavlov-modellen, modtager hver af dem sin egen batch af værdier, og ved outputtet producerer modellen altid en batch af svar. Elementerne i den udgående batch er resultaterne af behandlingen af elementerne i de indgående batches med det samme indeks.
I ovenstående eksempel var resultatet af modellen at opdele hver streng i tokens (ord og tegnsætningstegn) og klassificere tokenet i forhold til den navngivne enhed (organisationsnavn, valuta), som den repræsenterer. I øjeblikket modellen ner_ontonotes_bert_mult i stand til at genkende 18 typer navngivne enheder, kan en detaljeret beskrivelse findes
Andre out-of-the-box modeller fra DeepPavlov
Ud over NER er følgende out-of-the-box modeller tilgængelige i DeepPavlov i skrivende stund:
Besvarelse af tekstspørgsmål
Besvar spørgsmålet til teksten med et fragment af denne tekst. Modelkonfiguration: squad_ru_bert_infer
Eksempel på anmodning:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Resultat:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Detektion af fornærmelse
Påvisning af tilstedeværelsen af en fornærmelse mod den person, som teksten er rettet til (i skrivende stund - kun for engelsk). Modelkonfiguration: insults_kaggle_conv_bert
Eksempel på anmodning:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Resultat:
[
["Not Insult"],
["Insult"]
]
Følelsesanalyse
Klassificering af tekstfølelse (positiv, neutral, negativ). Model konfiguration: rusentiment_elmo_twitter_cnn
Eksempel på anmodning:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Resultat:
[
["positive"],
["neutral"],
["negative"]
]
Parafrase-detektion
Afgøre, om to forskellige tekster har samme betydning. Model konfiguration: stand_paraphraser_ru
Anmodning:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Resultat:
[
[1],
[0]
]
Den aktuelle liste over alle DeepPavlov-modeller, der er klar til brug, kan altid findes
Konklusion
I denne artikel stiftede vi bekendtskab med DeepPavlov API'et og nogle af bibliotekets tekstbehandlingsfunktioner, der leveres ud af kassen. Man skal huske på, at for enhver NLP-opgave vil det bedste resultat opnås, når modellen trænes på et datasæt svarende til opgavens emneområde (domæne). Derudover kan endnu flere modeller i princippet ikke trænes til alle situationer.
I de følgende artikler vil vi se på yderligere indstillinger af biblioteket, lancere DeepPavlov fra Docker, og derefter vil vi gå videre til træningsmodeller. Og glem ikke, at DeepPavlov har
Kilde: www.habr.com