[PYTHON] KI-Anfänger versuchen, professionelle Studenten Bot zu machen

Dieser Artikel ist der Artikel zum 10. Tag des Professional Student Advent Calendar 2016: Lachen:

Einführung

Erstens ist es heikel, ob dies KI ist oder nicht, daher besteht die Möglichkeit, dass der Titel falsch ist ... Ich habe versucht, einen professionellen Studenten-ChatBot zu erstellen, indem ich die Bemerkungen von Twitter eines professionellen Studenten gesammelt habe. ↓ Wenn Sie so etwas auf Slack sagen, wird ein professioneller Student antworten.

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

Hintergrund

Inhouse Slack hat einen Bot-Kanal für einen bestimmten Blogger erstellt. Wenn Sie danach fragen, können Sie sagen, dass Sie ChatBot über Twitter erstellen. Es bleibt nichts anderes übrig, als Chatbot von Twitter eines professionellen Studenten zu machen! Deshalb habe ich angefangen, es zu machen.

Versuchen Sie zu machen

Es scheint ungefähr, dass Sie es mit dem folgenden Fluss schaffen können.

  1. Verwenden Sie den Twitter-Crawler, um Ihre Anmerkungen in einer Datenbank zusammenzufassen
  2. Lassen Sie ElasticSearch die DB-Daten essen
  3. Übergeben Sie die Anweisung mit SlackBot in Python an Elastic Search und spucken Sie den zurückgegebenen Text aus

Ich habe gerade die Quelle verwendet, die mein Kollege so gemacht hat, wie sie ist, deshalb werde ich diesmal in Skip ausführlich erklären. .. .. : Schweißtropfen:

Vorbereitung

Ich möchte Elastic Search nicht auf meinem Computer ausführen, daher starte ich dieses Mal CentOS mit Vagrant und führe es dort aus.

Vagabundpräparat (CentOS)

cd <Passendes Verzeichnis>
mkdir pronama-chan-bot && cd $_
vagrant init <CentOS Box Dateiname>
vagrant up
vagrant ssh
sudo yum update -y

Danach arbeiten Sie in CentOS von ↑

Java-Installation

Es scheint, dass Java erforderlich ist, um das später beschriebene "analysis-kuromoji" zu installieren. Installieren Sie es also

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

Installieren Sie Elastic Search

* Was ist elastische Suche?

Volltextsuchmaschine von Elastic (ein Mechanismus zum Durchsuchen von Dokumentdaten einschließlich des Zielworts aus einer großen Menge von Dokumentdaten)

Installation unter Bezugnahme auf hier

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 des Elastic Search-Plug-Ins

#Installieren Sie kuromoji für die Volltextsuche auf Japanisch
sudo /usr/share/elasticsearch/bin/plugin install analysis-kuromoji

#Eine erweiterte Version des ipa-Wörterbuchs namens neologd? Installieren Sie, weil es Toyara verwendet
sudo /usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-kuromoji-neologd/2.4.1

#Ein Plug-In, mit dem Sie die Ergebnisse in einem Webbrowser anzeigen können
sudo /usr/share/elasticsearch/bin/plugin install polyfractal/elasticsearch-inquisitor

#Ein Plug-In, das die elastische Suche überwachen kann
sudo /usr/share/elasticsearch/bin/plugin install royrusso/elasticsearch-HQ
  • Die Erklärung für jedes Plug-In wurde von Google geschrieben, daher kann es falsch sein, m (_ _) m

Einstellungen für die elastische Suche

sudo vi /etc/elasticsearch/elasticsearch.yml

Geändert wie folgt

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

Starteinstellungen

sudo chkconfig elasticsearch on
sudo service elasticsearch start

Python-Installation (benutze 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

Führen Sie Twitter Crawler aus

Verwenden Sie die Twitter-API-Bibliothek von Python mit dem Namen tweepy, um die vergangene Zeitleiste abzurufen und in der Datenbank zu speichern.

Ungefähres Bild.py


#Twitter API-Einstellungen
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

#Erfassung von TL (führen Sie die folgenden Schritte aus, bis alle TLs erfasst werden können)
statuses = api.user_timeline('pronama', max_id = None, count = 200)

#Verarbeiten Sie die erfassten Daten für den DB-Speicher
#Kürzung

#Speichern Sie die erfasste TL in der DB
#Kürzung

Feed Elastic Durchsucht die Datenbank der Crawlergebnisse

Vorlageneinstellungen?

OK, wenn Sie den JSON-Satz in localhost: 9200 / _template / <template_name> einfügen Der Indexname wird in "Vorlage" und "Kuromoji" in "Tokenizer" festgelegt. Ich bin mir noch nicht sicher, also werde ich später nachforschen (Flagge nicht zu)

Index einmal löschen

LÖSCHEN localhost: 9200 / <Indexname> und es ist OK

Speichern Sie die aus der Datenbank gezogenen Daten einmal in json

Konvertieren Sie DB-Daten mit Python in json

Masseneinfügung von JSON-Daten

POST mit localhost: 9200 / <Indexname> / language / _bulk --data-binary <json-Daten>

Die elastische Suche selbst sollte bisher funktionieren. Drücken Sie daher den folgenden Befehl und prüfen Sie, ob das Ergebnis zurückgegeben wird.

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

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

Yay! !! Aus irgendeinem Grund lautet die Antwort von "Yaho" "Ich habe es geschafft!", Aber es scheint zu funktionieren!

SlackBot-Einstellungen

Jetzt richten wir dies als SlackBot ein.

Registrieren Sie den Bot-Benutzer in Slack

Registrieren Sie den Bot-Benutzer unter [Konfiguration hinzufügen] unter hier. Geben Sie jeden Artikel entsprechend ein. Registrieren Sie sich diesmal mit dem Namen "@pronama_chan".

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

Vergessen Sie nicht, das auf dem nächsten Bildschirm angezeigte "API-Token" zu notieren.

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

Erstellen Sie einen Bot-Kanal in Slack

Erstellen Sie einen Kanal aus Slack. スクリーンショット 2016-12-08 13.48.20.png

Vergessen Sie nicht, das in ↑ erstellte @ pronama_chan einzuladen.

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

Erstellen Sie SlackBot

Erstellen Sie einen Slack Bot mit der Python-Bibliothek slackbot.

Dies ist auch ein grobes Bild.py


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

bot_response(userid, word):
    #POST zur elastischen Suche
    response = requests.post(
        'http://{}/{}/_search'.format(hostname, index_name),
        <JSON-Zeichenfolge, die in die aus dem Wort generierte elastische Suche geworfen werden soll>.encode('utf-8'))

    #Von dem, was gepostet wurde
    return <Extrahierter Zeichenkettenschlag aus Antwort>

@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()

Versuchte es zu schaffen

Versuchen Sie, von Slack zu werfen

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

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

Schließlich

Ich bin ein Anfänger in KI in einem Webshop, aber ich habe es geschafft, einen professionellen Studenten-Chatbot zu machen. Es macht Spaß, ist aber anstrengend, Techniken zu verwenden, die Sie normalerweise nicht verwenden. .. ..

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

Gut!

Recommended Posts

KI-Anfänger versuchen, professionelle Studenten Bot zu machen
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ①
Machen wir einen Jupyter-Kernel
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ②
Versuchen Sie etwas wie C # LINQ zu machen
Ich überarbeitete "Ich habe versucht, Othello AI zu machen, als Programmieranfänger Python studierten"
Wie man ein Dialogsystem für Anfänger erstellt
So erstellen Sie ein Spigot-Plug-In (für Java-Anfänger)
Versuchen Sie, den Farbzyklus von Matplotlib gut aussehen zu lassen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Ich habe versucht, KI für Smash Bra zu machen
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Wie man Python für Anfänger schneller macht [numpy]
Versuchen Sie, Client-FTP mit Pythonista am schnellsten zu machen
Anfänger versuchen mit Django + React + Bootstrap (1) eine Online-Webanwendung für Othello zu erstellen.
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Anfänger versuchen, Word-Dateien sofort in PDF zu konvertieren
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen