Fwd: Разговоры...

From: Тармо Пикаро ( tpikaro@turkuamk.fi ) Date: 22:56:12 10/10/99

Я пересылаю одно интересное письмо с нового news-сервера. (194.87.75.146)
P.S. Есть идея слинкивать news сервер с данной конференцией , но
ничего не обещаю - пока ни времени ,ни нужных мне знаний нету.

--------------------------------------------------------
 Subject:      Разговоры...
 Date:         Wed, 6 Oct 1999 16:56:31 +0400
 From:         Daniil Smolyakov <Dan@jesby.tstu.ru>
 Newsgroups:   research.ai.consciousness

 
Вот тут это... Учимся говорить... Вообще-то расчитывалось для RPG, но это
смысла не меняет.

=== File obraz.txt [begin] ===

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

   +--------------------------------+
 N | Именительный: Арбуз            | Если слово существительное, то
   | Родительный:  Арбуз            | во всех падежах, если глагол, то
   | Дательный:    Арбузу           | во всех лицах, числах и родах.
   | Винительный:  Арбуз            | Ну и соответсвенно с местоимениями.
   | Творительный: Арбузом          |
   | Предложный:   Арбузе           |
   +--------------------------------|
   | Тип слова: глагол, местоимение,|
   | существительное и т.д.         |
   +--------------------------------|
   | Вежливость слова               | Нужно следить за речью...
   |--------------------------------|
   |+------------------------------+|
   || Количество образов к которым ||
   || относится слово              ||
   |+------------------------------+|
   |   +--------------------------+ |
   | N | Номер образа, к которому | |
   |   | относится слово          | |
   |   +--------------------------| |
   | N | И т.д.                   | |
   |   +--------------------------+ |
   +--------------------------------|
   |+------------------------------+|
   ||     Количество синонимов     ||
   |+------------------------------+|
   |   +--------------------------+ |
   | N |+------------------------+| |
   |   ||     Номер словаря      || |
   |   |+------------------------|| |
   |   ||Номер синонима в списке || |
   |   |+------------------------+| |
   |   +--------------------------| |
   | N | И т.д.                   | |
   |   +--------------------------+ |
   +--------------------------------|
   +--------------------------------|
   |+------------------------------+|
   ||     Количество антонимов     ||
   |+------------------------------+|
   |   +--------------------------+ |
   | N |+------------------------+| |
   |   ||     Номер словаря      || |
   |   |+------------------------|| |
   |   ||Номер антонима в списке || |
   |   |+------------------------|| |
   |   +--------------------------| |
   | N | И т.д.                   | |
   |   +--------------------------+ |
   +--------------------------------+
   +--------------------------------+
 N |         Описание слова         |
   +--------------------------------+
    И т.д.

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

  +------------------+-----------------------+
  | Порядковый номер | Номер слова в словаре |
  +------------------+-----------------------+
  | Порядковый номер | Номер слова в словаре |
  +------------------+-----------------------+
  | Порядковый номер | Номер слова в словаре |
  +------------------+-----------------------+
    и т.д.

 И далее будем сортировать только этот список. Ну и нужно, я думаю, хранить
 индексы начальных букв, т.е. номера первых в списке слов, начинающихся на
 какую-либо букву, например:

  1 Арбуз
  2 Арка
  3 Апельсин
  4 Баран
  5 Барабан
  6 Баня
  7 Бант
  8 Яблоня
  9 Яма

 Тут мы должны сделать таблицу типа:

  "A" : 1
  "Б" : 4
  "Я" : 8

 С этим вроде бы разобрались. Ан нет, не разобрались еще. Можно конечно все
 слова разбить на корни, слоги, приставки, суффиксы и окончания, а потом
 просто определять к какому типу слова этот корень относится и уже потом
 склонять, наклонять и разгибать... Незнаю, может потом я к этому и приду,
 но сейчас мне более удобной кажется идея с заранее указанными вариантами
 написания того или иного слова.

 Едем дальше...
 ... видим мост, на мосту ворона сохнет, мы ее за хвост и под мост - пусть
 она помокнет.

 Со словами разобрались, теперь об образах. Делаем снова список образов,
 который выглядет примерно так:

   +---------------------------------+
 N | Название образа                 |
   +---------------------------------+
   |+-------------------------------+|
   || Количество слов принадлежащих ||
   || этому образу                  ||
   |+-------------------------------||
   || Номер словаря, номер слова    ||
   |+-------------------------------||
   || Номер словаря, номер слова    ||
   |+-------------------------------||
   || И так далее                   ||
   |+-------------------------------+|
   +---------------------------------|
   | Номер образа, к которому отно-  |
   | сится данный образ. 0 - если    |
   | такового нет.                   |
   +---------------------------------|
   | Дальше можно указать список тех |
   | образов, для которых данный     |
   | является родителем, но примене- |
   | ния я этому пока не знаю.       |
   +---------------------------------+

 В итогде все образы опираются на те, которые "вшиты" непосредственно в саму
 программу. Но я делаю по другому: у меня остались те самые основные образы,
 но и они далеко не главные. Так как я использую это дело в RPG, то у меня в
 основном все разговоры связаны с каким-либо действием, типа: "Дай меч",
 "Иди за мной", "Подожди тут" и т.д. Естественно за исключением тех
