Dag Allemaal! We openen een reeks artikelen gewijd aan het oplossen van praktische problemen met betrekking tot natuurlijke taalverwerking (Natural Language Processing of simpelweg NLP) en het creëren van dialoogagenten (chatbots) met behulp van een open-sourcebibliotheek
NLP-taken omvatten het bepalen van het sentiment van de tekst, het ontleden van genoemde entiteiten, het bepalen wat de gesprekspartner van je bot wil: pizza bestellen of achtergrondinformatie krijgen, en nog veel meer. U kunt meer lezen over NLP-taken en -methoden
In dit artikel laten we u zien hoe u een REST-server kunt gebruiken met vooraf getrainde NLP-modellen, klaar voor gebruik zonder enige aanvullende configuratie of training.
Installatie van DeepPavlov
Hier en hieronder worden instructies voor Linux gegeven. Voor Windows, zie onze
- Creëer en activeer een virtuele omgeving met de huidige ondersteunde versie van Python:
virtualelnv env -p python3.7 source env/bin/activate
- Installeer DeepPavlov in een virtuele omgeving:
pip install deeppavlov
Lancering van een REST-server met het DeepPavlov-model
Voordat we voor de eerste keer een server met het DeepPavlov-model lanceren, is het nuttig om enkele kenmerken van de architectuur van de bibliotheek te bespreken.
Elk model in DP bestaat uit:
- Python-code;
- Downloadbare componenten - geserialiseerde trainingsresultaten op specifieke gegevens (inbedding, gewichten van neurale netwerken, enz.);
- Een configuratiebestand (hierna de configuratie genoemd) dat informatie bevat over de klassen die door het model worden gebruikt, URL's van gedownloade componenten, Python-afhankelijkheden, enz.
We zullen je in de volgende artikelen meer vertellen over wat er onder de motorkap van DeepPavlov zit, voor nu is het voor ons voldoende om dat te weten:
- Elk model in DeepPavlov wordt geïdentificeerd door de naam van de configuratie;
- Om het model uit te voeren, moet u de componenten ervan downloaden van de DeepPavlov-servers;
- Om het model uit te voeren, moet u ook de Python-bibliotheken installeren die het gebruikt.
Het eerste model dat we zullen lanceren is de meertalige Named Entity Recognition (NER). Het model classificeert tekstwoorden op basis van het type benoemde entiteiten waartoe ze behoren (eigennamen, geografische namen, namen van valuta's en andere). Configuratienaam voor de huidige, meest recente versie van NER:
ner_ontonotes_bert_mult
We lanceren de REST-server met het model:
- We installeren de modelafhankelijkheden die zijn gespecificeerd in de configuratie in de actieve virtuele omgeving:
python -m deeppavlov install ner_ontonotes_bert_mult
- Download geserialiseerde modelcomponenten van DeepPavlov-servers:
python -m deeppavlov download ner_ontonotes_bert_mult
De geserialiseerde componenten worden gedownload naar de DeepPavlov-thuismap, die zich standaard bevindt
~/.deeppavlov
Bij het downloaden wordt de hash van reeds gedownloade componenten vergeleken met de hash van componenten die zich op de server bevinden. Als er een match is, wordt de download overgeslagen en worden bestaande bestanden gebruikt. De grootte van gedownloade componenten kan gemiddeld variëren van 0.5 tot 8 Gb, en kan in sommige gevallen zelfs 20 Gb bereiken na het uitpakken.
- We lanceren de REST-server met het model:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Als gevolg van het uitvoeren van deze opdracht wordt een REST-server met een model gelanceerd op poort 5005 van de hostmachine (de standaardpoort is 5000).
Na het initialiseren van het model is Swagger met API-documentatie en de mogelijkheid om te testen te vinden op de URL http://127.0.0.1:5005
. Laten we het model testen door het naar het eindpunt te sturen http://127.0.0.1:5005/model
POST-verzoek met de volgende JSON-inhoud:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Als reactie hierop zouden we de volgende JSON moeten ontvangen:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Met behulp van deze voorbeelden zullen we de DeepPavlov REST API analyseren.
API DeepPavlov
Elk DeepPavlov-model heeft ten minste één invoerargument. In de REST API worden argumenten benoemd; hun namen zijn de sleutels van het binnenkomende woordenboek. In de meeste gevallen is het argument de tekst die moet worden verwerkt. Meer informatie over argumenten en waarden die door modellen worden geretourneerd, kunt u vinden in de sectie MODELLEN van de documentatie
In het voorbeeld werd een lijst van twee strings doorgegeven aan argument x, die elk een aparte opmaak kregen. In DeepPavlov nemen alle modellen als invoer een lijst (batch) met waarden die onafhankelijk worden verwerkt.
De term ‘batch’ verwijst naar het vakgebied machine learning en verwijst naar een batch onafhankelijke invoerwaarden die tegelijkertijd door een algoritme of neuraal netwerk worden verwerkt. Met deze aanpak kunt u de tijd (vaak aanzienlijk) verkorten waarin het model één element van een batch verwerkt, vergeleken met dezelfde waarde die afzonderlijk aan de invoer wordt doorgegeven. Maar het verwerkingsresultaat wordt pas vrijgegeven nadat alle elementen zijn verwerkt. Daarom zal het bij het genereren van een binnenkomende batch noodzakelijk zijn om rekening te houden met de snelheid van het model en de vereiste verwerkingstijd voor elk van de afzonderlijke elementen.
Als er meerdere argumenten zijn voor het DeepPavlov-model, ontvangt elk daarvan zijn eigen batch waarden, en bij de uitvoer produceert het model altijd één batch antwoorden. De elementen van de uitgaande batch zijn de resultaten van de verwerking van de elementen van de inkomende batches met dezelfde index.
In het bovenstaande voorbeeld was het resultaat van het model het opsplitsen van elke string in tokens (woorden en leestekens) en het classificeren van het token ten opzichte van de genoemde entiteit (organisatienaam, valuta) die het vertegenwoordigt. Momenteel het model ner_ontonotes_bert_mult in staat om 18 soorten benoemde entiteiten te herkennen, kan een gedetailleerde beschrijving worden gevonden
Andere kant-en-klare modellen van DeepPavlov
Naast NER zijn op het moment van schrijven de volgende kant-en-klare modellen beschikbaar in DeepPavlov:
Tekstvraag beantwoorden
Beantwoord de vraag bij de tekst met een fragment van deze tekst. Modelconfiguratie: squad_ru_bert_infer
Voorbeeld verzoek:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Resultaat:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Beledigingsdetectie
Detectie van de aanwezigheid van een belediging jegens de persoon aan wie de tekst is gericht (op het moment van schrijven - alleen voor het Engels). Modelconfiguratie: insults_kaggle_conv_bert
Voorbeeld verzoek:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Resultaat:
[
["Not Insult"],
["Insult"]
]
Sentiment analyse
Classificatie van tekstsentiment (positief, neutraal, negatief). Modelconfiguratie: rusentiment_elmo_twitter_cnn
Voorbeeld verzoek:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Resultaat:
[
["positive"],
["neutral"],
["negative"]
]
Parafrasedetectie
Bepalen of twee verschillende teksten dezelfde betekenis hebben. Modelconfiguratie: stand_parafraser_ru
Verzoek:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Resultaat:
[
[1],
[0]
]
De actuele lijst met alle out-of-the-box DeepPavlov-modellen is altijd te vinden
Conclusie
In dit artikel hebben we kennis gemaakt met de DeepPavlov API en enkele van de tekstverwerkingsmogelijkheden van de bibliotheek die kant-en-klaar worden aangeboden. Houd er rekening mee dat voor elke NLP-taak het beste resultaat wordt bereikt als het model wordt getraind op een dataset die overeenkomt met het onderwerpgebied (domein) van de taak. Bovendien kunnen nog meer modellen in principe niet voor alle situaties worden getraind.
In de volgende artikelen zullen we kijken naar aanvullende instellingen van de bibliotheek, waarbij we DeepPavlov vanuit Docker lanceren, en daarna gaan we verder met trainingsmodellen. En vergeet niet dat DeepPavlov dat heeft gedaan
Bron: www.habr.com