[PYTHON] Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).

Présentation Je ne peux pas faire confiance au contenu du site de bouche à oreille. J'ai pensé que ce serait intéressant si je pouvais juger de l'authenticité du contenu publié par l'apprentissage automatique. Utilisez l'API Google Prediction pour déterminer l'authenticité de votre message.

Prérequis ・ Enregistré sur Google Cloud Platform (disponible gratuitement dans un premier temps) -Création d'un projet Cloud Platform Console (obtention d'un ID de projet) -Vous avez activé Prediction et Google Cloud Storage API pour votre projet. ・ Création de seau -Téléchargez les données d'entraînement sur Cloud Storage. ・ Définir le nom du modèle -Obtenir le fichier d'authentification API (client_secrets.json) ↓ Si vous le regardez une fois à l'aide de l'API Google Prediction, vous pouvez voir l'image entière. https://cloud.google.com/prediction/docs/quickstart?hl=ja

Diagramme de séquence

Capture d'écran 2017-05-20 13.05.20.png

prediction_service.commande d'exécution py:
python prediction_service.py "k_prediction/language.txt" "language-identifier" "Projet<img width="841" alt="Capture d'écran 2017-05-20 13.05.20.png " src="https://qiita-image-store.s3.amazonaws.com/0/95254/cc3adb89-1330-77e9-bf2a-f32fa94f5b55.png ">
ID"

Exécuter le traitement par lots (prediction_service.py) ``` #Fichier: prédiction_service.py

#!/usr/bin/env python

-- coding: utf-8 --

Copyright 2014 Google Inc. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

"""Simple command-line sample for the Google Prediction API Command-line application that trains on your input data. This sample does the same thing as the Hello Prediction! example. You might want to run the setup.sh script to load the sample data to Google Storage. Usage: $ python prediction_service.py "bucket/object" "model_id" "project_id" "my-xxxxx.json" You can also get help on all the command-line flags the program understands by running: $ python prediction_service.py --help To get detailed log output run: $ python prediction_service.py --logging_level=DEBUG """ from future import print_function

author = ('[email protected] (Joe Gregorio), ' '[email protected] (Marc Cohen)')

import argparse import os from pprint import pprint as pp import sys import time import MySQLdb

sys.path.append( os.path.join(os.path.dirname(os.path.realpath(file)), 'lib') )

import httplib2 from apiclient import discovery from apiclient import sample_tools from oauth2client import client from oauth2client.service_account import ServiceAccountCredentials from googleapiclient import discovery from oauth2client import tools

Time to wait (in seconds) between successive checks of training status.

SLEEP_TIME = 10 scopes=['https://www.googleapis.com/auth/prediction','https://www.googleapis.com/auth/devstorage.read_only']


 → 1. Définir les informations d'authentification

#Declare command-line flags. argparser = argparse.ArgumentParser(add_help=False) argparser.add_argument('object_name', help='Nom du godet/hoge.txt(Données d'entraînement)') argparser.add_argument('model_id', help='ID de modèle') argparser.add_argument('project_id', help='ID du projet') argparser.add_argument('credential', help='client_secrets.json')

def print_header(line): '''Format and print header block sized to length of line''' header_str = '=' header_line = header_str * len(line) print('\n' + header_line) print(line) print(header_line)

def main(argv):

create flags

parents=[argparser] parent_parsers = [tools.argparser] parent_parsers.extend(parents) parser = argparse.ArgumentParser( description=doc, formatter_class=argparse.RawDescriptionHelpFormatter, parents=parent_parsers) flags = parser.parse_args(argv[1:]) credential_file = os.path.join(os.path.dirname(os.path.realpath(file)), flags.credential) credentials = ServiceAccountCredentials.from_json_keyfile_name( credential_file, scopes=scopes)

http = credentials.authorize(http = httplib2.Http()) service = discovery.build('prediction', 'v1.6', http=http)

 → 2. Accédez à l'API Google Prediction

try: # Get access to the Prediction API. papi = service.trainedmodels()

→ 3. List models.

# List models.
print_header('Fetching list of first ten models')
result = papi.list(maxResults=10, project=flags.project_id).execute()
print('List results:')
pp(result)
→ 4. Start training request on a data set.

# Start training request on a data set.
print_header('Submitting model training request')
body = {'id': flags.model_id, 'storageDataLocation': flags.object_name}
start = papi.insert(body=body, project=flags.project_id).execute()
print('Training results:')
pp(start)
→ 5. wait for the training to complete.

# Wait for the training to complete.
print_header('Waiting for training to complete')
while True:
  status = papi.get(id=flags.model_id, project=flags.project_id).execute()
  state = status['trainingStatus']
  print('Training state: ' + state)
  if state == 'DONE':
    break
  elif state == 'RUNNING':
    time.sleep(SLEEP_TIME)
    continue
  else:
    raise Exception('Training Error: ' + state)

  # Job has completed.
  print('Training completed:')
  pp(status)
  break
→ 6. Describe model

# Describe model.
print_header('Fetching model description')
result = papi.analyze(id=flags.model_id, project=flags.project_id).execute()
print('Analyze results:')
pp(result)
 → 7. Récupérez les données à prédire de la base de données

#Appel DB
print('================')
print('Obtenez les données à prédire à partir de la base de données')
print('================')

if __name__ == "__main__":

  connector = MySQLdb.connect(host="??????", db="??????", user="??????", passwd="??????", charset="utf8")
  cursor = connector.cursor()

  sql = "SELECT id,message FROM `posts` WHERE id = (select MAX(id) from posts)"
  cursor.execute(sql)
  records = cursor.fetchall()
  for record in records:
      print (record[0])
      record_id=record[0]
      record_1=record[1].encode('utf-8')
  cursor.close()
  connector.close()
  #tst

# Make some predictions using the newly trained model.
print_header('Making some predictions')
for sample_text in [record_1]:
  body = {'input': {'csvInstance': [sample_text]}}
  result = papi.predict(
    body=body, id=flags.model_id, project=flags.project_id).execute()
  print('Prediction results for "%s"...' % sample_text)
  pp(result)

  import json
  array = json.dumps(result)
  data=json.loads(array)
  data2 = data['outputMulti']
  print(data2)
 → 8. Afficher les données de réponse de l'API

  print('================')
  print('Afficher les données de réponse de l'API')
  print('================')
  print(data2[0]['label'])
  print(data2[0]['score'])
  print(data2[1]['label'])
  print(data2[1]['score'])
  data_score=float(data2[0]['score'])-float(data2[1]['score'])
 → 9. Juger les données de réponse de l'API

  print('================')
  print('Juger les données de réponse de l'API')
  print('================') 
  if data_score > 0 :
    pacentage=float(data2[0]['score'])*100
        print( "Ce message est'"+str(pacentage)+"%''true'est.")
        evaluate = data2[0]['label']
    score = data2[0]['score']
  else: 
    pacentage=float(data2[1]['score'])*100
    print( "Ce message est'"+str(pacentage)+"%''false'est.") 
        evaluate = data2[1]['label']
        score = data2[1]['score']
        print(record_id)
   #Appel DB
 → 10. Refléter le résultat dans la base de données

print('================')
print('Refléter le résultat dans la base de données')
print('================')

if __name__ == "__main__":
  connector = MySQLdb.connect(host="?????", db="?????", user="?????", passwd="?????", charset="utf8")
  cursor = connector.cursor()
  cursor.execute('UPDATE posts SET evaluate  = (%s) WHERE id = (%s)',([evaluate],record_id))
  cursor.execute('UPDATE posts SET score  = (%s) WHERE id = (%s)',([score],record_id))
  connector.commit()
  connector.close()

if name == 'main': main(sys.argv)


 → 11. Refléter le résultat du jugement enregistré dans le DB dans l'article nouvellement publié par l'application WEB.

 Site de référence
https://github.com/google/google-api-python-client/tree/master/samples/prediction

 <h2> Préparation </ h2>
 -Création d'un projet Cloud Platform Console (obtention d'un ID de projet)
 -Vous avez activé Prediction et Google Cloud Storage API pour votre projet.
 ・ Création de seau
 -Téléchargez les données d'entraînement sur Cloud Storage.
 ・ Définir le nom du modèle
 -Obtenir le fichier d'authentification API (client_secrets.json)
https://cloud.google.com/prediction/docs/quickstart?hl=ja

 <h3> Comment obtenir client_secrets.json </ h3>
 J'ai utilisé c pour faire l'authentification API.
 Je décrirai brièvement la procédure de création de client_secrets.json.

 procédure
 → Enregistrez le projet sur la Google Developer Console
 → Activez l'API Google Agenda depuis "API et authentification" → "API" à gauche
 → Depuis «API et authentification» → «Identifiants» à gauche, appuyez sur «Créer un nouvel ID client» → «Applications installées (autres)» «Télécharger JSON» et enregistrez-le sous client_secrets.json

Nom de fichier: client_secrets.json

{ "web": { "client_id": "?????", "client_secret": "?????", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }

 <h3> Créer des données d'entraînement </ h3>
 Que sont les données d'entraînement?
 Ce sont les données qui sont à la base du jugement par l'apprentissage automatique.
 En expliquant les données de formation, je vais expliquer brièvement l'apprentissage des opportunités.
 Il existe à peu près deux types de problèmes traités par l'apprentissage automatique: «l'apprentissage supervisé» et «l'apprentissage non supervisé».
 L'API Google Prediction est l'ancien apprentissage supervisé.
 Dans l'apprentissage supervisé, le but est de prédire correctement la sortie (invisible) des données d'entrée (visibles) données. Cependant, la machine ne sait pas quoi sortir même si l'entrée n'est qu'une entrée.
 Par conséquent, plusieurs cas de paires d'entrée / sortie appelées données de formation (ou données d'enseignant) sont donnés.
 En d'autres termes, demandez aux humains de donner des exemples que si vous pouvez mettre cela, éteignez-le.
 Sur cette base, le but est de créer une machine (= fonction) qui produit la sortie correcte lorsque de nouvelles données d'entrée arrivent.
 Bien sûr, si vous obtenez exactement la même entrée que vous avez vue jusqu'à présent, il semble suffisant de sélectionner les données d'entraînement avec la même entrée et de les sortir, mais elles sont moyennes. Certaines données d'entrée n'apparaissent pas dans les données d'entraînement dont vous disposez.
 Pour de telles données, il s'agit d'un apprentissage supervisé pour concevoir une procédure d'apprentissage (algorithme d'apprentissage) qui généralise des données d'apprentissage données et maximise la capacité de traiter des données de sortie inconnue. C'est le thème principal.

 <h3> Données d'entraînement </ h3>
 Comme expliqué ci-dessus, ces données sont un ensemble d'exemples de paires d'entrée / sortie.
 Il renvoie true lorsque le caractère hoge est entré et false lorsque le caractère hoge_false est entré.

train.txt

"true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false"


 <h2> Construction de l'environnement </ h2>
 Décrit les informations nécessaires pour créer un environnement de développement
 <h3> Environnement Python </ h3>

yum install mysql-server mysql mysql-devel

chkconfig mysqld on

chkconfig --list | grep mysql

service mysqld start

exit #<= ec2-Retour à l'utilisateur

 <h3> Installez les outils nécessaires (tels que gcc) avant d'installer MySQL-python </ h3>

$ sudo yum groupinstall "Development Tools"​ Si ça ne marche pas $sudo yum install gcc  MySQL-installation de python: ​ $ pip install MySQL-python


 <h3> Vérifier avec le script de connexion MySQL </ h3>

file name : test_connection_mysql.py

import _mysql import sys from pprint import pprint as pp ​ try: con = _mysql.connect('localhost', 'root', 'root', 'prediction_dev') #Modifier ici help(con) except _mysql.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) finally: if con: con.close()

$ python test_connection_mysql.py <_mysql.connection open to 'localhost' at 265f940>

Vous pouvez vous connecter sans aucune erreur.

 Ceci termine la construction de l'environnement pour l'apprentissage automatique avec Python.


Recommended Posts

Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
[Python] Totale automatiquement le nombre total d'articles publiés par Qiita à l'aide de l'API
Écoutez de la musique en accédant à l'API non officielle de Google Play Music
Prédire la présence ou l'absence d'infidélité par l'apprentissage automatique
Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique
Résumé des articles publiés jusqu'à présent (statistiques / apprentissage automatique / mathématiques, etc.)
Obtenez le nombre de PV d'articles Qiita que vous avez publiés avec l'API
[API Qiita] [Statistiques • Apprentissage automatique] J'ai essayé de résumer et d'analyser les articles publiés jusqu'à présent.
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
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
À propos du contenu de développement de l'apprentissage automatique (exemple)
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
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
Estimation raisonnable du prix de Mercari par apprentissage automatique
Classification des images de guitare par apprentissage automatique, partie 2
Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
Impressions d'avoir obtenu le nano-diplôme Udacity Machine Learning Engineer
Installation de TensorFlow, une bibliothèque d'apprentissage automatique de Google
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Prédiction de données chronologiques par AutoML (apprentissage automatique automatique)
Résumé du flux de base de l'apprentissage automatique avec Python
Bilan du premier défi du machine learning avec Keras
[Python] Obtenez le nombre de vues de tous les articles publiés
À en juger par l'image du chien Shiba en apprenant en profondeur si c'est mon enfant (1)
Une méthode concrète pour prédire les courses de chevaux et simuler le taux de récupération par apprentissage automatique
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
À propos de l'événement de changement de caméra de l'API Google Maps Android
[Balisage recommandé avec le machine learning # 1] Scraping d'articles de blog Hatena
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Enquête sur l'utilisation du machine learning dans les services réels
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Je veux déterminer l'authenticité d'un élément du tableau numpy
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
Bases de l'apprentissage automatique (mémoire)
Importance des ensembles de données d'apprentissage automatique
4 [/] Quatre arithmétiques par apprentissage automatique
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
[Apprentissage automatique] Vérifiez les performances du classificateur à l'aide de données de caractères manuscrites
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
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)
Comment l'API COTOHA juge-t-elle la sensation de "la lune est belle"?
Évaluer la précision du modèle d'apprentissage par test croisé de scikit learn
Essayez de prédire le triplet de la course de bateaux en classant l'apprentissage
Les débutants en Python utilisent l'API non officielle de Google Play Music pour jouer de la musique
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 1 Google Colaboratory - Validation et discrimination des données de comptage
Essayez de prédire la valeur de la jauge de niveau d'eau par apprentissage automatique en utilisant les données ouvertes de Data City Sabae