code/données pour l'article NAACL'19 Optimisant conjointement la diversité et la pertinence dans la génération de réponses neuronales
SpaceFusion est un paradigme d'apprentissage multitâche régularisé proposé pour aligner et structurer les espaces latents non structurés appris par différents modèles formés sur différents ensembles de données. Son application à la modélisation de conversations neuronales est particulièrement intéressante, où SpaceFusion est utilisé pour optimiser conjointement la pertinence et la diversité des réponses générées.
Plus de documents :
notre article à NAACL'19 (long, oral).
Les slides présentées à NAACL'19.
Nous avons publié un blog MSR pour discuter de l'intuition et des implications
notre travail de suivi, StyleFusion à EMNLP'19
nos derniers modèles d'évaluation/classement de dialogue, DialogRPT, à l'EMNLP'20
le code est testé avec Python 3.6 et Keras 2.2.4
Nous avons fourni des scripts pour générer Reddit et traiter les ensembles de données Switchboard ainsi qu'un ensemble de données jouets dans ce référentiel pour le débogage.
Veuillez vérifier ici pour plus de détails.
Pour entraîner un modèle SpaceFusion : python src/main.py mtask train --data_name=toy
Pour visualiser l'espace latent appris : python src/vis.py --data_name=toy
Pour interagir avec le modèle entraîné : python src/main.py mtask interact --data_name=toy --method=?
, où la méthode peut être greedy
, rand
, sampling
ou beam
. Nous avons utilisé rand
dans le journal
Pour générer des hypothèses à tester avec le modèle entraîné : python src/main.py mtask test --data_name=toy
Pour évaluer les hypothèses générées python src/eval.py --path_hyp=? --path_ref=? --wt_len=?
, qui génère la précision, le rappel et la F1 tels que définis dans l'article. Vous souhaiterez peut-être d'abord exécuter cette commande avec -len_only
pour trouver un wt_len
approprié qui minimise la différence entre la longueur moyenne (nombre de jetons) de l'hypothèse et de la référence.
main.py
est le fichier principal
model.py
définit le modèle SpaceFusion (voir class MTask
) et quelques lignes de base
vis.py
définit la fonction que nous avons utilisée pour visualiser et analyser l'espace latent
dataset.py
définit le chargeur de données
shared.py
définit les hyperparamètres par défaut
Veuillez citer notre article NAACL si ce dépôt a inspiré votre travail :)
@article{gao2019spacefusion, title={Jointly Optimizing Diversity and Relevance in Neural Response Generation}, author={Gao, Xiang and Lee, Sungjin and Zhang, Yizhe and Brockett, Chris and Galley, Michel and Gao, Jianfeng and Dolan, Bill}, journal={NAACL-HLT 2019}, year={2019} }