[PYTHON] Versuchen Sie, Elasticsearch als Grundlage für Ihr Frage- und Antwortsystem zu verwenden

Dieser Artikel ist der 24. Tag des Elastic Stack Adventskalenders 2016.

Vorstellen

――Ich bin Ingenieur bei einer Firma namens Acroquest Technology. ――Wenn ich Student war, habe ich die Verarbeitung natürlicher Sprache und das Abrufen von Informationen durchgeführt.

Überblick

Ich möchte ein Frage-Antwort-System basierend auf Elasticsearch erstellen.

――Es ist, als würde man Antworten auf Fragen ausspucken, die auf Japanisch geschrieben sind.

――Ich denke, Elasticsearch, das einfach zu skalieren ist, kann gut sein, wenn die Wissensquelle riesig wird. (Natürlich bin ich nicht motiviert, individuell einen großen Cluster zu bilden)

Umgebung

Dieser Fluss

  1. Richtlinie schreiben
  2. Setzen Sie die Daten, die die Wissensquelle sein werden, vorerst in die elastische Suche ein
  3. Ermöglichen Sie das Abrufen verwandter Dokumente von der Python-Seite

Politik

Erstens ist die Definition von "Frage und Antwort" flauschig. Der Schwierigkeitsgrad variiert also stark je nach Art der Frage Dieses Mal werde ich mich als ersten Schritt auf das "Authentizitätsbeurteilungsproblem" konzentrieren, das am einfachsten zu sein scheint.

Zum Beispiel als Antwort auf einen Satz wie "Ieyasu Tokugawa eröffnete das Edo Shogunate", der eine bestimmte Tatsache zum Ausdruck bringt. Es wird eine Echtheitsbeurteilung durchgeführt.

Wenn das so ist

  1. Wissensquelldaten werden korrekt gespeichert
  2. Kann die Frage interpretieren
  3. Sie können die richtigen Informationen aus der Wissensquelle suchen Wenn die Bedingungen erfüllt sind, sollten Sie in 100 Schüssen richtig antworten können.

In der Theorie.

Setzen Sie die Daten, die die Quelle des Wissens sein werden, vorerst in die elastische Suche ein

Dieses Mal werden wir einige Beispieldaten erstellen und an Elasticsearch senden. Vorerst habe ich versucht, die Textdaten selbst und die separat geschriebenen einzufügen. (Ich würde mich freuen, wenn ich die Keywords visuell sehen könnte. Ich verlasse den Text, weil ich denke, dass ich die Syntax später analysieren möchte.

Als Datenfluss Datenquelle → Python → Elasticsearch → Python → Ausgabe Ich denke, es ist besser zu tun.

Die darin enthaltenen Daten sehen folgendermaßen aus

スクリーンショット 2016-12-24 19.25.41.png

Es hängt nicht direkt damit zusammen, was Sie diesmal tun möchten, aber es macht Spaß, Graph zu verwenden, wenn Sie es in ein Array bringen

スクリーンショット 2016-12-24 21.08.13.png

Grafik Ich fand es diesmal nicht sinnvoll, aber es war ziemlich wichtig ... Wenn Sie sich das ansehen, können Sie auf einen Blick sehen, dass "19" und "Jahrhundert" getrennt erscheinen und das mysteriöse Wort "ka" extrahiert wird. (Was ist "ka" ...) Als Prozess ist es nicht falsch, aber ich würde mich freuen, wenn "○○ Century" ein Set wäre. Es scheint, dass wir die Art und Weise, wie wir teilen, verbessern müssen. Ich werde das Wörterbuch separat überprüfen.

Stellen Sie vorerst sicher, dass Sie von der Python-Seite aus mit einem geeigneten Schlüsselwort suchen können.

ruby::


from elasticsearch import Elasticsearch
import json

es = Elasticsearch(['http://USER:PASSWORD@localhost:9200'])


request_body="{\"size\":10,\"query\":{\"term\":{\"words.keyword\":\"Japan\"}}}"

output = open("search_result.json","w")
json.dump(es.search(index="test",body=request_body),output, ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': '))

Wenn Sie so schreiben, werden Dokumente mit dem Wort "Japan" abgerufen. Das Ergebnis wird als ↓ zurückgegeben スクリーンショット 2016-12-24 21.51.06.png

Wenn es um Authentizität geht Danach kann es beurteilt werden, indem der Fragentext und der Text des zurückgegebenen Dokuments analysiert werden. Vorerst werde ich diesmal die bisherigen Vorbereitungen treffen. Bitte freuen Sie sich auf die Fortsetzung.

Zusammenfassung

Vorerst habe ich mich darauf vorbereitet, ein Frage- und Antwortsystem zu erstellen. (Vielleicht sind es nur Vorbereitungen ...)

Im nächsten Artikel möchte ich ein Kind machen, das die Frage richtig beantworten kann.

Recommended Posts

Versuchen Sie, Elasticsearch als Grundlage für Ihr Frage- und Antwortsystem zu verwenden
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Geben Sie das Ausgabeergebnis von sklearn.metrics.classification_report als CSV-Datei aus
(Hinweis) Eine Geschichte zum Erstellen eines Frage- und Antwortsystems mit Spring Boot und maschinellem Lernen (SVM).
Vermeiden Sie die Fallstricke bei der Verwendung eines Mac (für Linux-Benutzer?)
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Extrahieren Sie den Wert von dict oder list als Zeichenfolge
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Versuchen Sie es mit [Tails], dem Favoriten eines Hackers (?), Durch USB-Booten.
Probleme bei der Verwendung von Elasticsearch als Datenquelle in Redash
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der Twitter-API
Ein Memorandum zur Verwendung von eigen3
Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Vorsichtsmaßnahmen bei Verwendung einer Liste oder eines Wörterbuchs als Standardargument
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
Bewerten Sie die Leistung eines einfachen Regressionsmodells mithilfe der LeaveOneOut-Schnittstellenvalidierung
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 1)
[Erkennung von Anomalien] Versuchen Sie es mit der neuesten Methode des Fernunterrichts
[Kaggle] Ich habe mit dem Titanic-Tutorial eine Sammlung von Problemen erstellt
[Fabric] Ich war süchtig danach, Boolesche Werte als Argument zu verwenden. Notieren Sie sich also die Gegenmaßnahmen.
Versuchen Sie es mit dem Python Cmd-Modul
Die Geschichte des Exportierens eines Programms
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
Dinge, die beim Erstellen eines Empfehlungssystems mit Item2Vec zu beachten sind
Versuchen Sie, den Zustand der Straßenoberfläche mithilfe von Big Data des Straßenoberflächenmanagements zu ermitteln
Versuchen Sie, mit n die von Ihnen installierte Version von Node.js herunterzustufen
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Was Java-Benutzer davon gehalten haben, die Go-Sprache für einen Tag zu verwenden