DeepPavlov fir Entwéckler: #1 NLP Tools a Chatbot Kreatioun

Moien alleguer! Mir öffnen eng Serie vun Artikelen gewidmet fir praktesch Probleemer am Zesummenhang mat der natierlecher Sproochveraarbechtung ze léisen (Natural Language Processing oder einfach NLP) an erstellen Dialog Agenten (Chatbots) mat enger Open-Source Bibliothéik DeepPavlov, déi vun eisem Team am MIPT Laboratory of Neural Systems and Deep Learning entwéckelt gëtt. D'Haaptziel vun der Serie ass den DeepPavlov fir eng breet Palette vun Entwéckler virzestellen an ze weisen wéi Dir applizéiert NLP Probleemer léise kënnt ouni déif Wëssen am Machine Learning a PhD an der Mathematik ze hunn.

NLP Aufgaben enthalen d'Bestëmmung vum Gefill vum Text, Parsing vun benannten Entitéiten, Bestëmmung wat de Gespréichspartner vun Ärem Bot wëllt: Pizza bestellen oder Hannergrondinformatioun kréien, a vill méi. Dir kënnt méi iwwer NLP Aufgaben a Methoden liesen hei.

An dësem Artikel wäerte mir Iech weisen wéi Dir e REST Server mat pre-trainéierten NLP Modeller leeft, prett fir ze benotzen ouni zousätzlech Konfiguratioun oder Training.

DeepPavlov fir Entwéckler: #1 NLP Tools a Chatbot Kreatioun

Installatioun vun DeepPavlov

Hei an ënnen ginn Instruktioune fir Linux ginn. Fir Windows, kuckt eis Dokumentatioun

  • Erstellt an aktivéiert e virtuellt Ëmfeld mat der aktueller ënnerstëtzter Versioun vum Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Installéiert DeepPavlov an engem virtuellen Ëmfeld:
    pip install deeppavlov
    

Lancéiere vun engem REST Server mam DeepPavlov Modell

Ier mer e Server mam DeepPavlov Modell fir d'éischte Kéier starten, wäert et nëtzlech sinn iwwer e puer Features vun der Bibliothéikarchitektur ze schwätzen.

All Modell an DP besteet aus:

  • Python Code;
  • Erofluede Komponenten - serialiséiert Trainingsresultater op spezifesch Donnéeën (Embeddingen, Gewiichter vun neuralen Netzwierker, asw.);
  • Eng Konfiguratiounsdatei (nodréiglech als Configuratioun bezeechent), déi Informatioun iwwer d'Klassen enthält, déi vum Modell benotzt ginn, URLen vun erofgeluede Komponenten, Python Ofhängegkeeten, etc.

Mir soen Iech méi iwwer wat ënner der Hood vum DeepPavlov ass an de folgenden Artikelen, fir elo ass et genuch fir eis ze wëssen:

  • All Modell am DeepPavlov gëtt mam Numm vu senger Configuratioun identifizéiert;
  • Fir de Modell ze lafen, musst Dir seng Komponenten vun den DeepPavlov Serveren eroflueden;
  • Och, fir de Modell ze lafen, musst Dir d'Python-Bibliothéiken installéieren déi se benotzt.

Den éischte Modell dee mir lancéiere wäert méisproocheg Named Entity Recognition (NER) sinn. De Modell klasséiert Textwierder no der Aart vun benannten Entitéiten, zu deenen se gehéieren (Eigennimm, geographesch Nimm, Nimm vun de Währungen, an anerer). Config Numm fir déi aktuell lescht Versioun vum NER:

ner_ontonotes_bert_mult

Mir starten de REST Server mam Modell:

  1. Mir installéieren d'Modelabhängegkeeten, déi a senger Configuratioun spezifizéiert sinn, an dat aktiv virtuellt Ëmfeld:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Download serialiséierte Modellkomponente vun DeepPavlov Serveren:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Déi serialiséiert Komponenten ginn an den DeepPavlov Heemverzeechnes erofgelueden, deen par défaut läit

    ~/.deeppavlov

    Beim Download gëtt den Hash vu scho erofgeluede Komponenten géint d'Hashes vun de Komponenten um Server gepréift. Wann et e Match gëtt, gëtt den Download iwwersprangen an existent Dateie gi benotzt. D'Gréisste vun den erofgeluede Komponenten kënnen am Duerchschnëtt vun 0.5 bis 8 Gb variéieren, an e puer Fäll erreechend 20 Gb nom Auspacken.

  3. Mir starten de REST Server mam Modell:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Als Resultat vun der Ausféierung vun dësem Kommando gëtt e REST-Server mat engem Modell um Port 5005 vun der Hostmaschinn gestart (de Standardport ass 5000).

No der Initialiséierung vum Modell, Swagger mat API Dokumentatioun an d'Fäegkeet ze testen kann op der URL fonnt ginn http://127.0.0.1:5005. Loosst eis de Modell testen andeems Dir en op den Endpunkt schéckt http://127.0.0.1:5005/model POST Ufro mat dem folgenden JSON Inhalt:

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

Als Äntwert sollte mir de folgende JSON kréien:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

Mat dëse Beispiller analyséiere mir d'DeepPavlov REST API.

API DeepPavlov

