Этот репозиторий содержит новый метод состязательного обучения для нашего генеративного разговорного агента (GCA).
Более подробную информацию об этом новом методе обучения можно найти в статье Освальдо Людвига «Сквозное состязательное обучение для генеративных диалоговых агентов», arXiv:1711.10122 cs.CL, ноябрь 2017 г. В случае публикации с использованием идей или фрагментов код из этого репозитория, пожалуйста, цитируйте эту статью.
Наш метод предполагает, что GCA является генератором, целью которого является обмануть дискриминатор, который маркирует диалоги как созданные человеком или машиной. В нашем подходе дискриминатор выполняет классификацию на уровне токена, т. е. указывает, был ли текущий токен сгенерирован людьми или машинами. Для этого дискриминатор также получает на вход контекстные высказывания (историю диалогов) и неполный ответ до текущего токена. Этот новый подход делает возможным сквозное обучение посредством обратного распространения ошибки. Процесс самостоятельного диалога позволяет создать набор сгенерированных данных с большим разнообразием для состязательного обучения. Этот подход повышает эффективность ответов на вопросы, не связанные с обучающими данными.
Обученная модель, доступная здесь, использовала набор данных, собранный из диалогов онлайн-курсов английского языка, доступных здесь.
Нашу модель GCA можно объяснить следующей блок-схемой:
а следующий псевдокод объясняет наш алгоритм GCA:
Наше новое сквозное состязательное обучение можно объяснить следующей моделью Keras (реализованной в файле train_bot_GAN.py), которая состоит из генератора и дискриминатора. Желтые блоки принадлежат GCA (генератору), а зеленые – дискриминатору. Белые блоки используются генератором и дискриминатором:
а следующий псевдокод объясняет новый алгоритм (определение переменных см. в статье):
Чтобы пообщаться с предварительно обученными моделями:
Чтобы оценить диалоговые строки с помощью предварительно обученного дискриминатора:
Для сквозного обучения с использованием нового состязательного метода:
Если вы хотите начать состязательное обучение с нуля, сделайте файл весов my_model_weights.h5 (предварительно обученный новому состязательному методу) равным my_model_weights20.h5 (предварительно обученный преподавателем) и запустите train_script.py.