Das Labor für Neuronale Systeme und Deep Learning am MIPT macht
DeepPavlov seit über einem Jahr zu einer offenen Bibliothek für die Erstellung interaktiver Systeme. Es enthält eine Reihe geschulter Komponenten für die Sprachanalyse, mit denen Sie geschäftliche Probleme effektiv lösen können.
Organisieren Sie beispielsweise Antworten auf häufig gestellte Fragen von Kunden. Dies über ein Callcenter, ein Widget auf einer Website oder ein soziales Netzwerk durch Einstellung von Mitarbeitern zu tun, ist eine einfache Angelegenheit. Die dringende Aufgabe besteht darin, den Prozess so zu optimieren, dass er automatisch, mit minimalen Fehlern und auch in einer praktischen Benutzeroberfläche ausgeführt wird. Zum Beispiel in der Sprachassistentin "Alice" von "Yandex".
In diesem Artikel möchten wir Ihnen zeigen, wie Sie das Problem der Beantwortung der häufig gestellten Fragen mithilfe der Verarbeitung natürlicher Sprache effektiv lösen und die Lösung in Alice integrieren können.
Klassifizierung von Texten und wie es gehtErstellen einer Frage-und-Antwort-Fähigkeit basierend auf der DeepPavlov-BibliothekInstallieren Sie die DeepPavlov-BibliothekEine Fertigkeit auf Alice ausführenFazitKlassifizierung von Texten und wie es geht
Das Problem der Suche nach einer Frage, die einer bestimmten Frage nahe kommt, aus einem vorgefertigten Satz von Frage-Antwort-Paaren wird durch Algorithmen zur Bestimmung der semantischen Nähe / Textklassifizierung gelöst.
Um dieses Problem „in der Produktion“ zu lösen, gibt es zwei Möglichkeiten: Sie können einen NLP-Spezialisten im Bundesstaat einstellen oder die Lösung auslagern.
Nachteile beider Optionen: 1) Notwendigkeit der Datenerfassung, 2) endlose Iteration des Modelltrainings und der Qualitätsmessung, 3) ernsthafte Anforderungen an die Entwicklung von Entwicklern. Selbst der Integrationsprozess einer vorgefertigten Sprachverarbeitungslösung ist keine leichte Aufgabe, ganz zu schweigen davon, sie von Grund auf neu zu erstellen. Ausländische Cloud-Lösungen (Google Assistant oder Microsoft Cortana) bieten eine umfassende Lösung für das Problem der Textklassifizierung (DialogFlow, Azure Bot Service). Es gibt jedoch weiterhin Probleme bei der Skalierung, der Verknüpfung mit kostenpflichtigen API-Diensten und der Unterstützung der russischen Sprache.
Aber Prost - es gibt eine Alternative: Sie können die offene Softwarebibliothek verwenden, die die Erstellung einer Lösung zur Beantwortung der häufig gestellten Fragen auf Russisch und deren Integration in den Sprachassistenten erheblich vereinfacht.
Erstellen einer Frage-und-Antwort-Fähigkeit basierend auf der DeepPavlov-Bibliothek
DeepPavlov ist eine solche Bibliothek. Es enthält eine Reihe geschulter Komponenten für die Sprachanalyse, einschließlich Textklassifizierungskomponenten. Weitere Informationen zu den verschiedenen Komponenten von DeepPavlov finden Sie in der
Hilfe .
Für die Arbeit mit DeepPavlov sind keine besonderen Kenntnisse des Entwicklers erforderlich. Die Bibliothek ist kostenlos und bietet zahlreiche Möglichkeiten zur Feinabstimmung.
In
diesem Lernprogramm finden Sie alle Anweisungen zum Erstellen einer Fertigkeit basierend auf einer Wissensdatenbank. Wir empfehlen, dass Sie den Code aus dem Lernprogramm in ein separates Skript umschreiben und die Fertigkeit aus dem Skript ausführen.
Installieren Sie die DeepPavlov-Bibliothek
Installieren Sie zunächst Python 3.6 und aktivieren Sie die Entwicklungsumgebung. Installieren Sie dann DeepPavlov.
source activate py36 pip install -q deeppavlov
Fähigkeitsentwicklung
Die Fertigkeit (Fertigkeit) in DeepPavlov ist eine Entität, die unabhängig von der Funktionalität (
Textklassifizierung ,
Beantwortung offener Fragen usw.) ein einheitliches Eingabe- und Ausgabeformat aufweist. Fähigkeiten werden so erstellt, dass sie zu einem einzigen Stapel eines einfachen Dialogsystems kombiniert werden können, das nach Eingang einer Anfrage eine Antwort von einer Fähigkeit mit höchstem Vertrauen erhält.
Erstellen Sie ein Objekt der SimilarityMatchingSkill-Klasse, das auf eine Benutzeranforderung basierend auf einer Liste häufig gestellter Fragen antwortet.
from deeppavlov.contrib.skills.similarity_matching_skill import SimilarityMatchingSkill faq = SimilarityMatchingSkill(data_path = 'http://files.deeppavlov.ai/faq/dataset_ru.csv', x_col_name = 'Question', y_col_name = 'Answer', save_load_path = './model', config_type = 'tfidf_autofaq', edit_dict = {}, train = True)
Das Objekt der SimilarityMatchingSkill-Klasse hat die folgenden Parameter:
- data_path - Pfad zur CSV-Datendatei (Komma-Trennzeichen)
- x_col_name - Name der Spalte mit Fragen in der CSV-Datei (Frage, Standard)
- y_col_name - Name der Spalte mit Antworten in der CSV-Datei (Antwort, Standard)
- config_type ist der Name der Konfiguration, die Sie für die Klassifizierung verwenden möchten. Liste aller Konfigurationen .
- edit_dict - `dict` mit Parametern, die in der Konfiguration eines bestimmten config_type neu geschrieben werden sollen
- save_load_path - Der Pfad, in dem das trainierte Modell gespeichert werden soll
- trainieren - ob das Modell trainiert werden soll
Um das Modell zu verwenden, reicht es nach dem Training aus, es mit dem folgenden Befehl zu laden:
faq = SimilarityMatchingSkill(save_load_path='./model')`.
Die SimilarityMatchingSkill-Klasse vereinfacht den Zugriff auf Textklassifizierungskomponenten. Wenn es jedoch einen Teil der Konfiguration gibt, den Sie ändern möchten, können Sie dies tun, indem Sie den Parameter edit_dict definieren. Ein Objekt der SimilarityMatchingSkill-Klasse (wie jede Fähigkeit) verwendet drei Parameter als Eingabe: eine Liste von Angeboten zur Klassifizierung, eine Liste des Abfrageverlaufs und eine Liste von Status (im Fall von SimilarityMatchingSkill können die letzten beiden leere Listen sein).
faq([' ?'],[],[])
Ein typisches Dialogsystem enthält normalerweise mehrere Fähigkeiten. Um die Arbeit mit mehreren Fähigkeiten zu demonstrieren, erstellen wir verschiedene Fähigkeiten der PatternMatchingSkill-Klasse.
from deeppavlov.skills.pattern_matching_skill import PatternMatchingSkill hello = PatternMatchingSkill(responses=['', ''], patterns=['', '']) bye = PatternMatchingSkill(responses=['', ' '], patterns=['', ' ']) fallback = PatternMatchingSkill(responses=[' '], default_confidence = 0.3)
PatternMatchingSkill ist eine einfache Fähigkeitsklasse, die aufgerufen wird, wenn eine Benutzeranforderung mit einem der Elemente der Musterliste übereinstimmt und auf zufällige Elemente der Antwortliste mit der Vertrauenswürdigkeit default_confidence antwortet. Sie können den Parameter default_confidence manuell konfigurieren, um Skill-Antworten zu priorisieren.
Der letzte Schritt besteht darin, die Skills zu einem Agenten zu kombinieren und den Skill-Auswahlparameter zu konfigurieren. Der Parameter "HighestConfidenceSelector" bestimmt, dass die Fertigkeit mit der höchsten Sicherheit aufgerufen wird.
from deeppavlov.agents.default_agent.default_agent import DefaultAgent from deeppavlov.agents.processors.highest_confidence_selector import HighestConfidenceSelector agent = DefaultAgent([hello, bye, faq, fallback], skills_selector=HighestConfidenceSelector())
Starten Sie als Nächstes den Server mit dem Pfad für die Anforderungen "endpoint =" faq "und dem Verbindungsport" port = 5000 "
from deeppavlov.utils.alice import start_agent_server start_agent_server(agent, host='0.0.0.0', port=5000, endpoint='/faq')
Bitte beachten Sie, dass für Yandex.Dialogs ein Server mit einer externen IP-Adresse und Zugriff über https als Webhook-URL erforderlich ist. Für ein schnelles Prototyping können Sie
Ngrok verwenden.
Hiermit können Sie einen Tunnel erstellen, um von DeepPavlov im lokalen Netzwerk auf Ihren Server zuzugreifen. Führen Sie dazu aus
ngrok http 5000
auf Ihrem Server mit DeepPavlov. Als Reaktion darauf werden zwei Tunnel erstellt, einer für die Protokolle http und https. Kopieren Sie die Tunneladresse für https, fügen Sie den Endpunkt / die FAQ zum Link hinzu. Der letzte Link ist die Webhook-URL für unseren Yandex.Dialog.
Eine Fertigkeit auf Alice ausführen
Um die Interaktion mit der Yandex.Dialogs-Plattform zu
testen , gehen Sie zu
dialogs.yandex.ru/developer und erstellen Sie einen
neuen Dialog . Legen Sie einen eindeutigen Namen und einen Aktivierungsnamen fest. Geben Sie für die Webhook-URL den zuvor empfangenen Link an. Speichern Sie die Änderungen. Um mit der Fertigkeit zu interagieren, wechseln Sie zur Registerkarte Test.
Fazit
Nun wissen Sie, wie Sie Textklassifizierungsmodelle aus der DeepPavlov-Bibliothek verwenden, um einen Frage-Antwort-Bot zu erstellen, wie Sie mithilfe von DeepPavlov schnell Prototypen erstellen und diese mit Alice verbinden können.
Die Schnittstellen für die Verbindung zu Amazon Alexa und das Microsoft Bot Framework sind übrigens auch in unserer Bibliothek implementiert.
Wir freuen uns über Feedback in den Kommentaren. Und Sie können alle Fragen zu DeepPavlov in unserem
Forum hinterlassen.
