Bei diesem Projekt handelt es sich um eine Pytorch-Implementierung für das MMI-Anti-Modell, das in A Diversity-Promoting Objective Function for Neural Conversation Models beschrieben wird
Dieser Code basiert auf OpenNMT-py und word_lingual_model
python preprocess.py
Wir werden mit einigen Beispieldaten im Ordner data/
arbeiten. Die Daten bestehen aus parallelen Dialogkontextdaten ( .en
) und seinen Antwortdaten ( .vi
), die einen Satz pro Zeile mit durch ein Leerzeichen getrennten Token enthalten:
train.en
train.vi
dev.en
dev.vi
Nach dem Ausführen der Vorverarbeitung werden die folgenden Dateien im Ordner data/
generiert:
dialogue.train.1.pt
: serialisierte PyTorch-Datei mit Trainingsdatendialogue.valid.1.pt
: serialisierte PyTorch-Datei mit Validierungsdatendialogue.vocab.pt
: serialisierte PyTorch-Datei mit Vokabeldaten, die im Trainingsprozess des Sprachmodells verwendet werden. cd lm/tool/
In diesem Schritt trainieren wir ein Sprachmodell basierend auf den Antworten für das MMI-Anti-Modell (Beispieldaten data/*.vi
). Da dieses Sprachmodell im MMI-Anti-Modell verwendet wird, wird das in Step1
generierte Wörterbuch ( data/*.vocab.pt
) gemeinsam genutzt.
python preprocess.py
Durch diese Vorverarbeitung werden alle Antworten für das MMI-Anti-Modell (Beispieldaten data/*.vi
) in parallele Daten für das Sprachmodell umgewandelt.
Nach dem Ausführen der Vorverarbeitung werden die folgenden Dateien im Ordner lm/data/
generiert:
train.en
train.de
dev.en
dev.de
Beispielsweise wird die Antwort "they just want a story"
in der Datei data/train.vi
vorverarbeitet in "<s> they just want a story"
in der Datei lm/data/train.en
und "they just want a story </s>"
in der Datei lm/data/train.de
.
cd ../
python lm.py
Dieser Zugbefehl speichert das Sprachmodell in lm/model.pt
.
Um diesen Code auf der CPU auszuführen, müssen Sie Ihren Pytorch auf eine beliebige Version nach 24th Feb 2018
aktualisieren und sicherstellen, dass dieser Codeabschnitt in Ihrer torchtext/data/iterator.py
zu finden ist:
if not torch.cuda.is_available() and self.device is None:
self.device = -1
python generate.py
Dieses Tool generiert zufällig 1000 Äußerungen mithilfe des Sprachmodells lm/model.pt
und speichert sie in der Datei lm/generated.txt
.
cd ../
python train.py
python translate.py -model model_name
Die Generierungsergebnisse werden in der Datei pred.txt
gespeichert.
cat pred.txt | python diversity.py