DeepPavlov für Entwickler: #1 Werkzeuge für NLP und die Erstellung von Chatbots

Hallo zusammen! Wir starten eine Reihe von Artikeln, die sich mit der Lösung praktischer Aufgaben im Zusammenhang mit der Verarbeitung natürlicher Sprache (Natural Language Processing oder einfach NLP) und der Erstellung von Dialogagenten (Chatbots) mithilfe einer Open-Source-Bibliothek beschäftigen, die von unserem Team im Labor für neuronale Systeme und tiefes Lernen der MIPT entwickelt wird. DeepPavlovDas Hauptziel dieser Reihe ist es, einer breiten Entwicklergemeinschaft DeepPavlov vorzustellen und zu zeigen, wie man Anwendungsprobleme im Bereich NLP lösen kann, ohne über tiefgehende Kenntnisse in Machine Learning oder einen Doktortitel in Mathematik zu verfügen.

Zu den NLP-Aufgaben gehören die Bestimmung der Textstimmung, das Parsen benannter Entitäten, die Ermittlung dessen, was der Gesprächspartner von Ihrem Bot möchte: eine Pizza bestellen oder Informationen erhalten, und vieles mehr. Mehr über Aufgaben und Methoden von NLP können Sie hier.

In diesem Artikel erklären wir, wie Sie einen REST-Server mit vortrainierten NLP-Modellen starten, die bereit zur Nutzung sind, ohne zusätzliche Anpassungen oder Schulungen.

DeepPavlov für Entwickler: #1 Werkzeuge für NLP und die Erstellung von Chatbots

Installation von DeepPavlov

Hier und in den folgenden Abschnitten finden Sie Anweisungen für Linux. Für Windows lesen Sie bitte unser Dokumentation

  • Erstellen und aktivieren Sie eine virtuelle Umgebung mit der aktuell unterstützten Python-Version:
    virtualenv env -p python3.7
    source env/bin/activate
  • Installieren Sie DeepPavlov in der virtuellen Umgebung:
    pip install deeppavlov
    

Starten Sie den REST-Server mit dem DeepPavlov-Modell

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

Jedes Modell in DP besteht aus:

  • Python-Code;
  • Herunterladbaren Komponenten – serialisierte Trainingsresultate auf spezifischen Daten (Einbettungen, Gewichte von neuronalen Netzen usw.);
  • Eine Konfigurationsdatei (im Folgenden – Konfig), die Informationen über die von dem Modell verwendeten Klassen, die URL der herunterladbaren Komponenten, Python-Abhängigkeiten und mehr enthält.

Mehr über die Funktionsweise von DeepPavlov werden wir in den folgenden Artikeln erläutern, aber vorerst reicht es zu wissen, dass:

  • Jedes Modell in DeepPavlov wird durch den Namen seines Konfigs identifiziert;
  • Um das Modell auszuführen, müssen Sie seine Komponenten von den DeepPavlov-Servern herunterladen;
  • Zusätzlich müssen die von dem Modell verwendeten Python-Bibliotheken installiert werden.

Das erste Modell, das wir einführen werden, ist ein mehrsprachiges Named Entity Recognition (NER). Das Modell klassifiziert Wörter im Text je nach Typ der benannten Entitäten, zu denen sie gehören (Eigen- und Ortsnamen, Währungen und andere). Der Name der Konfiguration für die aktuellste NER-Version:

ner_ontonotes_bert_mult

Wir starten den REST-Server mit dem Modell:

  1. Wir installieren die im Konfigurationsdokument des Modells angegebenen Abhängigkeiten im aktiven virtuellen Umfeld:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Wir laden die serialisierten Komponenten des Modells von den DeepPavlov-Servern herunter:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Die serialisierten Komponenten werden im Home-Verzeichnis von DeepPavlov heruntergeladen, das standardmäßig befindet sich

    ~/.deeppavlov

    Beim Herunterladen wird der Hash der bereits heruntergeladenen Komponenten mit den Hashes der Komponenten auf dem Server überprüft. Bei Übereinstimmung wird der Download übersprungen und es werden bereits vorhandene Dateien verwendet. Die Größen der heruntergeladenen Komponenten können im Durchschnitt zwischen 0,5 und 8 GB variieren, in einigen Fällen erreichen sie nach der Dekompression bis zu 20 GB.

  3. Wir starten den REST-Server mit dem Modell:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Durch die Ausführung dieses Kommandos wird ein REST-Server mit einem Modell auf dem Port 5005 der Host-Maschine gestartet (Standardport ist 5000).

Nach der Initialisierung des Modells kann Swagger mit API-Dokumentation und der Möglichkeit zum Testen unter der URL gefunden werden. http://127.0.0.1:5005. Lassen Sie uns das Modell testen, indem wir eine Anfrage an den Endpoint senden. http://127.0.0.1:5005/model POST-Anfrage mit dem folgenden JSON-Inhalt:

{
  "x": [
    "Man kann von der Savyolovsky-Station nach MFTI mit dem Zug fahren.",
    "In Südrussland wird ein Strohstack mit 15 Griwna bewertet."
  ]
}

Im Gegenzug sollten wir das folgende JSON erhalten:

