Dieses Repository enthält eine neue gegnerische Trainingsmethode für unseren Generative Conversational Agent (GCA).
Weitere Details zu dieser neuen Trainingsmethode finden Sie im Artikel Oswaldo Ludwig, „End-to-end Adversarial Learning for Generative Conversational Agents“, arXiv:1711.10122 cs.CL, Nov. 2017. Im Falle einer Veröffentlichung unter Verwendung von Ideen oder Teilen davon Code aus diesem Repository, bitte zitieren Sie dieses Dokument.
Unsere Methode geht davon aus, dass die GCA ein Generator ist, der darauf abzielt, einen Diskriminator auszutricksen, der Dialoge als von Menschen oder Maschinen generiert bezeichnet. In unserem Ansatz führt der Diskriminator eine Klassifizierung auf Token-Ebene durch, dh er gibt an, ob der aktuelle Token von Menschen oder Maschinen generiert wurde. Dazu erhält der Diskriminator auch die Kontextäußerungen (die Dialoghistorie) und die unvollständige Antwort bis zum aktuellen Token als Input. Dieser neue Ansatz ermöglicht das End-to-End-Training durch Backpropagation. Ein Selbstgesprächsprozess ermöglicht die Erstellung eines Satzes generierter Daten mit mehr Diversität für das gegnerische Training. Dieser Ansatz verbessert die Leistung bei Fragen, die nichts mit den Trainingsdaten zu tun haben.
Das hier verfügbare trainierte Modell verwendete einen Datensatz, der aus Dialogen von Online-Englischkursen gesammelt wurde und hier verfügbar ist.
Unser GCA-Modell kann durch das folgende Flussdiagramm erklärt werden:
während der folgende Pseudocode unseren GCA-Algorithmus erklärt:
Unser neues End-to-End-Gegnertraining kann durch das folgende Keras-Modell (implementiert in der Datei train_bot_GAN.py) erklärt werden, das aus dem Generator und dem Diskriminator besteht. Die gelben Blöcke gehören zum GCA (dem Generator), während die grünen Blöcke zum Diskriminator gehören. Die weißen Blöcke werden zwischen Generator und Diskriminator geteilt:
während der folgende Pseudocode den neuen Algorithmus erklärt (siehe den Artikel für die Definition der Variablen):
So chatten Sie mit den vorab trainierten Modellen:
So bewerten Sie Dialogzeilen mit dem vorab trainierten Diskriminator:
So trainieren Sie Ende-zu-Ende mit der neuen kontradiktorischen Methode:
Wenn Sie das gegnerische Training von Grund auf beginnen möchten, machen Sie die Gewichtsdatei my_model_weights.h5 (die neue gegnerische Methode vorab trainiert) gleich my_model_weights20.h5 (vorab trainiert durch Erzwingen durch den Lehrer) und führen Sie train_script.py aus.