моментов,
 когда в разговоре говорящие получают просто дополнительную информацию, т.е.
 заносят что-то новенькое в свой блок памяти (но и это, в общем-то тоже
 действия). Вобщем я сделал так: каждый образ описывается командами и в
итоге
 получается, что образы можно еще и дополнять. Команды примерно такого типа:
 идти куда-то, взять что-то, отдать что-то и т.д. Можно конечно еще сильнее
 упростить, но мне это не позволительно, так как описание образов будет,
 вобщем-то, доступно, нельзя допускать чтобы смухлевать можно было просто,
 по типу: образ "продать" (если это команды более низкого уровня) будет:
 "дать предмет, дать деньги, которые стоит это предмет", вместо: "дать
 предмет, взять (спросить) деньги". Всем изветсно, что любой обрабатывающей
 процедуре нужно передать какой-то параметр и получить у нее результат, в
 данном случае параметрами (и командами) будут: "объект" (тут может быть
 несколько объектов) - это то, с чем мы будем делать какие-либо действия;
 "действие" (или список действий) - и так понятно, что это. Во-о-от. Ниже
 рассмотрим примеры.

 Едем дальше, видим мост, под мостом ворона мокнет, мы ее за хвост и на
 мост - пусть она посохнет.

 Тут будет сплошное мое личное мнение, поэтому и отнестить к этому прошу
 соответственно, т.е. не ругать сразу, а указать на ошибки и прочее.

 Итак, когда мы разговариваем, для себя мы выделяем несколько целей, такие
 как объект разговора, например фраза "Где мой ключ?" указывает объект
 разговора "ключ" и его теперь можно не упоминать до тех пор, пока этот
 объект не заменят другим или просто слишком долго не будут упоминать.
 Продолжение примерно такое: "У Рамиреса." Тут мы уже не говорим
 "Ключ у Рамиреса." Тут видно, что "целью", а точнее, теперь уже
 "объектом" в основном являются существительные. Значит все существительные
 мы вносим в список объектов. Но чтобы избежать путаницы лучше срузу после
 объекта вставить еще и те действия, которые мы хотим с ним совершить.
 Как мы не старались, некотого перечисления нам все-равно не избежать, т.е.
 все-таки нужно описать для каждого действия шаблоны параметров. Например, в
 фразе "Где мой ключ?" стоит вопросительный знак, что означает желание
 получить ответ. Смотрим дальше, ЧТО мы хотим узнать? "Где" - образ
 "местоположение", "мой" - "принадлежность", "ключ" - объект. Следовательно
 нужно для каждого объекта хранить параметры "принадлежность",
 "местоположение". Так как этих параметров может быть великое множество, то
 используем динамические переменные, т.е. те переменные, которые могут быть,
 а могут и не быть. Например вместо того, чтобы хранить все данные о чем-то,
 мы задаем то, что по умолчанию, например "местоположение" будет равно
 "неизвестно", а "принадлежание" мы опишем так: [принадлежание=Владимир], а
 если нам нужно будет утановить местоположение, т.е. изменить значение по
 умолчанию на значение нужное нам, то просто добавляем еще и
"местоположение",
 в итоге получается: [принадлежание=Владимир; местоположение=Рамирес]
 Это дело должно храниться в блоке данных самого предмета. Какже мы будем
 добывать результат? Примерно так: в конце стоит занак "?" (вопрос), значит,
 если у нас есть к этому предрасположение, хотим ли мы отвечать (но это
 только для игрушки), отвечаем: смотрим, а знаем ли мы вообще про какой-то
 ключ? Если знаем несколько ключей, то смотрим первый попавшийся (дальше по
 очереди). Если мы не знаем его принадлежность - можно спросить: он это или
 нет (опять таки зависит от доверчивости). Описание можно сделать по разным
 критериям, например по цвету, запаху, весу и т.д., естественно, все это
 должно быть в параметрах предмета.

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

==== File obraz.txt [end] ====



Написать ответ


Конференция "Механизмы сознания"

1