[PYTHON] Essayez d'utiliser Elasticsearch comme base de votre système de questions et réponses

Cet article est le 24e jour du calendrier de l'avent Elastic stack 2016.

Auto-introduction

――Je suis ingénieur dans une société appelée Acroquest Technology. «Quand j'étais étudiant, je faisais du traitement du langage naturel et de la recherche d'informations.

Aperçu

Je souhaite créer un système de questions-réponses basé sur Elasticsearch.

«C'est comme cracher des réponses à des questions écrites en japonais.

«Je pense qu'Elasticsearch, qui est facile à mettre à l'échelle, peut être utile lorsque la source de connaissances devient énorme. (Bien sûr, je ne suis pas motivé pour former un grand cluster individuellement)

environnement

Ce flux

  1. Rédiger la politique
  2. Mettez les données qui seront la source de connaissances dans la recherche élastique pour le moment
  3. Rendre possible d'obtenir des documents connexes du côté Python

politique

Tout d'abord, la définition de «question et réponse» est floue. La gamme de difficulté varie considérablement en fonction du type de question, donc Cette fois, dans un premier temps, je me concentrerai sur le "problème du jugement d'authenticité" qui semble être le plus simple.

Par exemple, en réponse à une phrase telle que "Ieyasu Tokugawa a ouvert le shogunat Edo" qui exprime un fait spécifique. Le jugement d'authenticité est effectué.

Si ce

  1. Les données de la source de connaissances sont conservées correctement
  2. Peut interpréter la question
  3. Vous pouvez rechercher les informations correctes à partir de la source de connaissances Si les conditions sont réunies, vous devriez pouvoir répondre correctement en 100 clichés.

En théorie.

Mettre les données qui seront la source de connaissances dans la recherche élastique pour le moment

Cette fois, nous allons créer des exemples de données et les soumettre à Elasticsearch. Pour le moment, j'ai essayé d'insérer les données textuelles elles-mêmes et celles qui ont été écrites séparément. (Je serais heureux si je pouvais voir les mots-clés visuellement, Je laisse le texte car je pense que je vais vouloir analyser la syntaxe plus tard)

En tant que flux de données Source de données → Python → elasticsearch → Python → sortie Je pense qu'il vaut mieux faire.

Les données qui y sont entrées ressemblent à ceci

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

Ce n'est pas directement lié à ce que vous voulez faire cette fois, mais c'est amusant d'utiliser Graph si vous le mettez dans un tableau

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

Graphique J'ai trouvé que ça n'avait pas de sens cette fois, mais c'était plutôt important ... Si vous regardez cela, vous pouvez voir d'un coup d'œil que «19» et «siècle» apparaissent séparément et le mot mystérieux «ka» est extrait. (Qu'est-ce que "ka" ...) Ce n'est pas faux en tant que processus, mais je serais heureux si "○○ Century" était un ensemble. Il semble que nous devons améliorer la façon dont nous partageons. Je vais revoir le dictionnaire séparément.

Pour le moment, assurez-vous que vous pouvez rechercher du côté python avec un mot clé approprié.

ruby::


from elasticsearch import Elasticsearch
import json

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


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

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=(',', ': '))

Si vous écrivez ainsi, les documents contenant le mot «Japon» seront extraits. Le résultat sera renvoyé comme ↓ スクリーンショット 2016-12-24 21.51.06.png

Quand il s'agit d'authenticité Après cela, il semble que cela puisse être jugé en analysant le texte de la question et le texte du document retourné. Pour le moment, je vais faire la préparation jusqu'ici cette fois. Veuillez attendre avec impatience la suite.

Résumé

Pour le moment, je me suis préparé à créer un système de questions et réponses. (Peut-être que ce ne sont que des préparatifs ...)

Dans le prochain article, je veux faire un enfant qui puisse répondre correctement à la question.

Recommended Posts

Essayez d'utiliser Elasticsearch comme base de votre système de questions et réponses
Essayez d'utiliser le module de collections (ChainMap) de python3
Essayez de simuler le mouvement du système solaire
Découpez une partie de la chaîne à l'aide d'une tranche Python
Afficher le résultat de sortie de sklearn.metrics.classification_report sous forme de fichier CSV
(Remarque) Une histoire sur la création d'un système de questions et réponses à l'aide de Spring Boot et de l'apprentissage automatique (SVM).
Éviter les pièges de l'utilisation d'un Mac (pour les utilisateurs Linux?)
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Extraire la valeur de dict ou list sous forme de chaîne de caractères
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
Essayez d'utiliser [Tails], qui est le favori des hackers (?), Par démarrage USB.
Problèmes lors de l'utilisation d'Elasticsearch comme source de données dans Redash
L'histoire de la création d'un bot de boîte à questions avec discord.py
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API Twitter
Un mémorandum d'utilisation de eigen3
Comprendre la fonction de convolution en utilisant le traitement d'image comme exemple
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
Essayez de modifier une nouvelle image à l'aide du modèle StyleGAN2 entraîné
Évaluer les performances d'un modèle de régression simple à l'aide de la validation d'intersection LeaveOneOut
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 1)
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
[Fabric] J'étais accro à l'utilisation de booléen comme argument, alors notez les contre-mesures.
Essayez d'utiliser le module Python Cmd
L'histoire de l'exportation d'un programme
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
Si vous voulez un singleton en python, considérez le module comme un singleton
Choses à prendre en compte lors de la création d'un système de recommandation avec Item2Vec
Essayez d'obtenir l'état de la surface de la route en utilisant de grandes données de gestion de la surface de la route
Essayez d'utiliser n pour rétrograder la version de Node.js que vous avez installée
[Python] [Word] [python-docx] Essayez de créer un modèle de phrase de mot en Python en utilisant python-docx
Ce que les utilisateurs de Java ont pensé d'utiliser le langage Go pendant une journée