All DeepPavlov Modell huet op d'mannst een Input Argument. An der REST API ginn d'Argumenter benannt, hir Nimm sinn d'Schlësselen vum erakommende Wierderbuch. Am meeschte Fäll ass d'Argument den Text dee muss veraarbecht ginn. Méi Informatioun iwwer Argumenter a Wäerter, déi vu Modeller zréckginn, fannt Dir an der MODELSektioun vun der Dokumentatioun DeepPavlov

Am Beispill gouf eng Lëscht vun zwee Saiten un d'Argument x weidergeleet, jidderee vun deenen eng separat Markup krut. Am DeepPavlov huelen all Modeller als Input eng Lëscht (Batch) vu Wäerter déi onofhängeg veraarbecht ginn.

De Begrëff "Batch" bezitt sech op d'Feld vum Maschinnléieren a bezitt sech op eng Partie vun onofhängegen Inputwäerter, déi gläichzäiteg vun engem Algorithmus oder neurale Netzwierk veraarbecht ginn. Dës Approche erlaabt Iech d'Zäit ze reduzéieren (dacks bedeitend) d'Zäit wou de Modell en Element vun enger Batch veraarbecht am Verglach zum selwechte Wäert, deen an den Input getrennt weidergeet. Awer d'Veraarbechtungsresultat gëtt nëmmen erausginn nodeems all Elementer veraarbecht goufen. Dofir, wann Dir eng erakommen Batch generéiert, musst Dir d'Geschwindegkeet vum Modell an déi erfuerderlech Veraarbechtungszäit fir all eenzel vun hiren eenzelnen Elementer berücksichtegen.

Wann et e puer Argumenter fir den DeepPavlov Modell sinn, kritt jidderee vun hinnen seng eege Partie vu Wäerter, a bei der Ausgab produzéiert de Modell ëmmer eng Partie Äntwerten. D'Elementer vun der erausginn Batch sinn d'Resultater vun der Veraarbechtung vun den Elementer vun den erakommende Chargen mam selwechten Index.

Am Beispill hei uewen war d'Resultat vum Modell fir all String an Tokens opzedeelen (Wierder a Punktuatiounszeechen) an den Token relativ zu der genannter Entitéit (Organisatiounsnumm, Währung) ze klassifizéieren, déi se duerstellt. Moment de Modell ner_ontonotes_bert_mult ass kapabel 18 Aarte vu benannten Entitéiten z'erkennen, eng detailléiert Beschreiwung kann fonnt ginn hei.

Aner Out-of-the-Box Modeller vum DeepPavlov

Zousätzlech zu NER sinn déi folgend Out-of-the-Box Modeller am DeepPavlov zur Zäit vum Schreiwen verfügbar:

Text Fro Äntwert

Beäntwert d'Fro zum Text mat engem Fragment vun dësem Text. Modell Configuratioun: squad_ru_bert_infer

Ufro Beispill:

{
  "context_raw": [
    "DeepPavlov разрабатывается лабораторией МФТИ.",
    "В юго-западной Руси стог жита оценен в 15 гривен."
  ],
  "question_raw": [
    "Кем разрабатывается DeepPavlov?",
    "Сколько стоил стог жита на Руси?"
  ]
}

Resultat:

[
  ["лабораторией МФТИ", 27, 31042.484375],
  ["15 гривен", 39, 1049.598876953125]
]

Beleidegung Detektioun

Detektioun vun der Präsenz vun enger Beleidegung fir déi Persoun, un déi den Text adresséiert ass (am Schreiwen - nëmme fir Englesch). Model Config: insults_kaggle_conv_bert

Ufro Beispill:


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

Resultat:

[
  ["Not Insult"],
  ["Insult"]
]

Gefiller Analyse

Klassifikatioun vum Text Gefill (positiv, neutral, negativ). Modell Configuratioun: rusentiment_elmo_twitter_cnn

Ufro Beispill:

{
  "x": [
    "Мне нравится библиотека DeepPavlov.",
    "Я слышал о библиотеке DeepPavlov.",
    "Меня бесят тролли и анонимусы."
  ]
}

Resultat:

[
  ["positive"],
  ["neutral"],
  ["negative"]
]

Paraphrase Detektioun

Bestëmmung ob zwee verschidden Texter déi selwecht Bedeitung hunn. Modell Configuratioun: stand_paraphraser_en

Ufro:

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

Resultat:

[
  [1],
  [0]
]

Déi aktuell Lëscht vun all out-of-the-box DeepPavlov Modeller kann ëmmer fonnt ginn hei.

Konklusioun

An dësem Artikel hu mir d'DeepPavlov API an e puer vun den Textveraarbechtungsfäegkeeten vun der Bibliothéik aus der Këscht vertraut. Et sollt am Kapp gedriwwe ginn datt fir all NLP Aufgab dat bescht Resultat erreecht gëtt wann Dir de Modell trainéiert op engem Datesaz entsprécht dem Themaberäich (Domain) vun der Aufgab. Zousätzlech kënnen nach méi Modeller am Prinzip net fir all Situatiounen trainéiert ginn.

An de folgenden Artikele wäerte mir zousätzlech Astellunge vun der Bibliothéik kucken, DeepPavlov vum Docker starten, an da wäerte mir weider op Trainingsmodeller goen. An vergiesst net datt DeepPavlov huet de Forum - stellt Är Froen iwwer d'Bibliothéik a Modeller. Merci fir är Opmierksamkeet!

Source: will.com

Setzt e Commentaire