Логика поиска конкретных слов из кучи

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Логика поиска конкретных слов из кучи

Сообщение azsx » 05.06.2017 07:11:15

Я хочу написать чат бота уровня вопрос - ответ (100500 по счёту), столкнулся с следующей проблемой. Допустим есть набор слов из вопроса клиента:
слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 слово9 слово10
Я хочу изначально использовать aiml, который по командам буду впоследствии значительно расширять. Сегодня у меня база 1 724 384 вопросов - ответов, есть возможность значительно увеличить её.
----------
Что я планирую сделать.
Первый вариант:
Я хочу разбить базу вопросов в моей базе по уникальным словам и выделить с них корни. Записать их в базу по принципу поле - коренное слово; поле - номер вопроса.
При поступлении запроса от клиента я разбиваю запрос на слова, выделяю корни, ищу максимальны процент похожести в БД. Соответственно нахожу наиболее релевантный - выдаю ответ по номеру.
----------
Второй вариант:
Всё то же самое, только статистически нахожу неделимые пассажи и их считаю за одно слово, придавая им приоритет в поиске. Начну с 4 слов и до одного.
зы
Что такое пассажи, например, 2 слова. Есть два вопроса: 1. Как печь пироги; 2. Какую печь выбрать.
Делим на пассажи: 1. как печь, печь пироги; 2. какую печь, печь выбрать. Статистически я буду более верно угадывать запрос клиента и выдавать ему релевантный ответ, то есть когда он спрашивает печь - глагол, то получит рецепты; а когда печь - существительное, то получит рекомендации.
***********
Плюсы моих способов: сразу можно начать; всё будет в БД; запросы в БД будут like, которые очень легко масштабируются; не важен входной и выходной язык запроса, лишь бы utf8; не имеет значения язык программирования для реализации.
Про неважно какой язык. По сути вся логика бота будет в БД. Таким образом надо написать веб (десктоп) морду, которая отправляет запрос в БД и собственно заполнить БД. Вот чем заполнять будем -- значения не имеет. Паскаль, пхп или джава. Главное, чтобы не мусором заполняли.
Будут няшки сразу типа оценка ответа и предложите свой вариант с блокировкой мата, экстремизма, религии, политики.
Уфф.....

Теперь вопрос:
В чём недостатки моего метода логики работы?
Как посоветуете улучшить логику?
Как бы сделали вы сами?
Ваще в чём я не прав?
azsx
энтузиаст
 
Сообщения: 896
Зарегистрирован: 16.11.2015 06:38:32

Re: Логика поиска конкретных слов из кучи

Сообщение Лекс Айрин » 05.06.2017 09:44:40

А как учитываются ситуации, когда есть более одного корня? А что делает бот, если слово незнакомо?

Лично я бы постарался построить синтаксическое дерево запроса -- пассажи можно неправильно понять, да и БД в этом случае будет раздуваться.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4096
Зарегистрирован: 19.02.2013 16:54:51

Re: Логика поиска конкретных слов из кучи

Сообщение azsx » 05.06.2017 15:58:05

как учитываются ситуации, когда есть более одного корня?

Приведите, пожалуйста, пример.
Я тут стал заумные лекции слушать, моё определение не правильное. Однокоренные слова: рыба и рыбалка. Корень один, а слова совсем разные. Я же буду сокращать связанные слова: рыба, рыбка, рыбина или рыбалка, рыбачит.
А что делает бот, если слово незнакомо?

Учитывая, что у меня изначально 1,7*10^6 вопросов на входе, вам надо будет постараться, чтобы незнакомое слово придумать. Другой вопрос, например, я поставлю, чтобы для ответа надо совпадение 50% из запроса с вопросом в базе. А будет 30% совпадений. Пока, что я буду делать я точно не знаю, но предполагаю, что в отличии от конкурентов буду отвечать честно (не понял вопроса, задайте его иначе) или пустое сообщение.
я бы постарался построить синтаксическое дерево запроса -- пассажи можно неправильно понять

Приведите, пожалуйста, пример.
Что значит не так понять пассаж? Статистически, да, ошибки будут, но их будет мало.
да и БД в этом случае будет раздуваться

Напишите, пожалуйста, как лучше.
azsx
энтузиаст
 
