Hallo allemaal! We starten een reeks artikelen over het oplossen van praktische taken die verband houden met natuurlijke taalverwerking (Natural Language Processing of gewoon NLP) en het maken van dialogagents (chatbots) met behulp van de open-source bibliotheek , die wordt ontwikkeld door ons team van het Laboratorium voor Neurale Systemen en Diep Leren van de MFTI. Het hoofddoel van deze reeks is om een breed scala aan ontwikkelaars bekend te maken met DeepPavlov en te laten zien hoe je praktische NLP-taken kunt oplossen zonder diepgaande kennis van Machine Learning of een PhD in Wiskunde.
NLP-taken omvatten onder andere het bepalen van de sentimenten in teksten, het parseren van benoembare entiteiten, en het vaststellen wat de gesprekspartner van je bot wil: een pizza bestellen of informatie ontvangen, en nog veel meer. Je kunt meer lezen over de taken en methoden van NLP .
In dit artikel vertellen we je hoe je een REST-server met vooraf getrainde NLP-modellen kunt opzetten die klaar zijn voor gebruik zonder aanvullende configuratie of training.

Installatie van DeepPavlov
Hier en verder worden instructies voor Linux gegeven. Voor Windows zie onze
- Maak en activeer een virtuele omgeving met de huidige ondersteunde versie van Python:
virtualenv env -p python3.7 source env/bin/activate - Installeer DeepPavlov in de virtuele omgeving:
pip install deeppavlov
Start de REST-server met het DeepPavlov-model
Voordat we de server met het DeepPavlov-model voor de eerste keer opstarten, is het nuttig om een aantal kenmerken van de bibliotheekarchitectuur te bespreken.
Elk model in DP bestaat uit:
- Python-code;
- Te downloaden componenten - geconfigureerde leeresultaten op specifieke gegevens (embedded, gewichten van neurale netwerken, enz.);
- Een configuratiebestand (hierna de config genoemd), waarin informatie staat over de gebruikte modelklassen, URL's voor het downloaden van componenten, Python-afhankelijkheden en meer.
Meer over wat er onder de motorkap van DeepPavlov zit, zullen we in volgende artikelen bespreken, voor nu moeten we weten dat:
- Elk model in DeepPavlov wordt geĆÆdentificeerd aan de hand van de naam van zijn config;
- Om het model te starten, moeten we de componenten ervan van de servers van DeepPavlov downloaden;
- Ook moeten we de Python-bibliotheken die door het model worden gebruikt, installeren.
Het eerste model dat we zullen lanceren is de meertalige Named Entity Recognition (NER). Dit model classificeert de woorden in de tekst op basis van het type benoemde entiteiten waartoe ze behoren (zoals eigen namen, geografische namen, valuta en anderen). De configuratienaam voor de meest recente versie van NER is:
ner_ontonotes_bert_mult
We starten de REST-server met het model:
- We installeren de afhankelijkheden van het model in de actieve virtuele omgeving, zoals aangegeven in de configuratie:
python -m deeppavlov install ner_ontonotes_bert_mult - We downloaden de geserialiseerde componenten van het model van de DeepPavlov-servers:
python -m deeppavlov download ner_ontonotes_bert_multDe geserialiseerde componenten worden gedownload naar de thuisdirectory van DeepPavlov, die standaard is:
~/.deeppavlovBij het downloaden wordt de hash van de al gedownloade componenten vergeleken met de hashes van de componenten op de server. Bij een match wordt het downloaden overgeslagen en worden de al aanwezige bestanden gebruikt. De grootte van de gedownloade componenten kan gemiddeld variƫren van 0,5 tot 8 Gb, en in sommige gevallen kan deze na het uitpakken oplopen tot 20 Gb.
- We starten de REST-server met het model:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Als resultaat van deze opdracht zal er een REST-server met het model draaien op poort 5005 van de hostmachine (de standaardpoort is 5000).
Na de initialisatie van het model zal Swagger met de API-documentatie en de mogelijkheid om te testen, te vinden zijn op de URL http://127.0.0.1:5005. Laten we het model testen door een aanvraag te sturen naar de endpoint http://127.0.0.1:5005/model met een POST-aanroep van de volgende JSON-inhoud:
{
"x": [
"Je kunt MFTI bereiken met de trein vanaf het Savjolovskaya Station.",
"In Zuidwest-Rusland wordt een hooibundel gewaardeerd op 15 hryvnia"
]
}Als antwoord zouden we de volgende JSON moeten ontvangen:
[
[
["Je", "kunt", "MFTI", "bereiken", "met", "de", "trein", "vanaf", "het", "Savjolovskaya", "Station", "."],
["O", "O", "B-FAC", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["In", "Zuidwest", "-", "Rusland", "wordt", "een", "hooibundel", "gewaardeerd", "op", "15", "hryvnia"],
["O", "B-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]Aan de hand van deze voorbeelden zullen we de REST API van DeepPavlov verkennen.
API van DeepPavlov
Elke DeepPavlov-model heeft minstens ƩƩn inkomend argument. In de REST API zijn de argumenten benoemd, hun namen zijn de sleutels van de inkomende dictionary. In de meeste gevallen is het argument de tekst die moet worden verwerkt. Meer informatie over argumenten en de waarden die door de modellen worden geretourneerd, kunt u vinden in het gedeelte MODELS van de documentatie.
In het voorbeeld werd een lijst met twee strings doorgegeven als argument x, waarop elke string een aparte markup kreeg. In DeepPavlov accepteren alle modellen een lijst (batch) van waarden, die onafhankelijk worden verwerkt.
De term 'batch' verwijst naar het gebied van machine learning en duidt op een pakket van onafhankelijke inputwaarden die gelijktijdig door een algoritme of neurale netwerken worden verwerkt. Deze aanpak kan de verwerkingstijd van ƩƩn element binnen de batch aanzienlijk verminderen in vergelijking met dezelfde waarde die afzonderlijk werd doorgegeven. De verwerkte resultaten worden echter pas geleverd nadat alle elementen verwerkt zijn. Het is daarom belangrijk om bij het samenstellen van de binnenkomende batch rekening te houden met de snelheid van het model en de vereiste verwerkingstijd voor elk afzonderlijk element.
Als er meerdere argumenten zijn voor het DeepPavlov-model, wordt voor elk argument zijn eigen batch van waarden doorgegeven, terwijl het model altijd ƩƩn batch van antwoorden teruggeeft. De elementen van de uitgaande batch zijn de resultaten van de verwerking van de elementen in de binnenkomende batches met dezelfde index.
In het gegeven voorbeeld was het resultaat van het model de opsplitsing van elke string in tokens (woorden en leestekens) en de classificatie van de token ten opzichte van de benoembare entiteit (naam van de organisatie, valuta) die hij vertegenwoordigt. Momenteel is het model ner_ontonotes_bert_mult in staat om 18 soorten benoembare entiteiten te herkennen, een gedetailleerde beschrijving is te vinden .
Andere out-of-the-box modellen van DeepPavlov
Naast NER zijn de volgende out-of-the-box modellen van DeepPavlov beschikbaar op het moment van schrijven:
Text Question Answering
Het beantwoorden van vragen op basis van tekst met een fragment van deze tekst. Modelconfiguratie: squad_ru_bert_infer
Voorbeeldvraag:
{
"context_raw": [
"DeepPavlov wordt ontwikkeld door het MFTI-laboratorium.",
"In het zuidwesten van Rusland werd de baal rogge gewaardeerd op 15 hryvnia."
],
"question_raw": [
"Door wie wordt DeepPavlov ontwikkeld?",
"Hoeveel kostte de baal rogge in Rusland?"
]
}Resultaat:
[
["door het MFTI-laboratorium", 27, 31042.484375],
["15 hryvnia", 39, 1049.598876953125]
]
Insult Detection
Detectie van beledigingen gericht aan de persoon die in de tekst wordt aangesproken (op het moment van schrijven - alleen voor de Engelse taal). Modelconfiguratie: insults_kaggle_conv_bert
Voorbeeldvraag:
{
"x": [
"Money talks, bullshit walks.",
"Je bent niet de slimste."
]
}Resultaat:
[
["Geen belediging"],
["Belediging"]
]Sentiment Analysis
Classificatie van de tonaliteit van de tekst (positief, neutraal, negatief). Modelconfiguratie: rusentiment_elmo_twitter_cnn
Voorbeeldvraag:
{
"x": [
"Ik hou van de DeepPavlov-bibliotheek.",
"Ik heb over de DeepPavlov-bibliotheek gehoord.",
"Trolls en anoniemen irriteren me."
]
}Resultaat:
[
["positief"],
["neutraal"],
["negatief"]
]Parafrase Detectie
Bepalen of twee verschillende teksten dezelfde betekenis hebben. Modelconfiguratie: stand_paraphraser_ru
Verzoek:
{
"text_a": [
"De stad valt in slaap, de Maffia ontwaakt.",
"De president van de VS dreigde met het opzeggen van het verdrag met Duitsland."
],
"text_b": [
"De nacht breekt aan, alle inwoners van de stad zijn gaan slapen, terwijl de criminelen ontwaakt zijn.",
"Duitsland is niet van plan zich te laten intimideren door de VS."
]
}Resultaat:
[
[1],
[0]
]De actuele lijst van alle out-of-the-box DeepPavlov-modellen is altijd beschikbaar .
Conclusie
In dit artikel hebben we kennisgemaakt met de DeepPavlov API en enkele mogelijkheden van de bibliotheek voor tekstverwerking die 'uit de doos' worden aangeboden. Het is echter belangrijk op te merken dat voor elke NLP-taak het beste resultaat kan worden behaald door het model te trainen met een dataset die overeenkomt met het toepassingsgebied van de taak. Bovendien kunnen nog meer modellen in principe niet voor alle situaties worden getraind.
In de volgende artikelen zullen we extra configuraties van de bibliotheek bekijken, DeepPavlov vanuit Docker opstarten en daarna verder gaan met het trainen van modellen. Vergeet niet dat DeepPavlov heeft ā stel je vragen over de bibliotheek en modellen. Bedankt voor je aandacht!
Bron: habr.com
