Hallo zusammen! Wir eröffnen 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 des Labors fĂŒr neuronale Systeme und tiefes Lernen an der MIPT entwickelt wird. Das Hauptziel dieser Reihe ist es, einem breiten Kreis von Entwicklern DeepPavlov vorzustellen und zu zeigen, wie man praktische NLP-Aufgaben lösen kann, ohne tiefgehende Kenntnisse in Machine Learning oder einen Doktortitel in Mathematik zu haben.
Zu den NLP-Aufgaben gehören die Bestimmung der Stimmung eines Textes, das Parsen von benannten EntitÀten, die Erkennung dessen, was der GesprÀchspartner von Ihrem Bot möchte: eine Pizza bestellen oder Informationen anfordern und vieles mehr. Detailliertere Informationen zu Aufgaben und Methoden des NLP finden Sie .
In diesem Artikel werden wir erlÀutern, wie man einen REST-Server mit vortrainierten NLP-Modellen starten kann, die bereit zur Verwendung sind, ohne dass eine zusÀtzliche Konfiguration oder Schulung erforderlich ist.

Installation von DeepPavlov
Hier und im Folgenden werden Anweisungen fĂŒr Linux bereitgestellt. FĂŒr Windows schauen Sie sich unser
- Erstellen und aktivieren Sie eine virtuelle Umgebung mit der derzeit unterstĂŒtzten Version von Python:
virtualenv env -p python3.7 source env/bin/activate - Installieren Sie DeepPavlov in der virtuellen Umgebung:
pip install deeppavlov
Starten des REST-Servers mit dem DeepPavlov-Modell
Bevor wir den Server mit dem DeepPavlov-Modell zum ersten Mal starten, ist es hilfreich, einige Besonderheiten der Architektur der Bibliothek zu erlÀutern.
Jedes Modell in DP besteht aus:
- Python-Code;
- Herunterladbaren Komponenten â serialisierte Lernresultate auf spezifischen Daten (Embeddings, Gewichte der neuronalen Netze usw.);
- Konfigurationsdatei (im Folgenden â Config), die Informationen ĂŒber die verwendeten Klassen des Modells, URLs der herunterladbaren Komponenten, Python-AbhĂ€ngigkeiten usw. enthĂ€lt.
Mehr darĂŒber, was sich hinter DeepPavlov verbirgt, werden wir in den nĂ€chsten Artikeln erlĂ€utern. VorlĂ€ufig wissen wir genug darĂŒber, dass:
- Jedes Modell in DeepPavlov wird durch den Namen seiner Config identifiziert;
- Um das Modell zu starten, mĂŒssen seine Komponenten von den DeepPavlov-Servern heruntergeladen werden;
- AuĂerdem mĂŒssen die von dem Modell verwendeten Python-Bibliotheken installiert werden.
Das erste Modell, das wir starten werden, ist die mehrsprachige Named Entity Recognition (NER). Das Modell klassifiziert Wörter im Text nach dem Typ der benannten EntitĂ€ten, zu denen sie gehören (Eigen- und geografische Namen, WĂ€hrungsnamen und andere). Der Name der Konfiguration fĂŒr die aktuellste Version von NER:
ner_ontonotes_bert_mult
Wir starten den REST-Server mit dem Modell:
- Wir installieren die im Konfigurationsdatei des Modells angegebenen AbhÀngigkeiten in die aktive virtuelle Umgebung:
python -m deeppavlov install ner_ontonotes_bert_mult - Wir laden die serialisierten Komponenten des Modells von den DeepPavlov-Servern herunter:
python -m deeppavlov download ner_ontonotes_bert_multDie serialisierten Komponenten werden im Home-Verzeichnis von DeepPavlov gespeichert, welches standardmĂ€Ăig
~/.deeppavlovBeim Herunterladen wird der Hash bereits heruntergeladener Komponenten mit den Hashes der auf dem Server befindlichen Komponenten verglichen. Bei Ăbereinstimmung wird der Download ĂŒbersprungen und bereits vorhandene Dateien verwendet. Die GröĂe der heruntergeladenen Komponenten kann im Durchschnitt zwischen 0,5 und 8 Gb variieren, in einigen FĂ€llen kann sie nach dem Entpacken bis zu 20 Gb erreichen.
- Wir starten den REST-Server mit dem Modell:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Durch die AusfĂŒhrung dieses Befehls wird ein REST-Server mit dem Modell auf Port 5005 der Hostmaschine gestartet (der Standardport ist 5000).
Nach der Initialisierung des Modells kann Swagger mit der 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 Endpunkt senden http://127.0.0.1:5005/model mit folgendem JSON-Inhalt:
{
"x": [
"Vom Savjolovsky Bahnhof kann man MFTI mit dem Zug erreichen.",
"In der SĂŒdwest-Russland wird der Roggenpreis auf 15 Griwna geschĂ€tzt."
]
}In der Antwort sollten wir folgendes JSON erhalten:
[
[
["Vom", "MFTI", "kann", "man", "mit", "dem", "Zug", "erreichen", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["In", "der", "SĂŒdwest", "-", "Russland", "wird", "der", "Roggenpreis", "auf", "15", "Griwna", "geschĂ€tzt."],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]Anhand dieser Beispiele werden wir das REST-API von DeepPavlov erlÀutern.
API DeepPavlov
Jedes DeepPavlov-Modell verfĂŒgt ĂŒber mindestens ein eingehendes Argument. In der REST-API sind die Argumente benannt, ihre Namen sind die SchlĂŒssel des Eingabewörterbuchs. In den meisten FĂ€llen ist das Argument der Text, der verarbeitet werden soll. Weitere Informationen zu Argumenten und von den Modellen zurĂŒckgegebenen Werten finden Sie im Abschnitt MODELS der Dokumentation.
Im Beispiel wurde der Liste aus zwei Zeichenfolgen im Argument x jeweils ein separates Markup zugewiesen. 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 impliziert ein Paket von unabhĂ€ngigen Eingabewerten, die gleichzeitig von einem Algorithmus oder einem neuronalen Netzwerk verarbeitet werden. Dieser Ansatz ermöglicht es, die Verarbeitungszeit des Modells fĂŒr ein einzelnes Element im Batch im Vergleich zu demselben Wert, der separat eingegeben wird, deutlich zu verkĂŒrzen. Das Verarbeitungsergebnis wird jedoch erst nach Verarbeitung aller Elemente ausgegeben. Daher muss bei der Bildung des eingehenden Batches die Geschwindigkeit des Modells und die erforderliche Verarbeitungszeit jedes einzelnen Elements berĂŒcksichtigt werden.
Wenn die Argumente des Modells DeepPavlov mehrere sind, wird jedes mit seinem eigenen Batch von Werten ĂŒbergeben, und das Modell gibt immer einen Batch von Antworten aus. Die Elemente des ausgehenden Batches sind die Verarbeitungsergebnisse der Elemente der eingehenden Batches mit demselben Index.
Im genannten Beispiel bestand das Ergebnis der Modellarbeit darin, jede Zeile in Tokens (Wörter und Satzzeichen) zu zerlegen und das Token in Bezug auf die benannte EntitÀt (Organisation, WÀhrung), die es darstellt, zu klassifizieren. Derzeit ist das Modell ner_ontonotes_bert_mult in der Lage, 18 Typen von benannten EntitÀten zu erkennen, eine detaillierte Beschreibung ist zu finden .
Anderen Out-of-the-Box-Modelle DeepPavlov
Neben NER sind zum Zeitpunkt der Abfassung des Artikels folgende Out-of-the-Box-Modelle in DeepPavlov verfĂŒgbar:
Text Question Answering
Antwort auf eine Frage zum Text aus einem Fragment dieses Textes. Modelkonfiguration: squad_ru_bert_infer
Beispiel einer Anfrage:
{
"context_raw": [
"DeepPavlov wird vom MIPT-Labor entwickelt.",
"In SĂŒdwestrussland wurde ein WeizenstĂ€ngel auf 15 Grywna geschĂ€tzt."
],
"question_raw": [
"Von wem wird DeepPavlov entwickelt?",
"Was kostete der WeizenstÀngel in Russland?"
]
}Ergebnis:
[
["vom MIPT-Labor", 27, 31042.484375],
["15 Grywna", 39, 1049.598876953125]
]
Insult Detection
Erkennung der Vorhandensein von Beleidigungen gegen die Person, an die der Text gerichtet ist (zum Zeitpunkt der Abfassung des Artikels nur fĂŒr die englische Sprache). Modelkonfiguration: insults_kaggle_conv_bert
Beispiel einer Anfrage:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}Ergebnis:
[
["Nicht Beleidigung"],
["Beleidigung"]
]Sentiment Analysis
Klassifizierung der TonalitÀt des Textes (positiv, neutral, negativ). Modelkonfiguration: rusentiment_elmo_twitter_cnn
Beispiel einer Anfrage:
{
"x": [
"Ich mag die DeepPavlov-Bibliothek.",
"Ich habe von der DeepPavlov-Bibliothek gehört.",
"Trolle und Anonyme nerven mich."
]
}Ergebnis:
[
["positiv"],
["neutral"],
["negativ"]
]Paraphrasenerkennung
Bestimmung, ob zwei verschiedene Texte die gleiche Bedeutung haben. Modellkonfiguration: stand_paraphraser_ru
Anfrage:
{
"text_a": [
"Die Stadt versinkt in den Schlaf, die Mafia erwacht.",
"Der PrÀsident der USA hat mit einem Vertragsbruch gegen Deutschland gedroht."
],
"text_b": [
"Die Nacht bricht an, alle Stadtbewohner gehen schlafen, und die Verbrecher wachen auf.",
"Deutschland hat nicht vor, sich den Drohungen der USA zu beugen."
]
}Ergebnis:
[
[1],
[0]
]Die aktuelle Liste aller sofort einsetzbaren Modelle von DeepPavlov kann jederzeit gefunden werden .
Fazit
In diesem Artikel haben wir uns mit der DeepPavlov-API und einigen der âout-of-the-boxâ Texterarbeitungsfunktionen der Bibliothek vertraut gemacht. Dabei sollte beachtet werden, dass fĂŒr jede NLP-Aufgabe das beste Ergebnis erzielt wird, wenn das Modell auf einem Datensatz trainiert wird, der dem Fachgebiet der Aufgabe entspricht. DarĂŒber hinaus können sogar noch mehr Modelle im Prinzip nicht fĂŒr alle Lebenslagen trainiert werden.
In den nĂ€chsten Artikeln werden wir zusĂ€tzliche Einstellungen der Bibliothek betrachten, DeepPavlov aus Docker heraus ausfĂŒhren und anschlieĂend zur Modelltrainierung ĂŒbergehen. Und vergessen Sie nicht, dass DeepPavlov â stellen Sie Ihre Fragen zur Bibliothek und zu den Modellen. Vielen Dank fĂŒr Ihre Aufmerksamkeit!
Quelle: habr.com
