DeepPavlov für Entwickler: NLP-Tools und Chatbot-Erstellung Nr. 1

Hallo zusammen! Wir eröffnen eine Reihe von Artikeln, die sich der Lösung praktischer Probleme 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 widmen DeepPavlov, das von unserem Team am MIPT Laboratory of Neural Systems and Deep Learning entwickelt wird. Das Hauptziel der Serie besteht darin, DeepPavlov einem breiten Spektrum von Entwicklern vorzustellen und zu zeigen, wie Sie angewandte NLP-Probleme lösen können, ohne über tiefe Kenntnisse im maschinellen Lernen und einen Doktortitel in Mathematik zu verfügen.

Zu den NLP-Aufgaben gehören die Bestimmung der Stimmung des Textes, das Parsen benannter Entitäten, die Bestimmung, was der Gesprächspartner von Ihrem Bot möchte: Pizza bestellen oder Hintergrundinformationen erhalten und vieles mehr. Sie können mehr über NLP-Aufgaben und -Methoden lesen hier.

In diesem Artikel zeigen wir Ihnen, wie Sie einen REST-Server mit vorab trainierten NLP-Modellen betreiben, der ohne zusätzliche Konfiguration oder Schulung einsatzbereit ist.

DeepPavlov für Entwickler: NLP-Tools und Chatbot-Erstellung Nr. 1

Installation von DeepPavlov

Hier und im Folgenden werden Anleitungen für Linux gegeben. Für Windows siehe unsere 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
    

Starten eines REST-Servers mit dem DeepPavlov-Modell

Bevor wir zum ersten Mal einen Server mit dem DeepPavlov-Modell starten, ist es hilfreich, über einige Funktionen der Bibliotheksarchitektur zu sprechen.

Jedes Modell in DP besteht aus:

  • Python-Code;
  • Herunterladbare Komponenten – serialisierte Trainingsergebnisse zu bestimmten Daten (Einbettungen, Gewichte neuronaler Netze usw.);
  • Eine Konfigurationsdatei (im Folgenden als Konfiguration bezeichnet), die Informationen über die vom Modell verwendeten Klassen, URLs heruntergeladener Komponenten, Python-Abhängigkeiten usw. enthält.

Wir werden Ihnen in den folgenden Artikeln mehr darüber erzählen, was sich unter der Haube von DeepPavlov verbirgt, zunächst reicht es für uns, Folgendes zu 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 verwendeten Python-Bibliotheken installieren.

Das erste Modell, das wir einführen werden, wird die mehrsprachige Named Entity Recognition (NER) sein. Das Modell klassifiziert Textwörter nach der Art der benannten Entitäten, zu denen sie gehören (Eigennamen, geografische Namen, Währungsnamen und andere). Konfigurationsname für die aktuellste Version von NER:

ner_ontonotes_bert_mult

Wir starten den REST-Server mit dem Modell:

  1. Wir installieren die in seiner 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
    

    Die serialisierten Komponenten werden in das DeepPavlov-Home-Verzeichnis 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. Bei einer Übereinstimmung wird der Download übersprungen und vorhandene 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 der Ausführung dieses Befehls wird ein REST-Server mit einem Modell auf Port 5005 des Hostcomputers gestartet (der Standardport ist 5000).

Nach der Initialisierung des Modells ist Swagger mit API-Dokumentation und der Möglichkeit zum Testen unter der URL zu finden http://127.0.0.1:5005. Testen wir das Modell, indem wir es an den Endpunkt senden http://127.0.0.1:5005/model POST-Anfrage mit folgendem JSON-Inhalt:

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

Als Antwort sollten wir den folgenden 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"]
  ]
]

Anhand dieser Beispiele analysieren wir die DeepPavlov REST API.

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 das Argument der Text, der verarbeitet werden muss. Weitere Informationen zu den von Modellen zurückgegebenen Argumenten und Werten finden Sie im Abschnitt MODELS der Dokumentation DeepPavlov

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

Der Begriff „Batch“ bezieht sich auf den Bereich des maschinellen Lernens und bezieht sich auf einen Stapel unabhängiger Eingabewerte, die von einem Algorithmus oder einem neuronalen Netzwerk gleichzeitig verarbeitet werden. Mit diesem Ansatz können Sie die Zeit, die das Modell für die Verarbeitung eines Elements eines Stapels benötigt, (oftmals erheblich) verkürzen, verglichen mit der Zeit, die derselbe Wert separat an die Eingabe übergeben wird. Das Verarbeitungsergebnis wird jedoch erst ausgegeben, nachdem alle Elemente verarbeitet wurden. Daher muss bei der Generierung eines eingehenden Stapels die Geschwindigkeit des Modells und die erforderliche Verarbeitungszeit für jedes seiner einzelnen Elemente berücksichtigt werden.

Wenn es mehrere Argumente für das DeepPavlov-Modell gibt, erhält jedes von ihnen seinen eigenen Wertestapel, und am Ausgang erzeugt das Modell immer einen Antwortstapel. Die Elemente des ausgehenden Stapels sind das Ergebnis der Verarbeitung der Elemente des eingehenden Stapels mit demselben Index.

Im obigen Beispiel bestand das Ergebnis des Modells darin, jede Zeichenfolge in Token (Wörter und Satzzeichen) zu zerlegen und das Token relativ zu der benannten Entität (Name der Organisation, Währung) zu klassifizieren, die es darstellt. Derzeit das Modell ner_ontonotes_bert_mult Es kann 18 Arten benannter Entitäten erkennen. Eine ausführliche Beschreibung finden Sie hier hier.

Weitere sofort einsatzbereite Modelle von DeepPavlov

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

Beantwortung von Textfragen

Beantworten Sie die Frage zum Text mit einem Fragment dieses Textes. Modellkonfiguration: Squad_ru_bert_infer

Anfragebeispiel:

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

Ergebnis:

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

Beleidigungserkennung

Erkennung des Vorliegens einer Beleidigung der Person, an die sich der Text richtet (zum Zeitpunkt des Schreibens – nur für Englisch). Modellkonfiguration: insults_kaggle_conv_bert

Anfragebeispiel:


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

Ergebnis:

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

Stimmungsanalyse

Klassifizierung der Textstimmung (positiv, neutral, negativ). Modellkonfiguration: rusentiment_elmo_twitter_cnn

Anfragebeispiel:

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

Ergebnis:

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

Paraphrasenerkennung

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

Anfrage:

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

Ergebnis:

[
  [1],
  [0]
]

Die aktuelle Liste aller out-of-the-box DeepPavlov-Modelle finden Sie immer hier.

Abschluss

In diesem Artikel haben wir uns mit der DeepPavlov-API und einigen der standardmäßig bereitgestellten Textverarbeitungsfunktionen der Bibliothek vertraut gemacht. Es ist zu bedenken, dass für jede NLP-Aufgabe das beste Ergebnis erzielt wird, wenn das Modell anhand eines Datensatzes trainiert wird, der dem Themenbereich (Domäne) der Aufgabe entspricht. Darüber hinaus können noch mehr Modelle grundsätzlich nicht für alle Situationen trainiert werden.

In den folgenden Artikeln werden wir uns zusätzliche Einstellungen der Bibliothek ansehen, DeepPavlov über Docker starten und dann mit dem Trainieren von Modellen fortfahren. Und vergessen Sie nicht, dass DeepPavlov es getan hat Forum – Stellen Sie Ihre Fragen zur Bibliothek und zu den Modellen. Vielen Dank für Ihre Aufmerksamkeit!

Source: habr.com

Kommentar hinzufügen