DeepPavlov für Entwickler: # 1 NLP-Tools und Chatbots erstellen

Hallo allerseits! Wir eröffnen eine Reihe von Artikeln zur Lösung praktischer Probleme im Zusammenhang mit der Verarbeitung natürlicher Sprache (oder nur NLP) und der Erstellung interaktiver Agenten (Chat-Bots) mithilfe der Open-Source-Bibliothek DeepPavlov , die von unserem Team des Labors für Neuronale Systeme und Deep Learning entwickelt wurde MIPT. Das Hauptziel des Zyklus ist es, einen breiten Kreis von Entwicklern mit DeepPavlov vertraut zu machen und zu zeigen, wie es möglich ist, angewandte NLP-Probleme zu lösen, ohne über fundierte Kenntnisse in maschinellem Lernen und PhD in Mathematik zu verfügen.

Zu den NLP-Aufgaben gehören das Bestimmen der Tonalität des Textes, das Analysieren benannter Entitäten, das Bestimmen, was die andere Person von Ihrem Bot möchte: Pizza bestellen oder Hilfeinformationen erhalten und vieles mehr. Weitere Informationen zu NLP-Aufgaben und -Methoden finden Sie hier .

In diesem Artikel zeigen wir Ihnen, wie Sie REST North mit vorab geschulten NLP-Modellen ausführen, die ohne zusätzliche Konfiguration oder Schulung einsatzbereit sind.

Alle Artikel des Zyklus:
1. DeepPavlov für Entwickler: # 1 NLP-Tools und erstellen Sie Chat-Bots
2. DeepPavlov für Entwickler: # 2 Setup und Bereitstellung



Installieren Sie DeepPavlov


Im Folgenden werden Anweisungen für Linux gegeben. Informationen zu Windows finden Sie in unserer Dokumentation.

  • Erstellen und aktivieren Sie eine virtuelle Umgebung mit der aktuell unterstützten Version von Python:

    virtualelnv env -p python3.7 source env/bin/activate 
  • Installieren Sie DeepPavlov in einer virtuellen Umgebung:

     pip install deeppavlov 

Ausführen eines REST-Servers mit dem DeepPavlov-Modell


Bevor wir den Server zum ersten Mal mit dem DeepPavlov-Modell starten, ist es hilfreich, einige Funktionen der Bibliotheksarchitektur zu erläutern.

Jedes Modell in DP besteht aus:

  • Python-Code;
  • Herunterladbare Komponenten - serialisierte Lernergebnisse für bestimmte Daten (Einbettungen, Gewichte neuronaler Netze usw.);
  • Eine Konfigurationsdatei (im Folgenden als Konfiguration bezeichnet), die Informationen zu den vom Modell verwendeten Klassen, URLs heruntergeladener Komponenten, Python-Abhängigkeiten und mehr enthält.

In den folgenden Artikeln werden wir Ihnen mehr darüber erzählen, was sich unter der Haube von DeepPavlov befindet. Im Moment müssen wir nur das wissen:

  • Jedes Modell in DeepPavlov wird durch den Namen seiner Konfiguration identifiziert.
  • Um das Modell auszuführen, müssen Sie seine Komponenten von den DeepPavlov-Servern herunterladen.
  • Um das Modell auszuführen, müssen Sie außerdem die von ihm verwendeten Python-Bibliotheken installieren.

Das erste Modell, das wir auf den Markt bringen werden, ist die mehrsprachige Named Entity Recognition (NER). Das Modell klassifiziert Textwörter nach dem Typ der benannten Entitäten, zu denen sie gehören (Eigennamen, geografische Namen, Währungsnamen und andere). Der Name der Konfiguration für die neueste Version von NER:

 ner_ontonotes_bert_mult 

Wir starten den REST-Server mit dem Modell:

  1. Installieren Sie die in der Konfiguration angegebenen Modellabhängigkeiten in der aktiven virtuellen Umgebung:

     python -m deeppavlov install ner_ontonotes_bert_mult 
  2. Laden Sie serialisierte Modellkomponenten von DeepPavlov-Servern herunter:

     python -m deeppavlov download ner_ontonotes_bert_mult 

    Serialisierte Komponenten werden in das DeepPavlov-Ausgangsverzeichnis heruntergeladen, das sich standardmäßig befindet
     ~/.deeppavlov 
    Beim Herunterladen wird der Hash bereits heruntergeladener Komponenten mit den Hashes der auf dem Server befindlichen Komponenten verglichen. Im Falle einer Übereinstimmung wird der Download übersprungen und die vorhandenen Dateien werden verwendet. Die Größe der heruntergeladenen Komponenten kann im Durchschnitt zwischen 0,5 und 8 GB variieren und in einigen Fällen nach dem Entpacken 20 GB erreichen.
  3. Wir starten den REST-Server mit dem Modell:

     python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005 

Als Ergebnis dieses Befehls wird ein REST-Server mit einem Modell am 5005-Port des Hostcomputers gestartet (der Standardport ist 5000).

Nach der Initialisierung des Modells finden Sie Swagger mit der API-Dokumentation und der Möglichkeit zum Testen unter der URL http: http://127.0.0.1:5005 . Wir werden das Modell testen, indem wir einen Endpunkt mit dem folgenden JSON-Inhalt an die POST-Anforderung http: //127.0.0.1►005/model senden:

 { "x": [ "        .", " -      15 " ] } 

