Un lot de lignes de base de dialogue multitours ou monotours prêtes à l'emploi.
Bienvenue aux PR et aux problèmes.
Le script de prétraitement pour ces ensembles de données se trouve dans le dossier data/data_process
.
Trois ensembles de données de dialogue multitours en domaine ouvert (Dailydialog, DSTC7_AVSD, PersonaChat) peuvent être obtenus via ce lien
Chaque ensemble de données contient 6 fichiers
Dans tous les fichiers, une ligne ne contient qu'un seul contexte de dialogue (src) ou la réponse de dialogue (tgt). Plus de détails peuvent être trouvés dans les fichiers d'exemple. Afin de créer le graphique, chaque phrase doit commencer par les jetons spéciaux <user0>
et <user1>
qui désignent le locuteur. Le __eou__
est utilisé pour séparer les multiples phrases dans le contexte de la conversation. Plus de détails peuvent être trouvés dans le petit dossier de données.
Seq2Seq, SeqSeq_MHA, HRED, HRED_RA, VHRED, WSeq, WSeq_RA, DSHRED, DSHRED_RA, HRAN, MReCoSa, MReCoSa_RA
daildydialog, ubuntu, dstc7, personachat, empchat
Avant d'exécuter les commandes suivantes, assurez-vous que les dossiers essentiels sont créés :
mkdir -p processed/ $DATASET
mkdir -p data/ $DATASET
mkdir -p tblogs/ $DATASET
mkdir -p ckpt/ $DATASET
La variable DATASET
contient le nom de l'ensemble de données que vous souhaitez traiter
# 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 >
Affichez la longueur des phrases, les tours du réglage multi-tours, etc.
./run.sh stat < dataset >
Entraînez le modèle de langage N-gram par NLTK (Lidstone avec 0,5 gamma, n-gram par défaut est 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 >
Traduire un lot de modèles
# 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 >
Évaluer un lot de modèles
# 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 >
Reportez-vous à l'article : 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
. Il convient de noter que Vanilla Transformer est très difficile à obtenir de bonnes performances sur ces ensembles de données. Afin de garantir des performances stables, j'exploite l'auto-attention multi-têtes (1 couche, vous pouvez la modifier) sur le Seq2Seq-attn basé sur RNN, qui affiche les meilleures performances.Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models
. HRED amélioré avec l'attention au niveau de l'énoncé.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
, sans perte de BOW (toujours en développement, bienvenue PR)Context-Sensitive Generation of Open-Domain Conversational Responses
, mécanisme d'attention dynamique et statique sur HREDReCoSa: Detecting the Relevant Contexts with Self-Attention for Multi-turn Dialogue Generation
. Il convient de noter que cette implémentation ici est un peu différente des codes originaux, mais plus puissante et pratique (auto-attention multi-têtes à 3 couches mais seulement 1 couche dans le papier original).Hierarchical Recurrent Attention Network for Response Generation
, en fait c'est le même que le HRED avec un mécanisme d'attention au niveau des mots.