В этом репозитории размещена реализация статьи «Усиление генерации нейронных ответов с помощью контекстно-зависимого тематического внимания».
THRED — это многоэтапная система генерации ответов, предназначенная для создания контекстных и тематических ответов. Кодовая база разработана на основе репозитория Tensorflow NMT.
TL;DR Шаги по созданию диалогового агента с использованием этой структуры:
conda env create -f thred_env.yml
(чтобы использовать pip
, см. Зависимости).MODEL_DIR
— это каталог, в котором будет сохранена модель. Мы рекомендуем тренироваться как минимум на двух графических процессорах, в противном случае вы можете уменьшить размер данных (исключив диалоги из обучающего файла) и размер модели (изменяя файл конфигурации). 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 , необходимые только для анализа и очистки данных Reddit. 2 используется только для тестирования моделей диалогов в интерактивном режиме командной строки.
Чтобы установить зависимости с помощью pip
, запустите pip install -r requirements
. А для Anaconda запустите conda env create -f thred_env.yml
(рекомендуется). Закончив с зависимостями, запустите pip install -e .
для установки пакета thred.
Наш набор данных Reddit, который мы называем Reddit Conversation Corpus (RCC), собран из 95 выбранных субреддитов (перечисленных здесь). Мы обрабатывали Reddit в течение 20-месячного периода с ноября 2016 г. по август 2018 г. (исключая июнь 2017 г. и июль 2017 г.; мы использовали эти два месяца вместе с данными за октябрь 2016 г. для обучения модели LDA). Здесь вы найдете подробную информацию о том, как создается набор данных Reddit, включая предварительную обработку и очистку необработанных файлов Reddit. В следующей таблице обобщена информация о RCC:
Корпус | #тренироваться | #dev | #тест | Скачать | Скачать со словами темы |
---|---|---|---|---|---|
3 хода на линию | 9,2 млн. | 508К | 406К | скачать (773МБ) | скачать (2,5 ГБ) |
4 хода на линию | 4М | 223 тыс. | 178 тыс. | скачать (442МБ) | скачать (1,2 ГБ) |
5 ходов на линию | 1,8 млн. | 100 тыс. | 80 тыс. | скачать (242МБ) | скачать (594МБ) |
В файлах данных каждая строка соответствует одному разговору, в котором высказывания разделены символом TAB. Слова темы появляются после последнего высказывания, также разделенные знаком TAB.
Обратите внимание, что файлы с 3, 4 и 5 поворотами содержат схожий контент, хотя и с разным количеством высказываний в строке. Все они извлечены из одного и того же источника. Если вы обнаружили в данных какую-либо ошибку или неуместное высказывание, сообщите о своих опасениях здесь.
В файлах конфигурации модели (т. е. файлах YAML в conf) типы внедрения могут быть следующими: glove840B
, fastText
, word2vec
hub_word2vec
. Для обработки предварительно обученных векторов внедрения мы используем Pymagnitude и Tensorflow-Hub. Обратите внимание, что вы также можете использовать random300
(300 относится к размерности векторов внедрения и может быть заменено любым произвольным значением) для изучения векторов во время обучения моделей генерации ответов. Настройки, связанные с встраиванием моделей, представлены в файле word_embeddings.yml.
Конфигурация обучения должна быть определена в файле YAML, аналогичном Tensorflow NMT. Здесь представлены примеры конфигураций для THRED и других базовых показателей.
Реализованные модели: Seq2Seq, HRED, Topic Aware-Seq2Seq и THRED.
Обратите внимание: хотя большинство параметров являются общими для разных моделей, некоторые модели могут иметь дополнительные параметры (например, тематические модели имеют параметры topic_words_per_utterance
и boost_topic_gen_prob
).
Чтобы обучить модель, выполните следующую команду:
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
В
хранятся файлы словаря и файлы моделей Tensorflow. Обучение можно возобновить, выполнив:
python main.py --mode train --model_dir < MODEL_DIR >
С помощью следующей команды модель можно протестировать на тестовом наборе данных.
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
Во время тестирования можно изменить параметры тестирования. Этими параметрами являются: ширина луча --beam_width
, штрафной вес длины --length_penalty_weight
и температура отбора проб --sampling_temperature
.
Реализован простой интерфейс командной строки, который позволяет вам общаться с изученной моделью (аналогично режиму тестирования, параметры теста также можно переопределить):
python main.py --mode interactive --model_dir < MODEL_DIR >
В интерактивном режиме для ввода в модель выведенных тематических слов требуется предварительно обученная модель LDA. Мы обучили модель LDA с помощью Gensim на корпусе Reddit, собранном для этой цели. Его можно скачать здесь. Загруженный файл следует разархивировать и передать программе через --lda_model_dir
.
Если вы использовали нашу работу в своем исследовании, пожалуйста, дайте ссылку на следующую статью:
@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}
}