Помощь - Поиск - Пользователи - Календарь
Полная версия: ИС
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
St@senk@
Здравствуйте, одна из тем форума помогла мне решиться и создать эту тему.
Предлагаю всем вместе, написать Искусственного Собеседника. Я знаю, что такой программы пока нет, поэтому предлагаю сначала написать программу, которая будет разговаривать на уровне 3-4 летнего ребенка. Написать эту программу – мечта всей моей жизни, поэтому я надеюсь, что эту идею кто-то поддержит.
Большое спасибо, что прочитали это сообщение.
compiler
на сайте была гдето ссылка на ресурс где такую рогу использовали...

Добавлено через 1 мин.
http://aquest.antichat.net/
Michael_Rybak
Цитата
Я знаю, что такой программы пока нет


Таких программ очень много. Очень неплохих, кстати.
St@senk@
Но идеальных нет, и хочется это пощупать, потрогать, прочувствовать алгоритмы и прочее smile.gif
Michael_Rybak
Удачи. Тема страшно богатая smile.gif
Артемий
Допустим это твоя мечта жизни?И что?Тебе надо написать программу,помочь?Ты не знаешь алгоритмы или что? Ты не можешь ее писать?

Добавлено через 55 сек.
И тем более раз так хочешь, развивай тему, предлагай, показывай!
Артемий
А чем собственно Дельфи не катит?Можно и там!
St@senk@
Цитата

Допустим это твоя мечта жизни?И что?Тебе надо написать программу,помочь?Ты не знаешь алгоритмы или что? Ты не можешь ее писать?

Добавлено через 55 сек.
И тем более раз так хочешь, развивай тему, предлагай, показывай!

Уважаемый Артемий2 , к чему такие наездные нотки в вашем голосе? я просто предложил обсудить идеи реализации этой программы, и рассказал, почему меня это интересует. У меня были свои идеи, но, к сожалению, их разбили мои друзья или попытки реализации. Если вы считаете, что эта тема не достойно жизни на этом форуме, то я предполагаю, что это решать пока не в твоей компетенции.

Цитата

А чем собственно Дельфи не катит?Можно и там!


Лично я пишу на Delphi, но так, как для решения этой задачи не нужны какие-то особые функции Delphi(как мне кажется), то я создал темы в более общем разделе.
Артемий
Ни о каком наезде и речи не было! Наоборот хотел больше знать и присоединиться в случае чего!Не знаю,что я в своем посте сказал..Мечта жизни-это хорошо!И может попросить переехать в Дельфи? smile.gif
мисс_граффити
Вот здесь статейка по теме. На примитивном уровне, но для начала может быть полезным...
Lapp
Идея сама по себе интересная (хотя, конечно, далеко не оригинальная). Я тоже готов участвовать в обсуждении, если получится.
Тема не совсем соответствует тому, что тут понимается под задачами, а скорее ближе по духу к играм (по крайней мере пока у нее не появится серьезного применения), поэтому переношу ее в раздел Игры.

Согласен с автором, что основным инструментом имеет смысл сделать Паскаль, а именно Opject Pascal (процедурный стиль тут явно проигрывает объектному).

Осталось - начать.. smile.gif Автор может предложить основу?

Наряду с семантикой (смысловой строной), а может даже впереди нее, мне видится, как проблема, простая орфография. Кстати, проглядывается некая связь с темой Чужака'а Лингвистическая Антонимическая Модель . Может, объединить усилия?
Артемий
good.gif good.gif Но мне кажется,что для такой штуки подойдет 32 битный компилятор?Например Free Pascal? smile.gif
St@senk@
Артемий2 , согласен, FPC отлично нам подойдет.

Вот моя идея:

Надо каким-то образом заставить компьютер рассуждать. Я попытался проанализировать ход моих мыслей при ответе на некоторые простые вопросы. И как мне показалось, я, когда мне говорят фразу, я воссоздаю картинку, которую мне описывают и дальше сравниваю её с тем, что у меня записано в памяти.

