Задача разработать текстового чат-бота
Он должен понимать запросы из определённой области (подбор одежды) на естественном языке, запросы типа:
- хочу белое платье;
- подбери вечерний наряд в театр;
- выбери штаны для бега;
- мне нужен легкий наряд, в котором можно пойти в клуб
и т.п.
Как может выглядеть архитектура подобного чат-бота?
Пока что я пришёл к такому варианту:
Интерфейс бота принимает сообщение пользователя —> NLP —> обученная нейронка -sparql запрос-> RDF модель (векторная),
соответственно после выполнения запроса получаем один или несколько субъектов (моделей одежды) которые отправляем в ответ пользователю
Подскажите, пожалуйста, как должен/может быть построен подобный бот и насколько правильная приведённая выше архитектура? В каких сторонах надо покопать?
Сеть синонимов с "весами" "цепочек" объектов и их свойств. (просто связи, не нейронка)
Здесь всё крайне просто, т.к. не требуется понимания действий и отношений.
я так понимаю это и должно получиться после NLP - сеть синонимов с весами (расстояниями) между словами запроса пользователя.
а дальше, возможно, с использованием статистических методов создаем запрос(ы) sparql?
что-то такое?
как я понимаю, без некоторого подобия RDF модели не обойтись (например используя только реляционную БД)?
VaniLuksh, не нужно пытаться усложнять ничего: никакого NLP, sparql или что-то такого....
Обычная БД, обычные запросы, расстояние Хемминга даёт суммарный "вес" нужных узлов (товаров).
xmoonlight, например, для товара "Спортивные штаны Nike" у меня есть связные параметры в БД: Цвет - Серый, Тип - штаны, Спорт - бег и т.д. У каждого параметра есть "вес" (длина).
есть пользовательский запрос "выбери штаны для бега", бот создает сеть синонимов данного запроса и получает "вес" (длину) запроса
дальше по "весу" запроса находится товар, сумма "весов" параметров которого имеет наименьшее расстояние Хемминга с "весом" запроса?
ну и желательно приведение пользовательского запроса и параметров товара в нормальную форму слова
Одно слово (и все его словоформы и синонимы) - это конкретный ID.
Сопоставляете слова (+синонимы этого слова) к ID, и после - работаете ТОЛЬКО с ID-шниками.
И бонусом - становится максимально легко добавлять синонимы, аббривиатуры, etc.
(Потом, можете добавить также группы - словосочетания).
Также, не забудьте, что Вы, помимо учёта длины, должны также учитывать "вес" рёбер (т.е., конкретику) и направление следования связей при переходах от узла к узлу.
единственное не понял как вычисляется "вес" ребер?
и, может быть, Вы сможете подсказать как называются такие графы или алгоритмы или технологии, в общем, что гуглить))
VaniLuksh, вес рёбер - это конкретизация искомого в запросе (2-й фактор выборки, параллельный). Например:
лист дерева - это ребро со значением 2
лист клёна - это ребро со значением 1
Нет единой архитектуры. Каждый разработчик создаёт свою архитектуру и у всех разные стеки технологий.
Однозначного ответа нет.
Приведённая вами архитектура имеет право на существование. Остальное - дело реализации.
да, я понимаю что возможны разные реализации
однако, хотелось бы узнать какие еще есть варианты, стеки технологий, какие плюсы/минусы
известно, что существуют такие решения как dialogflow, wit.ai, RASA, но опять же хотелось бы узнать на что из них стоит обратить первоочередное внимание при решении конкретной задачи.
Не совсем понятно, потянет ли такую задачу dialogflow или wit.ai или же изначально стоит задуматься о более глубокой проработке