xmoonlight
@xmoonlight
https://sitecoder.blogspot.com

Бот, понимающий смысл?

Пишу себе бота для ответа на вопросы по заранее заданному небольшому повествовательному тексту.
Это моё личное исследование и попытка создать что-то нормально работающее (а не полуфабрикат!).

Как наиболее простым способом добиться понимания фраз ботом и их грамотного построения/формирования при его ответе на пользовательские фразы?

Просто краткий порядок действий для разложения текста на сущности с их смысловыми связями.
Или сам механизм создания правил.

Главное:
1. Без использования сторонних либ.
2. Без использования обучающих данных.

Если кто имел опыт разработки подобного - буду рад любым кратким, но верным направлениям и подходам.

Заранее, Спасибо Всем!
  • Вопрос задан
  • 1335 просмотров
Пригласить эксперта
Ответы на вопрос 9
Lucian
@Lucian
https://ttttt.me/joinchat/AAAAAEyBK_H_kjlMf7ALig
Если подход "в лоб", то делать поиск в присланном сообщении по словам, выдавать заранее готовые уточняющие вопросы, к примеру:
- Хочу купить покемона, сколько будет стоить доставка?

Ключевые слова: купить, покемона, сколько, стоить, доставка

Покемон - это вещь в каталоге, значит можно показать варианты покемонов.
Доставка - это действие, значит можно показать стоимость.

Выдаем варианты кнопками:
- Выбрать покемона
- Стоимость доставки

Если более правильно, то гуглите world2vec, тогда обученный бот уже будет понимать контекст, т.к. пример выше самый простой.

Проблема 1 ваш бот не поймет повествование, пока не научится понимать его смысл, т.е. выделять один контекст из миллионов, который вы или другой человек сможете трактовать как правильный.

Проблема 2 ваш друг сидящий рядом скажет что бот тупой т.к. на ваш вопрос, бот ответил бессмыслицу, которая понятна только вам, но не вашему другу.

Проблема 3 это получить ответ от бота одинаково понятный вам и другу.

Вот набросал, смотрите как это работает
AWwZZbl.gif

Окружающий мир и другие люди загоняют нас в рамки:
- туда не ходи
- здесь не трогай
- где родился, там и пригодился
- это не солнце, а луна
- трава зеленого цвета, а не коричневая
- и т.д. миллионы контекстов

Каждый контекст - это вектор, кусок нашего опыта, весь набор контекстов определяет вашу личность.
Чтобы вы были на одной волне с ботом, у вас должны быть похожие с ним вектора. Т.е. вам нужно создать такую среду для бота, чтобы он испытывал теже ограничения что и большинство окружающих вас людей.

Попробуйте объяснить какому нибудь человеку из древнего африканского племени, что есть людей - это нехорошо, он не поймет вас, т.к. он вырос в другой среде, с абсолютно другими рамками и устоями.

Создать такого бота, это тоже самое что вырастить ребенка, т.е. сложно, но вполне возможно.

Начните с этого видео, чтобы понять что я имею в виду, когда говорю "создать среду".
Ответ написан
@mayton2019
Ent. Software engineer. Oracle. SQL. BigData.
Можно начать с построения семантической сети по тексту.
После того как сеть будет построена. Задача бота сводится по поиску вершин и рёбер в этой сети.
Вершины и ребра будут по сути ответом на поставленный вопрос.

С ботами я никогда не имел дела. Но разбирался как работает RDF/Semantic web/GraphQl.

Но это всё из области четкой логики. Из того что умерло в 80х вместе с языком Пролог и Лисп.

Возможно современные боты строятся как-то по другому. На базе нечетких (аналоговых или вещественных
понятий). Например если Саша любит Машу - то с точки зрения нечеткой логики это не факт
а просто величина чуть меньше единицы. Предположение. И если по тексту будет много фактов
проявления любовей от Саши то в этом случае эта нечеткая связь будет расти и крепнуть
по некой функции с насыщением но никогда не достигнет единички а просто так и останется
предположением. Сюда-же до кучи механику нейроных сетей.