Поэтому я предлагаю сделать граф существительных, и к каждому существительному будет идти ребро, весом которого является набор характеристик. (Заяц - длинные, белые, смешные...->уши)

Далее идет лингвистический анализ предложения (как его делать идей нет, но почитаю кинутые статейки, может быть, идейки появятся).
Дальше мы получаем запрос, что мы делаем мы берем главное существительное и смотрим какие слова к нему относятся на втором уровне, и выделяем подграф, в котором верно: Любое ребро этого графа удовлетворяет следующему утверждению: либо один из параметров ребра содержится в предложении, либо хотя бы одна из вершин этого ребра содержится в предложении. Дальше мы анализируем этот граф на "хорошесть". Например, если граф не связный, то он точно плохой, и если в характеристиках его ребер присутствует "Не бывает" или что-то синонимичное, то граф тоже плохой, а если нет, то граф хороший.

Далее мы рассматриваем два случая, хорош ли граф или нет, если хорош, тогда мы составляем ответное предложение (как его составлять у меня пока идеи только смутные)

А если нет, то мы на том ребре, на котором написано, не бывает, мы смотрим на эмоцию и выражаем её, правда можно добавить смещение, то есть ввести просто общую эмоцию нашего аппарата и дальше если, например аппарат доволен, а эмоция стоит "бред", то он ответить "Да вы что, я раньше о таком не слушал" или что-то в этом духе, а если аппарат зол, тогда он ответит что-то вроде "не вешайте мне лапшу на уши". Причем обработку эмоций придется делать и на хорошем графе и сумма эмоций всех ребер графа будет влиять общую эмоцию нашего аппарата. Дальше, когда ответ подготовлен должен произойти обратный лингвистический анализ, который из "предпосылок" предложения сконструирует предложение и выдаст его пользователю. Так же нам надо выбирать тему разговора и заносить в память для того, чтобы аппарат понимал, о чем идет речь, если в середине разговора с ним сказать "И конечно развитие этого дела требует больших усилий". Потому что по модели, которую я описал до этого аппарат примет это предложение за бессмысленное.

Ну, вот вкратце идея моего алгоритма.
Чужак
Тему поддерживаю.
Похоже, мы мыслим сходно.
Цитата(Lapp @ 24.03.2007 3:20) *

Наряду с семантикой (смысловой строной), а может даже впереди нее, мне видится, как проблема, простая орфография. Кстати, проглядывается некая связь с темой Чужака'а Лингвистическая Антонимическая Модель . Может, объединить усилия?

Полностью согласен.
St@senk@, но более важен, на мой взгляд,
не язык программирования, а логико-семантическая
структурированность самой модели, программа-просто оболочка
для неё. Что скажешь? nea.gif
Заглянь и в мою тему blum.gif




Артемий
Хорошо, а где будет храниться эта информация? Файл, константы, объекты?
А может сделать слова, а потом подставлять нужные окончания? Но это естественно не однозначный способ! smile.gif
Archon
Имхо, все сведется к построению системы классификации всех возможных понятий.

Вот например, надо описать стол... Что о нем можно сказать? Материальный, неодушевленный, созданный человеком... это еще далеко не все. А надо придумать систему, с помощью которой программа, задавая вопросы сможет классифицировать все понятия. И составить базу данных. Атас_держите_меня_всемером. Думаю это черезчур сложно.
Артемий
Да но не забывай что 3-4 летний ребенок не знает столько слов! smile.gif blum.gif
Чужак
Я приношу свои извинения...
Артемий2, Archon Ваши 2 поста
идут сразу после моего.
То, что там написано, относится только к St@senk@,
или также, отчасти, и ко мне?
St@senk@
Отчасти Чужаковская программа нам поможет, для классификации, как предлагает Archon.

Добавлено через 1 мин.
Archon , да это сложно, но помоему это эффективно.
Чужак
Цитата(St@senk@ @ 24.03.2007 15:14) *

Отчасти Чужаковская программа нам поможет, для классификации,
как предлагает Archon.

