Ce référentiel héberge la mise en œuvre de l'article « Augmenting Neural Response Generation with Context-Aware Topical Attention ».
THRED est un système de génération de réponses à plusieurs tours destiné à produire des réponses contextuelles et thématiques. La base de code est issue du référentiel Tensorflow NMT.
TL;DR Étapes pour créer un agent de dialogue à l'aide de ce framework :
conda env create -f thred_env.yml
(Pour utiliser pip
, voir Dépendances)MODEL_DIR
est un répertoire dans lequel le modèle sera enregistré. Nous recommandons de vous entraîner sur au moins 2 GPU, sinon vous pouvez réduire la taille des données (en omettant les conversations du fichier d'entraînement) et la taille du modèle (en modifiant le fichier de configuration). 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 requis uniquement pour l'analyse et le nettoyage des données Reddit. 2 utilisé uniquement pour tester les modèles de dialogue en mode interactif en ligne de commande
Pour installer les dépendances à l'aide pip
, exécutez pip install -r requirements
. Et pour Anaconda, exécutez conda env create -f thred_env.yml
(recommandé). Une fois terminé avec les dépendances, exécutez pip install -e .
pour installer le paquet thred.
Notre ensemble de données Reddit, que nous appelons Reddit Conversation Corpus (RCC), est collecté à partir de 95 sous-reddits sélectionnés (répertoriés ici). Nous avons traité Reddit pendant une période de 20 mois allant de novembre 2016 à août 2018 (à l'exclusion de juin 2017 et juillet 2017 ; nous avons utilisé ces deux mois avec les données d'octobre 2016 pour former un modèle LDA). Veuillez consulter ici pour plus de détails sur la façon dont l'ensemble de données Reddit est construit, y compris le prétraitement et le nettoyage des fichiers Reddit bruts. Le tableau suivant résume les informations RCC :
Corpus | #former | #dev | #test | Télécharger | Télécharger avec les mots du sujet |
---|---|---|---|---|---|
3 tours par ligne | 9,2 millions | 508 Ko | 406 Ko | télécharger (773 Mo) | télécharger (2,5 Go) |
4 tours par ligne | 4M | 223 Ko | 178 Ko | télécharger (442 Mo) | télécharger (1,2 Go) |
5 tours par ligne | 1,8 M | 100K | 80K | télécharger (242 Mo) | télécharger (594 Mo) |
Dans les fichiers de données, chaque ligne correspond à une seule conversation où les énoncés sont séparés par des tabulations. Les mots du sujet apparaissent après le dernier énoncé, séparés également par une TAB.
Notez que les fichiers 3 tours/4 tours/5 tours contiennent un contenu similaire bien qu'avec un nombre différent d'énoncés par ligne. Ils sont tous extraits de la même source. Si vous avez trouvé une erreur ou un énoncé inapproprié dans les données, veuillez signaler vos préoccupations ici.
Dans les fichiers de configuration du modèle (c'est-à-dire les fichiers YAML dans conf), les types d'intégration peuvent être l'un des suivants : glove840B
, fastText
, word2vec
et hub_word2vec
. Pour gérer les vecteurs d'intégration pré-entraînés, nous exploitons Pymagnitude et Tensorflow-Hub. Notez que vous pouvez également utiliser random300
(300 fait référence à la dimension des vecteurs d'intégration et peut être remplacé par n'importe quelle valeur arbitraire) pour apprendre les vecteurs lors de la formation des modèles de génération de réponses. Les paramètres liés aux modèles d'intégration sont fournis dans word_embeddings.yml.
La configuration de formation doit être définie dans un fichier YAML similaire à Tensorflow NMT. Des exemples de configurations pour THRED et d’autres lignes de base sont fournis ici.
Les modèles implémentés sont Seq2Seq, HRED, Topic Aware-Seq2Seq et THRED.
Notez que même si la plupart des paramètres sont communs aux différents modèles, certains modèles peuvent avoir des paramètres supplémentaires (par exemple, les modèles thématiques ont les paramètres topic_words_per_utterance
et boost_topic_gen_prob
).
Pour entraîner un modèle, exécutez la commande suivante :
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
Dans
, les fichiers de vocabulaire et les fichiers de modèle Tensorflow sont stockés. La formation peut être reprise en exécutant :
python main.py --mode train --model_dir < MODEL_DIR >
Avec la commande suivante, le modèle peut être testé par rapport à l'ensemble de données de test.
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
Il est possible de remplacer les paramètres de test pendant les tests. Ces paramètres sont : la largeur du faisceau --beam_width
, le poids de pénalité de longueur --length_penalty_weight
et la température d'échantillonnage --sampling_temperature
.
Une interface de ligne de commande simple est implémentée pour vous permettre de converser avec le modèle appris (semblable au mode test, les paramètres de test peuvent également être remplacés) :
python main.py --mode interactive --model_dir < MODEL_DIR >
En mode interactif, un modèle LDA pré-entraîné est requis pour introduire les mots du sujet déduits dans le modèle. Nous avons formé un modèle LDA en utilisant Gensim sur un corpus Reddit, collecté à cet effet. Il peut être téléchargé à partir d'ici. Le fichier téléchargé doit être décompressé et transmis au programme via --lda_model_dir
.
Veuillez citer l'article suivant si vous avez utilisé nos travaux dans votre recherche :
@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}
}