Хотя КМК НС плохо подходят для текстовых задач. У них есть большой лимит по памяти. Сеть хорошо
обобщает факты. Но плохо помнит частные случаи.
Ответ написан
@Dmtm
Android
семантику через синтаксис не получить (только частично, на уровне связей объект-свойство и объект-действие)
текст не содержит в себе весь смысл высказывания, есть подразумевающееся, неявное
контекст достраивается на основе собственной модели окружающего мира
и это наивная модель (чашка на столе стоит, вилка лежит, вода мокрая, земля плоская и т.д.)
ее построение невозможно без реализации/имитации всех 5-ти человеческих каналов восприятия
в итоге - строим модель каждого участника, текст как воздействие моделей друг на друга
на примитивном уровне - реализуется семантическими фреймами
Ответ написан
Jeer
@Jeer
уверенный пользователь
Дак чего ты, хардкодь в ООП. Делай дерево биологической семантики (вид, род, отряд, класс). Чтобы разобрать такие вещи как "он ел её семью своими глазами"
Затем строй деревья по всем объектам используя наследование. Чтобы появились стол/стул и прочие вещи.
И тут да, какой смысл именно ты заложишь в каждое слово. Например, что такое счастье? Можно долго размусоливать это слово. А можно дать чёткое определение, к примеру, "временное состояние, когда желание осуществилось (поставленная цель достигнута)". И всё это на придуманном вами мета-языке )
На каждое слово привязывай все возможные словоформы, включая написание с ошибками.
Затем делай обработку предложений, вытаскивай все возможные варианты смыслов.
Добавляй контекст, т.е. создавай личность ботам. Обмазывай это дело психологическими утехами (классификации личностей из разных исследований).
По предыдущим двум пунктам на варианты можно прикрутить веса этих смыслов.
Самое главное, у бота должна быть цель. Просто общение ни о чем не получится. Вот, к примеру, составить психологический портрет другого участника - это цель. Под неё необходимо задавать какие-то вопросы. При этом, навешивая психологию (это же модель, упрощённые базовые правила) получается, что и на вопросы надо отвечать боту, располагая к себе, чтобы можно было задавать более личные вопросы. Ну или не знаю, какая у вас цель. Найти проблему у человека и предложить возможность её решить, взяв комиссию, мда, было бы неплохо )
Ответ написан
origami1024
@origami1024
went out for a night walk
Просто краткий порядок действий для разложения текста на сущности с их смысловыми связями.

В тексте нет сущностей и смысловых связей, максимум что там етсь это последовательность символов построенная по очень размытым правилам. Символы в тексте работают как напоминания о чем-то что уже есть в мозге и уже связано со всей остальной инфой вне зависимости от текста.
Смысловые связи и сущности нужно искать в мозге, а не в тексте.
Ответ написан
@Karpion
Сначала надо распарсить текст на подлежащие, сказуемые и остальные части предложений. И тут уже начинаются проблемы: "крокодил" - это подлежащее или сказуемое прошлого рода?

Дальше будут иные сложности. Например, в тексте м.б. что-то типа

Вася сказал:
- Там был синий шар.
Петя возразил:
- Нет, шар был красный.
Ваш бот должен понимать речь персонажей - и учитывать, что персонажи могут лгать.
Или там чистое повествование, без прямой речи?

Будут проблемы с пониманием местоимений - это в принципе неоднозначно.
Ответ написан
@AlexSku
Программист по автоматике
1) Есть ли смысл?:
Варкалось. Хливкие шорьки
Пырялись по наве,
И хрюкотали зелюки,
Как мюмзики в мове.


2) Философы до сих пор ищут смысл (в) жизни. (попы-то, конечно, знают: работай на хозяина, мне отдавай 10%, счастье будет после смерти)

3) Вывод: одного текста (случай из жизни семьи у моря) недостаточно, надо кратко описать жизнедеятельность человечества.
Ответ написан
Bavashi
@Bavashi
Не получится так сделать. Все, что можно это свести к графовой структуре распарсенное предложение с заранее определенными "смыслами", что все равно не будет работать во всех случаях. Водавопрос.
Ответ написан
@SODINNER
Главное:
1. Без использования сторонних либ.
2. Без использования обучающих данных.

На этом можно закрыть вопрос. Если хочешь заниматься таким, учи Natural Language Processing.
Ну или машинное обучение имея например куча диалогов, скормить программе.
В любом из этих двух случае тебе нужна стороняя либа, обучающие данные только для второго.
Ну или тебе придётся писать эту либу самому, хотя бы самое необходимое из этой либы.
Но раз ты задаешь этот вопрос, скорее всего ты еще не дорос уровня программиста, чтобы быть в состоянии писать такой код, да и еще в одиночку, ведь над популярными либами работает не один человек.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы