Здравствуйте, одна из тем форума помогла мне решиться и создать эту тему. Предлагаю всем вместе, написать Искусственного Собеседника. Я знаю, что такой программы пока нет, поэтому предлагаю сначала написать программу, которая будет разговаривать на уровне 3-4 летнего ребенка. Написать эту программу – мечта всей моей жизни, поэтому я надеюсь, что эту идею кто-то поддержит. Большое спасибо, что прочитали это сообщение.
compiler
23.03.2007 22:06
на сайте была гдето ссылка на ресурс где такую рогу использовали...
Таких программ очень много. Очень неплохих, кстати.
St@senk@
24.03.2007 0:02
Но идеальных нет, и хочется это пощупать, потрогать, прочувствовать алгоритмы и прочее
Michael_Rybak
24.03.2007 0:52
Удачи. Тема страшно богатая
Артемий
24.03.2007 1:32
Допустим это твоя мечта жизни?И что?Тебе надо написать программу,помочь?Ты не знаешь алгоритмы или что? Ты не можешь ее писать?
Добавлено через 55 сек. И тем более раз так хочешь, развивай тему, предлагай, показывай!
Артемий
24.03.2007 3:19
А чем собственно Дельфи не катит?Можно и там!
St@senk@
24.03.2007 3:19
Цитата
Допустим это твоя мечта жизни?И что?Тебе надо написать программу,помочь?Ты не знаешь алгоритмы или что? Ты не можешь ее писать?
Добавлено через 55 сек. И тем более раз так хочешь, развивай тему, предлагай, показывай!
Уважаемый Артемий2 , к чему такие наездные нотки в вашем голосе? я просто предложил обсудить идеи реализации этой программы, и рассказал, почему меня это интересует. У меня были свои идеи, но, к сожалению, их разбили мои друзья или попытки реализации. Если вы считаете, что эта тема не достойно жизни на этом форуме, то я предполагаю, что это решать пока не в твоей компетенции.
Цитата
А чем собственно Дельфи не катит?Можно и там!
Лично я пишу на Delphi, но так, как для решения этой задачи не нужны какие-то особые функции Delphi(как мне кажется), то я создал темы в более общем разделе.
Артемий
24.03.2007 3:50
Ни о каком наезде и речи не было! Наоборот хотел больше знать и присоединиться в случае чего!Не знаю,что я в своем посте сказал..Мечта жизни-это хорошо!И может попросить переехать в Дельфи?
мисс_граффити
24.03.2007 3:58
Вот здесь статейка по теме. На примитивном уровне, но для начала может быть полезным...
Lapp
24.03.2007 7:20
Идея сама по себе интересная (хотя, конечно, далеко не оригинальная). Я тоже готов участвовать в обсуждении, если получится. Тема не совсем соответствует тому, что тут понимается под задачами, а скорее ближе по духу к играм (по крайней мере пока у нее не появится серьезного применения), поэтому переношу ее в раздел Игры.
Согласен с автором, что основным инструментом имеет смысл сделать Паскаль, а именно Opject Pascal (процедурный стиль тут явно проигрывает объектному).
Осталось - начать.. Автор может предложить основу?
Наряду с семантикой (смысловой строной), а может даже впереди нее, мне видится, как проблема, простая орфография. Кстати, проглядывается некая связь с темой Чужака'а Лингвистическая Антонимическая Модель . Может, объединить усилия?
Артемий
24.03.2007 11:35
Но мне кажется,что для такой штуки подойдет 32 битный компилятор?Например Free Pascal?
St@senk@
24.03.2007 18:14
Артемий2 , согласен, FPC отлично нам подойдет.
Вот моя идея:
Надо каким-то образом заставить компьютер рассуждать. Я попытался проанализировать ход моих мыслей при ответе на некоторые простые вопросы. И как мне показалось, я, когда мне говорят фразу, я воссоздаю картинку, которую мне описывают и дальше сравниваю её с тем, что у меня записано в памяти.
Поэтому я предлагаю сделать граф существительных, и к каждому существительному будет идти ребро, весом которого является набор характеристик. (Заяц - длинные, белые, смешные...->уши)
Далее идет лингвистический анализ предложения (как его делать идей нет, но почитаю кинутые статейки, может быть, идейки появятся). Дальше мы получаем запрос, что мы делаем мы берем главное существительное и смотрим какие слова к нему относятся на втором уровне, и выделяем подграф, в котором верно: Любое ребро этого графа удовлетворяет следующему утверждению: либо один из параметров ребра содержится в предложении, либо хотя бы одна из вершин этого ребра содержится в предложении. Дальше мы анализируем этот граф на "хорошесть". Например, если граф не связный, то он точно плохой, и если в характеристиках его ребер присутствует "Не бывает" или что-то синонимичное, то граф тоже плохой, а если нет, то граф хороший.
Далее мы рассматриваем два случая, хорош ли граф или нет, если хорош, тогда мы составляем ответное предложение (как его составлять у меня пока идеи только смутные)
А если нет, то мы на том ребре, на котором написано, не бывает, мы смотрим на эмоцию и выражаем её, правда можно добавить смещение, то есть ввести просто общую эмоцию нашего аппарата и дальше если, например аппарат доволен, а эмоция стоит "бред", то он ответить "Да вы что, я раньше о таком не слушал" или что-то в этом духе, а если аппарат зол, тогда он ответит что-то вроде "не вешайте мне лапшу на уши". Причем обработку эмоций придется делать и на хорошем графе и сумма эмоций всех ребер графа будет влиять общую эмоцию нашего аппарата. Дальше, когда ответ подготовлен должен произойти обратный лингвистический анализ, который из "предпосылок" предложения сконструирует предложение и выдаст его пользователю. Так же нам надо выбирать тему разговора и заносить в память для того, чтобы аппарат понимал, о чем идет речь, если в середине разговора с ним сказать "И конечно развитие этого дела требует больших усилий". Потому что по модели, которую я описал до этого аппарат примет это предложение за бессмысленное.
Ну, вот вкратце идея моего алгоритма.
Чужак
24.03.2007 18:31
Тему поддерживаю. Похоже, мы мыслим сходно.
Цитата(Lapp @ 24.03.2007 3:20)
Наряду с семантикой (смысловой строной), а может даже впереди нее, мне видится, как проблема, простая орфография. Кстати, проглядывается некая связь с темой Чужака'а Лингвистическая Антонимическая Модель . Может, объединить усилия?
Полностью согласен. St@senk@, но более важен, на мой взгляд, не язык программирования, а логико-семантическая структурированность самой модели, программа-просто оболочка для неё. Что скажешь? Заглянь и в мою тему
Артемий
24.03.2007 18:47
Хорошо, а где будет храниться эта информация? Файл, константы, объекты? А может сделать слова, а потом подставлять нужные окончания? Но это естественно не однозначный способ!
Archon
24.03.2007 18:56
Имхо, все сведется к построению системы классификации всех возможных понятий.
Вот например, надо описать стол... Что о нем можно сказать? Материальный, неодушевленный, созданный человеком... это еще далеко не все. А надо придумать систему, с помощью которой программа, задавая вопросы сможет классифицировать все понятия. И составить базу данных. Атас_держите_меня_всемером. Думаю это черезчур сложно.
Артемий
24.03.2007 18:59
Да но не забывай что 3-4 летний ребенок не знает столько слов!
Чужак
24.03.2007 19:02
Я приношу свои извинения... Артемий2, Archon Ваши 2 поста идут сразу после моего. То, что там написано, относится только к St@senk@, или также, отчасти, и ко мне?
St@senk@
24.03.2007 19:14
Отчасти Чужаковская программа нам поможет, для классификации, как предлагает Archon.
Добавлено через 1 мин. Archon , да это сложно, но помоему это эффективно.
Чужак
24.03.2007 19:35
Цитата(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@
24.03.2007 19:49
За склонение, извини Чужак?Честно скажу, что не совсем твоего сообщения, пока я вроде описываю алгоритм, а язык программирования, вроде не обсуждается. А тему я смотрел, и твое сообщение не проигнорировал.
Archon
24.03.2007 19:51
Цитата
St@senk@, но более важен, на мой взгляд, не язык программирования, а логико-семантическая структурированность самой модели
Я видел этот пост и я с ним согласен. Но сразу сказал, что разработка такой модели - занятие аццки сложное. Есть у кого-нибудь конкретные предложения по поводу структуры этой БД? В ней должно храниться множество различных понятий, и каждое понятие само по себе будет представлять очень сложную структуру.
St@senk@
24.03.2007 19:56
Хранение этой БД действительно проблеммма, также проблемммой является её заполнение. Моя идея: Сделать 1 БД где будет стоять Id номер, слово (в его начальной форме), и сделать вторую БД, где будут стоять последовательности номеров, где каждая последовательность это первый элемент - первая вершина ребра, последняя - вторая вершина ребра, а все остальное - параметры ребра. и третья база - синонимы.
Archon
24.03.2007 20:17
Цитата
Сделать 1 БД где будет стоять Id номер, слово (в его начальной форме), и сделать вторую БД, где будут стоять последовательности номеров, где каждая последовательность это первый элемент - первая вершина ребра, последняя - вторая вершина ребра, а все остальное - параметры ребра.
Маловато данных получается...
Для каждого "понятия" надо хранить: 1 Id - ну, без него ни куда 2 Слово во всех формах (падежах и тд) или информацию, чтобы формы можно было получать с помощью какого-либо алгоритма. Это нужно, чтобы программа могла грамотно употреблять слово, определяющее данное понятие. 3 Характеристики "понятия". Это самое сложное. Здесь должна храниться система параметров, которые полностью определяют место данного "понятия" в системе бытия (во как завернул ). Помните, как я про стол писал? Вот то самое оно и есть... 4 Связи. Как это "понятие" связано с другими. И типы связей тоже надо указать.
Чужак
24.03.2007 20:54
Все равно сливаться Не будем. Вижу расхождение (Мое-и Ваше) в основополагающих принципах и методах. Все эти рассуждения о ребрах, графах... Решение Своей вижу задачи через логику человека, а не компьютера. Все это многообразие понятий-оно ведь для человека не проблема-он ими просто пользуется. Моя задача - не ИС, у меня человек взаимодействует с программой по своей, человеческой логике. Обратили внимание, что моя программа простая, НО на вроде бы простой вопрос: "Объект большой или маленький?" НЕ два (большой/маленький), а ШЕСТЬ вариантов ответа. Логика построения такая-1,2- Выбор большой или маленький? 3-Включение-и большой, и маленький, 4-Исключение-не большой, не маленький, 5,6-Предпочтение-Скорее большой, Скорее маленький- и Выбирает пользователь. И это логика-не компьютера и не языка программирования.
Артемий
24.03.2007 21:33
Цитата
4 Связи. Как это "понятие" связано с другими. И типы связей тоже надо указать.
А можно пример привести? Как это описывать ты хочешь в коде?
Добавлено через 2 мин.
Word = record id: Byte; Skl: array [1..100] of string; Notions: array [1..100] of string; {Последнее заполним почле разъяснения Аrchona :-)} end;
Вот такой структурой можно считывать!
Артемий
24.03.2007 22:23
Ребята, не забываем, что на уровне 3-4 года договорились писать и обдумывать! Кто примерно знает, сколько слов знает малышь в эти года?
Archon
25.03.2007 2:20
Цитата
Ребята, не забываем, что на уровне 3-4 года договорились писать и обдумывать! Кто примерно знает, сколько слов знает малышь в эти года? smile.gif blum.gif
Сложность не только в количестве слов, но, в первую очередь, в структуре БД.
Цитата
А можно пример привести? Как это описывать ты хочешь в коде?
Вот в коде записать это все как раз и проблематично.
Во первых, Id байтом не обойдется, минимум word. Во вторых, пункты 2-3 вряд ли реализуются простым массивом, тут надо свои структуры придумывать, сложные. В третьих, со связями как раз проще всего... Как ты граф реализуешь? Вот так и связи. Плюс у каждого "ребра" свои параметры, как писал St@senk@.
Артемий
25.03.2007 13:04
Хорошо,давайте точно обговорим кто учавствует! Распределим обязанности. Я допустим готов взять с кем-то БД а другой копит слова и т.д? Переодически будем писаться (ударение на а! ) здесь..
St@senk@
25.03.2007 13:42
Было бы странно, если бы я не учавствовал Согласен, что надо разделиться. Но пока учавствует не очень много народа, поэтому возможно будем делать все одной групой, ступенчато.
Kirill_
25.03.2007 15:16
Цитата
Поэтому я предлагаю сделать граф существительных, и к каждому существительному будет идти ребро, весом которого является набор характеристик. (Заяц - длинные, белые, смешные...->уши)
Не совсем, но близко к тому... Здесь введены уже предложения, как я понял, а я хочу чтобы, по словам и карте их зависимости лингвистический анализатор сам конструировал предложение, которое будет служить ответом на данный запрос.
Артемий
25.03.2007 17:32
Ладно,попробую начать конструировать БД. Ст@сенк@ предоставь полный план того,как должна быть устроена БД по пунктикам. Какие детали в ней будут..Надеюсь Archon тоже присоединится!
St@senk@
25.03.2007 17:41
Если бы я еще знал как ее сконгструировать... Как я понял идей как представить это в коде нет не только у меня, но и у Archon, либо он скрывает, что знает как это реализовать. Что у нас есть: Существетильное Описательное (Глаголы, Наречия ...) Вершины графа - существительные, а веса ребер - массивы Описательных наверное
Archon
25.03.2007 19:08
Archon не присоединится. Я пол года потратил на обдумывание полностью аналогичной идеи, и до реализации дело так и не дошло.
Но по поводу некоторых общих вопросов могу высказать свои идеи. Для начала... что должно быть:
1 "База Знаний" (здесь и далее названия в кавычках - условные термины). Это та самая БД что мы обсуждали. В ней хранятся "понятия" (определяются существительными), "действия" (определяются глаголами), и тд. Таким образом это совокупность нескольких БД. В какой форме хранить все эти "понятия", "действия" и прочее - один из основных вопросов написания этой программы. Некоторые мысли по поводу хранения "понятий" я писал выше.
2 "Память". В ней хранится информация об известных программе "событиях".
3 "Блок обработки текстовых сообщений". Обеспечивает семантический анализ предложений и осуществляет связанные с этим действия. Например, если предложение повествовательное - строит модель "события", записывает ее в "память" и, по возможности, пополняет "БЗ", если вопросительное - ищет ответ и тд.
Пример разбора предложения: 'Мама мыла раму'
Предложение повествовательное, значит нужно строить модель. Два существительных, значит в модели создаем два "объекта": один "объект" на базе понятия "мама" (описание понятия хранится в "Базе знаний"), и один на базе понятия "рама". В предложении есть глагол ("действие"). Исходя из грамматики делаем вывод что объект "мама" совершал в прошлом над объектом "рама" действие "мыть". Вот и готова модель "события". Ее можно сохранить в "памяти" в примерно таком виде: во время <время_и_дата> была получена информация о том, что в прошлом (относительно времени получения информации) совершалось действие определенное моделью <id модели>. Кроме того из этого предложения программа получит информацию, что объект "мама" в принципе может совершать над объектом "рама" действие "мыть", и таким образом пополнит "Базу Знаний" (посредством создания новых "связей" между этими "понятиями").
4 "Набор определяющих поведение динамик". Если реализовать только пункты 1 - 3, программа сможет понимать то что пользователь ей набирает, и таким образом накапливать знания. Но это как собака, которая все понимает, но сказать не может, скучно... Чтобы программа смогла не только отвечать на вопросы, но и самостоятельно произносить фразы и поддерживать разговор, нужно задать смысл этим ее действиям. Для этого ей нужно сделать потребности. Так как на окружающий мир программа влиять не может и никаких физических потребностей у нее тоже нет, потребности должны быть интеллектуальные. Например - сбор информации. Но просто бессистемный сбор информации - это тоже не интересно, поэтому стремления программы можно поделить на "управляющие динамики". Например у программы может быть динамика, заставляющая ее интересоваться всем, что связано с биологией. Или можно вложить в программу стремление найти ответ на какой-либо вопрос...
5 "Характер" Те же динамики, но их цель - сделать поведение программы более человечным, изобразить чувства, что ли..
6 "Настроение" Тоже самое, что и 5, но меняющееся в зависимости от обстоятельств.
Все что я выше написал, получилось весьма общим и, местами, невнятным. ;) Так что задавайте вопросы (если, конечно, мои мысли показались вам интересными), я дам разъяснения.
PS Интересно, найдется кто-нибудь, кто все это прочитает? ;)
Чужак
25.03.2007 19:49
Цитата(Archon @ 25.03.2007 15:08)
PS Интересно, найдется кто-нибудь, кто все это прочитает? ;)
Я прочитал, мне понравилось. Вообще, если даже не сможете создать Искуств. Собеседника, то ваша тема-неплохой полигон для отработки идей, которые могут использоваться в экспертных системах.
Артемий
25.03.2007 20:25
Наверно я отсоединяюсь.Вы должны меня понять,народу мало,у самого времени на все это нет..Дело даже не в сложности..Успехов!(если будет много народу на проект,то я вернусь,а пока...)
St@senk@
25.03.2007 21:18
Archon , идея классная, в совокупности с моей идей, наверное, можно сделать что-то, способное имитировать нормального человека. Жалко, что пока я остаюсь один, но трудности меня не страшат. Начну пытаться реализовывать. Пока не буду браться за лингвистический анализ, пока сделаю просто обработчик запросов. Буду отписываться тут, но надеюсь, что кто-то присоединится к реализации этой программы.
Archon
26.03.2007 0:04
Благородное дело. Молодец! Думаю начать следует вот с чего... Сделай сперва программу, реализующую разбор предложений типа "Мама мыла раму". В ней должны быть реализованы "База знаний" и "Память" на минимальном необходимом для работы программы уровне. Эта задача не очень сложная. А потом развивай эту программу так: придумываешь пример предложения, которое твоя программа еще не может корректно обработать и дополняешь ее, чтоб могла. И так, шаг за шагом, глядишь что нибудь и выйдет.
hiv
26.03.2007 14:26
Цитата(Артемий2 @ 24.03.2007 18:23)
Ребята, не забываем, что на уровне 3-4 года договорились писать и обдумывать! Кто примерно знает, сколько слов знает малышь в эти года?
Около 1000-2000 слов. Грамматически связанные предложения. Почитать можно тут Но имейте в виду, что дети пользуются шаблонами в разговоре. Только не путайте с устойчивыми словоформами, хотя и это тоже стоит учесть. И из тех 2000 слов что они знают, активно используется лишь 10 часть в лучшем случае. ЗЫ: Я пас. В проекте не участвую.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.