Als Antwort sollten wir diesen JSON erhalten:

 [ [ ["", "", "", "", "", "", "", "", "", "."], ["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"] ] ] 

Für diese Beispiele analysieren wir die REST-API DeepPavlov.

API DeepPavlov


Jedes DeepPavlov-Modell verfügt über mindestens ein Eingabeargument. In der REST-API werden Argumente benannt, ihre Namen sind die Schlüssel des eingehenden Wörterbuchs. In den meisten Fällen ist ein Argument der Text, der verarbeitet werden muss. Weitere Informationen zu Argumenten und Werten, die von Modellen zurückgegeben werden, finden Sie im Abschnitt MODELLE der DeepPavlov- Dokumentation .

Im Beispiel wurde eine Liste mit zwei Zeilen an das Argument x übergeben, von denen jede ein separates Markup erhielt. In DeepPavlov akzeptieren alle Modelle als Eingabe eine Liste (Stapel) von Werten, die unabhängig voneinander verarbeitet werden.

Der Begriff "Batch" bezieht sich auf das Gebiet des maschinellen Lernens und bezieht sich auf ein Paket unabhängiger Eingabewerte, die gleichzeitig von einem Algorithmus oder einem neuronalen Netzwerk verarbeitet werden. Mit diesem Ansatz können Sie die Modellverarbeitungszeit eines Elements des Stapels (häufig - erheblich) im Vergleich zu demselben Wert reduzieren, der separat auf die Eingabe übertragen wird. Das Ergebnis der Verarbeitung wird jedoch erst ausgegeben, nachdem alle Elemente verarbeitet wurden. Daher ist es bei der Bildung der eingehenden Charge erforderlich, die Geschwindigkeit des Modells und die erforderliche Verarbeitungszeit für jedes einzelne Element zu berücksichtigen.

Falls das DeepPavlov-Modell mehrere Argumente enthält, hat jedes einen eigenen Wertebatch, und am Ausgang gibt das Modell immer einen Antwortstapel aus. Elemente der ausgehenden Stapel sind das Ergebnis der Verarbeitung von Elementen der eingehenden Stapel mit demselben Index.

Im obigen Beispiel war das Ergebnis des Modells eine Aufteilung jeder Zeile in Token (Wörter und Satzzeichen) und eine Klassifizierung des Tokens relativ zu einer benannten Entität (Organisationsname, Währung), die es darstellt. Derzeit kann das Modell ner_ontonotes_bert_mult 18 Arten benannter Entitäten erkennen. Eine ausführliche Beschreibung finden Sie hier .

Andere Out-of-the-Box-Modelle von DeepPavlov


Zusätzlich zum NER in DeepPavlov sind zum Zeitpunkt des Schreibens die folgenden sofort einsatzbereiten Modelle verfügbar:

Beantwortung von Textfragen


Die Antwort auf die Frage zum Text ist ein Fragment dieses Textes. Modellkonfiguration: Squad_ru_bert_infer

Beispiel anfordern:

 { "context_raw": [ "DeepPavlov   .", " -      15 ." ], "question_raw": [ "  DeepPavlov?", "     ?" ] } 

Ergebnis:

 [ [" ", 27, 31042.484375], ["15 ", 39, 1049.598876953125] ] 

Beleidigungserkennung


Identifizierung des Vorhandenseins einer Beleidigung der Person, an die der Text gerichtet ist (zum Zeitpunkt des Schreibens nur für Englisch). Modellkonfiguration: insults_kaggle_conv_bert

Beispiel anfordern:

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

Ergebnis:

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

Stimmungsanalyse


Klassifizierung der Tonalität des Textes (positiv, neutral, negativ). Modellkonfiguration: rusentiment_elmo_twitter_cnn

Beispiel anfordern:

 { "x": [ "   DeepPavlov.", "    DeepPavlov.", "    ." ] } 

Ergebnis:

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

Paraphrase-Erkennung


Feststellen, ob zwei verschiedene Texte dieselbe Bedeutung haben. Modellkonfiguration: stand_paraphraser_ru

Anfrage:

 { "text_a": [ "   ,  .", "      ." ], "text_b": [ " ,     ,   .", "       ." ] } 

Ergebnis:

 [ [1], [0] ] 

Die aktuelle Liste aller sofort einsatzbereiten DeepPavlov-Modelle finden Sie immer hier .

Fazit


In diesem Artikel haben wir die DeepPavlov-API und einige der sofort verarbeiteten Textverarbeitungsfunktionen der Bibliothek vorgestellt. Es sollte berücksichtigt werden, dass für jede NLP-Aufgabe das beste Ergebnis erzielt wird, wenn das Modell an einem Datensatz trainiert wird, der der Subjektdomäne (Domäne) der Aufgabe entspricht. Darüber hinaus können im Prinzip noch mehr Modelle nicht für alle Gelegenheiten trainiert werden.

In den folgenden Artikeln werden wir zusätzliche Bibliothekseinstellungen berücksichtigen, DeepPavlov von Docker aus starten und danach mit dem Unterrichten von Modellen fortfahren. Und vergessen Sie nicht, dass DeepPavlov ein Forum hat - stellen Sie Ihre Fragen bezüglich der Bibliothek und der Modelle. Vielen Dank für Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de472890/


All Articles