© Леонид Каганов, 1996

Здесь выложен сопроводительный текст дипломного проекта, который я защитил в 1996 году.
Cтраница в интернете, где выложен этот проект (и сама программа под DOS): http://lleo.me/soft/lleo_dip.htm
Сейчас у меня есть мысли перевести это на интернет-технологии, тем более, теперь нет проблем со словарями ударений.
Работы начаты здесь: http://lleo.me/rifma/ - это сервис по подбору рифм, находится в разработке.



+-----------------------------------------------+ | Московский Государственный Горный Университет | | ФАКУЛЬТЕТ АВТОМАТИЗАЦИИ И ИНФОРМАТИКИ | | КАФЕДРА "Вычислительные машины" | +-----------------------------------------------+ ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К ДИПЛОМНОМУ ПРОЕКТУ НА ТЕМУ "Лингвистическое конструирование в системах искусственного интеллекта" Проект выполнил студент группы САПР-2-91 Каганов Л.А. Руководитель проекта Рябов Л.П. --------------- МОСКВА =1996= -------------------------------------------------------------------------- +--------------+ | СОДЕРЖАНИЕ | +--------------+ 1. Основная часть 1.1 Подход к решению задачи 1.1.1 Обзор существующих разработок 1.1.2 Выбор алгоритма 1.1.3 Несколько слов о структуре стиха 1.1.4 Выбор языка программирования 1.2 Решение задачи 1.2.1 Описание алгоритмов 1.2.1.1 Алгоритм "накопления опыта" 1.2.1.2 Алгоритм простановки ударений 1.2.1.3 Алгоритм подбора рифмы 1.2.1.4 Алгоритм создания стиха 1.2.2 Руководство пользователя 1.2.2.1 Полная версия под OS/2 Warp 1.2.2.2 Версия без оболочки под DOS4GW 1.3 Результаты 1.3.1 Примеры сочиненных стихотворений 1.3.2 Особенности ударений, как побочный результат 2. Специальная часть. Комплекс программ конструирования объектов 3. Охрана труда 4. Экономико-организационная часть 5. Заключение 6. Список литературы ПРИЛОЖЕНИЕ 1. Листинг программы ПРИЛОЖЕНИЕ 2. Таблица вероятности ударения -------------------------------------------------------------------------- +------------+ | ВВЕДЕНИЕ | +------------+ Поглядывайте! В институте-то стали писать. Боялся, что это... Как можно! - И поотчисляли... Сама. А Ильяс и решил, что студент-то списать! Браток, что-нибудь он откроет. Ильяс не сорвали. Пустил за компьютер. А экзаменатор - всегда - Приметы играет в трамвае, в какие-то стали... Не раньше, но снова - приехал трамвай. Шел куда? Ильяс начинает. В семестре уже обогнали. Всё знаете, просто компьютер забыла включить... Ой рожи-то! Этого не приходило. А Горный - Проснулся. То этого не приходил, не учить - Понять что-нибудь со шпаргалкой еще не упорный... Писал. Но потом я спросил: "У меня-то ответ! Действительно, помните многих и были похожи?" А рядом ключи на вечерний... А Игорь живет... Писала программу и тихо бормочет: "Ой рожи..." (здесь и далее все эпиграфы без указания авторства созданы описываемой программой LLEO_DIP.EXE, а знаки препинания расставлены мной - Л.Каганов) "Лингвистическое моделирование и искусственный интеллект" - так звучит название моей темы. "Программа, которая сочиняет стихи" - так отвечаю я на вопросы друзей. "Но ведь подобные программы уже есть?" - говорят мне. "Да - отвечаю я, - но моя отличается тем, что не использует изначальных шаблонов." Я благодарен своему руководителю Леониду Павловичу Рябову за то, что мне довелось заниматься в качестве дипломного проекта столь интересной темой, в которой слилось воедино все, чему нас научили за эти пять лет, а также многое из того, что выходит за границы моей специальности. Лингвистика и информатика, базы данных и искусственный интеллект, древовидные структуры и структуры линейные, приемы обработки данных и математические методы алгоритмизации процессов, которые алгоритмизировать очень сложно, практически невозможно, как, например, простановка ударений в словах русского языка. Но об этом я расскажу дальше. Теперь я хочу сказать пару слов о том, как написана пояснительная записка. Когда-то я прочитал книгу американского нейрофизиолога Д.Хьюбла "Глаз, мозг, зрение" и поразился той увлекательности, с которой она была написана, - книга читалась "на одном дыхании", несмотря на то, что это была серьезная научная работа, за которую автор получил в 1981 году Нобелевскую премию. Я не думаю, что виной тому был перевод - в предисловии Хьюбл объяснял почему он написал книгу именно так. Книга была посвящена физиологии мозга. "Земля круглая; она вращается вокруг Солнца; живые существа эволюционируют; жизнь можно объяснить фантастически сложным взаимодействием молекул; а мысль удастся когда-нибудь понять как функцию фантастически сложных систем нейронных соединений. Сказав все это, я все-таки должен признаться, что самым сильным побудительным мотивом для меня и, полагаю, для большинства моих коллег служит чистая любознательность по отношению к работе самой сложной из известных ныне структур." Я привел именно эту цитату, потому что мной также двигало не столько желание поскорее написать диплом, сколько любознательность по отношению к работе человеческого мозга и путям моделирования этих процессов методами информатики. Когда я заканчивал Московский техникум Автоматики и Телемеханики и писал диплом по электронике, в середине текста у меня была фраза: "А вот до этого места вряд ли кто-нибудь дочитает". Так оно и случилось. Я был молод и глуп, и такая шутка меня радовала. Лишь потом я понял, что это не смешно. Руководитель практически не может и не должен читать подробнейше весь официоз, излагаемый одними и теми же фразами каждым поколением студентов. Это моя вина, что я написал так скучно и однотипно - и я почувствовал себя виноватым перед преподавателями техникума. К тому же, это не оригинально - ходит много подобных студенческих рассказов. Тут и знаменитое МИРЭА-шное "в качестве материала сердечника трансформатора выбираем мореный дуб", и даже история о том, как в одной диссертационной работе была фраза "тому, кто дочитает до этого места, я поставлю бутылку коньяка", и как через 10 лет кто-то случайно нашел эту работу в библиотеке, но вместо того, чтобы потребовать коньяка, устроил скандал. Сейчас я поставил перед собой принципиально иную задачу - сделать так, чтобы мою пояснительную записку читать было ИНТЕРЕСНО. Естественно я гарантирую, что весь объем необходимой технической информации будет присутствовать полностью, но я постараюсь его изложить в максимально приятной форме. Этому, кстати, способствует и моя тема. Получилось это у меня или нет - судить не мне, но я буду стараться. Если же Вам покажется, что это было совершенно неуместно - я прошу учесть, что мной двигали самые лучшие побуждения - написать сухим, официальным языком мне было бы намного проще. Таким образом, я постараюсь изложить всю необходимую информацию в увлекательной форме, или, как часто пишут в предисловиях, "ориентируясь на широкий круг читателей", чтобы прочесть её смогли не только специалисты, но и, к примеру, абоненты литературной электронной эхоконференции *obec.pactet, или те мои друзья, которые просто не имеют специальной подготовки в данной области. Лишь раздел "экономика" представлен в том строгом виде, которого требует эта точная наука. Правда необходимо отметить, что в данном случае сама постановка вопроса (экономический эффект от внедрения программы по сравнению с ручным трудом) не совсем корректен - данная разработка является скорее теоретическим этапом в построении систем искусственного интеллекта в будущем, поэтому быстрой экономической прибыли принести не может, разве что в шоу-бизнесе. Однако, экономический эффект может быть получен при применении нижеописанных алгоритмов в какой-либо другой сфере, я пока не представляю в какой. Так или иначе, экономическая часть демонстрирует мое знакомство с принципами рассчета экономической эффективности, а её вывод следует воспринимать с известной долей юмора. Теперь необходимо сказать несколько слов и о сути моей работы. Вряд-ли стоит рассказывать о том, что в наше время информатика - важна, компьютер - полезен, а дел в этом направлении - непочатый край. На пороге ХХI века это ясно и ребенку. А вот об искусственном интеллекте поговорить, я думаю, необходимо. Скажем так: есть люди, которые сомневаются в том, что когда-нибудь искусственный интеллект будет создан. Сразу скажу - я материалист. В наше время, к сожалению, появилась нехорошая тенденция - в некоторых кругах, даже научных, это стало не модно. Я бы сказал, что это естественная реакция страны на падение жестко навязанной материалистической идеологии, если бы это не было мировой тенденцией. Тенденция к уходу в идеализм проявляется во всем - хотя бы в литературе: если в середине нашего века в фантастическом жанре во всем мире преобладала "научная фантастика", описывающая по большей части технический прогресс человека во времени, то к концу века ее практически полностью вытеснила "фэнтези", - описывающая иллюзорные миры и магические процессы. По той же причине исчезли из средств массовой информации сообщения о "летающих тарелках" - их сменили сообщения о колдунах и гороскопы. Анализ этой тенденции крайне интересен, у меня даже есть гипотеза (да и наверняка не только у меня) о цикличности "материалистической" и "идеалистической" направленности общества на разных этапах развития. Что-то сродни "пассионарности" Льва Гумилева - энергии социума. Жаль, что тема моего проекта не позволяет остановиться подробно на этой интересной теме. С помощью электронной почты я общаюсь со многими людьми из разных городов и даже стран. Большинство из них - программисты, студенты, научные работники, люди так или иначе связанные с компьютером. Меня удивляет, как высок среди них процент идеалистов, считающих разум - некоей высшей силой, непознаваемой и неповторимой. Я не беру на себя смелость утверждать, что моя точка зрения истинна. Она истинна для меня в данный момент времени, пока я не имею серьезных аргументов, свидетельствующих против. Честно говоря, я сомневаюсь, что такие аргументы появятся, но, если таковое случится (например, явится с неба ангел во плоти), я изменю свою точку зрения. Пока же отложим спор между идеалистами и материалистами и примем за рабочую гипотезу, что создание искусственного интеллекта - лишь дело времени. Иначе продолжать разговор о моем дипломном проекте вообще не имеет смысла. Пока же сам интеллект не создан, можно говорить об ЭТАПАХ, или ШАГАХ в его построении. Например, экспертная система - система, делающая какие-либо заключения на основе сопоставления полученной извне информации и информационной базы, имеющейся в наличии - разве не шаг к созданию искусственного интеллекта? Такая система может заменять человеческий разум в каком-то одном его проявлении. Медицинская экспертная система на основании введенного списка симптомов способна выдавать диагноз. Он основан на информации, имеющейся в данной системе, которая может обладать самообучаемостью, если внутренняя информация корректируется и пополняется во время работы. В этом принципе есть что-то, делающее его похожим на принципы работы разума. Ассоциативный принцип работы моей программы тоже в чистом виде не может быть положен в основу работы разума. Если бы у меня было больше времени, я бы попробовал доказать это математически, либо найти прецеденты подобного доказательства. Скажу честно - я рад, что передо мной не стоит такая сложная теоретическая задача. Тем не менее, я в соответствующем разделе, который так и называется: "почему ассоциативный принцип не может быть положен в основу создания искусственного интеллекта". В специальной части я обосную свою точку зрения, опираясь на работы ведущих психологов, изучающих работу мозга человека. +----------------------+ | 1. ОСНОВНАЯ ЧАСТЬ | +----------------------+ 1.1 ПОДХОД К РЕШЕНИЮ ЗАДАЧИ Ольга набирает. Сумку на ладони - Мысль остановить - Заливается. Гордость пропадает. Защитят дипломы - Можно уловить. Не ругается. Это не упорный, Вот еще мне сниться Если таковой, Будет лишь одна... Я сама! А Горный - Хорошо учиться... Типа курсовой... Парты от окна... 1.1.1 Обзор существующих разработок В этом разделе я расскажу о тех четырех программах, которые мне удалось раздобыть. Это четыре самые распространенные на IBM-PC непрофессиональные программы, которые формируют псевдолитературный текст. Термин "непрофессиональные" я употребил в смысле "не разрабатывавшиеся с серьезными научными целями", о профессионализме их создателей ни в коем случае нельзя сказать ничего плохого - эти программы написаны очень талантливо, и произведения их весьма забавны. Программа BRED.COM создает псевдонаучную фразу, TREPLO.EXE порождает весьма забавный литературный текст, POET.EXE сочиняет стихи с заданным ритмом, а DUEL.EXE по принципу даже напоминает мою программу. Рассмотрим их по-порядку. ПРОГРАММА BRED.COM Применяя цифровой производительный интерфейс в то-же время имея в виду квалифицированный многоотраслевой коэффициент представляется возможным даже несмотря на синхронизированный функциональный объем функционировать при существенных ограничениях на автономный аппаратный автомат таким образом получая автоматизированный функциональный генератор который и требуется для успешного решения поставленной задачи. /программа BRED.COM/ Это пример работы программы BRED.COM. После запуска программа говорит: "Минуточку!", а затем выдает на экран некую короткую наукообразную фразу. Программа занимает в распакованном виде 12944 байта. Автор неизвестен - имеется в теле кода надпись следующего содержания: "Чей-то C++ - И копирайты чьи-то ( ??? ). Ошибочка ! Оборвали програмку-то ! Вот." Более осмысленного текста найти не удалось. Вполне грамотный на первый взгляд текст на поверку оказывается набором штампов. Шаблонность становится ясна, когда мы заглядываем в код программки. Там мы видим крохотный словарик прилагательных: высокий общий, автоматизированный, запланированный, ..., существительных: уровень, интерес, комплекс, ... , и различных оборотов: Применяя, в то-же время имея в виду, представляется возможным даже несмотря на, функционировать при существенных ограничениях на, таким образом получая, который и требуется для успешного решения поставленной задачи. Таким образом, данная программа выдает фиксированное предложение, составленное из случайно выбранных из словаря слов, "что и требуется для успешного решения поставленной задачи"... ПРОГРАММА TREPLO.EXE Это намного более серьезная разработка. При запуске появляется надпись: Трепло v2.0 (c) 1989-1991 by Mike Grinchuk Free for noncommercial use Присылайте Ваши замечания и пожелания по адресам: [email protected] (Internet) 2:5020/23.3 (FidoNet) 117234 Михаилу Гринчуку до востребования Я, конечно, сразу попробовал связаться с автором по электронной почте, но ответа так и не получил. После нажатия клавиши "пробел" программа начинает с большой скоростью выдавать на экран бесконечный текст, нажав "Pause", можно его приостановить и прочесть, а нажав "Ctrl+Break", можно прервать работу программы. В распакованном виде рабочий модуль занимает 37340 байт, а к нему прилагается несколько текстовых файлов. Но сначала посмотрим на работу этой программы: Стипендия, вручаемая настоящим частям структуры и упростимая, - это фактическое мышление фактов трезвых бань без кобры. Неэтичный закон смеет недалеко от подозрительной потребности с системой купаться; он учитывает судьбу бесперспективных материализмов кризисом невероятной философии. Позвонит условие сознания, вручающее дворников дискретному озеру и вручившее сей полуфабрикат ярким призракам хвоста. Поражает идеальная грамматическая связность и разнообразие высказываний! При изучении файлов данных становится понятен принцип работы, а также возникает огромное уважение к автору - он проделал именно ту работу, которой так испугался я, - сделал программу синтеза текста на основе закономерностей склонения, спряжения, сочетания и расположения слов в русском языке. Файл набора конструкций я приведу полностью, ибо он того заслуживает. Собственно это скорее программа объектно-ориентированного языка программирования. Специальный файл описывает все возможные конструкции предложения. А к нему прилагаются несколько файлов данных, содержащих наборы существительных, прилагательных, причастий, деепричестий и глаголов, а также правила их изменения по падежам, родам etc. Таким образом, на входе программы имеется набор синтаксических конструкций и правил формообразования, а на выходе мы получаем связный текст, составленный случайным образом под руководством этих правил. ПРОГРАММА POET.EXE город отличный сибирский ученый сухой вешний покой завершающий жвачный студеный страшный сердитый пример полусонный ученый утренний скорый размер на просторе глухой свой отщепенец достойный стальной холостой грех перламутровый злой золотой эротичный вновь удрученный мордастый отчизна девичник срок перламутровый целый чугунный святой ропщет контракт золотой понедельник народ страждет однажды отъезд поэтичный суровый модный бесчувственный гром шаловливый лиловый лунный удар негодующий наоборот (программа POET.EXE) Да, эта программа сочиняет стихи. Имеется словарь слов с проставленными ударениями и некоторой другой информацией о них, а также задается ритм и указывается какие строки рифмовать (например 1 и 4). Автор ее - уже знакомый нам Гринчук Михаил Иванович. В заключение можно отметить, что все эти программы обладают одним общим свойством - они используют шаблоны и заранее подготовленные словари. ПРОГРАММА DUEL.EXE Автор программы - Артем Полонский 2:5020/[email protected] Он реализовал марковский алгоритм, описанный в статье "Компьютеp пpобует свои силы в пpозе и поэзии", журнал "В миpе науки", 8.1989, стp. 88. АЛГОРИТМ: 1. В память гpузится текст пpоизвольного содеpжания. 2. Выбиpается пpоизвольное слово, на него ставится указатель. 3. Цикл: 3.1 Считывается слово, на котоpом стоит указатель. 3.2 Ищутся все вхождения данного слова в файле. 3.3 Сpеди них случайно выбиpается одно, и указатель устанавливается непосpедственно за найденым совпадением. 3.4 Если не достигнут конец файла, пеpеход на начало. пример работы программы со сборником анекдотов: - Офицант! У меня была легавая, стоящая десять миллионов рублей! - О, вы, наверное, мастер джиу-джитсу? - Hет. - Тогда отвали десять тысяч по копейке! - Мой друг, вы - осел! - Интересно, это почему? Это я - ваш друг, или я - ваш друг, потому что ваш друг, или я - ваш друг, или я - осел, потому что ваш друг, или я - дерьмо?!! ПРИМЕЧАНИЕ 1: Можно искать совпадения не для одного, а двух и более слов, но это уменьшает долю абсуpда в тексте. ПРИМЕЧАНИЕ 2: Еще можно делать то же самое для букв - только бpать совпадения по две буквы и больше. пpимеp: Длючеpаюче, нодлая, этогдиши идатиши, клноля? Стенье кль Hото-Бpую: бpслае дучеpеть сияющеpо дуpеpа, гоpхолемван-ся. Усуст наежист, закобp! Ит пpа влеть когоpелеть. Схожий принцип положен в основу работы моей программы. По сравнению с данным алгоритмом моя программа имеет то преимущество, что не ищет ассоциации непосредственно в тексте, а создает смпециально подготовленную базу, что позволяет использовать большие объемы исходного текста, например 4мб. Ну и конечно плюс алгоритмы обработки, ударений и рифмовки. 1.1.2 Выбор алгоритма Как известно, лень - двигатель прогресса. Поэтому я сразу отмел мысль о составлении "вручную" словаря слов с описанием, какая это часть речи, где ставится ударение и т.д. Я решил, что компьютер должен сам составить для себя базу данных, почти без моего участия, "начитавшись" литературного текста. В размышлениях, как бы этого добиться, я пришел в гости к своей бабушке и попросил у ее соседки все учебники по русскому языку, которыми пользуются ее сыновья-школьники. Категорически отвергая предложения бабушки попить чаю с вареньем, я погрузился в изучение грамматики, выписывая важные для меня моменты в блокнотик. Через полтора часа этой неблагодарной работы я понял, что вряд-ли смогу научить машину классифицировать слова русского языка - настолько нечетки определения, настолько много исключений, настолько сложны и многообразны грамматические правила. И тут мне пришла в голову идея - а что если компьютер, читая текст, будет запоминать, в какой последовательности он встречал слова? Естественно, база данных будет огромной - но кто сказал, что искуственный интеллект должен быть построен в нескольких килобайтах? По крайней мере этот принцип прост и даже напоминает некий совершенно другой уровень в осознании проблемы. К тому же, в этом случае грамматика будет верна - ведь, например, слово "зеленого" можно встретить перед словом "ковра", но уж никак не перед словом "ящерицей". Да и осмысленность явно повысится. 1.1.3 Несколько слов о структуре стиха Чем отличается стихотворная речь от прозы? Очень удачно это определил Б.Б.Томашевский: 1) Стихотворная речь дробится на сопоставимые между собой единицы (стихи), а проза есть сплошная речь 2) Стих обладает внутренней мерой (ритмом), а проза им не обладает Надо отметить, что второй признак зависит от фонетическоо строя каждого языка. У некоторых народов он может отсутствовать. Какова же внутренняя мера русского стиха? В русском стихе ударение в слове подвижно, может стоять в любом слоге слова. Например во французском ударение стоит на последнем слоге, в польском - на предпоследнем. Основа ритмичности русского стиха - чередование ударных и безударных слогов. Рассмотрим формы русского стиха. Знаком "-" будем отмечать безударный слог, а знаком "U" - ударный. Двусложных размеров два. Это хорей "-U", где строка делится на двусложные стопы, в каждой ударение падает на первый слог: МЧАТ-ся ТУ-чи ВЬЮТ-ся ТУ-чи ЧУ чу-КОТКА ЧУ а-ЛЯСКА - четырехстопный хорей: U-U-U-U- Второй двусложный размер - ямб "U-": по-РА по-РА ро-ГА тру-БЯТ на ЧЕР-ный ДЕНЬ ус-ТА-лый ТА-нец ПЬЯ-ных ГЛАЗ ды-РЯ-вых РУК вто-РОЙ у-ПАЛ чет-ВЕР-тый СЕЛ вось-МО-го ВЫ-ве-ли на КРУГ Заметьте, во второй строке песни Яны Дягилевой он чуть нарушился - на ударное место попал безударный слог "-ли". Это нормально - идеальный размер на практике никогда полностью не соблюдается. Эту важную особенность мы обсудим чуть ниже, а пока продолжим классификацию. Трехсложных размеров три: дактиль "U - -": Это очень распространенный стиль и примеров тут множество: ТУЧ-ки не-БЕС-ны-е ВЕЧ-ны-е СТАР-ни-ки СТА-я во-РО-буш-ков к Ю-гу со-БРА-лась ВИ-хри-вра ЖДЕ-бны-е ВЕ-ют-над НА-ми КРО-лик му-СО-лил ка-ПУСТ-ный лис-ТОК КТО по за-ДА-ни-ю МУД-рых лю-ДЕЙ ПРЫ-га-ет вМО-ре дож-ДЕЙ? Далее следует амфибрахий "-U-": пос-ЛЕД-ня-я ТУ-ча рас-СЕ-ян-ной БУ-ри со-ЮЗ не-ру-ШИ-мый рес-ПУБ-лик сво-БОД-ных И последний трехсложный размер - анапест "- - U": вот на-РОД-ный под-ЕЗД по тор-ЖЕСТ-вен-ным ДНЯМ от боль-ШО-го у-МА лишь су-МА да тюрь-МА от ли-ХОЙ го-ло-ВЫ лишь ка-НА-вы и РВЫ от все-ЛЕН-ской люб-ВИ толь-ко МОР-ды в кро-ВИ со-би-РАЙ-ся на-РОД на бес-СМЫС-лен-ный СХОД Собственно в нашем случае все вышесказанное не важно - ритм задается человеком. Важно понять только одно правило: ===> Ударный слог может попасть на безударное место, но не наоборот! Попадение ударного слога на безударное место вполне допустимо. Лишь М.В.Ломоносов в первые годы творчества старался этого избегать, но под влиянием критики Сумарокова и Тредиаковского отказался от этого и стал свободно пользоваться длинными словами, как все последующие поэты до наших дней. Наоборот, попадание безударного слога на ударное место - успеха поэту обычно не приносит. Ну разве за исключением Максима Горького, писавшего свое знаменитое: "ГЛУпый ПИНгвин РОБко ПРЯчет". 1.1.4 Выбор языка программирования Ассемблер - сразу скажу я. Это слово обычно не оставляет равнодушным, а вызывает целый спектр эмоций - от уважения до полного презрения. Сейчас я обосную, почему я выбрал именно ассемблер. Обоснование будет состоять из двух частей - объективная необходимость и личное предпочтение, ибо одного раздела может оказаться недостаточно. ОБЪЕКТИВНАЯ НЕОБХОДИМОСТЬ Итак, мы имеем задачу, характеризующуюся: - очень большим объемом постоянно доступной оперативной памяти; - требованием высокого быстродействия; - отсутствием серьезных математических вычислений; - отсутствием необходимости в обеспечении переносимости на машины другого типа; Естественно, в этом случае более подходит машинно-ориентированный язык. - Гибкость его позволит в работе с данными до минимума сократить объем базы, максимально приблизив ее структуру к требованиям задачи. Например, при организации базы, я использовал плавающую структуру - ведь разные слова встречаются с разной частотой, поэтому количество ассоциаций будет разным. Да и длина слова всегда различна. Плавающая организация позволила до минимума сократить объем данных. - Оптимизация алгоритма на процессорном уровне позволит достичь высокого быстродействия. В случае переноса больших объемов данных я пользовался одной командой "rep movsb", которая позволяет переносить указанное в регистре ECX количество байт с адреса ESI по адресу EDI, эффективно используя возможности нового поколения 32-х разрядных процессоров 386, 486, 586. Ни один из известных мне языков высокого уровня не позволяет так полно использовать эти возможности. ЛИЧНОЕ ПРЕДПОЧТЕНИЕ Не секрет, что у каждого программиста имеются свои излюбленные приемы работы. Это относится и к стилю написания программ и к средствам, которыми пользуется программист. Хорошо освоив в рамках учебной программы такие языки, как C, С++, FoxPro и другие, хорошее владение которыми я, как и все мои одногрупники, демонстрировал при сдаче соответствующих работ, тем не менее я остановил свой выбор для решения большинства задач именно на Ассемблере. Именно на нем я выполнял все учебные работы, позволяющие выбирать язык программирования. Главным образом потому, что мне писать и отлаживать программу на этом языке быстрее и проще - он позволяет более гибко взаимодействовать с машиной. Вероятно, в этом сказывается мой опыт - чаще всего мне приходилось работать именно на ассемблере - сначала в техникуме на компьютере БК0010 и ДВК, где других языков не существовало, либо они были очень несовершенны, затем в "Геофизике", когда я программировал полевой модуль электроразведки, где аппаратные средства не позволяли использовать другой язык, затем в МТТМ "Защита", где я программировал приборы радиоконтроля, построенные на однокристалке - там не было другого языка кроме машинно-ориентированного. Так или иначе, конечно эту задачу можно было решить и с помощью других средств, но я выбрал именно ассемблер, исходя из объективных требований задачи и личного предпочтения. В ходе разработки мне пришлось изучить 32-разрядный ассемблер IBM-PC новых поколений, (раньше я работал на обычном 16-разрядном, но он не позволял необходимой в данном случае скоростной работы с оперативной памятью большого объема), освоить распределение памяти в защищенном режиме и написание программ под DOS4GW. 1.2 РЕШЕНИЕ ЗАДАЧИ Выбрав позицию с надписью пункта "куда", Поезд не для них - и раза проник на вагона. Мимо, почти на проталкивание жетона, Что он в одном из метро существуют когда. Что он в том? Что он в одном из метро? Для кого? Ехал, проникнув в метро. "Существуют?" - спросила. Во! На спор с ЛЛео обиделся - и пропустила, ЛЛео обиделся, и пропустила его. Ли он в тридцатых известный тусовщик. В том, что Ищет и не для них. И турникеты с путями... Мая. Его остановку, а стопил с друзьями. Атлас метро. И усталость. В метро для тех, кто... 1.2.1 Описание алгоритмов Блоки программы работают в следующей последовательности: 1) Накопление базы слов при помощи "закачивания" текстом. При этом либо дополняется существующая база, либо при отсутствии таковой - создается новая. 2) Определение количества слогов и простановка ударений вручную, а когда надоест - автоматически. Проставление вручную некоторого числа ударений необходимо для создания "базы ударений", позволяющей программе в дальнейшем прогнозировать наиболее вероятный ударный слог для необработанных слов. 3) Написание стихотворения При наличии соответствующих данных, программа может работать начиная с любого из трех этапов. Далее мы подробно рассмотрим большую часть использованных алгоритмов. 1.2.1.1. Алгоритм "накопления опыта" Разберем работу алгоритма на примере. Имеем текст: "Мама мыла раму. На раму села мама." Получившаяся база имеет следующий вид: 1 мама 5 2 мыла 1 3 раму 2 4 4 на 5 села 3 Номера перед словом я проставил для наглядности - реально их нет. Мы видим, что в тексте перед словом "мама" употреблялось слово "села", а перед "раму" - слова "мыла" и "на". Вообще формат единичного элемента выглядит так: байт - ФЛАГ байт - количество ассоциаций в поле X байт - количество слогов байт - номер ударного слога байт - количество букв в слове N [N байт] - слово {[X слов]} - номера слов-ассоциаций Скобки {} означают, что ассоциаций может не быть. Например если слово начинает новое предложение. (Вспомним наше "на".) В байте флага устанавливается: - бит 1, если ударение для этого слова было проставлено вручную - нужен для того, чтобы блок автоматической расстановки ударений не трогал это слово, обработанное когда-то вручную; - бит 7, если это слово уже использовалось как окончание, и это не привело к успеху. - Нужен для того, чтобы функция, случайно выбирающая слова, не повторялась; - бит 8, если это слово использовалось как рифма в этом цикле сочинения стиха - нужен для того, чтобы при написании стиха не повторялись в качестве рифмы одни и те же слова. Количество слогов, ударный слог и флаг вначале равны нулю - при дальнейшей обработке сформированной базы они будут играть свою роль. 1.2.1.2. Алгоритм простановки ударений АЛГОРИТМ РАЗБИВКИ НА СЛОГИ Первым делом надо сказать об алгоритме разбивки на слоги. Количество слогов равно количеству гласных букв. Есть слова с нулевым количеством слогов - это предлоги "в", "с", "к" и т.д. Их можно вставлять в любую стихотворную строку по мере необходимости, не боясь нарушить ритм. Алгоритм разбивки на слоги, который я сделал, иногда дает ошибку. Это связано с тем, что не имеется четких правил, позволяющих определить границы слогов. Например почему: МОР-СКИ-Е , но МЕРЗ-КИ-Е ? Границы слога зависят от корня. Но в общем случае слог заканчивается на гласной, если за ней идет тоже гласная ("ко-а-ла"), на гласную, если перед ней только одна согласная ("мо-ло-ко"), и на гласную после согласной, если согласных подряд две или больше ("мор-ски-е"). В последнем случае алгоритм изредка будет давать сбой, раскладывая "пар-тком", "мер-зки-е" etc. НО: Для нашего случая это непринципиально, поэтому заниматься серьезной доработкой я не стал. АЛГОРИТМ ПРОСТАНОВКИ УДАРЕНИЙ Как оказывается, четких правил простановки ударений в словах русского языка не имеется. Более того, в одном и том же слове ударение может меняться. Ну как объяснить компьютеру, почему в выражении "прижал к груди", ударение в слове "груди" падает на второй слог, а в выражении "женские груди" - не первый? Тем не менее я предположил (а в дальнейшем мое предположение подтвердилось), что существует некоторое количество слогов, на которые никогда не падает ударение, а также некоторое количество слогов, на которые ударение падает всегда. Мой алгоритм позволяет на основании некоторого накопленного "ручной простановкой" опыта прогнозировать наиболее вероятный ударный слог. Процент попаданий при этом (не считая односложные слова, где альтернативы нет) составляет 50-60%, что конечно немного, но значительно выше случайного 30% (средняя длина слова = 3 слогам). Вспомнив, что иные поэты нарочно пренебрегают ударениями ("глупый пингвин робко прячет"), можно вполне допустить такой процент. Вначале в некотором количестве слов ударения проставляются вручную. При этом в специальной базе записываются все встретившиеся слоги, а также количество их ударных (Vyes) и безударных (Vno) существований. Вероятность получения ударения в этом слоге, вычисленная по формуле A=(Vyes-Vno)*(Vyes+Vno) тем больше, чем больший опыт накоплен для этого слога и чем меньше противоречивого употребления этого слога было встречено. Затем, используя эту базу, программа готова выполнять автоматическое проставление ударений. 1.2.1.3 Алгоритм подбора рифмы А суббота налетит ураганом, Разве нет причины встать на рога нам? Расчехли-ка инструмент, да попой-ка, Намечается большая попойка Ну куда же вы ребята, куда вы? Вы опять нажретесь там как удавы, А потом опохмелитесь вы соком В тщетных помыслах о чем-то высоком. Например сходить по пиву и винам Что за сволочь там поет о любви нам? Глотку медную дерет на побудке - Надавать ему пора бы по будке. С.Гроховский Я привел в эпиграфе стихотворение Сергея Гроховского, чтобы показать возможную виртуозность рифмы - Гроховский буквально жонглирует словами. Сразу скажу, что такой высоты полета моя программа не достигает - ее рифмы не отличаются особенной изысканностью. Я не смог нигде найти алгоритмы рифмовки, либо детальное описание этого процесса, поэтому пришлось придумывать самому. Разберем правила рифмовки на примере стиха И.Северянина - ну очень удачный пример. О вы - размеры старые, Захватанные многими, Банальные, дешевые, Готовые клише! Звучащие гитарою, И с рифмами убогими - Прекраснее, чем новые Простой моей душе. 1. "клише - душе" Ударные слоги должны быть созвучными (или одинаковыми). Собственно даже не весь слог, а только фонема, относящаяся к ударной гласной. 2. "мно-гими - у-бо-ги-ми" Если слог не последний, то уже не столько важна ударная фонема, сколько лишь сама гласная ("но" и "бо" - малосозвучны), а также всё, что следует за ней ("огими"). 3. "ста-ры-е - гита-ро-ю" Количество слогов, стоящих после ударного, должно совпадать, а сами они должны быть если не одинаковы (как "огими"), то созвучны. Причем критерии созвучности тут сильно занижены по сравнению с созвучностью, необходимой ударному слогу - ("рою" - "рые" малосозвучны, рифмовать их отдельно нельзя). Рассмотрим вопрос алгоритмизации "созвучности". Тут нам поможет понятие парных гласных и согласных: "Б-П,В-Ф,Г-К,Д-Т,Ж-Ш,Щ-Ш,З-С,М-Н,Ц-Ч" и "Ы-И,Ю-У,Я-А,Э-Е,О-Ё". Таким образом, компьютер сможет определить, что слова "стопа-пальба" - рифмуются. Возможно даже рифмуются "стопа-себя" - если даже многие известные поэты допускают изредка нечеткие рифмы, то почему надо ограничивать в этом компьютер? Это можно простить. Простить нельзя другое - поначалу программа выдавала такие характерные для неопытных поэтов перлы, как "зима - пчела". После чего я внес поправку (которую описал в пункте 2 - раньше я считал, что важна только ударная гласная) - если ударным является последний слог, то необходима созвучность не только ударной гласной, но и одной буквы перед ней ("М" и "Л" несозвучны). Но если слог не последний - то заботиться о предыдущей букве не надо: "мНогими - уБогими" тоже неплохо звучит. Главное - проверить созвучность последующих букв, и критерии парных гласных и согласных тут вполне применимы. Честно говоря я только полез за образцами рифм, почитал их, и мне не очень понравилось. Например попадались такие: "половым - неживым - пингвин", "всему - одному - огню", "исходила - объявила - филя". Поэтому я только что подправил алгоритм, и теперь в случае ударения на последний слог проверяются не парные буквы, а только их совпадение. Таким образом, отныне программа больше не рифмует "стопа-себя". Действительно, не хорошо это. Теперь в результате получаются только жесткие рифмы: нефункциональный (нефункчиональний - так преобразовывается слово во внутреннем формате по правилу парных гласных) - нахальный - театральный - пасхальный - начальный - коммунальный - универсальный дружить(дружить) - окружить - разложить - освежить - доложить - отложить - положить - дожить - заложить Надо отметить, что, например, рифма "образование - причесывание" возникает из-за того, что слово "причесывание" как раз попало в группу неудач при автоматическом проставлении ударения. Вспомним "глупого пингвина" и не будим судить строго. Таким образом, данная программа отличается от своих предшественников блоком автоматической рифмовки. 1.2.1.4 Алгоритм создания стиха Для создания стиха необходимо: Выбрать последнее слово и проверить его соответствие рифме и ритму, по его ассоциациям найти слово, соответствующее ритму, и так до тех пор, пока не будет заполнена строка, в случае затруднений возвращаться на шаг назад - менять предыдущее слово, а то и предыдущие рифмозадающие строки. В виду большой сложности этого алгоритма, изобразить его в виде блок-схемы представляется проблематичным, поэтому он будет описан в текстовом виде. 1) Установить указатель на последнее слово последней строки шаблона ритма 2) Очистить буфер рифм и флаговые поля базы, 3) установить "сферу поиска" = "заданная тематика" ; Работа со строками 3.1) Если в базе рифм нет указанной для этого типа строки рифмы, то установить флаг "свободная рифма" ;Работа со словами 4) Найти случайное слово из сферы поиска, если не найдено - к пункту 13 5) Если флаг "свободная рифма" сброшен, то проверить совпадение рифмы, если нет - к 4. 6) Проверить совпадение ритма (такт и максимальное количество слогов), если не совпадает - к 4. 7) Погрузить в стек Е найденное слово, сферу поиска, курсор строки 8) Ассоциации найденного слова занести в сферу поиска 9) Если строка не заполнена полностью - к 4 ;Строка заполнена 9) Вынуть из стека Е все этапы, запоминая слова в буфере готовых строк для этого номера строки 10) Установить флаг "использовано" для оконечного слова в базе. 11) Записать оконечное слово в базу рифм, заместо предыдущего (если оно было) 12) Установить указатель на предыдущую строку - если она существует, то к 3.1. 12.1) Проверить с конца - есть ли ненаписанные строки, если да - то установить на них указатель и перейти к 3.1 ИНАЧЕ - КОНЕЦ ; Если слово не найдено 13) Если слово не оконечное - к 16 13.0) если "сфера поиска" = вся база 13.1) Если и рифма была свободная, то "ТВОРЧЕСКИЙ КРИЗИС", конец 13.2) Если рифма не свободная, то стереть из буфера готовых строк все строки с этой рифмой, если есть (мы их потом допишем), перейти к пункту 3 14) Если "сфера поиска" = "заданная тематика", то "сфера поиска" = "вся база", вернуться к 4 15) ("сфера поиска" = группе ассоциаций) - перейти к пункту 3. 16) Извлечь из стека Е предыдущий шаг, слово отбросить, а все остальное установить как было, в т.ч. прежнюю группу поиска. Вернуться к 4. В стек Е погружается новый шаг: - флаг F_LEVEL (флаг уровня поиска) 0 - вся база,1 - заданная тематика, 2 - набор ассоциаций - флаг FREE_RHYME "свободная рифма" = 0, "заданная" = 1 - флаг FIRST_WORD Для оконечного слова = 1, для всех остальных в строке = 0 - СФЕРА ПОИСКА: байт количества + [N указателей на слова] - УКАЗАТЕЛЬ на слово - ПОИНТЕР текущего слога в сочиняемой строке 1.2.2. Руководство пользователя Делайте! Институте-то лежащее... Не наступит настоящее! Стоит Денис и - сделайте! Ржание? Замечает, восторгается, Из России - и питается, Придумывайте самые... Цыканье... Правило, он отрывается. Он серьезно занимается, Остановить хихиканье. 1.2.2.1. Полная версия под OS/2 Warp Полная версия с графической и музыкальной заставкой и дружественным интерфейсом функционирует в операционной системе OS/2 WARP. Для запуска системы необходимо щелкнуть мышью два раза на иконке с надписью "STIH". После отработки графической и музыкальной заставки, появляется меню: - Create poeme - Create text base - Set ritm - Setup - Exit При выборе соответствующего раздела (кроме Exit) выдаются соответствующие подсказки. 1.2.2.2. Версия без оболочки под DOS4GW Программа носит название LLEO_DIP.EXE. Для запуска необходима командная строка: LLEO_DIP.EXE b [BASENAME] [TEXTNAME] - Режим "Base" - создать ассоциативную базу (или добавить к существующей новую информацию) с именем [BASENAME] используя текстовый файл [TEXTNAME]. Обработка файла может занять много времени (порядка 20 минут для файла, размером в 1Мб на машине класса Pentium). Файлы небольшого размера обрабатываются быстро. После обработки, программа предложит расставить вручную ударения для найденных слов - управляя клавишами "вправо", "влево", необходимо подогнать указатель к ударному слогу и нажать Enter. Если это занятие пользователю надоест, он может нажать ESC - в этом случае программа расставит ударения самостоятельно, на свой вкус. Практика показывает, что время, необходимое человеку для простановки ударений, примерно пропорционально размеру исходного файла: 1кб - 1 минута. LLEO_DIP.EXE с [BASENAME] [RITMNAME] - Режим "Create" - создать стихотворение, используя ассоциативную базу [BASENAME] и файл стихотворного ритма [RITMNAME]. Стихотворение записывается в файл POEME.OUT. Пример файла ритма LLEO.RTM: +-+-+-+- A +-+-+-+- B +-+-+-+- B +-+-+-+ C +-+-+-+- A +-+-+-+- D +-+-+-+- D +-+-+-+ C Строки, помеченные одинаковыми буквами, рифмуются одинаково. Буквы должны быть заглавными и латинскими. Знаком "+" обозначается слог, на который падает ударение. Знаком "-" обозначается безударный слог строки. Программа выдает сочиненные четверостишия до тех пор, пока не исчерпает все возможные рифмы (это зависит от размера исходного текста - 20-30кб достаточно для сочинения нескольких десятков куплетов при не слишком навороченном ритме), либо пока не будет нажата клавиша ESC. Для повторимости результатов экспериментов инициализация генератора случайного числа значением таймера в данной версии отключена, рифмовка задана точная. В версии OS/2 эти параметры устанавливается в режиме Setup. 1.3 Результаты 1.3.1 Примеры сочинённых стихотворений Что интересно, совершенно по-разному воспринимают люди результаты работы программы. Одни приходят в совершеннейший восторг от стихов компьютера, другие - в ужас от отсутствия очевидного смысла. Множество моих родственников, друзей и знакомых видело результаты работы программы, и по типу восприятия всех людей можно разделить на 3 категории: 1) "Приходящие в восторг" - как правило, это либо люди, совершенно не знакомые с компьютером, либо очень хорошо знакомые с ним, но имеющие сильно развитое чувство юмора. 2) "С интересом посмеивающиеся" - это в основном люди, профессионально связанные с компьютером, возможно сами имевшие дело с подобными разработками. 3) "Разочарованные" - это целиком и полностью люди, не знакомые с компьютером. Они ожидают увидеть полностью осмысленный стих, несущий в себе какую-то мысль, выраженную в высокохудожественной форме. Когда их надежды не оправдываются, они испытывают разочарование. Очень тяжело объяснить такому человеку, что для создания произведения искусства необходим интеллект, а искусственный интеллект пока не создан, и конечно я не в силах его построить на персональном компьютере за три месяца дипломного проектирования. Поскольку каждая глава пояснительной записки в качестве эпиграфа имела пример творчества программы (клянусь, я ничего не правил, только расставлял знаки препинания!), первым делом следует привести пример прозы, сочиняемой машиной: Моей дорогой джинсовой куртке теперь подумаем почему-то в недавно смотрел а клеопатру небось пятнадцать да это только представителю другой коля настраивал свою книжную полку шкафа и плыть с половым. Нависла над нами укутавшись в ликим прискорбием сообщает что система такого напряжения даже девчонки губы я успокаивался все про него глаз глядят а что смогла да и слаженностью их улыбкам. Воли а идти мы как малек дима ну и психологических позволяющих их никто не заводил три но того используются различные уровни развития событий повторяющихся нот какой нибудь двухабзацным лейтенантом нквд. Удивился костя уже не сумел бы ложек чешуи скумбрии высыпать из под водой он оглянулся на мгновение и тимур и был земным и помните мне их было замков и юркнула. Пошутил я доверяю своему рабочему месту но он ударил его вопросами об одном из за защиту значит где гиперпереход на экране мультфильм как елочная игрушка из вагона вопли вы оживляете. Текст конечно не несет какой-либо особой смысловой нагрузки, но он по большей части грамматически связан. Причем это обусловлено не набором шаблонных конструкций, а эмпирически полученнной информацией о взаимосвязи объектов (слов). Ну и теперь настало время поговорить о стихотворных результатах. Вот пример стихотворения, написанного машиной, прочитавшей курсовой проект моей сестры Маргариты по истории христианства средних веков. Ударения были проставлены автоматически, они обозначены заглавными буквами. Ритм был задан четырехстопный хорей ("Прибежали в избу дети..."), частушечный. +-+-+-+- A +-+-+-+ B +-+-+-+- A +-+-+-+ B стрАнами болЕе тОго издевАется нАд нИми религИи И римскОй знАчение придавАл нА защИту которОго И связАнную с другИми фундамЕнт европейскОй сАм лютЕр отстаивАл броженИе отвергшЕе счЕт немцЕв Он назывАет германскОго обществА нАйти И внимАние реформАция позднЕе человЕку нЕ хватАет отвергшЕе влАсть папствА преобразовАние А вот стихотворение, написанное после прочтения инструкции к антивирусной программе aidstest Лодзинского. Ритм - четырехстопный амфибрахий ("Однажды в студеную зимнюю пору..."): -+--+--+--+- A -+--+--+--+ B -+--+--+--+- A -+--+--+--+ B всегдА прочитАв О дискЕте такИе А Если вЫ прОсто вставИли дискЕту От вИрусов И поможЕт вАм ещЕ А Или длЯ внЕдрения в несколькИх вО знАние с вИрусами которЫе реАлизованы И хОрошо Эту вставИли дискЕту горАздо прощЕ могУт бЫть испОльзована длЯ гибкИх случАе возмОжно в райОне своЕго связАны в соОтветствии с программАми предУпреждение О полиморфнЫх ковАрные вИрусы Их устройствЕ дискЕту И сопоставлЕния Его процЕссе нормАльной рабОты прогрАмы контрОльные сУммы файлОв нА разнЫх ковАрные вИрусы прИ вызовЕ нА вИнчестер И поможЕт вАм добИться длЯ обнаружЕния И программОй дискЕты нО вИрус можЕт проводИться файлОв оперАционной системОй И в качестве последнего примера я приведу стих, сочиненный после прочтения стихотворной подборки эхоконференции FIDO MO.SYSOEFF (Мурзин, Хованов, Петров, Лейкин). Пятистопный амфибрахий. -+--+--+--+--+ A -+--+--+--+--+- B -+--+--+--+--+ A -+--+--+--+--+- B сарАя И гОворят нЕ проронИть нЕ верИт печАли мЫ недочитАны немнОжко нА свЕте нЕ рАно И нЕмного И обманчИво небрИт И бУдто прибИли гвОздь Или погИб прИ отсвЕте нАм вИдеть кАк нАдо здЕсь вЕсна нЕ хОдять сплетнИ дА здОрово И репетИруешь И отражЕнный зренИе тО чЕго нибУдь тяжелОй болезнИ читАл лИ кострА осторОжный дымОк тО брошЕнный морОз А онИ которЫе когдА наконЕц когдА Я прорАсту травОй тЫ глядИ И бросИли водА А ещЕ схлопочЕшь пО рукАм леденЕц тАк прОсто всЕ звЕзды светлЕй И летО смЕх могИлы подстрИжешь себЕ схоронИшь И любОвь нИ сладА охОта нА вЕники в радиолОдке с котАми ценЕн зА сарАя И дЕйствительно никогдА навЕрное нЕ обижУ Я раздЕлю мЕж нАми звездА И брандспОйты смЕх плОхие мЫсли тряпкОй будЕм мЫ боИмся И чЕрное кАк изваЯнье поЯвится в Анаше в хОлодильник с поправкОй бросАясь плечАми открЫтыми нА расстоЯнье 1.3.2 Особенности ударений, как побочный результат В процессе разбиения на слоги у меня получилась статистика, которая может быть кому-то интересна. Мне она интересна потому, что подтвердила мою изначальную мысль о существовании слогов, почти всегда являющихся ударными, либо почти всегда безударными. Полную таблицу 9486 слогов можно найти в приложении 1. Сейчас я приведу два отрывка, в которых собраны слоги с наибольшей/наименьшей вероятностью ударения. Первая цифра Vyes - статистика ударности этого слога, вторая - Vno - статистика безударности. Третья цифра - коэффициент, вычисленный по формуле: (Vyes-Vno)*(Vyes+Vno). Итак, чаще всего ударение попадает на слоги: -ча +17 -1 = +306 зна- +20 -2 = +220 -га +14 -1 = +210 -тел +12 -1 = +156 -жишь +12 -1 = +156 -де +17 -3 = +113 Реже всего на слоги: -ся +1 -49 = -2450 -е +5 -88 = -1636 по +6 -83 = -1231 -ми +1 -33 = -1122 от +1 -33 = -1122 +------------------------+ | 2. СПЕЦИАЛЬНАЯ ЧАСТЬ | +------------------------+ Комплекс программ конструирования объектов Кстати, если я пошел - Я открыл и имена. Раз пришел, - жираф ушел. И проснуться. И умна. Наше время - и снаружи! А один раз произносит: Наше время - я вошел! "Консультация - должна!" Ехать прямо по нему. Как обычно, он идет Ноль, конечно, а саму - Из россии и блюдет. На гитере. И серьезный, Наше время я буквально - Кстати, если по всему. Лучше сразу не пойдет. Замечает написать. После окончания Я сначала их писать. Группы и шуршания Игорь - шумовик затейник! Прелесть, если буду думать Институте-то списать. Тетрис поедания. Комплекс программ конструирования объектов, рассматриваемый применительно к сфере работ в области создания систем искусственного интеллекта, является совокупностью средств, позволяющих вести разработку этих систем. В комплекс программ конструирования объектов включаются средства и программные разработки, позволяющие de facto осуществлять адекватное взаимодействие описываемых ими объектов, что и требуется для успешного решения поставленной задачи. Рассматривая вопрос о комплексе программ конструирования объектов, целесообразно осветить вопрос построения систем искусственного интеллекта на ассоциативном принципе, взяв за основу исследования интеллекта человека. Как я уже говорил во введении, для обоснования тезиса о невозможности построения искусственного интеллекта на одном лишь ассоциативном принципе я буду опираться не на математические доказательства, а на опыт, накопленный в изучении психологии мышления человека, - единственного на сегодняшний день обладателя интеллекта. Таким образом, жестким доказательством это считаться не может, но может быть использовано в качестве правдоподобной гипотезы. Наше познание окружающего начинается с ощущений и восприятия и переходит к мышлению. Функция мышления - помочь нам путем умозаключения узнать об окружающем мире то, что мы не можем (или еще не успели) узнать с помощью органов чувств. Задача мышления - определение отношений между предметами, выявление взаимосвязи и отделение их от случайных совпадений. Психология мышления, как направление, появилась лишь в ХХ веке. До этого господствовала та самая ассоциативная теория, которая сводила мысль к элементам ощущений, а законы протекания мышления - к ассоциативным законам. Итак, почему же мышление нельзя свести к ассоциативному процессу? - Первое отличие заключается в том, что течение ассоциативного процесса определяется случайными связями по смежности в пространстве и времени полученных впечатлений, в то время как течение мыслительного процесса регулируется связями предметного содержания. Короче говоря, по ассоциации "чашка" прежде всего ассоциировалась бы с "ложкой" и с "обедом", но уж никак не с сосудом, предназначенным для жидкости. Могут ли со временем накопленные тысячи ассоциаций привести именно к образованию четкого понятия "сосуд для воды", с которым будет жестко ассоциироваться чашка? Да нет, конечно. Для этого необходима целенаправленная работа по отделению случайных ассоциаций, например с "обедом", "завтраком" и "ужином", со "столом", со "вкусом чая" и прочее. Иначе ассоциативный процесс неизбежно приведет нашу чашку не к понятию "сосуда", а к обстоятельствам ее наблюдения, в частности к еде. Поэтому второе: - Второе отличие состоит в том, что течение ассоциативного процесса не осознается и не регулируется самим субъектом, т.е ассоциативный процесс лишен ЦЕЛЕНАПРАВЛЕННОСТИ. Нужно ли сделать небольшой экскурс в историю развития понятия мышления? Наверно нужно, дабы показать, что идея представить мышление как процесс асоциирования была первой же идеей, которая пришла в голову человеку, когда он стал задумывавться о мышлении вообще. Со временем человек отошел от этой идеи. Затем стоит кратко описать операции мыслительной деятельности, а в заключение раздела поговорить об этапах развития мышления у ребенка. Вся эта информация открывает нам направления, в которых должны вестись работы по созданию искуственного интеллекта. ИСТОРИЯ РАЗВИТИЯ ТЕОРИИ МЫШЛЕНИЯ Проблемы изучения мышления стали подниматься начиная с XVII века. Концепция сенсуализма состояла в понимании ПОЗНАНИЯ как СОЗЕРЦАНИЯ. "Нет ничего в разуме, чего не было бы в ощущениях" - был их девиз. Тут, конечно, и появилась ассоциативная теория, согласно которой все мыслительные процессы основываются на ассоциировании накопленного сенсорного (чувственного) опыта. Естественно возник вопрос о целенаправленности мышления. Сенсуалисты вышли из этого затруднения интересным образом - появилось понятие ПЕРСЕРВАЦИИ - тенденции представлений "удерживаться". Ну а крайняя форма форма персервации - навязчивая идея. Г.Эббингауз определил мышление как "нечто среднее между скачкой идей и навязчивыми представлениями". Таким образом он попытался объяснить мышление совокупностью двух патологических состояний человека. Вюрцбургская школа, наоборот, подчеркивала направленный характер мышления. Мышление, дескать, обладает своим специфическим содержанием, которое не имеет ни малейшего отношения к органам чувств и информации, поступающей оттуда. Тут заключалась другая крайность - "чистой" чувственности было противопоставлено "чистое" мышление. Чтобы объяснить направленность мышления, представители Вюрцбургской школы выдвинули концепцию "детерминирующих тенденций", которые, якобы, и направляют все те же ассоциативные процессы к решению задачи. Таким образом, задаче невольно приписывалась способность к самореализации. О.Зельц в своем исследовании мышления несколько изменил концепцию, заявив, что мышление является цепью специфических операций, которые служат методами, направленными на разрешение задачи. Таким образом Зельц представил мышление "системой рефлексоидальных соединений". Эта концепция была столь же механистична, как и ассоциативная. К.Коффка, представляющий школу гештальтпсихологии, вновь вернулся к идее чувственного созерцания, но уже с другой точки зрения. Он считал, что мышление - это не оперирование отношениями, а "преобразование структуры наглядных ситуаций". "Напряжение проблемной ситуации" вызывает переход одной неустойчивой ситуации в другую. С помощью ряда таких переходов происходит преобразование, которое в конечном итоге приводит к решению задачи. Таким образом получалось, что задача оказывалась решенной попросту в результате того, что мы под конец по-другому видим исходную ситуацию. Советская школа, во главе с Л.С.Выготским, отождествляла развитие мышления с развитием языка и речи. С моей точки зрения, не стоит переоценивать влияние речи на мышление, по крайней мере у взрослого человека. Безусловно, между речью и мышлением существует взаимосвязь, и "кто ясно мыслит, тот ясно излагает", и наоборот, но само мышление обычно протекает вдалеке от слов. Исключение составляет разве что мысленное "моделирование диалогов с собеседником", но тут речь выступает скорее как иллюстрация понятий. Очевидно, что не слово образует понятие, а понятие можно с большей или меньшей точностью выразить в слове. Описан знаменитый случай, когда обезьяна, обученная языку глухонемых, в ответ на какой-то, с ее точки зрения, пакостный поступок служителя, применила слово "грязный". Это слово послужило выражением гораздо более широкого понятия "неудовлетворение", которое, очевидно, существовало у обезьяны еще до обучения. Таким образом, обобщая вышесказанное, можно сделать вывод о том, что в отдельных ситуациях и задачах в мышлении присутствует и преобразование структур, и ассоциация представлений, и словесная организация, однако вцелом процесс мышления нельзя свести ни к одному из этих явлений. ОПЕРАЦИИ МЫСЛИТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ К решению задачи мышление идет с помощью многообразных операций, таких, как сравнение, анализ, синтез, абстракция и обобщение. СРАВНЕНИЕ - мышление сопоставляет вещи, явления и их свойства, выявляя сходства и различия, что приводит к классификации. АНАЛИЗ - это мысленное расчленение предмета, явления или ситуации для выделения составляющих элементов. Таким образом мы отделяем несущественные связи, которые даны в восприятии. СИНТЕЗ - обратный анализу процесс, который восстанавливает целое, находя существенные связи и отношения. Анализ и синтез в мышлении взаимосвязаны. Анализ без синтеза приводит к механистическому сведению целого к сумме частей, также невозможен синтез без анализа, так как он должен восстановить целое из выделенных анализом частей. В складе мышления некоторых людей наблюдается склонность - у одних к анализу, у других к синтезу. Бывают умы аналитические, главная сила которых в точности и четкости - в анализе, и другие, синтетические, главная сила которых - в широте синтеза. АБСТРАКЦИЯ - это выделение одной какой-либо стороны, свойства и отвлечение от остальных. Так, рассматривая предмет можно выделить его цвет, не замечая формы, либо наоборот, выделить только форму. Начиная с выделения отдельных чувственных свойств, абстракция затем переходит к выделению нечувственных свойств, выраженных в АБСТРАКТНЫХ ПОНЯТИЯХ. ОБОБЩЕНИЕ - это отбрасывание единичных признаков, при сохранении общих, с осознанием связей. Обобщение может совершаться путем сравнения, при котором выделяются общие качества. Так совершается обобщение в элементарных формах мышления. В более высших формах обобщение совершается через раскрытие отношений, связей и закономерностей. Абстракция и обобщение являются двумя взаимосвязанными сторонами единого мыслительного процесса, при помощи которого мысль идет к познанию. РАЗВИТИЕ МЫШЛЕНИЯ У РЕБЕНКА Важный материал для построения систем искуственного интеллекта может дать изучение развития мышления у детей. Развитие мышление ребенка происходит постепенно. Поначалу оно в большой степени определяется развитием манипулирования - игрой с окружающими предметами. Манипулирование, которое вначале не имеет осмысленности, затем начинает определяться свойствами объекта, на который оно направлено, и приобретает осмысленный характер. Также на развитие мышление большое влияние оказывает развивающаяся речь, несущая появление множества понятий. Надо отметить, что восприятия слов появляется у ребенка после 6 месяцев, однако слово пока еще не является самостоятельным сигналом. Оно воспринимается скорее как особого вида шум, несущий своеобразную информацию. Поэтому если в вопросе "Где мама?" изменить интонацию или голос, то прежняя реакция исчезнет. Когда ребенок начинает произносить первые слова, то обычно они относятся не к конкретному предмету, а ко всей ситуации в целом. Итак, вернемся к развитию мышления. Примитивная чувственная абстракция, при которой ребенок выделяет одни стороны и отвлекается от других приводит к первому элементрному обобщению. В результате создаются первые, неустойчивые группировки предметов в классы и причудливые классификации. Так, ребенок может обозначать одним словом плюшевую собачку, меховую шубу и живую кошку, классифицируя их по признаку наличия меха. Или называть словом "ключ" все блестящие предметы. Эти "обобщения" по большей части осуществляются не на основании существенных свойств, а на основании эмоционально ярких особенностей, которые привлекают внимание ребенка. Кроме того, к обобщениям ребенка часто примешивается ассоциация. У.Минто описал случай, когда ребенок сначала называл словом "ма" только свою маму, затем по ассоциации (по смежности) перенес это понятие на мамину швейную машину, затем по смутному сходству внешнего вида и звуков - на шарманку, затем, опять-таки по смежности - на обезьяну, которую он видел у шарманщика, и, наконец, снова по схожести признаков, - на свою резиновую обезьянку. Важной основой для мыслительной деятельности ребенка является наблюдение. При этом мыслительная деятельность выражается, прежде всего, в сопоставлении и сравнении. При этом усваиваются различия между такими понятиями, как ВЕЩЬ и СВОЙСТВА ВЕЩИ. Наблюдая окружающее, ребенок замечает последовательность явлений, например, то, что за накрытием стола следует еда. Эти наблюдения еще далеки от осознания закономерностей, но служат основой для развития понимания причинно-следственных связей. Также ребенок учится делать умозаключения, порой весьма забавные. Вот любопытный пример синтеза, который осуществил некий Миша: в доме травили тараканов и обработали щель за шкафом. Чтобы Миша туда не лазил, ему сказали, что там "страшно и плохо пахнет". Миша задумался и сделал вывод: "Страшно и плохо пахнет... Серый Волк накакал?" В возрасте 3-6 лет ребенок уже начинает подмечать относительность некоторых свойств и положений. "То, что у нас пол - у них - потолок!" - замечает 4-летняя девочка. "Камни тяжелее, чем лед: лед легче воды, а камни идут ко дну." - рассуждает 5-летний мальчик. Таким образом, мышление ребенка развивается постепенно, с помощью манипулирования предметами, с помощью речи, наблюдения и т.п. Все большее значение приобретает использование накопленного опыта. К 3-5 годам понятие еще опирается на один признак ("ложка - металлическая с ручкой"), к 6-7 годам выделяются уже общие, групповые признаки ("ложка - то, чем едят"). Становление высшей нервной деятельности в основном завершается в возрасте 15-17 лет. +--------------+ | ЗАКЛЮЧЕНИЕ | +--------------+ Гадай-то - стали исчезать! Кто были у него? Пришел. Же Петя только что сказать: Сказал: "Я - время!" Я вошел "Пальто", и говорит: "Не были." От этого не обращая. Вздохнет на языке: "Смотри! Действительно - в исписанный, Концу семестра", А внутри - Компьютера записанный, Теперь шпаргалки все забыли... На вахте - явно не вникая... Стучать по улице - дошел. Здесь единица-то - опрос! Него пришел, жираф ушел... Здесь единица-то - вопрос! Клавиатуры и проекты... Листок. И Ольга. А другая... Когда они не рассчитал Оно все объяснял вчера Домой. И Ольга. Что читал? И будет через полтора, Умна - поэтому конспекты. А вместо третьего трамвая... Таким образом, разработана программа, сочиняющая стихи. Отличием её от предыдущих разработок является то, что данная программа: - не использует шаблонов построения фраз, а использует ассоциативный опыт, накопленный при прочтении связного текста, что придает на порядок больше осмысленности произведению; - не требует специально подготовленного словаря данных, а создает словарь самостоятельно из любого вразумительного текста, объем словаря может достигать 65535 слов; - производит рифмовку самостоятельно, без словаря рифм; - не имеет ограничений на используемые слова (программа "стихоплюй", к примеру, использует только слова мужского рода единственного числа) - имеет возможность тематического сочинения (используя заданную группу "приоритетных" слов); - занимает менее 30кб на носителях - позволяет задавать любой ритм стиха (программа "стихоплюй", к примеру, не может использовать строку "+ - -") - разработана на кафедре вычислительных машин Московского Государственного Горного Университета, а не где-нибудь еще; Естественно возникает вопрос: а какие недостатки имеет эта разработка по сравнению со своими предшественниками? Единственным недостатком данной программы является снижение скорости написания стиха, вызванное сложностью алгоритмов работы с ассоциативной базой. Однако максимально полное использование аппаратного обеспечения машин 386- и выше поколения (язык программирования 32-разрядный Assembler, использование расширенной адресации памяти), компенсирует этот недостаток. Кроме того, на современной машине (486, Pentium) скорость сочинения все равно во много раз превосходит скорость прочтения человеком. +------------------------+ | 6. СПИСОК ЛИТЕРАТУРЫ | +------------------------+ 1. Горбатов В.А.,Огиренко А.Г.,Смирнов М.И. Искусственный интеллект в САПР. -М.,МГГУ,1994. 2. Хомская Е.Д. Нейропсихология. -М.,МГУ,1987 3. Холшевников В.Е. Мысль, вооруженная рифмами. -Л., изд. ЛГУ, 1987 4. Гаспаров М.Л. Современный русский стих: Метрика и ритмика. М., 1974 5. Проблемы теории стиха. Л., 1984 6. Рубинштейн С.Л. Основы общей психологии. -М.,Педагогика,1989. 7. Психологический словарь. под ред Давыдов В.В., Лурия А.Р. -М.,Педагогика,1983. 8. Асмолов А.Г. Психология личности. -М.,МГУ,1990 9. Богоявленская Д.Б. Психологические основы интеллектуальной активности. -Докторская диссертация. 10. Кротов А.,Петров Д. Практика вольных путешествий. -М.,Гео,1996 11. Богоявленская Д.Б. Интеллектуальная активность как проблема творчества. - Киев.,Наука,1972. 12. "Компьютеp пpобует свои силы в пpозе и поэзии", журнал "В миpе науки", ї8,1989, стp. 88.