[
  [
    ["In", "MFTI", "kann", "man", "mit", "dem", "Zug", "von", "Savyolovsky", "Station", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["In", "süd", "-", "westlichem", "Russland", "wird", "ein", "Strohstack", "geschätzt", "bei", "15", "Griwna"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Anhand dieser Beispiele werden wir die REST-API von DeepPavlov erläutern.

API von DeepPavlov

Jedes Modell von DeepPavlov hat mindestens ein eingehendes Argument. Bei der REST-API sind die Argumente benannt, ihr Name ist der Schlüssel des eingehenden Dictionaries. In den meisten Fällen handelt es sich bei dem Argument um den Text, der verarbeitet werden muss. Weitere Informationen zu Argumenten und den von den Modellen zurückgegebenen Werten finden Sie im Abschnitt MODELS der Dokumentation. DeepPavlov

Im Beispiel wurde im Argument x eine Liste mit zwei Zeichenfolgen übergeben, für die jeweils eine separate Formatierung ausgegeben wurde. In DeepPavlov akzeptieren alle Modelle eine Liste (Batch) von Werten, die unabhängig verarbeitet werden.

Der Begriff „Batch“ bezieht sich auf den Bereich des maschinellen Lernens und beschreibt ein Paket unabhängiger Eingabewerte, die gleichzeitig von einem Algorithmus oder einem neuronalen Netzwerk verarbeitet werden. Dieser Ansatz ermöglicht es, die Verarbeitungszeit für ein einzelnes Element des Batches im Vergleich zu demselben Wert, der separat übergeben wird, erheblich zu verkürzen. Das Ergebnis der Verarbeitung wird jedoch erst nach der Verarbeitung aller Elemente ausgegeben. Daher ist es wichtig, bei der Bildung des eingehenden Batches die Geschwindigkeit des Modells sowie die benötigte Verarbeitungszeit für jedes einzelne Element zu berücksichtigen.

Falls die DeepPavlov-Modelle mehrere Argumente erhalten, wird jedem von ihnen sein eigener Batch von Werten übergeben, und das Modell gibt immer einen Batch von Antworten aus. Die Elemente des ausgehenden Batches sind die Ergebnisse der Verarbeitung der Elemente der eingehenden Batches mit demselben Index.

Im gegebenen Beispiel bestand das Ergebnis der Modellarbeit darin, jede Zeile in Tokens (Wörter und Satzzeichen) zu unterteilen und das Token in Bezug auf die benannte Entität (Name der Organisation, Währung), die es darstellt, zu klassifizieren. Aktuell kann das Modell ner_ontonotes_bert_mult 18 Arten von benannten Entitäten erkennen, eine detaillierte Beschreibung finden Sie hier.

Andere out-of-the-box-Modelle von DeepPavlov

Neben NER sind zu dem Zeitpunkt, als dieser Artikel verfasst wurde, die folgenden out-of-the-box-Modelle in DeepPavlov verfügbar:

Text Question Answering

Antwort auf die Frage zu einem Text mithilfe eines Textauszugs. Modellspezifikation: squad_ru_bert_infer

Beispielanfrage:

{
  "context_raw": [
    "DeepPavlov wird im Labor von MIPT entwickelt.",
    "In der südwestlichen Rus wurde ein Getreidehaufen mit 15 Grivna bewertet."
  ],
  "question_raw": [
    "Wer entwickelt DeepPavlov?",
    "Was hat der Getreidehaufen in der Rus gekostet?"
  ]
}

Das Ergebnis:

[
  ["Labor von MIPT", 27, 31042.484375],
  ["15 Grivna", 39, 1049.598876953125]
]

Insult Detection

Erkennung der Existenz einer Beleidigung der Person, an die der Text gerichtet ist (zum Zeitpunkt der Erstellung dieses Artikels nur für die englische Sprache). Modellspezifikation: insults_kaggle_conv_bert

Beispielanfrage:


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

Das Ergebnis:

[
  ["Keine Beleidigung"],
  ["Beleidigung"]
]

Sentiment Analysis

Klassifizierung des Texttonus (positiv, neutral, negativ). Modellkonfiguration: rusentiment_elmo_twitter_cnn

Beispielanfrage:

{
  "x": [
    "Ich mag die DeepPavlov-Bibliothek.",
    "Ich habe von der DeepPavlov-Bibliothek gehört.",
    "Ich bin von Trollen und Anonymen genervt."
  ]
}

Das Ergebnis:

[
  ["positiv"],
  ["neutral"],
  ["negativ"]
]

Paraphrasenerkennung

Feststellung, ob zwei verschiedene Texte die gleiche Bedeutung haben. Modellkonfiguration: stand_paraphraser_ru

Anfrage:

{
  "text_a": [
    "Die Stadt gleitet in den Schlaf, die Mafia erwacht.",
    "Der US-Präsident drohte mit dem Abbruch des Vertrags mit Deutschland."
  ],
  "text_b": [
    "Die Nacht bricht herein, alle Stadtbewohner gehen schlafen, während die Verbrecher aufwachen.",
    "Deutschland hat nicht vor, sich den Drohungen der USA zu beugen."
  ]
}

Das Ergebnis:

[
  [1],
  [0]
]

Die aktuelle Liste aller sofort einsatzbereiten Modelle von DeepPavlov ist jederzeit verfügbar. hier.

Fazit

In diesem Artikel haben wir uns mit der API von DeepPavlov und einigen Möglichkeiten der Bibliothek zur Textverarbeitung befasst, die „out of the box“ bereitgestellt werden. Dabei ist zu beachten, dass für jede NLP-Aufgabe die besten Ergebnisse erzielt werden, wenn das Modell mit einem Datensatz trainiert wird, der dem Fachgebiet (Domain) der Aufgabe entspricht. Darüber hinaus ist es prinzipiell unmöglich, noch mehr Modelle für alle Lebenslagen zu trainieren.

In den folgenden Artikeln werden wir zusätzliche Einstellungen der Bibliothek besprechen, DeepPavlov aus Docker starten und anschließend zum Training von Modellen übergehen. Vergessen Sie nicht, dass DeepPavlov auch über Forum verfügt – stellen Sie Ihre Fragen zur Bibliothek und zu den Modellen. Vielen Dank für Ihre Aufmerksamkeit!

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster