DeepPavlov til udviklere: #1 NLP-værktøjer og chatbotskabelse.

Hej alle sammen! Vi åbner en række artikler, der er dedikeret til at løse praktiske opgaver relateret til behandling af naturligt sprog (Natural Language Processing eller blot NLP) og oprettelse af dialogagenter (chatbots) ved hjælp af open-source biblioteket DeepPavlov, som vores team i laboratoriet for neurale systemer og dyb læring ved MIPT udvikler. Hovedformålet med rækken er at introducere et bredt islæt af udviklere til DeepPavlov og vise, hvordan man kan løse anvendte NLP-opgaver uden at have dybe kendskaber til Maskinlæring og PhD i matematik.

NLP-opgaver omfatter bestemmelse af tekstens tone, parsing af navngivne enheder, bestemmelse af, hvad din chatbot-bruger ønsker: at bestille pizza eller få information, og meget mere. Du kan læse mere om opgaver og metoder inden for NLP her.

I denne artikel vil vi vise, hvordan man starter en REST-server med foruddannede NLP-modeller, der er klar til brug uden yderligere konfiguration eller træning.

DeepPavlov til udviklere: #1 NLP-værktøjer og chatbotskabelse.

Installation af DeepPavlov

Her og fremover vil instruktionerne blive givet til Linux. For Windows, se venligst vores dokumentationen

  • Opret og aktiver et virtuelt miljø med den nuværende understøttede version af Python:
    virtualenv env -p python3.7
    source env/bin/activate
  • Installer DeepPavlov i det virtuelle miljø:
    pip install deeppavlov
    

Start REST-serveren med DeepPavlov-modellen

Før vi første gang starter serveren med DeepPavlov-modellen, kan det være nyttigt at fortælle om nogle af biblioteksarkitekturens særegenheder.

Enhver model i DP består af:

  • Python-kode;
  • Downloadede komponenter — serialiserede resultater af træning på specifikke data (indlæringer, vægte af neurale netværk osv.);
  • En konfigurationsfil (herefter - konfig), der indeholder information om de klasser, modellen bruger, URL'er til downloadede komponenter, Python-afhængigheder og andet.

Vi vil i kommende artikler gå mere i dybden med, hvad der er under motorhjelmen i DeepPavlov; indtil videre er det nok at vide, at:

  • Enhver model i DeepPavlov identificeres ved navnet på dens konfig;
  • For at starte modellen skal dens komponenter downloades fra DeepPavlov-serverne;
  • Det er også nødvendigt at installere de Python-biblioteker, som modellen bruger, for at kunne starte den.

Den første model, vi lancerer, vil være en flersproget Named Entity Recognition (NER). Modellen klassificerer ord i teksten efter typen af navngivne enheder, de tilhører (egennavne, geografiske navne, valutaer og andre). Navnet på konfigurationen for den nyeste version af NER:

ner_ontonotes_bert_mult

Vi starter REST-serveren med modellen:

  1. Vi installerer de nødvendige afhængigheder i det aktive virtuelle miljø, som er angivet i dens konfiguration:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Vi downloader de serialiserede komponenter af modellen fra DeepPavlov-serverne:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    De serialiserede komponenter vil blive downloaded til DeepPavlovs hjemmemappe, som som standard findes på:

    ~/ .deeppavlov

    Ved download verificeres hashværdierne af allerede downloadede komponenter med hashværdierne på serveren. Hvis der er et match, springes downloadet over, og de eksisterende filer bruges. Størrelsen på de downloadede komponenter kan variere fra 0,5 til 8 Gb i gennemsnit, og i nogle tilfælde kan de efter udpakning nå op på 20 Gb.

  3. Vi starter REST-serveren med modellen:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Som resultat af denne kommando vil REST-serveren med modellen blive startet på 5005-porten på værtmaskinen (standardporten er 5000).

Efter initialisering af modellen kan Swagger med API-dokumentation og mulighed for at teste findes på URL'en http://127.0.0.1:5005. Lad os teste modellen ved at sende til endpointet http://127.0.0.1:5005/model POST-anmodningen med følgende JSON-indhold:

{
  "x": [
    "Man kan nå MIPT med elektrisk tog fra Savelovskiy Station.",
    "I det sydvestlige Rusland vurderes halmen til 15 grivna"
  ]
}

I svaret skal vi modtage det følgende JSON:

[
  [
    ["Man", "kan", "nå", "MIPT", "med", "elektrisk", "tog", "fra", "Savelovskiy", "Station", "."],
    ["O", "O", "O", "B-FAC", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["I", "det", "sydvestlige", "Rusland", "vurderes", "halmen", "til", "15", "grivna"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

I disse eksempler gennemgår vi REST API'en for DeepPavlov.

DeepPavlov API

Hver model i DeepPavlov har mindst et indgående argument. I REST API'en er argumenterne navngivet, og deres navne er nøglerne i den indgående ordbog. I de fleste tilfælde er argumentet den tekst, der skal behandles. Mere om argumenterne og de værdier, modellerne returnerer, kan findes i afsnittet MODELS i dokumentationen. DeepPavlov

I eksemplet blev argumentet x tilsendt en liste med to strenge, hvor hver enkelt fik sin egen markup. I DeepPavlov accepterer alle modeller en liste (batch) af værdier, der behandles uafhængigt.

Begrebet 'batch' refererer til maskinlæring og henviser til en pakke af uafhængige inputværdier, der behandles af algoritmen eller neurale netværk samtidigt. Denne tilgang kan reducere (oftest væsentligt) behandlingstiden for én enhed i batchen sammenlignet med den samme værdi, der sendes som input separat. Men resultatet af behandlingen leveres kun efter behandling af alle elementer. Derfor skal hastigheden af modellen og den nødvendige behandlingstid for hvert enkelt element tages i betragtning, når der dannes en indgående batch.

I tilfælde af at der er flere argumenter til DeepPavlov-modellen, sendes hver af dem en sin egen batch af værdier, og udgangen fra modellen leverer altid en batch af svar. Elementerne i udgangs-batchen er resultaterne af behandlingen af elementerne fra de indgående batches med samme indeks.

I det givne eksempel var resultatet af modellens arbejde opdelingen af hver streng i tokens (ord og tegnsætning) og klassificeringen af tokenet med hensyn til den navngivne enhed (organisationens navn, valuta), som det repræsenterer. På nuværende tidspunkt er modellen ner_ontonotes_bert_mult i stand til at genkende 18 typer navngivne enheder, detaljer kan findes her.

Andre out-of-the-box modeller fra DeepPavlov

Ud over NER er der på tidspunktet for artiklens skrivning følgende out-of-the-box modeller tilgængelige i DeepPavlov:

Text Question Answering

Svar på et spørgsmål til teksten med et uddrag fra denne tekst. Modelkonfiguration: squad_ru_bert_infer

Eksempel på forespørgsel:

{
  "context_raw": [
    "DeepPavlov udvikles af MIPTs laboratorium.",
    "I det sydvestlige Rusland blev en høst af korn vurderet til 15 griven."
  ],
  "question_raw": [
    "Hvem udvikler DeepPavlov?",
    "Hvad kostede høsten af korn i Rusland?"
  ]
}

Resultat:

[
  ["MIPTs laboratorium", 27, 31042.484375],
  ["15 griven", 39, 1049.598876953125]
]

Insult Detection

Identifikation af tilstedeværelsen af en fornærmelse rettet mod den person, teksten er adresseret til (på tidspunktet for artikelens skrivning — kun for engelsk). Modelkonfiguration: insults_kaggle_conv_bert

Eksempel på forespørgsel:


{
  "x": [
    "Money talks, bullshit walks.",
    "You are not the brightest one."
  ]
}

Resultat:

[
  ["Ikke fornærmelse"],
  ["Fornærmelse"]
]

Sentiment Analysis

Klassificering af tekstens følelser (positiv, neutral, negativ). Modelkonfiguration: rusentiment_elmo_twitter_cnn

Eksempel på forespørgsel:

{
  "x": [
    "Jeg kan godt lide DeepPavlov-biblioteket.",
    "Jeg har hørt om DeepPavlov-biblioteket.",
    "Jeg kan ikke lide trollene og anonymus.
  ]
}

Resultat:

[
  ["positiv"],
  ["neutral"],
  ["negativ"]
]

Parafrase Detektion

Bestemmelsen af, om to forskellige tekster har den samme betydning. Modelkonfiguration: stand_paraphraser_ru

Forespørgsel:

{
  "text_a": [
    "Byen falder i søvn, og Mafiabanden vågner.",
    "Præsidenten for USA truede med at opsige aftalen med Tyskland."
  ],
  "text_b": [
    "Natten falder, og alle byens indbyggere er gået i seng, mens forbryderne er vågnet.",
    "Tyskland har ingen intentioner om at bøje sig for trusler fra USA."
  ]
}

Resultat:

[
  [1],
  [0]
]

Den aktuelle liste over alle out-of-the-box modeller fra DeepPavlov kan altid findes her.

Konklusion

I denne artikel har vi præsenteret API'et til DeepPavlov og nogle af de tekstbehandlingsmuligheder, der leveres 'out of the box’. Det skal dog bemærkes, at det bedste resultat for enhver NLP-opgave opnås ved at træne modellen på et datasæt, der svarer til det specifikke domæne for opgaven. Desuden er det i princippet ikke muligt at træne endnu flere modeller til alle tænkelige situationer.

I de næste artikler vil vi se på yderligere indstillinger af biblioteket, hvordan man kører DeepPavlov fra Docker, og derefter vil vi gå videre til at træne modeller. Og glem ikke, at DeepPavlov har et forum – stil dine spørgsmål om biblioteket og modellerne. Tak for din opmærksomhed!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster