[PYTHON] Les débutants en IA essaient de faire des étudiants professionnels Bot

Cet article est l'article du 10e jour du Calendrier de l'Avent étudiant professionnel 2016: rire:

introduction

En premier lieu, il est délicat qu'il s'agisse d'IA ou non, il est donc possible que le titre soit erroné ... J'ai essayé de faire un ChatBot étudiant professionnel en collectant les remarques du Twitter d'étudiant professionnel. ↓ Si vous dites quelque chose comme ça sur Slack, un étudiant professionnel vous répondra.

スクリーンショット 2016-12-08 16.55.42.png

Contexte

En interne, Slack a créé un canal Bot pour un certain blogueur, et si vous le demandez, vous pouvez dire que vous créez ChatBot à partir de Twitter. Il n'y a pas d'autre choix que de créer Chatbot à partir du Twitter d'étudiant professionnel! C'est pourquoi j'ai commencé à le faire.

Essayer de faire

En gros, il semble que vous puissiez le faire avec le flux suivant.

  1. Utilisez le robot d'exploration Twitter pour résumer vos remarques dans une base de données
  2. Laissez ElasticSearch consommer les données de la base de données
  3. Transmettez l'instruction à Elastic Search avec SlackBot en Python et crachez le texte renvoyé

Je viens d'utiliser la source que mon collègue a faite telle quelle, donc je vais l'expliquer en détail cette fois dans Skip. .. .. : gouttes de sueur:

Préparation

Je ne veux pas exécuter Elastic Search sur ma machine, donc cette fois je vais démarrer CentOS avec Vagrant et l'exécuter là-bas.

Préparation Vagrant (CentOS)

cd <Annuaire approprié>
mkdir pronama-chan-bot && cd $_
vagrant init <Nom du fichier CentOS Box>
vagrant up
vagrant ssh
sudo yum update -y

Après cela, travaillez dans CentOS de ↑

Installation de Java

Il semble que Java soit nécessaire pour installer ʻanalysis-kuromoji` décrit plus tard, alors installez-le

sudo yum install -y wget
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm
sudo rpm -ivh jdk-8u65-linux-x64.rpm
java -version

Installer Elastic Search

* Qu'est-ce que la recherche élastique?

Moteur de recherche en texte intégral fourni par Elastic (un mécanisme de recherche de données de document, y compris le mot cible, à partir d'une grande quantité de données de document)

Installez en vous référant à ici

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elasticsearch.repo

/etc/yum.repos.d/elasticsearch.repo


[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
sudo yum install -y elasticsearch

Installation du plug-in Elastic Search

#Installez kuromoji pour une recherche en texte intégral en japonais
sudo /usr/share/elasticsearch/bin/plugin install analysis-kuromoji

#Une version étendue du dictionnaire ipa appelée neologd? Installer car il utilise Toyara
sudo /usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-kuromoji-neologd/2.4.1

#Un plug-in qui vous permet de visualiser les résultats dans un navigateur Web
sudo /usr/share/elasticsearch/bin/plugin install polyfractal/elasticsearch-inquisitor

#Un plug-in qui peut surveiller Elastic Search
sudo /usr/share/elasticsearch/bin/plugin install royrusso/elasticsearch-HQ
  • L'explication de chaque plug-in a été écrite par google, il se peut donc qu'elle soit erronée m (_ _) m

Paramètres de recherche élastique

sudo vi /etc/elasticsearch/elasticsearch.yml

Modifié comme suit

http.compression: true
network.publish_host: "0.0.0.0"
network.host: "0.0.0.0"
network.bind_host: "0.0.0.0"
transport.tcp.port: 9300
transport.tcp.compress: true
http.port: 9200

Paramètres de démarrage

sudo chkconfig elasticsearch on
sudo service elasticsearch start

Installation de Python (utilisez pyenv)

sudo yum install -y git
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
pyenv install anaconda3-4.1.1
pyenv rehash
pyenv global anaconda3-4.1.1
python --version

Exécutez Twitter Crawler

Utilisez la bibliothèque Python pour l'API Twitter appelée tweepy pour obtenir la chronologie passée et la sauvegarder dans la base de données.

Image approximative.py


#Paramètres de l'API Twitter
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

#Acquisition de TL (exécutez ce qui suit jusqu'à ce que tous les TL puissent être acquis)
statuses = api.user_timeline('pronama', max_id = None, count = 200)

#Traiter les données acquises pour le stockage DB
#réduction

#Enregistrer le TL acquis dans DB
#réduction

Alimenter Elastic Search dans la base de données des résultats d'exploration

paramètres du modèle?

OK si vous METTEZ le JSON défini dans localhost: 9200 / _template / <template_name> Le nom de l'index est défini dans template, et kuromoji est défini dans tokenizer. Je ne suis pas encore sûr de cela, donc j'enquêterai plus tard

Supprimer l'index une fois

SUPPRIMER localhost: 9200 / <index_name> et c'est OK

Enregistrez une fois les données extraites de la base de données dans json

Convertir les données DB en json à l'aide de Python

Bulk Insertion de données JSON

POST avec localhost: 9200 / <index_name> / speech / _bulk --data-binary <json data>

Elastic Search lui-même devrait fonctionner jusqu'à présent, alors appuyez sur la commande suivante et vérifiez si le résultat est renvoyé.

curl -XGET 'http://localhost:9200/<index_name>/_search?pretty' -d '
{
  "query": {
      "function_score": {
          "functions": [
              {
                  "random_score": {
                    "seed" : "999999999"
                  }
              }
          ], 
          "query": {
              "query_string": {
                  "query": "text.kuromoji:<Texte>^100 OR text.2gram:$<Texte>^10"
              }
          }, 
          "score_mode": "multiply"
      }
  }, 
  "size": 1, 
  "sort": {
      "_score": {
          "order": "desc"
      }
  }, 
  "track_scores": true
}
'

スクリーンショット 2016-12-08 19.41.22.png

Yay! !! Pour une raison quelconque, la réponse de "Yaho" est "Je l'ai fait!", Mais cela semble fonctionner!

Paramètres SlackBot

Maintenant, configurons cela comme un SlackBot.

Enregistrer l'utilisateur du bot dans Slack

Enregistrez l'utilisateur Bot depuis [Ajouter une configuration] sous ici. Saisissez chaque élément de manière appropriée. Cette fois, inscrivez-vous avec le nom "@pronama_chan".

スクリーンショット 2016-12-08 13.49.30.png

N'oubliez pas de noter le "jeton API" affiché sur l'écran suivant.

スクリーンショット 2016-12-08 13.50.09.png

Créer un canal de bot dans Slack

Créez une chaîne depuis Slack. スクリーンショット 2016-12-08 13.48.20.png

N'oubliez pas d'inviter le @ pronama_chan créé dans ↑.

スクリーンショット 2016-12-08 13.52.25.png

Créer SlackBot

Créez un robot Slack à l'aide de la bibliothèque [slackbot] de Python (https://github.com/lins05/slackbot).

C'est aussi une image approximative.py


from slackbot.bot import Bot
from slackbot.bot import respond_to,default_reply

bot_response(userid, word):
    #POST à Elastic Search
    response = requests.post(
        'http://{}/{}/_search'.format(hostname, index_name),
        <Chaîne JSON à envoyer à Elastic Search générée à partir de Word>.encode('utf-8'))

    #De ce qui a été publié
    return <Chaîne de caractères extraite de la réponse>

@respond_to('(.*)')
def chat(message, word):
    response = bot_response(message._get_user_id(), word)
    message.reply(response)

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    main()

J'ai essayé de le faire

Essayez de lancer depuis Slack

スクリーンショット 2016-12-08 16.55.42.png

Kita━━━ ヽ (∀ ゚) personnes (゚ ∀ ゚) personnes (゚ ∀) ノ ━━━ !!

finalement

Je suis un débutant en IA dans une boutique en ligne, mais j'ai réussi à faire un étudiant professionnel Chatbot. C'est amusant mais fatigant d'utiliser des techniques que vous n'utilisez pas normalement. .. ..

スクリーンショット 2016-12-08 20.20.36.png

Bien!

Recommended Posts

Les débutants en IA essaient de faire des étudiants professionnels Bot
Les débutants en apprentissage automatique essaient de créer un arbre de décision
J'ai essayé de faire un diagnostic de visage AI pour les golfeuses professionnelles ①
Faisons un noyau jupyter
J'ai essayé de faire un diagnostic de visage AI pour les golfeuses professionnelles ②
Essayez de créer quelque chose comme C # LINQ
J'ai refactoré "J'ai essayé de faire d'Othello AI lorsque les débutants en programmation ont étudié python"
Comment créer un système de dialogue dédié aux débutants
Comment créer un plug-in Spigot (pour les débutants Java)
Essayez de rendre le cycle de couleur de matplotlib bon
Essayez de créer un code de "décryptage" en Python
Essayez de calculer RPN avec Python (pour les débutants)
J'ai essayé de faire de l'IA pour Smash Bra
Essayez de créer un groupe de dièdre avec Python
Comment rendre le Python des débutants plus rapide [numpy]
Essayez de rendre le client FTP le plus rapide avec Pythonista
Les débutants essaient de créer une application Web de combat en ligne Othello avec Django + React + Bootstrap (1)
Essayez de créer un module Python en langage C
Les débutants essaient de convertir des fichiers Word en PDF à la fois
Faisons un outil de veille de commande avec python
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2