DeepPavlov voor ontwikkelaars: #1 NLP-tools en het maken van chatbots

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 Diep Pavlov, dat wordt ontwikkeld door ons team van het MIPT Laboratory of Neural Systems and Deep Learning. Het belangrijkste doel van de serie is om DeepPavlov te introduceren bij een breed scala aan ontwikkelaars en te laten zien hoe je toegepaste NLP-problemen kunt oplossen zonder diepgaande kennis van Machine Learning en PhD in Wiskunde.

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

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.

DeepPavlov voor ontwikkelaars: #1 NLP-tools en het maken van chatbots

Installatie van DeepPavlov

Hier en hieronder worden instructies voor Linux gegeven. Voor Windows, zie onze de documentatie

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

  1. We installeren de modelafhankelijkheden die zijn gespecificeerd in de configuratie in de actieve virtuele omgeving:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. 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.

  3. 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 Diep Pavlov

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

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

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 het forum – stel uw vragen over de bibliotheek en modellen. Bedankt voor uw aandacht!

Bron: www.habr.com

Voeg een reactie