Пакет готовых к использованию базовых линий многоходового или одноходового диалога.
Приветствуем пиар и проблемы.
Сценарий предварительной обработки для этих наборов данных можно найти в папке data/data_process
.
Три набора данных многооборотных диалогов в открытом домене (Dailydialog, DSTC7_AVSD, PersonaChat) можно получить по этой ссылке.
Каждый набор данных содержит 6 файлов.
Во всех файлах одна строка содержит только один контекст диалога (src) или ответ на диалог (tgt). Более подробную информацию можно найти в файлах примеров. Чтобы создать граф, каждое предложение должно начинаться со специальных токенов <user0>
и <user1>
которые обозначают говорящего. __eou__
используется для разделения нескольких предложений в контексте разговора. Более подробную информацию можно найти в кейсе с небольшими данными.
Seq2Seq, SeqSeq_MHA, HRED, HRED_RA, VHRED, WSeq, WSeq_RA, DSHRED, DSHRED_RA, HRAN, MReCoSa, MReCoSa_RA
daildydialog, ubuntu, dstc7, personachat, empchat
Прежде чем запускать следующие команды, убедитесь, что созданы необходимые папки:
mkdir -p processed/ $DATASET
mkdir -p data/ $DATASET
mkdir -p tblogs/ $DATASET
mkdir -p ckpt/ $DATASET
Переменная DATASET
содержит имя набора данных, который вы хотите обработать.
# 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 >
Покажите длину высказываний, обороты многооборотной постановки и так далее.
./run.sh stat < dataset >
Обучите языковую модель N-грамм с помощью NLTK (Лидстон с гаммой 0,5, n-грамма по умолчанию равна 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 >
Перевести партию моделей
# 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 >
Оценить партию моделей
# 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 >
См. статью: 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
. Следует отметить, что Vanilla Transformer очень сложно добиться хорошей производительности на этих наборах данных. Чтобы обеспечить стабильную работу, я использую многоголовочное самообслуживание (1 слой, вы можете изменить его) на Seq2Seq-attn на основе RNN, который показывает лучшую производительность.Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models
. Расширенный HRED с вниманием на уровне высказывания.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
без потерь BOW (все еще в разработке, приветствуем PR)Context-Sensitive Generation of Open-Domain Conversational Responses
, механизм динамического и статического внимания на HREDReCoSa: Detecting the Relevant Contexts with Self-Attention for Multi-turn Dialogue Generation
. Следует отметить, что эта реализация немного отличается от исходных кодов, но более мощная и практичная (3 слоя многоголового самообслуживания, но только 1 слой в оригинальной статье).Hierarchical Recurrent Attention Network for Response Generation
. На самом деле это то же самое, что и HRED с механизмом внимания на уровне слов.