Примечания для посетителей:
python3 manage.py runserver
. Если вы не знакомы с запуском flask таким способом, см. документацию Flask-Script. Извините за неудобства!По состоянию на 9 мая 2017 года основные пакеты проекта следующие:
python3 manage.py runserver
С точки зрения пользователя/разработчика этот проект предлагает более понятный интерфейс для работы с моделями последовательностей. Идеальный результат — API чат-бота с читабельностью Keras, но с степенью гибкости, близкой к TensorFlow.
На «клиентской» стороне играть с параметрами модели и запускать их так же просто, как создать файл конфигурации (yaml), открыть интерпретатор Python и ввести несколько команд. Например, следующий фрагмент — это все, что нужно для начала обучения на наборе данных Корнелла (конечно, после его загрузки) с вашей конфигурацией:
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
Это всего лишь один из способов взаимодействия с проектом. Например, пользователь также может передавать параметры через аргументы командной строки, которые также будут объединены с любыми указанными им файлами конфигурации (в случае конфликта приоритет отдается аргументам командной строки). Вы также можете передать местоположение ранее сохраненного чат-бота, чтобы возобновить его обучение или начать разговор. См. main.py
для более подробной информации.
Корпус диалогов Ubuntu: подход к предварительной обработке можно увидеть в файле ubuntu_reformat.ipynb в папке записных книжек. Предполагаемое использование набора данных — ранжирование ответов для многоходовых диалогов, но я использовал довольно простой подход: извлекаю пары высказываний и интерпретирую их как одно предложение в один ответ, что соответствует входным данным для кодера и декодера. соответственно в моделях.
Cornell Movie-Dialogs: Я начал с этой предварительно обработанной версии корпуса Cornell и внес небольшие изменения для уменьшения шума.
Комментарии Reddit: прибл. 1,7 миллиарда комментариев на Reddit. В настоящее время работаю над предварительной обработкой и преобразованием этого огромного набора данных в подходящий формат для обучения моделей разговоров. После завершения опубликуем ссылки для загрузки обработанного набора данных!
DynamicBot: использует более объектно-ориентированный подход, предлагаемый пользовательскими классами в model_comComponents.py. Результатом является более быстрое пакетное встраивание онлайн и более естественный подход к общению. Он использует (фантастический) новый API Python в версии TensorFlow 1.0, в частности, Dynamic_rnn. Он также соответствует хорошей практике определения области переменных и общим соглашениям о тензорных потоках, которые я наблюдал в документации и исходном коде, что имеет приятные побочные эффекты, такие как чистая визуализация графов в TensorBoard.
SimpleBot: упрощенная модель с сегментами, основанная на более сложной модели ChatBot, представленной ниже. Хотя он менее гибок в настройке сегментов корзины и вместо выборки использует разреженный softmax для всего словаря, его реализация гораздо более прозрачна. Он минимально использует tf.contrib, в отличие от ChatBot, и более или менее реализован с «нуля», то есть в первую очередь опирается на базовые методы тензорного потока. Если вы новичок в TensorFlow, возможно, вам будет полезно прочитать его реализацию, чтобы понять общие соглашения в программировании тензорного потока, поскольку это стало результатом того, что я прочитал исходный код всех методов в ChatBot и написал свой собственный, более компактный. интерпретация.
ChatBot: расширенная версия модели, описанной в этом руководстве по TensorFlow. Характеристики архитектуры: сегментированные входные данные, декодер использует механизм внимания (см. стр. 69 моих заметок), а входные данные встроены в простые функции, представленные в библиотеке tf.contrib. Также используется выборочная функция потерь softmax, позволяющая использовать словарь большего размера (стр. 67 примечаний). Из-за характера сегментированных моделей создание модели занимает гораздо больше времени по сравнению с другими. Основным узким местом является размер самого большого сегмента и то, как создаются операции градиента. ведро размеры.
Каталог веб-страницы демонстрирует простой и экономичный способ развертывания ваших моделей TensorFlow в приложении Flask. Модели «замораживаются» — все компоненты, не нужные для общения (например, оптимизаторы), удаляются, а все оставшиеся переменные преобразуются в константы. Когда пользователь щелкает имя модели, для этой модели создается REST API. Когда пользователь вводит предложение в форму, выдается POST-запрос (AJAX), где ответом является ответное предложение чат-бота. Дополнительные сведения о REST API см. на страницеviews.py.
Приложение Flask следует передовым практикам, таким как использование схем для создания экземпляров приложений, различных баз данных в зависимости от среды приложения (например, разработки или производства) и т. д.
Здесь я более подробно расскажу о том, как создаются модели и как их можно визуализировать. Этот раздел находится в стадии разработки и еще не завершен.
Вместо использования feed_dict
для ввода пакетов данных в модель существенно быстрее кодируется входная информация и методы предварительной обработки в самой структуре графа. Это означает, что мы ничего не передаем модели во время обучения. Скорее, модель использует последовательность очередей для доступа к данным из файлов в формате protobuf Google, декодирования файлов в тензорные последовательности, динамического пакетирования и дополнения последовательностей, а затем подачи этих пакетов во встроенный декодер. Все в рамках графовой структуры. Более того, эта обработка данных координируется несколькими потоками параллельно. Мы можем использовать тензорную доску (и лучшие практики для области видимости переменных) для визуализации этого типа конвейера на высоком уровне.
(Дополнительные описания скоро появятся!)
Этим моделям было посвящено много исследований, и я документировал свои заметки по наиболее «важным» статьям здесь, в последнем разделе моих заметок по глубокому обучению здесь. В примечаниях также описано, как я пытался перевести материал из статей в код TensorFlow. Я буду обновлять это по мере того, как идеи из новых статей попадут в этот проект.
Документы:
Интернет-ресурсы: