Ein Stapel gebrauchsfertiger Multi-Turn- oder Single-Turn-Dialogbasislinien.
Willkommene PRs und Probleme.
Das Vorverarbeitungsskript für diese Datensätze finden Sie im Ordner data/data_process
.
Drei Open-Domain-Dialogdatensätze mit mehreren Runden (Dailydialog, DSTC7_AVSD, PersonaChat) können über diesen Link abgerufen werden
Jeder Datensatz enthält 6 Dateien
In allen Dateien enthält eine Zeile nur einen Dialogkontext (src) oder die Dialogantwort (tgt). Weitere Details finden Sie in den Beispieldateien. Um das Diagramm zu erstellen, muss jeder Satz mit den speziellen Token <user0>
und <user1>
beginnen, die den Sprecher bezeichnen. Das __eou__
wird verwendet, um die mehreren Sätze im Konversationskontext zu trennen. Weitere Einzelheiten finden Sie im kleinen Datenfall.
Seq2Seq, SeqSeq_MHA, HRED, HRED_RA, VHRED, WSeq, WSeq_RA, DSHRED, DSHRED_RA, HRAN, MReCoSa, MReCoSa_RA
daildydialog, ubuntu, dstc7, personachat, empchat
Stellen Sie vor dem Ausführen der folgenden Befehle sicher, dass die wesentlichen Ordner erstellt sind:
mkdir -p processed/ $DATASET
mkdir -p data/ $DATASET
mkdir -p tblogs/ $DATASET
mkdir -p ckpt/ $DATASET
Die Variable DATASET
enthält den Namen des Datensatzes, den Sie verarbeiten möchten
# default 25000 words
./run.sh vocab < dataset >
# only MTGCN and GatedGCN need to create the graph
# zh or en
./run.sh graph < dataset > < zh/en > < cuda >
Zeigt die Länge der Äußerungen, Umdrehungen der Multiturn-Einstellung usw. an.
./run.sh stat < dataset >
Trainieren Sie das N-Gramm-Sprachmodell mit NLTK (Lidstone mit 0,5 Gamma, Standard-N-Gramm ist 3):
# train the N-gram Language model by NLTK
./run.sh lm < dataset >
./run.sh train < dataset > < model > < cuda >
# translate mode, dataset dialydialog, model HRED on 4th GPU
./run.sh translate < dataset > < model > < cuda >
Übersetzen Sie eine Reihe von Modellen
# rewrite the models and datasets you want to translate
./run_batch_translate.sh < cuda >
# get the BLEU and Distinct result of the generated sentences on 4th GPU (BERTScore need it)
./run.sh eval < dataset > < model > < cuda >
Bewerten Sie eine Reihe von Modellen
# the performance are redirected into the file `./processed/<dataset>/<model>/final_result.txt`
./run_batch_eval.sh < cuda >
# draw the performance curve, but actually, you can get all the information from the tensorboard
./run.sh curve < dataset > < model > < cuda >
Lesen Sie den Artikel: Do Neural Dialog Systems Use the Conversation History Effectively? An Empirical Study
# 10 mode for perturbation
./run.sh perturbation < dataset > < zh/en >
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
Attention is All you Need
. Es ist zu beachten, dass es für Vanilla Transformer sehr schwierig ist, bei diesen Datensätzen eine gute Leistung zu erzielen. Um eine stabile Leistung sicherzustellen, nutze ich die Multi-Head-Selbstaufmerksamkeit (1 Ebene, Sie können sie ändern) auf dem RNN-basierten Seq2Seq-attn, das die bessere Leistung zeigt.Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models
. Verbesserte HRED mit der Aufmerksamkeit auf Äußerungsebene.How to Make Context More Useful? An Empirical Study on Context-Aware Neural Conversational Models
A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues
, ohne BOW-Verlust (noch in der Entwicklung, willkommene PR)Context-Sensitive Generation of Open-Domain Conversational Responses
, dynamischer und statischer Aufmerksamkeitsmechanismus auf HREDReCoSa: Detecting the Relevant Contexts with Self-Attention for Multi-turn Dialogue Generation
. Es ist zu beachten, dass sich diese Implementierung hier ein wenig von den Originalcodes unterscheidet, aber leistungsfähiger und praktischer ist (dreischichtige Multi-Head-Selbstaufmerksamkeit, aber nur eine Schicht im Originalpapier).Hierarchical Recurrent Attention Network for Response Generation
. Eigentlich ist es dasselbe wie HRED mit einem Aufmerksamkeitsmechanismus auf Wortebene.