Hei alle sammen! Vi åpner en serie artikler viet til å løse praktiske problemer knyttet til naturlig språkbehandling (Natural Language Processing eller ganske enkelt NLP) og lage dialogagenter (chatbots) ved hjelp av et åpen kildekode-bibliotek
NLP-oppgaver inkluderer å bestemme følelsen til teksten, analysere navngitte enheter, bestemme hva samtalepartneren vil ha fra boten din: bestill pizza eller få bakgrunnsinformasjon og mye mer. Du kan lese mer om NLP-oppgaver og metoder
I denne artikkelen viser vi deg hvordan du kjører en REST-server med ferdigtrente NLP-modeller, klare til bruk uten ekstra konfigurasjon eller opplæring.
Installasjon av DeepPavlov
Her og nedenfor vil instruksjoner for Linux bli gitt. For Windows, se vår
- Opprett og aktiver et virtuelt miljø med den gjeldende støttede versjonen av Python:
virtualelnv env -p python3.7 source env/bin/activate
- Installer DeepPavlov i et virtuelt miljø:
pip install deeppavlov
Lansering av en REST-server med DeepPavlov-modellen
Før vi lanserer en server med DeepPavlov-modellen for første gang, vil det være nyttig å snakke om noen funksjoner i bibliotekets arkitektur.
Enhver modell i DP består av:
- Python-kode;
- Nedlastbare komponenter - serialiserte treningsresultater på spesifikke data (innbygginger, vekter av nevrale nettverk, etc.);
- En konfigurasjonsfil (heretter referert til som config), som inneholder informasjon om klassene som brukes av modellen, URL-er til nedlastede komponenter, Python-avhengigheter, etc.
Vi vil fortelle deg mer om hva som er under panseret til DeepPavlov i de følgende artiklene, for nå er det nok for oss å vite det:
- Enhver modell i DeepPavlov identifiseres med navnet på konfigurasjonen;
- For å kjøre modellen må du laste ned komponentene fra DeepPavlov-serverne;
- For å kjøre modellen må du også installere Python-bibliotekene den bruker.
Den første modellen vi lanserer vil være flerspråklig Named Entity Recognition (NER). Modellen klassifiserer tekstord i henhold til typen navngitte enheter de tilhører (egennavn, geografiske navn, navn på valutaer og andre). Konfigurasjonsnavn for gjeldende nyeste versjon av NER:
ner_ontonotes_bert_mult
Vi starter REST-serveren med modellen:
- Vi installerer modellavhengighetene spesifisert i konfigurasjonen i det aktive virtuelle miljøet:
python -m deeppavlov install ner_ontonotes_bert_mult
- Last ned serialiserte modellkomponenter fra DeepPavlov-servere:
python -m deeppavlov download ner_ontonotes_bert_mult
De serialiserte komponentene vil bli lastet ned til DeepPavlov-hjemmekatalogen, som er plassert som standard
~/.deeppavlov
Ved nedlasting sjekkes hashen til allerede nedlastede komponenter mot hashen til komponenter som ligger på serveren. Hvis det er en match, hoppes nedlastingen over og eksisterende filer brukes. Størrelsene på nedlastede komponenter kan variere i gjennomsnitt fra 0.5 til 8 Gb, i noen tilfeller når de 20 Gb etter utpakning.
- Vi starter REST-serveren med modellen:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Som et resultat av å utføre denne kommandoen, vil en REST-server med en modell bli lansert på port 5005 på vertsmaskinen (standardporten er 5000).
Etter initialisering av modellen, kan Swagger med API-dokumentasjon og muligheten til å teste bli funnet på URL-en http://127.0.0.1:5005
. La oss teste modellen ved å sende den til endepunktet http://127.0.0.1:5005/model
POST-forespørsel med følgende JSON-innhold:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Som svar bør vi motta 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 å bruke disse eksemplene vil vi analysere DeepPavlov REST API.
API DeepPavlov
Hver DeepPavlov-modell har minst ett input-argument. I REST API navngis argumenter, deres navn er nøklene til den innkommende ordboken. I de fleste tilfeller er argumentet teksten som må behandles. Mer informasjon om argumenter og verdier returnert av modeller finner du i MODELLER-delen av dokumentasjonen
I eksemplet ble en liste med to strenger sendt til argument x, som hver ble gitt separat markering. I DeepPavlov tar alle modeller som input en liste (batch) med verdier som behandles uavhengig.
Begrepet "batch" refererer til feltet maskinlæring og refererer til en gruppe med uavhengige inngangsverdier som behandles av en algoritme eller et nevralt nettverk samtidig. Denne tilnærmingen lar deg redusere (ofte betydelig) tiden modellen behandler ett element i en batch sammenlignet med den samme verdien som sendes til inngangen separat. Men behandlingsresultatet utstedes først etter at alle elementene er behandlet. Derfor, når du genererer en innkommende batch, vil det være nødvendig å ta hensyn til modellens hastighet og den nødvendige behandlingstiden for hvert av dens individuelle elementer.
Hvis det er flere argumenter til DeepPavlov-modellen, mottar hver av dem sin egen gruppe med verdier, og ved utgangen produserer modellen alltid en gruppe med svar. Elementene i den utgående batchen er resultatene av behandlingen av elementene i de innkommende batchene med samme indeks.
I eksemplet ovenfor var resultatet av modellen å bryte ned hver streng i tokens (ord og tegnsettingstegn) og klassifisere tokenet i forhold til den navngitte enheten (organisasjonsnavn, valuta) som den representerer. Foreløpig modellen ner_ontonotes_bert_mult som er i stand til å gjenkjenne 18 typer navngitte enheter, kan du finne en detaljert beskrivelse
Andre ut-av-boksen-modeller fra DeepPavlov
I tillegg til NER er følgende ut-av-boksen-modeller tilgjengelige i DeepPavlov i skrivende stund:
Svar på tekstspørsmål
Svar på spørsmålet til teksten med et fragment av denne teksten. Modellkonfigurasjon: squad_ru_bert_infer
Eksempel på forespørsel:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Resultat:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Fornærmelsesoppdagelse
Påvisning av tilstedeværelsen av en fornærmelse mot personen som teksten er adressert til (i skrivende stund - kun for engelsk). Modellkonfigurasjon: insults_kaggle_conv_bert
Eksempel på forespørsel:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Resultat:
[
["Not Insult"],
["Insult"]
]
Sentiment Analyse
Klassifisering av tekstfølelse (positiv, nøytral, negativ). Modellkonfigurasjon: rusentiment_elmo_twitter_cnn
Eksempel på forespørsel:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Resultat:
[
["positive"],
["neutral"],
["negative"]
]
Parafrase-deteksjon
Avgjøre om to forskjellige tekster har samme betydning. Modellkonfigurasjon: stand_paraphraser_ru
Be om:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Resultat:
[
[1],
[0]
]
Den gjeldende listen over alle ut-av-boksen DeepPavlov-modeller kan alltid finnes
Konklusjon
I denne artikkelen ble vi kjent med DeepPavlov API og noen av tekstbehandlingsmulighetene til biblioteket som leveres ut av esken. Man bør huske på at for enhver NLP-oppgave vil det beste resultatet oppnås når man trener modellen på et datasett som tilsvarer oppgavens fagområde (domene). I tillegg kan enda flere modeller i prinsippet ikke trenes for alle situasjoner.
I de følgende artiklene vil vi se på tilleggsinnstillinger for biblioteket, lansere DeepPavlov fra Docker, og deretter vil vi gå videre til treningsmodeller. Og ikke glem at DeepPavlov har
Kilde: www.habr.com