St@senk@, не очень-то любезно склонять имя собственное.
St@senk@овская идея ento ne togo...Нравится?

///Тему поддерживаю.
Похоже, мы мыслим сходно.

Цитата(Lapp @ 24.03.2007 3:20)

Наряду с семантикой (смысловой строной), а может даже впереди нее, мне видится, как проблема, простая орфография. Кстати, проглядывается некая связь с темой Чужака'а Лингвистическая Антонимическая Модель . Может, объединить усилия?


Полностью согласен.
St@senk@, но более важен, на мой взгляд,
не язык программирования, а логико-семантическая
структурированность самой модели, программа-просто оболочка
для неё. Что скажешь?
Заглянь и в мою тему ///
Беру свои слова обратно.
Меня проигнорировали? Я вас покидаю.
P.S. Господа модераторы, читающие этот пост,
пожалуйста НЕ объединяйте наши темы.



St@senk@
За склонение, извини smile.gif
Чужак?Честно скажу, что не совсем твоего сообщения, пока я вроде описываю алгоритм, а язык программирования, вроде не обсуждается. А тему я смотрел, и твое сообщение не проигнорировал.
Archon
Цитата
St@senk@, но более важен, на мой взгляд,
не язык программирования, а логико-семантическая
структурированность самой модели
Я видел этот пост и я с ним согласен. Но сразу сказал, что разработка такой модели - занятие аццки сложное. Есть у кого-нибудь конкретные предложения по поводу структуры этой БД? В ней должно храниться множество различных понятий, и каждое понятие само по себе будет представлять очень сложную структуру.
St@senk@
Хранение этой БД действительно проблеммма, также проблемммой является её заполнение.
Моя идея:
Сделать 1 БД где будет стоять Id номер, слово (в его начальной форме), и сделать вторую БД, где будут стоять последовательности номеров, где каждая последовательность это первый элемент - первая вершина ребра, последняя - вторая вершина ребра, а все остальное - параметры ребра.
и третья база - синонимы.
Archon
Цитата
Сделать 1 БД где будет стоять Id номер, слово (в его начальной форме), и сделать вторую БД, где будут стоять последовательности номеров, где каждая последовательность это первый элемент - первая вершина ребра, последняя - вторая вершина ребра, а все остальное - параметры ребра.

Маловато данных получается...

Для каждого "понятия" надо хранить:
1 Id - ну, без него ни куда
2 Слово во всех формах (падежах и тд) или информацию, чтобы формы можно было получать с помощью какого-либо алгоритма. Это нужно, чтобы программа могла грамотно употреблять слово, определяющее данное понятие.
3 Характеристики "понятия". Это самое сложное. Здесь должна храниться система параметров, которые полностью определяют место данного "понятия" в системе бытия (во как завернул smile.gif ). Помните, как я про стол писал? Вот то самое оно и есть...
4 Связи. Как это "понятие" связано с другими. И типы связей тоже надо указать.
Чужак
Все равно сливаться Не будем.
Вижу расхождение (Мое-и Ваше) в основополагающих
принципах и методах.
Все эти рассуждения о ребрах, графах...
Решение Своей вижу задачи через логику человека, а не компьютера. Все это многообразие понятий-оно ведь для человека не проблема-он ими просто пользуется.
Моя задача - не ИС, у меня человек взаимодействует с программой по своей, человеческой логике.
Обратили внимание, что моя программа простая, НО на вроде бы простой вопрос: "Объект большой или маленький?" НЕ два (большой/маленький), а ШЕСТЬ вариантов ответа. Логика построения такая-1,2- Выбор большой или маленький? 3-Включение-и большой, и маленький, 4-Исключение-не большой, не маленький,
5,6-Предпочтение-Скорее большой, Скорее маленький-
и Выбирает пользователь. И это логика-не компьютера и не языка программирования.
Артемий
Цитата
4 Связи. Как это "понятие" связано с другими. И типы связей тоже надо указать.

А можно пример привести? Как это описывать ты хочешь в коде? rolleyes.gif

Добавлено через 2 мин.
Word = record
id: Byte;
Skl: array [1..100] of string;
Notions: array [1..100] of string;
{Последнее заполним почле разъяснения Аrchona :-)}
end;

Вот такой структурой можно считывать!
Артемий
Ребята, не забываем, что на уровне 3-4 года договорились писать и обдумывать! Кто примерно знает, сколько слов знает малышь в эти года? smile.gif blum.gif
Archon
Цитата
Ребята, не забываем, что на уровне 3-4 года договорились писать и обдумывать! Кто примерно знает, сколько слов знает малышь в эти года? smile.gif blum.gif

Сложность не только в количестве слов, но, в первую очередь, в структуре БД.
Цитата
А можно пример привести? Как это описывать ты хочешь в коде?

Вот в коде записать это все как раз и проблематично.

Во первых, Id байтом не обойдется, минимум word.
Во вторых, пункты 2-3 вряд ли реализуются простым массивом, тут надо свои структуры придумывать, сложные.
В третьих, со связями как раз проще всего... Как ты граф реализуешь? Вот так и связи. Плюс у каждого "ребра" свои параметры, как писал St@senk@.
Артемий
Хорошо,давайте точно обговорим кто учавствует! Распределим обязанности. Я допустим готов взять с кем-то БД а другой копит слова и т.д? Переодически будем писаться (ударение на а! smile.gif ) здесь..
St@senk@
smile.gif Было бы странно, если бы я не учавствовал smile.gif
Согласен, что надо разделиться. Но пока учавствует не очень много народа, поэтому возможно будем делать все одной групой, ступенчато.
Kirill_
Цитата
Поэтому я предлагаю сделать граф существительных, и к каждому существительному будет идти ребро, весом которого является набор характеристик. (Заяц - длинные, белые, смешные...->уши)

St@senk@, вот реализация твоей идеи http://project.comex.ru/ai/ai.php !
St@senk@
Не совсем, но близко к тому... Здесь введены уже предложения, как я понял, а я хочу чтобы, по словам и карте их зависимости лингвистический анализатор сам конструировал предложение, которое будет служить ответом на данный запрос.
Артемий
Ладно,попробую начать конструировать БД. Ст@сенк@ предоставь полный план того,как должна быть устроена БД по пунктикам. Какие детали в ней будут..Надеюсь Archon тоже присоединится!
St@senk@
Если бы я еще знал как ее сконгструировать...
Как я понял идей как представить это в коде нет не только у меня, но и у Archon, либо он скрывает, что знает как это реализовать.
Что у нас есть:
Существетильное
Описательное smile.gif (Глаголы, Наречия ...)
Вершины графа - существительные, а веса ребер - массивы Описательных наверное smile.gif
Archon
Archon не присоединится. Я пол года потратил на обдумывание полностью аналогичной идеи, и до реализации дело так и не дошло.

Но по поводу некоторых общих вопросов могу высказать свои идеи. Для начала... что должно быть:

1 "База Знаний" (здесь и далее названия в кавычках - условные термины). Это та самая БД что мы обсуждали. В ней хранятся "понятия" (определяются существительными), "действия" (определяются глаголами), и тд. Таким образом это совокупность нескольких БД. В какой форме хранить все эти "понятия", "действия" и прочее - один из основных вопросов написания этой программы. Некоторые мысли по поводу хранения "понятий" я писал выше.

2 "Память". В ней хранится информация об известных программе "событиях".

3 "Блок обработки текстовых сообщений". Обеспечивает семантический анализ предложений и осуществляет связанные с этим действия. Например, если предложение повествовательное - строит модель "события", записывает ее в "память" и, по возможности, пополняет "БЗ", если вопросительное - ищет ответ и тд.

Пример разбора предложения:
'Мама мыла раму' smile.gif

Предложение повествовательное, значит нужно строить модель. Два существительных, значит в модели создаем два "объекта": один "объект" на базе понятия "мама" (описание понятия хранится в "Базе знаний"), и один на базе понятия "рама". В предложении есть глагол ("действие"). Исходя из грамматики делаем вывод что объект "мама" совершал в прошлом над объектом "рама" действие "мыть". Вот и готова модель "события". Ее можно сохранить в "памяти" в примерно таком виде: во время <время_и_дата> была получена информация о том, что в прошлом (относительно времени получения информации) совершалось действие определенное моделью <id модели>. Кроме того из этого предложения программа получит информацию, что объект "мама" в принципе может совершать над объектом "рама" действие "мыть", и таким образом пополнит "Базу Знаний" (посредством создания новых "связей" между этими "понятиями").

4 "Набор определяющих поведение динамик". Если реализовать только пункты 1 - 3, программа сможет понимать то что пользователь ей набирает, и таким образом накапливать знания. Но это как собака, которая все понимает, но сказать не может, скучно... Чтобы программа смогла не только отвечать на вопросы, но и самостоятельно произносить фразы и поддерживать разговор, нужно задать смысл этим ее действиям. Для этого ей нужно сделать потребности. Так как на окружающий мир программа влиять не может и никаких физических потребностей у нее тоже нет, потребности должны быть интеллектуальные. Например - сбор информации. Но просто бессистемный сбор информации - это тоже не интересно, поэтому стремления программы можно поделить на "управляющие динамики". Например у программы может быть динамика, заставляющая ее интересоваться всем, что связано с биологией. Или можно вложить в программу стремление найти ответ на какой-либо вопрос...

5 "Характер" Те же динамики, но их цель - сделать поведение программы более человечным, изобразить чувства, что ли..

6 "Настроение" Тоже самое, что и 5, но меняющееся в зависимости от обстоятельств.

Все что я выше написал, получилось весьма общим и, местами, невнятным. ;) Так что задавайте вопросы (если, конечно, мои мысли показались вам интересными), я дам разъяснения.


PS Интересно, найдется кто-нибудь, кто все это прочитает? ;)
Чужак
Цитата(Archon @ 25.03.2007 15:08) *

PS Интересно, найдется кто-нибудь, кто все это прочитает? ;)

Я прочитал, мне понравилось.
Вообще, если даже не сможете создать Искуств. Собеседника,
то ваша тема-неплохой полигон для отработки идей,
которые могут использоваться в экспертных системах.
Артемий
Наверно я отсоединяюсь.Вы должны меня понять,народу мало,у самого времени на все это нет..Дело даже не в сложности..Успехов!(если будет много народу на проект,то я вернусь,а пока...)
St@senk@
Archon , идея классная, в совокупности с моей идей, наверное, можно сделать что-то, способное имитировать нормального человека. Жалко, что пока я остаюсь один, но трудности меня не страшат. Начну пытаться реализовывать. Пока не буду браться за лингвистический анализ, пока сделаю просто обработчик запросов. Буду отписываться тут, но надеюсь, что кто-то присоединится к реализации этой программы.
Archon
Благородное дело. Молодец! Думаю начать следует вот с чего... Сделай сперва программу, реализующую разбор предложений типа "Мама мыла раму". В ней должны быть реализованы "База знаний" и "Память" на минимальном необходимом для работы программы уровне. Эта задача не очень сложная. А потом развивай эту программу так: придумываешь пример предложения, которое твоя программа еще не может корректно обработать и дополняешь ее, чтоб могла. И так, шаг за шагом, глядишь что нибудь и выйдет.
hiv
Цитата(Артемий2 @ 24.03.2007 18:23) *

Ребята, не забываем, что на уровне 3-4 года договорились писать и обдумывать! Кто примерно знает, сколько слов знает малышь в эти года? smile.gif blum.gif

Около 1000-2000 слов. Грамматически связанные предложения. Почитать можно тут
Но имейте в виду, что дети пользуются шаблонами в разговоре. Только не путайте с устойчивыми словоформами, хотя и это тоже стоит учесть. И из тех 2000 слов что они знают, активно используется лишь 10 часть в лучшем случае.
ЗЫ: Я пас. В проекте не участвую.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.