DeepPavlov til udviklere: #1 NLP-værktøjer og oprettelse af chatbot

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 DeepPavlov, som udvikles af vores team på MIPT Laboratory of Neural Systems and Deep Learning. Seriens hovedmål er at introducere DeepPavlov til en bred vifte af udviklere og vise, hvordan du kan løse anvendte NLP-problemer uden at have dyb viden inden for Machine Learning og PhD i matematik.

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

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.

DeepPavlov til udviklere: #1 NLP-værktøjer og oprettelse af chatbot

Installation af DeepPavlov

Her og nedenfor vil instruktioner til Linux blive givet. For Windows, se vores dokumentation

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

  1. Vi installerer de modelafhængigheder, der er angivet i dens konfiguration, i det aktive virtuelle miljø:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. 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.

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

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

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

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 forummet – stil dine spørgsmål vedrørende biblioteket og modeller. Tak for din opmærksomhed!

Kilde: www.habr.com

Tilføj en kommentar