Сообщения: 896
Зарегистрирован: 16.11.2015 06:38:32

Re: Логика поиска конкретных слов из кучи

Сообщение Лекс Айрин » 05.06.2017 16:50:58

azsx писал(а):Приведите, пожалуйста, пример.


Воля, вол и волость, пусти и пустяк... например. Или (вариант2) многооконный (по правилам языка здесь 2 корня)
azsx писал(а):Приведите, пожалуйста, пример.
Что значит не так понять пассаж?

"пить есть, есть нет" -- мы поймем, а вот программа может и не очень.

azsx писал(а):Учитывая, что у меня изначально 1,7*10^6 вопросов на входе, вам надо будет постараться, чтобы незнакомое слово придумать.


Как два байта переслать -- профессиональное требование.

azsx писал(а):Напишите, пожалуйста, как лучше.


Я уже написал -- дерево разбора предложения. Тогда программа может хотя бы понять, что какое-то слово есть глагол (действие), а какое-то может показать над чем оно производится.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4096
Зарегистрирован: 19.02.2013 16:54:51

Re: Логика поиска конкретных слов из кучи

Сообщение vitaly_l » 05.06.2017 16:56:25

Лекс Айрин писал(а):многооконный (по правилам языка здесь 2 корня)

паро-воз. мёдо-ед. скало-грыз... и волшебное слово стемминг.
Лекс Айрин писал(а):Я уже написал -- дерево разбора предложения. Тогда программа может хотя бы понять, что какое-то слово есть глагол (действие), а какое-то может показать над чем оно производится.

И в чём секрет, если не секрет?
Последний раз редактировалось vitaly_l 05.06.2017 17:04:49, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3070
Зарегистрирован: 31.01.2012 16:41:41

Re: Логика поиска конкретных слов из кучи

Сообщение Лекс Айрин » 05.06.2017 17:04:37

vitaly_l писал(а):паро-воз. скало-грыз. мёдо-ед.


тогда уж по правилам: пар-о-воз, Скал-о-грыз...

vitaly_l писал(а):И в чём секрет, если не секрет?


Мухи отдельно, котлеты отдельно.
Тот же пассаж может храниться в виде метаправила: "если есть прилагательное относящееся к слову "печь", то это глагол".
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4096
Зарегистрирован: 19.02.2013 16:54:51

Re: Логика поиска конкретных слов из кучи

Сообщение vitaly_l » 05.06.2017 17:05:44

Лекс Айрин писал(а):"если есть прилагательное относящееся к слову "печь", то это глагол".

А как отличить прилагательное?
Какое небо голубое? Мы не сторонники разбоя! <= И где здесь глагол?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3070
Зарегистрирован: 31.01.2012 16:41:41

Re: Логика поиска конкретных слов из кучи

Сообщение azsx » 05.06.2017 17:16:43

Воля, вол и волость, пусти и пустяк... например.

Уже написал, смысл избавиться от склонений и прочего (вывести лексемы из Зализняка), а не выделить корень -- я ошибся. То есть это три разных слова, я их как три слова буду хранить. Ой 5 слов.
"пить есть, есть нет" -- мы поймем, а вот программа может и не очень.

Очень важно понять зачем программе понимать такое предложение? Вы поймёте и что ответите? И какого ответа ожидаете от программы? Будет самообучение, если чо...
Тогда программа может хотя бы понять, что какое-то слово есть глагол (действие), а какое-то может показать над чем оно производится.

Да, но это будет ИИ, а мне надо экспертную систему. Начну с малого (более реального).
зы
qaa_question ilike '%профессиональное%требование%' OR qaa_answer ilike '%профессиональное%требование%';
всего 1 совпадение. Но у вас два слова и у меня просто начальная база, чтобы было на чём пробовать.
Нет сжатия, требования к последовательности, мелкая база.
Например,
qaa_question ilike '%профессиональные%требования%' OR qaa_answer ilike '%профессиональные%требования%';
уже 11 совпадений.

Добавлено спустя 4 минуты 18 секунд:
Какое небо голубое? Мы не сторонники разбоя!

