Комментарии 11
Бот: Вот сейчас я тебя совсем не понимаю.
Я: Добрый день!
Бот: Попробуй, пожалуйста, выразить свою мысль по-другому.
Я: Hello!
Бот: Не совсем понимаю, о чём ты.
Я: я могу сделать заказ?
Бот: На какое имя?
Я: Обращайтесь ко мне Мистер X
Бот: На какое имя?
Я: У меня нет имени. Я Мистер X
Бот: На какое имя?
Я: Ладно, пусть будет Георг
Бот: На какое имя?
Я: На имя Георга Карловича
Бот: На какое имя?
Я: мр. Георг Карлович
Бот: На какое имя?
Я: Ок! Пусть будет просто Георг
Бот: На какое имя?
Я: Ты меня убедил. Пусть я буду Вася
Бот: В какой город?
Я: Я живу под Стармином, в поселке Топлые Реды
Бот: В какой город?
Я: В деревне. Топлые Реды!
Бот: В какой город?
Я: Это не город. Это поселок
Бот: В какой город?
Я: пусть город… только маленький ок?
Бот: В какой город?
Я: Топлые Реды
Бот: В какой город?
Я: В Москву!
Бот: Заказ оформлен на имя Вася и будет отправлен в Москва по адресу город… только
Dialogflow — очень удобная платформа, но чтобы она работала хорошо — придется немного попотеть с настройками и обучающими выборками.
* Intents или Намерения (что хочет пользователь) — можете настроить типовые реплики (User Says), а еще использовать модули машинного обучения и тренировки
* Чтобы точно извлекать нестандартные факты (ФИО, названия городов и тд) — настройте сущности
У них все довольно удобно устроено — данные можно загружать через CSV выгрузки, что-то можно через API
Ещё похожее это диалоги: dialogflow.com/docs/dialogs
Это когда несколькими запросами необходимо получить определённый надо данных.
И в итоге есть Fulfillment (или Webhook), когда можно с помощью торчащего наружу HTTP метода кастомизировать работу бота.
Если кому интересно, то задача распознавания имён называется Named Entity Recognition или сокращённо NER. И пока что для решения не придумали ничего новее Conditional random fields, так что до "понимания человеской речи" как до Луны. Скорее этот подход нужно воспринимать как распознавание, основанное на регулярных выражениях и грамматике, которое будет устойчиво к небольшим возмущениям типа пропуска и перестановки слов или появления незнакомых терминов. То есть, модель будет довольно ограничена в свой возможности обобщать, но зато для небольшого круга задач вполне подойдёт и будет работать значительно лучше чем if (userInput.equals("принеси мне сендвич")) {… }. Единственный минус — для настройки придётся разобраться с алгоритмом обучения, иначе можно "скормить" кучу данных, а точность так и не повысится.
P.S. Историческая справка. Dialogflow это бывшие Api.ai, они же Assistant.ai, они же Speaktoit он же Гога, он же Жора. В компании преимущественно работают русскоговорящие. Недавно их купил Google, но в далёком 2013-м они копировали практически один в один сервис Wit.ai, который в 2015-м купил Facebook. Сейчас оба сервиса продолжают активно развиваться .
Как он поймет мой ответ?
Ведь как параметр что нужно доставить не задано или я что-то упустил?
Создал бота по текущему примеру.
habrBot: Здравствуй!
habrBot: Что можешь сказать о себе?
Я: Привет. Я Вася
habrBot: Расскажи о себе?
habrBot: Здравствуй!
Я: Привет
habrBot: Что можешь сказать о себе?
habrBot: Здравствуй!
Я: Я Василий
habrBot: Приятно познакомиться.
habrBot: Какую одежду вам доставить?
Я: Обувь
habrBot: Вот сейчас я тебя совсем не понимаю.
Я: Одежду
habrBot: Вот сейчас я тебя совсем не понимаю.
Дальше разговор не уходит, можно писать, где живешь и т.д., но ответ боту не ясен.
Чат-бот понимающий человеческую речь на Dialogflow