Dieses Repository beherbergt die Implementierung des Papiers „Augmenting Neural Response Generation with Context-Aware Topical Attention“.
THRED ist ein Multi-Turn-Antwortgenerierungssystem, das kontextbezogene und themenbezogene Antworten erzeugen soll. Die Codebasis wurde aus dem Tensorflow NMT-Repository entwickelt.
TL;DR Schritte zum Erstellen eines Dialogagenten mit diesem Framework:
conda env create -f thred_env.yml
(Informationen zur Verwendung von pip
finden Sie unter Abhängigkeiten).MODEL_DIR
ein Verzeichnis ist, in dem das Modell gespeichert wird. Wir empfehlen, auf mindestens 2 GPUs zu trainieren. Andernfalls können Sie die Datengröße (durch Weglassen von Konversationen aus der Trainingsdatei) und die Modellgröße (durch Ändern der Konfigurationsdatei) reduzieren. python -m thred --mode train --config conf/thred_medium.yml --model_dir
--train_data --dev_data --test_data
python -m thred --mode interactive --model_dir
1 Pakete nur zum Parsen und Bereinigen der Reddit-Daten erforderlich. 2 wird nur zum Testen von Dialogmodellen im interaktiven Befehlszeilenmodus verwendet
Um die Abhängigkeiten mit pip
zu installieren, führen Sie pip install -r requirements
aus. Und für Anaconda führen Sie conda env create -f thred_env.yml
(empfohlen). Wenn Sie mit den Abhängigkeiten fertig sind, führen Sie pip install -e .
um das Thred-Paket zu installieren.
Unser Reddit-Datensatz, den wir Reddit Conversation Corpus (RCC) nennen, wird aus 95 ausgewählten Subreddits (hier aufgelistet) gesammelt. Wir haben Reddit über einen Zeitraum von 20 Monaten von November 2016 bis August 2018 verarbeitet (ausgenommen Juni 2017 und Juli 2017; wir haben diese beiden Monate zusammen mit den Daten vom Oktober 2016 verwendet, um ein LDA-Modell zu trainieren). Weitere Informationen zum Aufbau des Reddit-Datensatzes, einschließlich der Vorverarbeitung und Bereinigung der Reddit-Rohdateien, finden Sie hier. Die folgende Tabelle fasst die RCC-Informationen zusammen:
Korpus | #Zug | #dev | #prüfen | Herunterladen | Mit Themenwörtern herunterladen |
---|---|---|---|---|---|
3 Umdrehungen pro Linie | 9,2 Mio | 508K | 406K | herunterladen (773 MB) | Herunterladen (2,5 GB) |
4 Umdrehungen pro Linie | 4M | 223K | 178K | Herunterladen (442 MB) | Herunterladen (1,2 GB) |
5 Umdrehungen pro Linie | 1,8 Millionen | 100.000 | 80.000 | Herunterladen (242 MB) | herunterladen (594 MB) |
In den Datendateien entspricht jede Zeile einer einzelnen Konversation, in der die Äußerungen durch Tabulatoren getrennt sind. Die Themenwörter erscheinen nach der letzten Äußerung, ebenfalls durch ein Tabulatorzeichen getrennt.
Beachten Sie, dass die 3-Runden-/4-Runden-/5-Runden-Dateien ähnliche Inhalte enthalten, allerdings mit einer unterschiedlichen Anzahl von Äußerungen pro Zeile. Sie stammen alle aus derselben Quelle. Wenn Sie einen Fehler oder eine unangemessene Äußerung in den Daten gefunden haben, melden Sie bitte hier Ihre Bedenken.
In den Modellkonfigurationsdateien (d. h. den YAML-Dateien in conf) können die Einbettungstypen einer der folgenden sein: glove840B
, fastText
, word2vec
und hub_word2vec
. Für die Handhabung der vorab trainierten Einbettungsvektoren nutzen wir Pymagnitude und Tensorflow-Hub. Beachten Sie, dass Sie auch random300
(300 bezieht sich auf die Dimension der Einbettungsvektoren und kann durch einen beliebigen Wert ersetzt werden) verwenden können, um Vektoren während des Trainings der Antwortgenerierungsmodelle zu lernen. Die Einstellungen zum Einbetten von Modellen werden in word_embeddings.yml bereitgestellt.
Die Trainingskonfiguration sollte in einer YAML-Datei ähnlich wie Tensorflow NMT definiert werden. Beispielkonfigurationen für THRED und andere Baselines finden Sie hier.
Die implementierten Modelle sind Seq2Seq, HRED, Topic Aware-Seq2Seq und THRED.
Beachten Sie, dass die meisten Parameter zwar bei den verschiedenen Modellen gleich sind, einige Modelle jedoch möglicherweise zusätzliche Parameter haben (z. B. haben thematische Modelle die Parameter topic_words_per_utterance
und boost_topic_gen_prob
).
Um ein Modell zu trainieren, führen Sie den folgenden Befehl aus:
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
In
werden Vokabeldateien und Tensorflow-Modelldateien gespeichert. Das Training kann wieder aufgenommen werden, indem Folgendes ausgeführt wird:
python main.py --mode train --model_dir < MODEL_DIR >
Mit dem folgenden Befehl kann das Modell anhand des Testdatensatzes getestet werden.
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
Es ist möglich, Testparameter während des Tests zu überschreiben. Diese Parameter sind: Strahlbreite --beam_width
, Längenstrafengewicht --length_penalty_weight
und Abtasttemperatur --sampling_temperature
.
Es ist eine einfache Befehlszeilenschnittstelle implementiert, die es Ihnen ermöglicht, mit dem erlernten Modell zu kommunizieren (ähnlich wie im Testmodus können auch die Testparameter überschrieben werden):
python main.py --mode interactive --model_dir < MODEL_DIR >
Im interaktiven Modus ist ein vorab trainiertes LDA-Modell erforderlich, um die abgeleiteten Themenwörter in das Modell einzuspeisen. Wir haben ein LDA-Modell mit Gensim auf einem Reddit-Korpus trainiert, der für diesen Zweck gesammelt wurde. Es kann hier heruntergeladen werden. Die heruntergeladene Datei sollte dekomprimiert und über --lda_model_dir
an das Programm übergeben werden.
Bitte zitieren Sie den folgenden Artikel, wenn Sie unsere Arbeit in Ihrer Forschung verwendet haben:
@article{dziri2018augmenting,
title={Augmenting Neural Response Generation with Context-Aware Topical Attention},
author={Dziri, Nouha and Kamalloo, Ehsan and Mathewson, Kory W and Zaiane, Osmar R},
journal={arXiv preprint arXiv:1811.01063},
year={2018}
}