Из той же оперы, потом помечтаем и всё будет. и анализ и прочее.
"Почему небо голубое?" -- это вопрос. А "Какое небо голубое? Мы не сторонники разбоя!" -- это не вопрос, я не знаю, что надо ответить.
azsx
энтузиаст
 
Сообщения: 896
Зарегистрирован: 16.11.2015 06:38:32

Re: Логика поиска конкретных слов из кучи

Сообщение Лекс Айрин » 05.06.2017 17:26:47

vitaly_l, любая часть речи программно определяется в некоторой долей вероятность.

vitaly_l писал(а): <= И где здесь глагол?


А тут его и нет)))

Добавлено спустя 4 минуты 25 секунд:
azsx писал(а): Начну с малого (более реального).


ну-ну... пробуй.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4096
Зарегистрирован: 19.02.2013 16:54:51

Re: Логика поиска конкретных слов из кучи

Сообщение vitaly_l » 05.06.2017 17:42:17

azsx писал(а):это не вопрос, я не знаю, что надо ответить.

Чтобы правильно ответить, нужно посмотреть фильм про злобного Буратино, который отрезал несчастному Карабасу и Баррабасу бороду.

В смысле, задумайтесь, что в таких ситуациях должна делать ваша программа? Потому что, если вы этого не сделаете, то программа, на фразу: Какое небо голубое?! - начнёт отвечать про, Диффузное излучение неба, примерно вот это:
Код: Выделить всё
Почему небо голубое?

Небо выглядит голубым по той причине, что воздух рассеивает свет с короткой длиной волны сильнее длинноволнового излучения света. Интенсивность рассеяния Релея, обусловленного флуктуациями количества молекул газов воздуха в объемах, соизмеримых с длинами волн света, пропорционально 1/λ4, λ - длина волны, т. е. фиолетовый участок видимого спектра рассеивается в приблизительно 16 раз интенсивнее красного. Так как излучение синего цвета имеет более короткую длину волны, в конце видимого спектра, он больше рассеивается в атмосфере, чем красный. Благодаря этому участок неба вне направления на Солнце имеет голубой цвет (но не фиолетовый, так как солнечный спектр неравномерный и интенсивность фиолетового цвета в нём меньше, а также вследствие меньшей чувствительности глаза к фиолетовому цвету и большей к синему, который раздражает не только чувствительные к синему цвету колбочки в сетчатке, но и чувствительные к красным и зеленым лучам).

взято из вики
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3070
Зарегистрирован: 31.01.2012 16:41:41

Re: Логика поиска конкретных слов из кучи

Сообщение azsx » 05.06.2017 17:50:22

qaa_question ilike '%почему%небо%голубое%';
45 ответов. В основном ответы нормальные, оценить ответ можно будет сразу + и -.
Но:
qaa_question ilike '%какое%небо%голубое%';
7 ответов. Правда всё ерунда какая то, с натяжкой можно парочку ответами назвать. Нужна база.
azsx
энтузиаст
 
Сообщения: 896
Зарегистрирован: 16.11.2015 06:38:32

Re: Логика поиска конкретных слов из кучи

Сообщение Лекс Айрин » 05.06.2017 17:55:03

vitaly_l, эх.. слишком много букв...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4096
Зарегистрирован: 19.02.2013 16:54:51

Re: Логика поиска конкретных слов из кучи

Сообщение azsx » 05.06.2017 17:56:25

эх.. слишком много букв...

какого ответа ожидаете вы на "Почему небо голубое? "?
azsx
энтузиаст
 
Сообщения: 896
Зарегистрирован: 16.11.2015 06:38:32

Re: Логика поиска конкретных слов из кучи

Сообщение Лекс Айрин » 05.06.2017 17:57:04

azsx писал(а):qaa_question ilike '%какое%небо%голубое%';


в данном контексте, "какое" можно заменить на "насколько"
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4096
Зарегистрирован: 19.02.2013 16:54:51

Re: Логика поиска конкретных слов из кучи

Сообщение azsx » 05.06.2017 17:59:54

в данном контексте, "какое" можно заменить на "насколько"

ни одного ответа. В чём смысл этих вопросов сейчас? Пока надо над логикой подумать которая будет сразу, после запуска.
azsx
энтузиаст
 
Сообщения: 896
Зарегистрирован: 16.11.2015 06:38:32

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru