DeepPavlov for utviklere: #1 NLP-verktøy og oppretting av chatbot

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 DeepPavlov, som utvikles av teamet vårt ved MIPT Laboratory of Neural Systems and Deep Learning. Hovedmålet med serien er å introdusere DeepPavlov for et bredt spekter av utviklere og vise hvordan du kan løse anvendte NLP-problemer uten å ha dyp kunnskap innen maskinlæring og doktorgrad i matematikk.

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 her.

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.

DeepPavlov for utviklere: #1 NLP-verktøy og oppretting av chatbot

Installasjon av DeepPavlov

Her og nedenfor vil instruksjoner for Linux bli gitt. For Windows, se vår dokumentasjon

  • 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:

  1. Vi installerer modellavhengighetene spesifisert i konfigurasjonen i det aktive virtuelle miljøet:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. 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.

  3. 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 DeepPavlov

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 her.

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 her.

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 forumet – still spørsmål angående biblioteket og modellene. Takk for din oppmerksomhet!

Kilde: www.habr.com

Legg til en kommentar