Страница 1 из 9

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

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

Теперь вопрос:
В чём недостатки моего метода логики работы?
Как посоветуете улучшить логику?
Как бы сделали вы сами?
Ваще в чём я не прав?

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

СообщениеДобавлено: 05.06.2017 09:44:40
Лекс Айрин
А как учитываются ситуации, когда есть более одного корня? А что делает бот, если слово незнакомо?

Лично я бы постарался построить синтаксическое дерево запроса -- пассажи можно неправильно понять, да и БД в этом случае будет раздуваться.

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

СообщениеДобавлено: 05.06.2017 15:58:05
azsx
как учитываются ситуации, когда есть более одного корня?

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

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

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

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

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

СообщениеДобавлено: 05.06.2017 16:50:58
Лекс Айрин
azsx писал(а):Приведите, пожалуйста, пример.


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

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

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


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

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


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

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

СообщениеДобавлено: 05.06.2017 16:56:25
vitaly_l
Лекс Айрин писал(а):многооконный (по правилам языка здесь 2 корня)

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

И в чём секрет, если не секрет?

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

СообщениеДобавлено: 05.06.2017 17:04:37
Лекс Айрин
vitaly_l писал(а):паро-воз. скало-грыз. мёдо-ед.


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

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


Мухи отдельно, котлеты отдельно.
Тот же пассаж может храниться в виде метаправила: "если есть прилагательное относящееся к слову "печь", то это глагол".

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

СообщениеДобавлено: 05.06.2017 17:05:44
vitaly_l
Лекс Айрин писал(а):"если есть прилагательное относящееся к слову "печь", то это глагол".

А как отличить прилагательное?
Какое небо голубое? Мы не сторонники разбоя! <= И где здесь глагол?

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

СообщениеДобавлено: 05.06.2017 17:16:43
azsx
Воля, вол и волость, пусти и пустяк... например.

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

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

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

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

Из той же оперы, потом помечтаем и всё будет. и анализ и прочее.
"Почему небо голубое?" -- это вопрос. А "Какое небо голубое? Мы не сторонники разбоя!" -- это не вопрос, я не знаю, что надо ответить.

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

СообщениеДобавлено: 05.06.2017 17:26:47
Лекс Айрин
vitaly_l, любая часть речи программно определяется в некоторой долей вероятность.

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


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

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


ну-ну... пробуй.

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

СообщениеДобавлено: 05.06.2017 17:42:17
vitaly_l
azsx писал(а):это не вопрос, я не знаю, что надо ответить.

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

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

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

взято из вики

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

СообщениеДобавлено: 05.06.2017 17:50:22
azsx
qaa_question ilike '%почему%небо%голубое%';
45 ответов. В основном ответы нормальные, оценить ответ можно будет сразу + и -.
Но:
qaa_question ilike '%какое%небо%голубое%';
7 ответов. Правда всё ерунда какая то, с натяжкой можно парочку ответами назвать. Нужна база.

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

СообщениеДобавлено: 05.06.2017 17:55:03
Лекс Айрин
vitaly_l, эх.. слишком много букв...

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

СообщениеДобавлено: 05.06.2017 17:56:25
azsx
эх.. слишком много букв...

какого ответа ожидаете вы на "Почему небо голубое? "?

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

СообщениеДобавлено: 05.06.2017 17:57:04
Лекс Айрин
azsx писал(а):qaa_question ilike '%какое%небо%голубое%';


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

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

СообщениеДобавлено: 05.06.2017 17:59:54
azsx
в данном контексте, "какое" можно заменить на "насколько"

ни одного ответа. В чём смысл этих вопросов сейчас? Пока надо над логикой подумать которая будет сразу, после запуска.