[PYTHON] Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique

introduction

L'autre jour, j'ai créé un programme qui prédit des comptes en utilisant les résultats de l'apprentissage automatique, mais il y avait une opinion que la réponse des résultats de prédiction était anormalement lente et inutilisable, alors j'ai essayé un peu d'ingéniosité.

Apprendre les données comptables et prédire les comptes à partir du contenu de la description lors de la saisie des journaux --Qiita

Mécanisme de réponse

J'ai décidé d'utiliser HTTP afin de me rendre compte facilement que le résultat d'apprentissage est stocké dans la mémoire et que le compte est renvoyé lorsque la description est envoyée.

J'ai donc créé un serveur HTTP avec Python, lu le résultat de l'apprentissage lorsque le serveur HTTP a été démarré, et lorsque j'ai envoyé le résumé avec GET, j'ai prédit et renvoyé le compte.

Construire un serveur HTTP avec Python

J'ai fait référence à l'article suivant.

Créez facilement un serveur HTTP avec Python-Qiita

Je l'utilise tel quel, mais il a été un peu corrigé car la bibliothèque appelée BaseHTTPServer a été modifiée et une erreur s'est produite dans le traitement japonais. Au fait, c'est Python3.

CallbackServer.py


#!/usr/local/bin/python
# coding: utf-8

import requests
import http.server
import socketserver
from http.server import BaseHTTPRequestHandler
from urllib.parse import urlparse, unquote

def start(port, callback):
    def handler(*args):
        CallbackServer(callback, *args)
    server = socketserver.TCPServer(('', int(port)), handler)
    server.serve_forever()

class CallbackServer(BaseHTTPRequestHandler):
    def __init__(self, callback, *args):
        self.callback = callback
        BaseHTTPRequestHandler.__init__(self, *args)

    def do_GET(self):
        parsed_path = urlparse(self.path)
        query = unquote(parsed_path.query)
        
        self.send_response(200)
        self.end_headers()
        
        result = self.callback(query)
        
        self.wfile.write(result.encode('utf-8'))
        
        return

Script de démarrage du serveur

Il lit le résultat d'apprentissage au démarrage et renvoie le résultat prédit par le rappel GET.

server.py


#!/usr/local/bin/python
# coding: utf-8

import sys
import CallbackServer

import pandas as pd
import numpy as np

homedir = "/home/scripts/"
filename = "data/code.csv"

df = pd.read_csv(homedir + filename, header=None)
df.index = df.pop(0)

df_rs = df.pop(1)

from sklearn.externals import joblib

scaler = joblib.load(homedir + 'data/scaler.pkl')
clf = joblib.load(homedir + 'data/clf.pkl')
vect = joblib.load(homedir + 'data/vect.pkl')

from janome.tokenizer import Tokenizer

t = Tokenizer()

def callback_method(query):
    texts = [
        query,
    ]

    notes = []
    for note in texts:
        tokens = t.tokenize(note)
        words = ""
        for token in tokens:
            words += " " + token.surface
        notes.append(words)
    
    X = vect.transform(notes)
    
    result = clf.predict(X)
    ans = ""

    for i in range(len(texts)):
        ans = df_rs.ix[result[i]]
        
    return ans

if __name__ == '__main__':
    port = sys.argv[1]
    CallbackServer.start(port, callback_method)

Commencez par la commande suivante.

python


$ chmod a+x server.py
$ ./server.py 8080 &

Test de fonctionnement

Obtenons le résultat de la prédiction en utilisant Ruby.

test.rb


require 'net/http'
require 'uri'

puts Net::HTTP.get_print('localhost', URI.escape('/?Frais d'utilisation de l'autoroute'), 8080)

Je le ferai.

python


$ ruby test.rb
Frais de déplacement transport

C'était fait (^ - ^)

Essayez de l'incorporer dans le bot LINE.

スクリーンショット 2017-03-11 7.33.33.png

Bon sentiment (^ - ^)

Veuillez vous référer à l'article suivant pour savoir comment créer un bot LINE.

Créer un BOT de réponse automatique avec l'API de messagerie de LINE

Au fait, vous pouvez vous faire des amis avec ce bot LINE avec le code QR suivant.

2e099ea3-2a40-49b9-ca84-431c809cf153.png

Que devrais-je faire ensuite?

Recommended Posts

Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
[Apprentissage automatique] Comprenez à partir des mathématiques que la normalisation se traduit par une moyenne de 0 et un écart type de 1.
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
À propos du contenu de développement de l'apprentissage automatique (exemple)
Installation de TensorFlow, une bibliothèque d'apprentissage automatique de Google
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
Introduction à l'apprentissage automatique à partir de Simple Perceptron
Code simple qui donne un score de 0,81339 dans Kaggle's Titanic: Machine Learning from Disaster
Créez un bot qui ne renvoie que le résultat de l'analyse morphologique avec MeCab avec Discord
Une bibliothèque qui surveille la vie et la mort d'autres machines en envoyant un ping à partir de Python
Django renvoie le contenu du fichier sous forme de réponse HTTP
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Une méthode concrète pour prédire les courses de chevaux et simuler le taux de récupération par apprentissage automatique
Prédire la présence ou l'absence d'infidélité par l'apprentissage automatique
Procédure de génération et d'enregistrement d'un modèle d'apprentissage par machine learning, en faisant un serveur API et en communiquant avec JSON depuis un navigateur
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
Créer une API qui renvoie les données d'un modèle à l'aide de turicreate
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 4)
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)
Évaluer la précision du modèle d'apprentissage par test croisé de scikit learn
Prédiction des données en un clic pour le champ réalisée par apprentissage automatique entièrement automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
D'un livre qui apprend de manière intéressante la façon de penser du programmeur (Python)
Notes d'apprentissage depuis le début de Python 1
Un simple serveur simulé qui incorpore simplement l'en-tête de la requête HTTP dans le corps de la réponse et le renvoie.
(Mis à jour de temps en temps) Résumé des API d'apprentissage automatique qui vous permettent de créer rapidement des applications par Team AI
Notes d'apprentissage depuis le début de Python 2
Un article qui essaie juste une petite requête HTTP avec la commande curl
Version gratuite de DataRobot! ?? Introduction à «PyCaret», une bibliothèque qui automatise l'apprentissage automatique
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
Prédiction des courses de chevaux: Si vous pensez que le taux de récupération a dépassé 100% en machine learning (LightGBM), c'est une histoire
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
Un ensemble d'entiers qui satisfait ax + by = 1.
Classification des images de guitare par apprentissage automatique Partie 1
Liste des liens que les débutants en apprentissage automatique apprennent
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Analyse de l'utilisation de l'espace partagé par l'apprentissage automatique
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Estimation raisonnable du prix de Mercari par apprentissage automatique
Classification des images de guitare par apprentissage automatique, partie 2
Touchons une partie de l'apprentissage automatique avec Python
Extrait uniquement complet du résultat de Trinity
Histoire de l'analyse de données par apprentissage automatique
Un moyen simple de mesurer la vitesse de traitement d'un disque reconnu par Linux
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Prédire le temps objectif d'un marathon complet avec l'apprentissage automatique-③: j'ai essayé de visualiser les données avec Python-
[CodeIQ] J'ai écrit la distribution de probabilité des dés (du cours de mathématiques CodeIQ pour l'apprentissage automatique [Distribution de probabilités])
[Ansible] Exemple de playbook qui ajoute une chaîne de caractères à la première ligne du fichier
Qu'est-ce qu'une décision rationnelle qui maximise les chances de rencontrer une «maison idéale»?
[Go] Créez un outil qui renvoie la valeur de course du Pokémon reçu de l'entrée standard
Un mémo qui détecte le visage de l'image acquise à partir de la caméra Web avec OpenCV de Django et le renvoie.
Article qui vous aidera à comprendre un peu l'algorithme de collision de sphères rigides
J'ai créé une application Twitter qui identifie et enregistre l'image d'un personnage spécifique sur la chronologie de Twitter par pytorch transfer learning
La fin des débutants en programmation (mon patron) qui ont écrit le code motivé par les résultats qui apportent la programmation, pas d'un point de vue technique