Визуальный диалог - это первое, что нужно создать, когда вы хотите создать чат-бота. Такой поток поможет определить правильный набор намерений вместе с диалогом. В противном случае очень легко потеряться в переходах разговора, и это приведет к сбою в реализации чат-бота. Наш чат-бот для медицинской системы не принимает никаких решений, а помогает пользователю работать с корпоративной системой. Он получает ввод пользователя и во время разговора приводит к определенному вызову API, который в конце заставляет корпоративную систему выполнить то или иное действие. Если пользователь ищет результаты измерения артериального давления пациента, чат-бот откроет модуль артериального давления с идентификатором пациента. Если пользователь хочет отредактировать или просмотреть результаты артериального давления в целом, чат-бот загрузит модуль результатов артериального давления без параметров. Этот вид чат-бота очень полезен в больших и сложных корпоративных системах, он помогает быстрее подключать новых пользователей без дополнительного обучения работе с системой. Пример визуального разговора для чат-бота:

Намерения разговора можно записать в файл JSON. Где вы должны перечислить шаблоны разговоров, сопоставленные с тегами, ответами и контекстной информацией. Чат-бот предназначен не только для машинного обучения и обработки пользовательского ввода, очень важно управлять контекстным потоком разговора, и обычно это делается за пределами области машинного обучения в другом модуле. Мы рассмотрим это позже. Машинное обучение с нейронной сетью позволяет чат-боту вычислять вероятность тега на основе ввода данных пользователем. Другими словами, машинное обучение помогает найти наиболее подходящий тег для текущего предложения на основе предопределенных шаблонов намерений. Пока мы получаем вероятность для тега намерения - мы знаем, чего хочет пользователь, мы можем установить контекст разговора и в следующем запросе пользователя - реагировать на основе текущего контекста:

TensorFlow запускает нейронную сеть, которая обучается по предоставленному списку намерений. Каждый тренировочный прогон может давать разные результаты обучения, вам следует проверить значение total loss - чем меньше значение, тем лучше результат обучения. Возможно, вы будете выполнять обучение несколько раз, чтобы получить оптимальную модель обучения:

TensorFlow может сохранять изученную модель для повторного использования с помощью API классификации. Интерфейс REST, вызывающий API классификации, разработан как отдельный модуль TensorFlow. REST обрабатывается библиотекой Flask, установленной во время выполнения TensorFlow:

Функция классификации получает пользовательский ввод из вызова REST и запускает его через модель TensorFlow. Результаты с большей вероятностью, чем определено пороговым значением, собираются в упорядоченный массив и возвращаются обратно. У нас есть функция классификации без аннотации REST для локальных тестов во время выполнения TensorFlow:

Давайте посмотрим, как работает классификация. Результат классификации приведет к следующему действию чат-бота. Каждый запрос классификации возвращает соответствующий тег и вероятность. Пользовательский ввод не идентичен шаблонам, определенным в намерениях, поэтому вероятность совпадения может отличаться - это основная часть машинного обучения. Нейронная сеть, построенная с помощью TensorFlow на основе изученной модели, предполагает лучший тег для текущего пользовательского ввода.

Пользовательский ввод «Проверка результатов измерения артериального давления для пациента». Этот ввод может быть связан с обоими тегами blood_pressure_search и blood_pressure, но классификация определяет более высокую вероятность для первого варианта, и это правильно. Аналогично для пользовательского ввода «Какие-либо рекомендации по побочным лекарствам?»:

Через конечную точку REST мы можем вызывать функцию классификации вне среды TensorFlow. Это позволит нам поддерживать контекст разговора за пределами TensorFlow:

Полезные ресурсы:

Первоначально опубликовано на сайте andrejusb.blogspot.com 3 марта 2018 г.