Логика поиска конкретных слов из кучи
Модератор: Модераторы
Логика поиска конкретных слов из кучи
Я хочу написать чат бота уровня вопрос - ответ (100500 по счёту), столкнулся с следующей проблемой. Допустим есть набор слов из вопроса клиента:
слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 слово9 слово10
Я хочу изначально использовать aiml, который по командам буду впоследствии значительно расширять. Сегодня у меня база 1 724 384 вопросов - ответов, есть возможность значительно увеличить её.
----------
Что я планирую сделать.
Первый вариант:
Я хочу разбить базу вопросов в моей базе по уникальным словам и выделить с них корни. Записать их в базу по принципу поле - коренное слово; поле - номер вопроса.
При поступлении запроса от клиента я разбиваю запрос на слова, выделяю корни, ищу максимальны процент похожести в БД. Соответственно нахожу наиболее релевантный - выдаю ответ по номеру.
----------
Второй вариант:
Всё то же самое, только статистически нахожу неделимые пассажи и их считаю за одно слово, придавая им приоритет в поиске. Начну с 4 слов и до одного.
зы
Что такое пассажи, например, 2 слова. Есть два вопроса: 1. Как печь пироги; 2. Какую печь выбрать.
Делим на пассажи: 1. как печь, печь пироги; 2. какую печь, печь выбрать. Статистически я буду более верно угадывать запрос клиента и выдавать ему релевантный ответ, то есть когда он спрашивает печь - глагол, то получит рецепты; а когда печь - существительное, то получит рекомендации.
***********
Плюсы моих способов: сразу можно начать; всё будет в БД; запросы в БД будут like, которые очень легко масштабируются; не важен входной и выходной язык запроса, лишь бы utf8; не имеет значения язык программирования для реализации.
Про неважно какой язык. По сути вся логика бота будет в БД. Таким образом надо написать веб (десктоп) морду, которая отправляет запрос в БД и собственно заполнить БД. Вот чем заполнять будем -- значения не имеет. Паскаль, пхп или джава. Главное, чтобы не мусором заполняли.
Будут няшки сразу типа оценка ответа и предложите свой вариант с блокировкой мата, экстремизма, религии, политики.
Уфф.....
Теперь вопрос:
В чём недостатки моего метода логики работы?
Как посоветуете улучшить логику?
Как бы сделали вы сами?
Ваще в чём я не прав?
слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 слово9 слово10
Я хочу изначально использовать aiml, который по командам буду впоследствии значительно расширять. Сегодня у меня база 1 724 384 вопросов - ответов, есть возможность значительно увеличить её.
----------
Что я планирую сделать.
Первый вариант:
Я хочу разбить базу вопросов в моей базе по уникальным словам и выделить с них корни. Записать их в базу по принципу поле - коренное слово; поле - номер вопроса.
При поступлении запроса от клиента я разбиваю запрос на слова, выделяю корни, ищу максимальны процент похожести в БД. Соответственно нахожу наиболее релевантный - выдаю ответ по номеру.
----------
Второй вариант:
Всё то же самое, только статистически нахожу неделимые пассажи и их считаю за одно слово, придавая им приоритет в поиске. Начну с 4 слов и до одного.
зы
Что такое пассажи, например, 2 слова. Есть два вопроса: 1. Как печь пироги; 2. Какую печь выбрать.
Делим на пассажи: 1. как печь, печь пироги; 2. какую печь, печь выбрать. Статистически я буду более верно угадывать запрос клиента и выдавать ему релевантный ответ, то есть когда он спрашивает печь - глагол, то получит рецепты; а когда печь - существительное, то получит рекомендации.
***********
Плюсы моих способов: сразу можно начать; всё будет в БД; запросы в БД будут like, которые очень легко масштабируются; не важен входной и выходной язык запроса, лишь бы utf8; не имеет значения язык программирования для реализации.
Про неважно какой язык. По сути вся логика бота будет в БД. Таким образом надо написать веб (десктоп) морду, которая отправляет запрос в БД и собственно заполнить БД. Вот чем заполнять будем -- значения не имеет. Паскаль, пхп или джава. Главное, чтобы не мусором заполняли.
Будут няшки сразу типа оценка ответа и предложите свой вариант с блокировкой мата, экстремизма, религии, политики.
Уфф.....
Теперь вопрос:
В чём недостатки моего метода логики работы?
Как посоветуете улучшить логику?
Как бы сделали вы сами?
Ваще в чём я не прав?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
А как учитываются ситуации, когда есть более одного корня? А что делает бот, если слово незнакомо?
Лично я бы постарался построить синтаксическое дерево запроса -- пассажи можно неправильно понять, да и БД в этом случае будет раздуваться.
Лично я бы постарался построить синтаксическое дерево запроса -- пассажи можно неправильно понять, да и БД в этом случае будет раздуваться.
как учитываются ситуации, когда есть более одного корня?
Приведите, пожалуйста, пример.
Я тут стал заумные лекции слушать, моё определение не правильное. Однокоренные слова: рыба и рыбалка. Корень один, а слова совсем разные. Я же буду сокращать связанные слова: рыба, рыбка, рыбина или рыбалка, рыбачит.
А что делает бот, если слово незнакомо?
Учитывая, что у меня изначально 1,7*10^6 вопросов на входе, вам надо будет постараться, чтобы незнакомое слово придумать. Другой вопрос, например, я поставлю, чтобы для ответа надо совпадение 50% из запроса с вопросом в базе. А будет 30% совпадений. Пока, что я буду делать я точно не знаю, но предполагаю, что в отличии от конкурентов буду отвечать честно (не понял вопроса, задайте его иначе) или пустое сообщение.
я бы постарался построить синтаксическое дерево запроса -- пассажи можно неправильно понять
Приведите, пожалуйста, пример.
Что значит не так понять пассаж? Статистически, да, ошибки будут, но их будет мало.
да и БД в этом случае будет раздуваться
Напишите, пожалуйста, как лучше.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
azsx писал(а):Приведите, пожалуйста, пример.
Воля, вол и волость, пусти и пустяк... например. Или (вариант2) многооконный (по правилам языка здесь 2 корня)
azsx писал(а):Приведите, пожалуйста, пример.
Что значит не так понять пассаж?
"пить есть, есть нет" -- мы поймем, а вот программа может и не очень.
azsx писал(а):Учитывая, что у меня изначально 1,7*10^6 вопросов на входе, вам надо будет постараться, чтобы незнакомое слово придумать.
Как два байта переслать -- профессиональное требование.
azsx писал(а):Напишите, пожалуйста, как лучше.
Я уже написал -- дерево разбора предложения. Тогда программа может хотя бы понять, что какое-то слово есть глагол (действие), а какое-то может показать над чем оно производится.
Лекс Айрин писал(а):многооконный (по правилам языка здесь 2 корня)
паро-воз. мёдо-ед. скало-грыз... и волшебное слово стемминг.
Лекс Айрин писал(а):Я уже написал -- дерево разбора предложения. Тогда программа может хотя бы понять, что какое-то слово есть глагол (действие), а какое-то может показать над чем оно производится.
И в чём секрет, если не секрет?
Последний раз редактировалось vitaly_l 05.06.2017 16:04:49, всего редактировалось 1 раз.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
vitaly_l писал(а):паро-воз. скало-грыз. мёдо-ед.
тогда уж по правилам: пар-о-воз, Скал-о-грыз...
vitaly_l писал(а):И в чём секрет, если не секрет?
Мухи отдельно, котлеты отдельно.
Тот же пассаж может храниться в виде метаправила: "если есть прилагательное относящееся к слову "печь", то это глагол".
Лекс Айрин писал(а):"если есть прилагательное относящееся к слову "печь", то это глагол".
А как отличить прилагательное?
Какое небо голубое? Мы не сторонники разбоя! <= И где здесь глагол?
Воля, вол и волость, пусти и пустяк... например.
Уже написал, смысл избавиться от склонений и прочего (вывести лексемы из Зализняка), а не выделить корень -- я ошибся. То есть это три разных слова, я их как три слова буду хранить. Ой 5 слов.
"пить есть, есть нет" -- мы поймем, а вот программа может и не очень.
Очень важно понять зачем программе понимать такое предложение? Вы поймёте и что ответите? И какого ответа ожидаете от программы? Будет самообучение, если чо...
Тогда программа может хотя бы понять, что какое-то слово есть глагол (действие), а какое-то может показать над чем оно производится.
Да, но это будет ИИ, а мне надо экспертную систему. Начну с малого (более реального).
зы
qaa_question ilike '%профессиональное%требование%' OR qaa_answer ilike '%профессиональное%требование%';
всего 1 совпадение. Но у вас два слова и у меня просто начальная база, чтобы было на чём пробовать.
Нет сжатия, требования к последовательности, мелкая база.
Например,
qaa_question ilike '%профессиональные%требования%' OR qaa_answer ilike '%профессиональные%требования%';
уже 11 совпадений.
Добавлено спустя 4 минуты 18 секунд:
Какое небо голубое? Мы не сторонники разбоя!
Из той же оперы, потом помечтаем и всё будет. и анализ и прочее.
"Почему небо голубое?" -- это вопрос. А "Какое небо голубое? Мы не сторонники разбоя!" -- это не вопрос, я не знаю, что надо ответить.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
vitaly_l, любая часть речи программно определяется в некоторой долей вероятность.
А тут его и нет)))
Добавлено спустя 4 минуты 25 секунд:
ну-ну... пробуй.
vitaly_l писал(а): <= И где здесь глагол?
А тут его и нет)))
Добавлено спустя 4 минуты 25 секунд:
azsx писал(а): Начну с малого (более реального).
ну-ну... пробуй.
azsx писал(а):это не вопрос, я не знаю, что надо ответить.
Чтобы правильно ответить, нужно посмотреть фильм про злобного Буратино, который отрезал несчастному Карабасу и Баррабасу бороду.
В смысле, задумайтесь, что в таких ситуациях должна делать ваша программа? Потому что, если вы этого не сделаете, то программа, на фразу: Какое небо голубое?! - начнёт отвечать про, Диффузное излучение неба, примерно вот это:
Код: Выделить всё
Почему небо голубое?
Небо выглядит голубым по той причине, что воздух рассеивает свет с короткой длиной волны сильнее длинноволнового излучения света. Интенсивность рассеяния Релея, обусловленного флуктуациями количества молекул газов воздуха в объемах, соизмеримых с длинами волн света, пропорционально 1/λ4, λ - длина волны, т. е. фиолетовый участок видимого спектра рассеивается в приблизительно 16 раз интенсивнее красного. Так как излучение синего цвета имеет более короткую длину волны, в конце видимого спектра, он больше рассеивается в атмосфере, чем красный. Благодаря этому участок неба вне направления на Солнце имеет голубой цвет (но не фиолетовый, так как солнечный спектр неравномерный и интенсивность фиолетового цвета в нём меньше, а также вследствие меньшей чувствительности глаза к фиолетовому цвету и большей к синему, который раздражает не только чувствительные к синему цвету колбочки в сетчатке, но и чувствительные к красным и зеленым лучам).
взято из вики
qaa_question ilike '%почему%небо%голубое%';
45 ответов. В основном ответы нормальные, оценить ответ можно будет сразу + и -.
Но:
qaa_question ilike '%какое%небо%голубое%';
7 ответов. Правда всё ерунда какая то, с натяжкой можно парочку ответами назвать. Нужна база.
45 ответов. В основном ответы нормальные, оценить ответ можно будет сразу + и -.
Но:
qaa_question ilike '%какое%небо%голубое%';
7 ответов. Правда всё ерунда какая то, с натяжкой можно парочку ответами назвать. Нужна база.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
vitaly_l, эх.. слишком много букв...
эх.. слишком много букв...
какого ответа ожидаете вы на "Почему небо голубое? "?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
azsx писал(а):qaa_question ilike '%какое%небо%голубое%';
в данном контексте, "какое" можно заменить на "насколько"
в данном контексте, "какое" можно заменить на "насколько"
ни одного ответа. В чём смысл этих вопросов сейчас? Пока надо над логикой подумать которая будет сразу, после запуска.
