[PYTHON] Eine Einführung in maschinelles Lernen für Bot-Entwickler

Einführung

2016 war ein Jahr, in dem Bots viel Aufmerksamkeit erhielten. Es war auch ein Jahr, in dem aufgrund des bemerkenswerten technologischen Fortschritts im Zusammenhang mit maschinellem Lernen nacheinander neue Möglichkeiten eröffnet wurden.

Wenn Sie diesen Artikel lesen, möchten Sie wahrscheinlich einen Bot entwickeln, der maschinelles Lernen verwendet. "Aber ich weiß nicht was ich tun soll" Dieser Artikel ist für solche Leser gedacht.

Verwendung und Verwendung von maschinellem Lernen

Ich denke, es gibt zwei Hauptanwendungen für maschinelles Lernen. Eine ist die "Interaktion zwischen dem Benutzer und dem Bot" und die andere ist der "dem Benutzer bereitgestellte Dienst".

Ersteres ermöglicht es Ihnen, durch natürliches Schreiben mit dem Benutzer zu interagieren. Es wäre realistisch, hier einen vorhandenen Dienst wie Microsoft LUIS zu verwenden. Das Folgende ist eine gute Zusammenfassung der anderen Dienste als LUIS.

Zusammenfassung der Konversations-APIs, -Bibliotheken und -Dienste, die mit BOT verwendet werden können

Als nächstes über den Teil "Dienste für Benutzer bereitgestellt". Ich denke, dies kann weiter in die folgenden zwei unterteilt werden.

Teil 1. Verwenden Sie Dienste und APIs, die im Allgemeinen bereitgestellt werden

(Hauptsächlich) API-Sammlung unter Verwendung der Ergebnisse des Deep Learning (für mich)

Wenn Sie die im obigen Artikel vorgestellte API usw. verwenden, können Sie die neuesten Ergebnisse des maschinellen Lernens sehr einfach verwenden. Der zu beachtende Punkt ist, dass Sie ähnliche Bots erhalten, wenn Sie die API einfach so verwenden, wie sie ist.

Teil 2. Verwenden Sie ein Framework für maschinelles Lernen

Die andere Möglichkeit besteht darin, Code mithilfe eines Frameworks für maschinelles Lernen zu schreiben. Darüber hinaus handelt es sich um einen Lernansatz mit eigenen Daten und Ressourcen (z. B. GPU). Die Hürden werden sofort steigen, aber ich denke, es ist ein unvermeidlicher Teil, wenn Sie höchst originelle Dienstleistungen erbringen möchten.

Lassen Sie uns nun einen Bot entwickeln, der mithilfe von maschinellem Lernen einen einzigartigen Service bietet!

Rahmenauswahl

Bevor Sie mit der Implementierung beginnen, wählen Sie das Framework für maschinelles Lernen aus, das diese Zeit verwendet werden soll.

Hitch Hike Guide für Deep Learning Framework

Am beliebtesten ist Tensorflow, aber seine Low-Level-API (bedeutet das nicht schlechte Leistung?) Kann für Anfänger eine Herausforderung sein. Dieses Mal möchte ich [Keras] auswählen (https://keras.io/ja/). Da es sich um eine API auf hoher Ebene handelt, hat dies den Vorteil, dass die Beschreibung einfach und leicht verständlich ist.

Wählen Sie außerdem ein Framework, das den Bot implementiert.

Wie Sie dem obigen Artikel entnehmen können, sind die meisten verwendeten Sprachen Python. Wird Node.js andererseits häufig zum Implementieren von Bots verwendet? Wahrscheinlich besteht die allgemeine Möglichkeit, diese Nichtübereinstimmung zu beseitigen, darin, "jede einzeln zu implementieren und über die API zu verwenden", aber dieses Mal möchte ich den Bot in Python schreiben, um die Implementierung zu vereinfachen. Das verwendete Framework ist python-rtmbot.

Was soll ich machen?

Wenn Sie einen Bot entwickeln möchten, der Ihren eigenen Service mithilfe von maschinellem Lernen bereitstellt, müssen Sie die folgenden drei Dinge sehr grob ausführen.

  1. Erstellen Sie ein Lernmodell
  2. Bereiten Sie die Daten vor und trainieren Sie das Modell
  3. Prozess mit dem trainierten Modell

Die meisten Tutorials zum Framework für maschinelles Lernen führen nur ein oder zwei der oben genannten Aufgaben aus.

Grundsätzlich reicht es aus, das Modell einmal zu bauen und zu trainieren. Natürlich ist es eine Voraussetzung, dass die Vorhersage ausreichend genau ist. Danach besteht der allgemeine Ablauf darin, die Modellstruktur und die Trainingsergebnisse (Parameter) in eine Datei zu schreiben und zur Laufzeit zu lesen (= 3).

Modellbau, Lernen

Wie oben erwähnt, gibt es zahlreiche Tutorials und Beispiele zum Erstellen und Lernen des Modells. Dieses Mal werden wir also die vorhandenen verwenden.

Versuchen Sie es mit Keras Callback (Modell speichern, wiederherstellen / TensorBoard exportieren / vorzeitig stoppen) Verwenden Sie diese Option, um einen Bot zu erstellen, der "den Wert der Sünde beim Sprechen zurückgibt". Es ist nicht praktisch, aber es sollte eine gute Probe sein.

Außerdem wurde dieser Codesatz auf Github (fullkawa / ml-bot-sample) hochgeladen. Danach werde ich nur die notwendigen Teile von hier erklären.

Zuerst "train.py", aber dies ist nur eine Zusammenfassung der Quelle des Referenzartikels. Es wird sein.

Der Punkt ist die 73. Linie

train.py


cp_cb = ModelCheckpoint(filepath = fpath, monitor='val_loss', verbose=1, save_best_only=True, mode='auto')

Und die Zeilen 78-80

train.py


json_string = model.to_json()
#open(os.path.join(f_model,'./tensorlog/rnn_model.json'), 'w').write(json_string)
open(os.path.join('./tensorlog/rnn_model.json'), 'w').write(json_string)

ist. Ersteres schreibt die Trainingsergebnisse (Parameter) und letzteres schreibt die Modellstruktur in eine Datei. Im Quellartikel erfahren Sie, was Sie an anderer Stelle tun.

Führen Sie python train.py einmal aus, bevor Sie den Bot bewegen.

112-233:ml-bot-sample y.furukawa$ python train.py
Using TensorFlow backend.
____________________________________________________________________________________________________
Layer (type) Output ShapeParam # Connected to
====================================================================================================
lstm_1 (LSTM)(None, 300) 362400lstm_input_1[0][0]
____________________________________________________________________________________________________

dense_1 (Dense)(None, 1) 301 lstm_1[0][0]
____________________________________________________________________________________________________
activation_1 (Activation)(None, 1) 0 dense_1[0][0]
====================================================================================================
Total params: 362701
____________________________________________________________________________________________________
Train on 3325 samples, validate on 176 samples
Epoch 1/10
3000/3325 [==========================>...] - ETA: 4s - loss: 0.2627 - acc: 0.0000e+00 Epoch 00000: val_loss improved from inf to 0.19250, saving model to ./tensorlog/weights.00-0.24-0.19.hdf5
3325/3325 [==============================] - 49s - loss: 0.2408 - acc: 3.0075e-04 - val_loss: 0.1925 - val_acc: 0.0000e+00
Epoch 2/10
3000/3325 [==========================>...] - ETA: 4s - loss: 0.0456 - acc: 3.3333e-04 Epoch 00001: val_loss improved from 0.19250 to 0.00085, saving model to ./tensorlog/weights.01-0.04-0.00.hdf5
3325/3325 [==============================] - 48s - loss: 0.0412 - acc: 3.0075e-04 - val_loss: 8.4748e-04 - val_acc: 0.0000e+00
Epoch 3/10
3000/3325 [==========================>...] - ETA: 4s - loss: 0.0015 - acc: 3.3333e-04 Epoch 00002: val_loss did not improve
3325/3325 [==============================] - 47s - loss: 0.0024 - acc: 3.0075e-04 - val_loss: 0.0228 - val_acc: 0.0000e+00
Epoch 4/10
3000/3325 [==========================>...] - ETA: 4s - loss: 0.0189 - acc: 3.3333e-04 Epoch 00003: val_loss did not improve
3325/3325 [==============================] - 46s - loss: 0.0177 - acc: 3.0075e-04 - val_loss: 0.0055 - val_acc: 0.0000e+00
Epoch 5/10
3000/3325 [==========================>...] - ETA: 4s - loss: 0.0089 - acc: 3.3333e-04 Epoch 00004: val_loss did not improve
3325/3325 [==============================] - 47s - loss: 0.0095 - acc: 3.0075e-04 - val_loss: 0.0163 - val_acc: 0.0000e+00
Epoch 00004: early stopping

In diesem Fall ist die von Epock 2/10 ausgegebene "weight.01-0.04-0.00.hdf5" am genauesten (val_loss: 8.4748e-04 --val_acc: 0.0000e + 00) und danach eher schlechter. Ich werde.

Bot-Implementierung

Als nächstes kommt das Bot-Programm. Dies (plugins / sin.py) ist diesmal das Hauptgericht.

plugins/sin.py


model_json = open('tensorlog/rnn_model.json', 'r').read()
model = model_from_json(model_json)

Laden Sie die Modellstruktur,

plugins/sin.py


files = glob.glob('tensorlog/weights.*.hdf5')
model.load_weights(files[-1])

Lesen Sie das Lernergebnis (Parameter). Die Datei mit der größten Zahl = dem genauesten gelernten Parameter wird gelesen.

Allein damit

plugins/sin.py


predicted = self.model.predict(X, batch_size=1)

Sie können den Sündenwert so erhalten. Davor

plugins/sin.py


X = np.zeros((1,100,1))
for i in range(0, 100):
  X[0, i, 0] = i #In diesem Beispiel behoben

Ist kein besonders wichtiger Teil, nur die Daten für die Berechnung des Sinuswertes vorzubereiten. Die Notwendigkeit, die Größe des Arrays anzupassen, ist jedoch mühsam.

Ausführungsergebnis

112-233:ml-bot-sample y.furukawa$ rtmbot
Using TensorFlow backend.
Model loaded.
Weights loaded from tensorlog/weights.01-0.04-0.00.hdf5
READY!

Diesmal heißt der Bot "stag.feec". Ich werde mit dir reden.

Slackキャプチャ

Ich konnte den Wert der Sünde sicher zurückgeben!

Recommended Posts

Eine Einführung in maschinelles Lernen für Bot-Entwickler
Eine Einführung in OpenCV für maschinelles Lernen
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in das maschinelle Lernen
Einführung in das maschinelle Lernen
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Super Einführung in das maschinelle Lernen
Einführung in das maschinelle Lernen mit Simple Perceptron
Einführung in das maschinelle Lernen Schreiben von Notizen
Eine Einführung in Mercurial für Nicht-Ingenieure
Einführung in die Bibliothek für maschinelles Lernen SHOGUN
Erste Schritte mit Python für Nicht-Ingenieure
Einführung in das maschinelle Lernen: Funktionsweise des Modells
Eine Einführung in Python für C-Sprachprogrammierer
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
Vor der Einführung in das maschinelle Lernen. ~ Techniken, die für anderes maschinelles Lernen als maschinelles Lernen erforderlich sind ~
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Eine Einführung in die statistische Modellierung für die Datenanalyse
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Eine Einführung in die Sprachanalyse für Musik-Apps
Einführung in Deep Learning (1) --Chainer wird Anfängern leicht verständlich erklärt.
Einführung in IPython (Python2) in Mac OS X-Vorbereitung für den Einstieg in die Theorie des maschinellen Lernens
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 11 und 12 Einführung in Pandas Matplotlib
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen
Vorbereitung zum Starten von "Python Machine Learning Programming" (für macOS)
Alles für Anfänger, um maschinelles Lernen zu können
Datensatz für maschinelles Lernen
[Lernmemorandum] Einführung in vim
Japanische Vorverarbeitung für maschinelles Lernen
Einführung in Private TensorFlow
Einführung in Deep Learning ~ Lernregeln ~
Eine Einführung in die Python-Programmierung
Einführung in die Bayes'sche Optimierung
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Einführung in Python For, While
Einführung in Deep Learning ~ Backpropagation ~
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Neuerstellung der Umgebung für maschinelles Lernen mit Miniconda (Windows-Version)
Erstellen Sie eine Umgebung für maschinelles Lernen mit Python unter MacOSX
Einführung in das maschinelle Lernen mit scikit-learn-Von der Datenerfassung bis zur Parameteroptimierung
Die Verwendung von icrawler zum Sammeln von Daten zum maschinellen Lernen wurde vereinfacht
Für diejenigen, die mit TensorFlow2 maschinelles Lernen beginnen möchten
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
Maschinelles Lernen mit Nogisaka 46 und Keyakizaka 46 Teil 1 Einführung
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Einführung in Deep Learning ~ Codierungsvorbereitung ~
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Informationen zum maschinell erlernten Meeting für HRTech
[Empfohlenes Tagging für maschinelles Lernen # 4] Skript für maschinelles Lernen ...?
Einführung in Deep Learning ~ Dropout Edition ~
Einführung in Deep Learning ~ Forward Propagation ~
Einführung in Deep Learning ~ CNN Experiment ~
Sammeln von Daten zum maschinellen Lernen
[Python Tutorial] Eine einfache Einführung in Python