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.
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.
Als nächstes über den Teil "Dienste für Benutzer bereitgestellt". Ich denke, dies kann weiter in die folgenden zwei unterteilt 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.
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!
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.
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.
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).
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.
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.
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.
Ich konnte den Wert der Sünde sicher zurückgeben!
Recommended Posts