Graphoman Modern Writer 3.15:

ГОРАЗДО БОЛЬШЕ ПСИХОЛОГИЗМА
И УДОБСТВА ДЛЯ ПОЛЬЗОВАТЕЛЯ!

по результатам знакомства с бета-версией

пакета Graphoman Modern Writer 3.15,

Кузьма Дмитриев для журнала “ПиСи-Обсёрвер”

(PC Observer Russian Edition)

 

ОТ РЕДАКЦИИ. Возникший всего лишь несколько лет назад рынок программных продуктов для литературного творчества, на сегодняшний день - безусловно один из самых динамичных и быстро развивающихся рынков в области программного обеспечения для ПК. Этому немало способствовала необъяснимая эпидемия сетевой графомании, охватившая в последнее время Интернет.

Не далее как в прошлом номере, “ПиСи-Обсёрвер” опубликовал материалы специальной дискуссии, посвященной этому феномену, проводившейся в рамках традиционного компьютерного форума “Интернет-Менталитет 2006”. Эта публикация, как и следовало ожидать, вызвала шквал читательских откликов. Анализ полученной электронной почты показал, что наши читатели гораздо чаще соглашаются с мнениями практиков-программистов и вообще специалистов-компьютерщиков, чем с мнениями участвовавших в дискуссии писателей и литературоведов. Особое возмущение электронной аудитории вызвало использованное писателем Михаилом Анновицким сравнение “заполненных доморощенными творческими экзерсисами” домашних страниц (Home Page) современных Интернет-фанов с альбомами дворянских барышень Пушкинских времен. И это симптоматично, ибо в очередной раз доказывает, что вопреки мнению литературных снобов, пользователи лит-творческих программных продуктов вовсе не относятся к своим произведениям как к какой-то “нелепой второсортной писанине”. Они требуют, чтобы их принимали всерьез, в контексте реального литературного процесса, и мы считаем, что по мере дальнейшего развития соответствующих программных продуктов, это требование будет становиться все более и более обоснованным.

В этой связи безусловный интерес представляет материал известного литературно-компьютерного гуру Кузьмы Дмитриева, который мы и предлагаем вашему вниманию.

 

Неужели наконец-то нечто новенькое?

Как быстро пролетели те славные времена, когда настоящий лит-хакер мог выбирать из продукции нескольких десятков различных компаний, подвизавшихся тогда на рынке программ для литературного творчества. Многие из этих программ были остроумны и оригинальны (я сам до сих пор с ностальгической грустью вспоминаю Easy Literator c его интуитивно понятным и крайне дружественным интерфейсом пользователя). Однако, опыт развития аналогичных рынков (например, рынок тестовых редакторов или электронных таблиц) подсказывал, что вскоре в этом аквариуме заведутся две-три крупные рыбины, которые, уничтожив или поглотив более мелких соперников, начнут битву между собой за монопольный контроль над рынком в целом.

И действительно, сегодня мы являемся свидетелями драматической борьбы всего лишь трех основных производителей: Graphoman Software, Philosoft и NetWrite. Думается, что борьба эта пока еще весьма далека от завершения. Не секрет, что в то время как Graphoman Software и Philosoft увязли в судебных процессах друг против друга, NetWrite совершил чувствительный рывок и значительно укрепил свои позиции в верхнем (профессиональном) сегменте рынка. Этому немало способствовало то обстоятельство, что мэтр психологического абсурдизма Поль Жену открыто использовал NetWrite Dramaturge’2003 при написании сценария своего последнего фильма “Голубой крот”, недавно получившего на кинофестивале в Венеции приз зрительских симпатий. Однако GS и Philosoft не собираются сдаваться. На четвертый квартал нынешнего года запланирован выпуск сразу двух давно ожидаемых продуктов - Graphoman Modern Writer ver.3.15 и Philosoft Dreamer’s Office ver.6.0.

Разница между этими двумя амбициозными проектами заключается в том, что если Philosoft педантично соблюдает заявленный график, и обещанная бета-версия уже три месяца как доступна для ознакомления на его web-сайте, то Graphoman Software по своему обыкновению тянет резину, и я боюсь, что вскоре мы опять услышим о том, что срок презентации очередной версии будет перенесен на следующий год. Тем не менее, в конце прошлого месяца мы все же получили возможность ознакомиться с бета-версией пакета Graphoman Modern Writer 3.15.

Это внезапное явление уже никем не ожидаемого аутсайдера поставило лично меня в крайне затруднительное положение. С одной стороны, времени для всеобъемлющего тестирования практически не оставалось (иначе статья не успевала попасть в очередной номер журнала). С другой стороны, полностью проигнорировать событие и никак не откликнуться на столь важную для лит-фанов новость было невозможно.

В этой ситуации, скрепя сердце, мы решили ограничить тестирование нового продукта всего лишь одной областью применения. И с учетом уже упоминавшегося нашумевшего успеха NetWrite с “Голубым кротом”, в качестве тестовой области была принята Драматургия.

Итог изнурительного двухнедельного забега по программе с препятствиями перед вами. Спешу поделиться своим первым впечатлением: да, перед нами действительно нечто новенькое. Версия Modern Writer 3.15 (по крайней мере, в области драматургии) отличается как от предыдущей версии 3.01, так и от своих конкурентов Philosoft Dreamer’s Office 6.0 и NetWrite Dramaturge’2005. Насколько существенны эти отличия?

Судите сами.

Обещания и ожидания

Любая реклама обещает, что в новой версии все недостатки будут исправлены, а, кроме того, нас непременно поразят какими-нибудь принципиально новыми, но позарез необходимыми прибамбасами. Не стали исключением и те заявления, которые мы услышали от руководителей Graphoman Software едва ли не с сразу же после выхода версии Modern Writer 3.01. “Да,” - говорили они, - интерфейс пакета действительно немного тяжеловат и архаичен, характерам недостает глубины, реплики персонажей связаны между собой либо слишком слабо, либо чересчур тривиально, а сам текст этих реплик – и вовсе ниже всякой критики. Но вот уж в новой версии...”

Верилось в эти обещания с трудом. Точнее - наполовину. Все понимали, что улучшить (и даже полностью переделать!) интерфейс пакета в заявленные сроки можно, несмотря на всем известные финансовые трудности компании. А вот качество получаемых текстов - вряд ли, поскольку указанные недостатки являются практически непреодолимыми для программ, традиционно опирающихся на концепцию Virtual Character Machine (VCM). Чтобы исправить упомянутые недостатки, нужно использовать нечто принципиально новое. Что-то подобное технологии Smart Screenplay, созданной специалистами NetWrite и используемой в продуктах этой фирмы.

Но даже если бы GS и удалось самостоятельно разработать подобную новую технологию, это потребовало бы полной переделки уже не только интерфейса, но и всей системы в целом. Практически речь тогда шла бы уже о разработке принципиально нового пакета, что было абсолютно нереально, учитывая заявленные сроки. Кроме того, отказ от старой технологии автоматически повлек бы за собой потерю совместимости с предыдущими версиями системы, что навсегда разочаровало бы еще имеющихся, а также, вероятно, отпугнуло бы и потенциальных новых пользователей Modern Writer.

Поэтому все ожидали, что изменения в следующей версии Modern Writer будут скорее всего косметическими и коснутся в основном интерфейса пользователя.

Что же мы получили?

Признаюсь, ваш покорный слуга также разделял описанный выше пессимистический взгляд на перспективы подхода VCM в целом и пакета Modern Writer в частности, считая, что этот пакет оказался (в силу перечисленных причин) однозначно тупиковой ветвью эволюции литературно-компьютерных систем.

Те, кто знакомы с моими предыдущими выступлениями на эту тему, знают, что с момента появления технологии Smart Text (драматургическим приложением которой является упомянутая Smart Screenplay) я был  принципиальным, последовательным сторонником этой технологии и всегда, во всех чартах, по всем позициям отдавал первые места продуктам фирмы NetWrite.

Поэтому мне нелегко признать, что на этот раз разработчикам Graphoman Software удалось сотворить маленькое чудо. Реальность полностью обманула ожидания всех многомудрых предсказателей.

Я обращаюсь ко всем, кто имеет опыт работы с Modern Writer 3.01: Верите ли вы, что Modern Writer 3.15 позволяет теперь не только создавать сложные характеры, начиненные всевозможными комплексами, маниями и фобиями, но и вводить в ткань пьесы тонкие психологические коллизии и даже - смысловые конфликты?! Не верите? А если я еще добавлю, что при этом сохранилась полная вертикальная совместимость с предыдущими версиями? Говорите, невозможно? А если, в довершение всего, окончательно распоясавшись, я стану утверждать, что трудоемкость процесса создания произведения сократилась чуть ли не на порядок, да к тому же и работать в новом интерфейсе GMW, в отличие от прежнего, одно удовольствие?! Знаю, вы попытаетесь надеть на меня смирительную рубашку.

Так вот - ОНИ ВСЕ ЭТО СДЕЛАЛИ!

Как им это удалось?

Собственно говоря, ответу на данный вопрос по большей части и посвящена эта статья.

Но сперва вы в полном праве спросить меня, изменил ли я свою точку зрения на расклад сил и перспективы технологий на рынке литературных систем? И здесь, не смотря на все мое восхищение остроумием и изворотливостью специалистов Graphoman Software, проявленными при разработке Graphoman Modern Writer 3.15 (восхищение это искренне, как и стремление в рамках данной статьи не только объективно воздать им по заслугам, но и где-то даже воспеть их маленький интеллектуальный подвиг), на заданный вопрос я отвечу отрицательно.

Как-то в пылу полемики я сравнил разницу между технологиями Character Machine и Smart Text с тем различием, которое существует между древними геоцентрическими представлениями о движении планет и современным гелиоцентрическим подходом. Я не только по-прежнему согласен с этим утверждением, но моя уверенность в содержательности и глубине данной аналогии лишь еще больше укрепилась именно в свете последнего успеха Graphoman Software.

Знаете ли вы, что гелиоцентрическая система Коперника (в которой планеты вращались вокруг солнца по круговым орбитам) описывала наблюдения астрономов значительно хуже чем принятая на тот момент геоцентрическая система Птолемея? И лишь только когда Кеплер предложил свою гелиоцентрическую систему, в которой орбиты планет были эллиптическими, точность гелиоцентрической системы впервые превзошла точность геоцентрической системы Птолемея.

Почему же многие ученые сразу приняли несовершенную систему Коперника, несмотря на ее худшие результаты? Все дело в простоте и удобстве. Для того, чтобы, исходя из неверной (как мы теперь знаем) гипотезы о геоцентрическом характере движения планет, построить орбиты, соответствующие наблюдениям, в системе Птолемея использовались эпициклы, то есть планеты двигались уже не по окружности вокруг центра Земли, а по окружности, центр которой двигался по окружности, центр которой двигался по окружности, ..., центр которой двигался по окружности вокруг центра Земли. Для объяснения движения некоторых планет приходилось использовать более сотни (!) эпициклов. Это было и неудобно, и громоздко, и некрасиво. Зато давало замечательную точность предсказания... если учитывать, что исходная посылка была неверна.

Итак, я по-прежнему считаю, что технология Smart Text подобна системе Коперника как в том, что обладает большей простотой, удобством и красотой, так и в том, что пока еще далека от совершенства и ждет своего Кеплера. Новшества же, которые принесла в парадигму VCM новая версия Graphoman Modern Writer, я позволю себе сравнить с введением эпициклов и превращением простой геоцентрической системы в изощренную систему Птолемея. Достигнутый результат может показаться поразительным (да что там - он таковым и является), но, во-первых, он достигнут ценой многократного усложнения системы, а во-вторых, это был по-видимому, последний ресурс повышения эффективности системы Virtual Character Machine, наивысшее достижение, и в конце концов - ее лебединая песня. Между тем, возможности дальнейшего развития технологии Smart Text представляются ныне практически неограниченными.

Чтобы доказать сформулированное выше мнение, мне потребуется сначала коротко описать всем известные классические отличия схемы Virtual Character Machine от парадигмы Smart Text, и лишь затем перейти к подробному анализу реализации тех новшеств VCM, которые мы наблюдаем в новой версии пакета Modern Writer.

Уважающие себя лит-хакеры могут, конечно, не задумываясь пропустить несколько следующих разделов и сразу перейти прямо к сути долгожданных нововведений.

Virtual Character Machine (Виртуальная Машина Характеров)

Итак, что такое традиционная VCM и чем она отличается от системы Smart Screenplay («Интеллектуальный сценарий»)?

Мы рассмотрим особенности и различия этих систем на двух уровнях: концептуальном и пользовательском. Концептуальный уровень подразумевает описание общей концепции построения системы и ее архитектуры. Пользовательский уровень предполагает перечисление тех действий, которые пользователь должен выполнить при работе с системой, чтобы реализовать ее функции.

VCM как зеркало ООП

Как нетрудно догадаться, Virtual Character Machine придумали не нанятые программистами психологи или писатели, а сами программисты. Слишком очевидна ее связь с объектно-ориентированным программированием (ООП - не путать с Организацией Освобождения Палестины), наиболее популярной в наши дни технологией создания пользовательских интерфейсов программных систем. Даже сейчас, когда вы читаете этот текст на экране своего компьютера, периодически нажимая клавиши или двигая мышку, эта технология работает на вас. Суть данной технологии вкратце сводится к четырем следующим словам: инкапсуляция, наследование, связи, события. Эти страшные слова на деле означают очень простые вещи.

Единичным кирпичиком программы в ООП является объект. Объект соединяет в себе данные (сведения, параметры) и функции (алгоритмы), которые с этими данными связаны. Это соединение называется инкапсуляцией. в том смысле, что объект заключает в себе (инкапсулирует) и данные и алгоритмы, обращаться к которым можно теперь только как к элементам этого объекта.

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

Далее. Объекты реального мира не изолированы друг от друга, а, напротив, связаны множеством связей. Чтобы имитировать эти связи, программные объекты должны также иметь связи между собой. Точнее говоря, классы, описывающие эти объекты, должны иметь поля для указания на другие объекты с указанием их типов (открытые линки), а при создании конкретных экземпляров объектов, эти поля должны получать конкретные значения указателей на экземпляры соответствующих объектов. Таким образом, речь пойдет уже не об отдельных объектах, а об их сетях. Например, чтобы мы могли работать с текстовым редактором или с электронной таблицей при помощи “мыши”, объект-редактор и объект-таблица (объекты-ячейки) должны иметь связи с объектом Mouse.

Наконец, нужно вспомнить о том, что реальный мир все время изменяется. Объекты в нем взаимодействуют, одни изменения становятся следствиями и причинами других. Чтобы соответствовать, программные объекты также должны иметь механизмы взаимодействия причинно-следственного типа. В ООП такие взаимодействия описываются как реакции на события. Под событием понимается любое изменение состояния объекта. При создании класса (объекта) можно указать, что автоматической реакцией на какое-то внешнее событие может быть определенное действие объекта. Например, пусть в системе есть объект “курсор”, связанный с объектом “мышь”, и указано, что процедура “пересчет_позиции_курсора” является реакцией на событие “мышь изменила свое положение”. Тогда при изменении положения “мыши”, курсор также будет всегда изменять свое положение на экране.

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

Прошу прощения за невольную лекцию по ООП. Она уже окончена.

Надеюсь, вы уже и сами заметили глубокое сходство элементов этой чисто программистской технологии с ключевыми понятиями литературы и театра. Разве не являются объекты «актерами», играющими в заданных (связями) обстоятельствах заданные (классами) характеры? Разве на сцене не происходят события, и не являются ли действия персонажей соответствующими реакциями? И когда персонаж испытывает гнев, досаду или любовь, не являются ли они недоступными для непосредственного наблюдения идеями, реализующимися для читающей или слушающей публики в виде отображающих эти идеи поступков и реплик?

Вот и первым лит-программистам это сходство сразу бросилось в глаза. И они, уже поднаторевшие ранее в создании программных продуктов для самых разных областей, решили, что между текстовым редактором и программой поддержки литературного творчества (literature supporting software) нет никакой принципиальной разницы. Тут объекты - и там объекты. Значит, понеслась! Во-первых, создадим виртуальную машину для объектов-персонажей, свяжем их сетью отношений, наделим различными типами реакций и запустим это механическое подобие жизни вертеться (эволюционировать) в чреве компьютера, чтобы создавать и отбирать по заданным критериям наилучшие варианты сюжета на радость нам-демиургам. Во-вторых, придадим нашим объектам-персонажам “дар речи”, то есть способность отображать заданные для данного персонажа состояния и реакции в характерной для него словесной форме. В результате получим вожделенный литературный текст (пьесу) с глубокими характерами, закрученной интригой и свежей моралью.

Вот такой простенький план. Конечно, для содержательного наполнения первой задачи предполагалось на определенном этапе обратиться за помощью и советом к психологам, а по второй - к писателям, драматургам и литературоведам. Но была, была, я думаю, у наших лихих молодцев уверенность, что в случае чего и сами выдюжим – чай, не в первой.

Давайте теперь на примере Graphoman Modern Writer 3.01 посмотрим, что же получилось из этих мечтаний. Заметим, что по своим функциональным возможностям в области драмы она является практически полным аналогом пакета Philosoft Dreamer’s Office ver.6.0, а значит, вполне достойно представляет достигнутый к началу текущего года уровень возможностей систем на базе VCM (за исключением, конечно, интерфейса, не к ночи будь помянут).

Как быстро и легко написать пьесу при помощи Graphoman Modern Writer 3.01

Да никак. Этого просто нельзя сделать быстро и легко. Зато медленно и мучительно - можно.

В общих чертах алгоритм написания пьесы в GMW 3.01 примерно следующий:

шаг 1. Дать полное описание характеров персонажей.

шаг 2. Задать словари персонажей и определить их речевые характеристики.

шаг 3. Задать схему связей между персонажами, порядок и тип их взаимодействия.

шаг 4. (автоматический вариант). Задать критерий отбора вариантов.
В цикле: создавать варианты до тех пор, пока критерий не будет удовлетворен.

шаг 4. (творческий вариант). Управляя вручную одним или несколькими персонажами, в цикле создавать варианты до тех пор, пока критерий собственного вкуса не будет удовлетворен.

шаг 5. Используя полученный текст как грубую “рыбу”, переписать всю пьесу заново, самому.

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

Пройдемся по этому алгоритму несколько подробнее. При этом будем иметь в виду всего один, очень простой пример.

Задание. Написать короткую пьесу для театра масок (или кукол Карабаса-Барабаса) с тремя классическими персонажами: Пьеро, Арлекин, Коломбина. Пьеро печален, боится Арлекина и любит Коломбину. Коломбина насмехается над Пьеро, и кокетничает с Арлекином. Арлекин веселится, то и дело радостно поколачивает Пьеро, фривольно шутит и заигрывает с Коломбиной.

шаг 1. Дать полное описание характеров персонажей.

Это легче сказать, чем сделать. Не забудьте, что давать это самое описание придется не в расплывчатых терминах литературы или психологии, а в следующих строгих терминах ООП:

·        переменные состояния,

·        открытые связи,

·        типы событий,

·        реакции на события,

·        вероятности связей между событиями и реакциями.

Не даром, в родном руководстве пользователя для GMW 3.01 описание этого этапа занимает ни много, ни мало – два тома; всего (вместе с рисунками, схемами и таблицами) 768 страниц мелким шрифтом.

Конечно, по ступеням этого многотрудного процесса вас ведет, как и положено, некий электронный Вергилий - Character Wizard (в вольной русифицированой версии - “Волшебник по характерам”). Но, честно говоря, общение с этим “волшебником”, представляющим собой бесконечный набор анкетоподобных форм и формуляров, которые нужно заполнять, заполнять и заполнять, скорее напоминает тест при попытке устроиться на работу на какой-нибудь сверхсекретный объект, нежели процесс литературного творчества.

Но вернемся к нашему примеру и попробуем описать хотя бы только один характер - Пьеро, и только в рамках данного выше простого определения: “Пьеро печален, боится Арлекина и любит Коломбину”. Для этого нужно задать следующие элементы класса “Пьеро”:

класс Класс_Пьеро(Мужчина)

{ /* начало описания */

переменные

имя: [тип] слово [значение по умолчанию] = “Пьеро”;

связи

предмет_любви: [тип] Женщина;

источник_страданий: [тип] Мужчина;

события

[получен] удар_палкой_по_спине;

[получен] удар_ногой_по_заднице;

[услышана] насмешка_над_собой;

[услышана] насмешка_над_стихами;

[услышана] насмешка_над_любовью;

действия

признание_в_любви [кому?] (предмет_любви);

жалоба_на_судьбу;

жалоба_на_равнодушие_и_бессердечие [кого?] (предмет_любви);

жалоба_на_жестокость [кого?] (источник_страданий) [кому?] (предмет_любви);

протест_против_жестокости [кого?] (источник_страданий);

восхваление_себя;

восхваление_своей_поэзии;

никакого_действия;

реакции

ЕСЛИ [получен] удар_палкой_по_спине ТО:

жалоба_на_судьбу ВЕРОЯТНОСТЬ 0.2,

жалоба_на_жестокость ВЕРОЯТНОСТЬ 0.3,

протест_против_жестокости ВЕРОЯТНОСТЬ 0.2,

никакого_действия ВЕРОЯТНОСТЬ 0.3;

ЕСЛИ [получен] удар_ногой_по_заднице ТО:

жалоба_на_судьбу ВЕРОЯТНОСТЬ 0.2,

жалоба_на_жестокость ВЕРОЯТНОСТЬ 0.2,

протест_против_жестокости ВЕРОЯТНОСТЬ 0.2,

признание_в_любви ВЕРОЯТНОСТЬ 0.3,

никакого_действия ВЕРОЯТНОСТЬ 0.1;

ЕСЛИ [услышана] насмешка_над_собой ТО:

жалоба_на_судьбу ВЕРОЯТНОСТЬ 0.15,

жалоба_на_равнодушие_и_бессердечие ВЕРОЯТНОСТЬ 0.1,

восхваление_себя ВЕРОЯТНОСТЬ 0.5,

восхваление_своей_поэзии ВЕРОЯТНОСТЬ 0.1,

никакого_действия ВЕРОЯТНОСТЬ 0.15;

ЕСЛИ [услышана] насмешка_над_стихами ТО:

жалоба_на_судьбу ВЕРОЯТНОСТЬ 0.1,

жалоба_на_равнодушие_и_бессердечие ВЕРОЯТНОСТЬ 0.1,

восхваление_себя ВЕРОЯТНОСТЬ 0.1,

восхваление_своей_поэзии ВЕРОЯТНОСТЬ 0.5,

признание_в_любви ВЕРОЯТНОСТЬ 0.2,

никакого_действия ВЕРОЯТНОСТЬ 0.1;

ЕСЛИ [услышана] насмешка_над_любовью ТО:

признание_в_любви ВЕРОЯТНОСТЬ 0.2,

жалоба_на_судьбу ВЕРОЯТНОСТЬ 0.3,

жалоба_на_равнодушие_и_бессердечие ВЕРОЯТНОСТЬ 0.3,

восхваление_себя ВЕРОЯТНОСТЬ 0.1,

восхваление_своей_поэзии ВЕРОЯТНОСТЬ 0.1;

спонтанные_действия

признание_в_любви ВЕРОЯТНОСТЬ 0.1,

жалоба_на_судьбу ВЕРОЯТНОСТЬ 0.1,

жалоба_на_равнодушие_и_бессердечие ВЕРОЯТНОСТЬ 0.1,

жалоба_на_жестокость ВЕРОЯТНОСТЬ 0.1,

восхваление_себя ВЕРОЯТНОСТЬ 0.1,

никакого_действия ВЕРОЯТНОСТЬ 0.1;

} /* конец описания */

Не устали читать? Наше счастье, что это был только один персонаж-маска из пьесы для трех таких же простых персонажей. (С описанием классов “Коломбина” и “Арлекин”, как и с остальными материалами тестовых примеров, упоминаемых в данной статье, вы можете ознакомиться в электронном приложении к журналу PC Observer RE на нашем web-сайте). А ведь подобные описания пользователям Graphoman Modern Writer 3.01 приходится создавать для каждого из своих персонажей, причем длина и сложность этих описаний зависят не только от сложности собственного характера персонажей, но и от общего числа персонажей, участвующих в пьесе (ведь для каждого из них необходимо заранее предусмотреть его связи со всеми другими персонажами, а также определить его реакции на все возможные действия других персонажей). Не удивительно, что исходные листинги описаний характеров для GMW часто превосходят по объему текст получаемых на выходе драматических произведений.

В прочем, это еще только начало. Теперь нам нужно сделать следующий шаг:

шаг 2. Задать словари персонажей и определить их речевые характеристики.

Собственно говоря, на этом этапе и решается та задача реализации (отображения) действий (реакций) персонажа в виде текста его реплик, о которой мы говорили выше. Если еще точнее, то здесь определяется все пространство возможных реплик персонажа, некоторые из которых затем реализуются в процессе взаимодействия с другими персонажами внутри машины характеров и окажутся, таким образом, в окончательном тексте пьесы.

В руководстве к GMW 3.01 часть пакета, отвечающая за решение этой задачи, называется “блоком генерации реплик”. Функции же его будет гораздо легче уяснить, если мы вспомним, как этот блок был реализован в самой первой версии пакета Graphoman Modern Writer 1.0, где он назывался не иначе как “блок задания реплик”, причем содержание буквально соответствовало названию. Пользователь должен был буквально перечислить все возможные реплики (фразы) персонажа, словесно реализующие все возможные для него действия. Так, для описанного выше класса Пьеро нужно было бы указать наборы реплик для каждого из указанных в описании характера действий. Например:

реплики ДЛЯ [действия] признание_в_любви(адресат,соперник) {

Я люблю тебя, <адресат>!

Как же я люблю тебя, <адресат>!

Моя любовь к тебе так велика. Почему же ты выбрал(а) <соперник>?

<Адресат>, ты прекрасен(на)! Я хотел бы всю жизнь прожить с тобой.

/* и т.д. и т.п.*/ }

Эти реплики, выбираемые из заданного набора при помощи генератора случайных чисел (!), и должны были бы звучать по ходу пьесы каждый раз, когда объект типа “Пьеро” должен осуществить действие “признание_в_любви”.

Конечно, версия 3.01 далеко ушла от такого неприкрытого примитивизма.

Во-первых, теперь пользователь не обязан сам составлять фразы для своего персонажа. Машина сделает это за него, используя библиотеку так называемых “шаблонов выражений”. Например, шаблон “выражение_чувства” имеет следующий вид:

шаблон ДЛЯ [действия] выражение_чувства<чувство>(адресат) {

Я <чувство> тебя [,<адресат>]!

Как же я <чувство> тебя[, <адресат>]!

Моё(мой,моя) <чувство> так велик(а,о). Я этого не вынесу...

/* и т.д. и т.п.*/ }

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

Во-вторых, репликам, сгенерированным при помощи безликих шаблонов, можно все-таки придать некоторую индивидуальность при помощи следующих двух инструментов:

·        словаря типичных слов и выражений;

·        редактора речевых особенностей.

Разумеется, словарь, о котором идет речь это не просто электронный список слов (подобный тем, что используются в современных текстовых редакторах для проверки орфографии). Нет, это скорее сложный объект-фильтр, преобразующий шаблонные фразы с учетом заданных внутри него специфических правил подстановки. Например, помощи словаря “Хиппи” вы можете заставить вашего персонажа произносить вместо “Мария - прекрасная женщина” соответствующее сленговое: “Мэри - клевая чувиха”. Словарь будет также следить за тем, чтобы пираты через слово ругались, рыцари обращались к женщинам со словами “прекрасная леди” или “благородная дама”, а плейбои использовали для этого более подходящее их имиджу обращение “детка”.

Упомянутый же редактор речевых особенностей имеет дело с двумя основными типами речевых характеристик:

·        тип построения фразы;

·        тип произнесения.

При помощи этого редактора вы можете не только указать, что данный персонаж предпочитает использовать короткие утвердительные или длинные вопросительные фразы, но и (выбрав тип произнесения “неграмотный китаец” и одновременно “заика”) легко превратить безобидное “Я тебя не понимаю” в ужасающее “М-моя т-твоя н-не п-понимай!”

Такой подход, конечно, уже не назовешь “наивным примитивизмом”. Я скорее назвал бы его примитивизмом изощренным. Потому что, несмотря на все описанные выше навороты, в основе его лежит все та же наивная надежда заменить внутреннюю логику человеческой речи генератором случайных чисел. Механизм, составляющий шаблонные фразы, окончательно омертвляет искусственную речь, и последующие фильтры (вопреки намерениям создателей программы) не оживляют ее, а лишь раскрашивают получившийся картонный муляж столь же неестественными гротескными красками.

Кстати, о красках. Не потому ли так много развелось в наших пьесах “заик”, “панков” и “новых русских”, что словарные и речевые фильтры, вместо того, чтобы помогать и служить пользователю, подчиняют его себе? Ведь ни одному, даже самому гениальному художнику не удастся нарисовать реалистический пейзаж или натюрморт, имея вместо необходимой палитры полутонов набор ярких цветных маркеров. Материал диктует форму, а значит, волей-неволей, вместо желаемого искусного подобия получатся гротеск и карикатура.

Однако я увлекся. Нам же предстоит сделать очередной шаг по ходу создания великой пьесы для театра Карабаса-Барабаса:

шаг 3. Задать схему связей между персонажами, порядок и тип их взаимодействия.

А вот здесь нас уже ожидает настоящее программирование «на языке высокого уровня». Кто изучал программирование в институте, может начинать смеяться прямо сейчас. Выглядит это примерно так:

 

Проект Пьеро_и_др(«Пьеро,  Коломбина и Арлекин»)

{ /* начало описания */

Персонажи()

{

Пьеро: Класс_Пьеро();

Коломбина: Класс_Коломбина();

Арлекин: Класс_Арлекин();

Пьеро.предмет_любви = Коломбина;

Пьеро.источник_страданий = Арлекин;

Коломбина.предмет_кокетства = Арлекин;

Коломбина.предмет_насмешек = Пьеро;

Арлекин.предмет_интереса = Коломбина;

Арлекин.предмет_издевательств = Пьеро;

}

/*описание схемы и порядка взаимодействий*/

Действие Акт1() /*акт первый и единственный*/

{

пока (число_реплик<1000) выполнять

{

Арлекин.действие(Пьеро);

Пьеро.реакция(Арлекин);

Пьеро.действие(Коломбина);

Коломбина.реакция(Пьеро);

Коломбина.действие(Арлекин);

Арлекин.реакция(Коломбина);

}

}

} /* конец описания */

Оценили ли вы всю кондовую прелесть этого описания, словно возвращающего нас суровой рукой чуть ли не к незабвенным временам Фортрана и Алгола? Особенно умиляет то, как подробно мы вынуждены расписывать порядок действий персонажей, задавать циклы и реакции с обязательным указанием того, кто на кого реагирует (хорошо хоть тип реакции программа определяет самостоятельно). В более продвинутом пакете (допустим, Philosoft Dreamer’s Office), чтобы добиться аналогичного результата, нам было бы достаточно всего лишь указать тип сценария «Трое по очереди», но разработчикам GMW это, видимо, показалось как-то слишком уж просто. Ведь зачем-то они снабдили свой пакет столь мощным встроенным языком программирования пьес? Снабдили – будьте любезны использовать. И между прочим, если вам вдруг захочется от схемы «Трое по очереди» перейти к схеме «Трое по жребию» (то есть в случайном порядке), вам придется реально запрограммировать случайный порядок опроса, используя функцию Random() и условные операторы перехода!

шаг 4. В цикле: создавать варианты до тех пор, пока критерий собственного вкуса не будет удовлетворен.

Вот теперь, уважаемый читатель, можешь перевести дух. Закончен труд, завещанный от Бога. Мы выполнили все необходимые действия и наконец-то создали полный проект (GMW literature project) для генерации пьесы «Пьеро,  Коломбина и Арлекин» в пакете Graphoman Modern Writer 3.01. Осталось только нажать заветную зеленую кнопку со стрелочной (или выбрать равнозначный пункт меню «Generate text!») и насладиться плодами всех перечисленных усилий, поскольку все остальное, как обещано, программа сделает за нас сама.

Нажимаем… Нажимаем еще раз… С несколькими вариантами пьес, которые создала по нашему проекту GMW 3.01 вы при большом желании и избытке времени можете ознакомиться, обратившись к уже упоминавшемуся электронному приложению журнала PC Observer RE на нашем web-сайте. Коротко говоря, это даже не «Ужас!», а «Ужас! Ужас!».

Предельно схематичные и картонные персонажи обмениваются повторяющимися условными репликами, сюжета как такового практически нет, действие (взаимодействие между персонажами) то замедляется до полного исчезновения, то вдруг начинает конвульсивно дергаться и мельтешить без какой-либо видимой причины. И при всем при этом, согласитесь, нельзя сказать, чтобы мы были особо разочарованы. Потому что персонажи делают именно то, что мы им предписали, взаимодействуют именно так, как мы этого хотели, говорят именно те слова, которые мы сами вложили в их реплики. И проблема не в том, что мы сделали это плохо. Просто, начиная работать с Graphoman Modern Writer 3.01, мы уже заранее согласились на то, что полученный литературный продукт будет не особо притязательным, ведь ничего иного описанная выше классическая технология VCM не в состоянии создать по определению.

Кажется, самое время описать для контраста конкурирующую технологию Smart Screenplay (частный случай технологии Smart Text).

Smart Screenplay: интеллектуальный текст-процессор поколения Google

Поскольку в качестве темы наших тестов-2006 была выбрана Драматургия, до сих пор мы в основном обсуждали здесь характеры, сюжеты, удобство (или точнее о неудобство) пользовательского интерфейса… Пора, однако, вспомнить о том, что речь все-таки идет о продуктах для поддержки литературного творчества. То есть в идеале на выходе программы формируется не голая сюжетная схема, не описание персонажей или какой-то еще полуфабрикат, а именно литературный текст, и, следовательно, качество всего продукта в целом определяется в первую очередь качеством генерируемого текста. К сожалению, как мы уже имели шанс заметить, качество текстов, создаваемых в рамках парадигмы VCM, до сих пор остается на уровне “М-моя т-твоя в н-натуре н-не п-понимай!” И в этом нет ничего удивительного, ведь в подходе VCM собственно текст – вторичен, можно даже сказать, побочен. Он не является внутренней несущей конструкцией и основной характеристикой персонажа, а является всего лишь средством его «отображения» в тексте. Чтобы порождать качественные тексты нужна не «характер-ориентированная», а «текст-ориентированная» технология. Именно такой технологией и является технология Smart Text (в области драматургии реализуемая как Smart Screenplay).

Если попытаться сформулировать основную идею технологии ST предельно кратко, то любой Smart Text Generator следует рассматривать как некий настраиваемый (обучаемый) программный фильтр, формирующий новые тексты путем комбинации различных текстовых элементов, извлекаемых из неких других, ранее существовавших текстов. Иными словами, это интеллектуальный текст-процессор.

Немного истории

Собственно идея создания интеллектуального фильтра для отбора и осмысленных сообщений из потока входных символов стара, если не как мир, то уж точно как сама кибернетика, у истоков которой стоял Эшби со своим сакраментальным «фильтром белого шума» (примерно то же самое, что «демон Максвелла», только в области информации). Весь вопрос в том, как сделать такой фильтр действительно интеллектуальным.

Долгое время считалось, что без создания по-настоящему мыслящего искусственного интеллекта, оперирующего абстрактными понятиями и семантическими конструкциями, здесь не обойтись, и потому решение задачи неминуемо отодвигается в чрезвычайно далекое и неопределенное будущее. Однако после знаменитого эксперимента с программой «Элиза», опровергнувшего тест Тьюринга, стало ясно, что на уровне языкового (текстового) диалога внешний пользователь зачастую не в состоянии отличить подлинную человеческую речь от ее компьютерной имитации, осуществляемой самыми примитивными и вовсе не интеллектуальными средствами. Как известно, «Элиза» отвечала оператору его же словами и предложениями, лишь несколько перестроенными, чтобы создать видимость диалога. Таким образом, была впервые показана возможность компьютерной генерации текстов, кажущихся осмысленными, без опоры на стоящие за словами семантические модели, но лишь исключительно за счет «поверхностной» связи на уровне используемых слов. В конечном итоге эта идея нашла свое предельное выражение в технологии Smart Text, что, впрочем, произошло далеко не сразу.

Потребовалось несколько десятилетий развития математической лингвистики для того, чтобы в 1987 году в США, в институте Карнеги-Меллон была создана первая программа генерации псевдо-осмысленных текстов «Гомер» (не путать с персонажем мультфильма «Симпсоны»!). «Гомер» опирался на так называемую Марковскую модель порождения текстов. Понять, как она работает, достаточно просто. Марковскими процессами называются в теории вероятности такие случайные процессы, в которых каждое следующее состояние процесса зависит только от конечного числа предыдущих состояний. При генерации текста Марковская модель задает вероятность того, что определенное слово может (должно) появиться в тексте, в зависимости от того, какие слова уже стоят в этом тексте перед ним. В самом деле, на статистическом уровне осмысленный текст отличается от случайного набора слов, прежде всего, тем, что частота совместной встречаемости семантически связанных слов существенно выше, чем слов, относящихся к разным смысловым группам.

Простейший пример: если просчитать частоту совместной встречаемости соседних пар слов, допустим, в сборнике русских народных сказок, то в лидеры, очевидно, выйдут такие сочетания как «добрый молодец», «красна девица» и т.п. Сочетания же типа «огненная вода» или «духи предков» вряд ли встретятся нам в русских сказках, зато, возможно, будут достаточно популярны в каких-нибудь переводных рассказах «про индейцев». Предположим, что мы обучили программу генерации текстов на материале русских сказок. Тогда вероятность появления слова «молодец» после слова «добрый» будет существенно выше, чем вероятность появления других слов, и программа, скорее всего, выберет именно это слово для продолжения текста. Заметим, однако, два существенных ограничения описанного подхода, основанного на анализе последовательных пар слов (что соответствует Марковской модели текста, помнящей всего лишь одно предыдущее состояние). Во-первых, текст, в котором каждое последующее слово определяется только одним предыдущим, все-таки воспринимается как достаточно случайный и бессмысленный (поскольку даже слово стоящее достаточно близко – через два-три слова в том же предложении – может оказаться из совершенно иного смыслового ряда, никак не связанного с исходным). Во-вторых, существует проблема выбора и правильного употребления синтаксических конструкций, которая до сих пор в должной степени не решена (попробуйте воспользоваться любым автоматическим переводчиком текстов для перевода, например, с русского на английский и обратно, и вы поймете, о чем я говорю). И вот здесь исследователи из института Карнеги-Меллон сделали принципиально важный шаг, который позволил одновременно решить обе упомянутые проблемы. В качестве единицы Марковского «состояния» текста они взяли не слово, даже не словосочетание (как это было сделано в нашумевшей в начале 80-х, но потом все же оказавшейся тупиковой немецкой системе «Политекст»), а целое предложение.

С одной стороны, предложение это законченная синтаксическая конструкция, само по себе законченная «мини-мысль». С другой стороны, смысл предложения является всегда лишь частью смысла окружающего фрагмента текста. С формально-статистической точки зрения это означает, что частота совместной встречаемости в других известных текстах (уже не обязательно на соседних позициях, но, скажем, в пределах одного абзаца) слов, находящихся в двух соседних предложениях должна быть достаточно высокой, чтобы эти предложения казались не случайно выбранными, а семантически связанными. Именно таким образом «Гомер», предварительно обучившись на достаточно большом объеме текстов, и начиная с произвольно выбранного затравочного предложения, последовательно «прикладывал» к каждому последнему сформированному предложению следующее предложение-кандидат, выбранное случайным образом из совершенно другого текста, до тех пор, пока статистическое сходство этих предложений не оказывалось «достаточным», после чего можно было фиксировать это предложение в качестве ткущего и переходить к подбору следующего кандидата.

Презентация программы «Гомер» прошла с большим фурором. Особенно удавались «Гомеру» псевдо-научные тексты психоаналитического и философского направления. С литературными – даже на уровне сказок братьев Гримм – дело обстояло значительно хуже. Тем не менее, это был первый реальный успех в данном направлении. Вся команда разработчиков во главе с Шоном Макензи была, как известно, на корню куплена IBM, надеявшейся быстро создать на основе «Гомера» пользовательский программный продукт, однако в течение следующих десяти лет ни им, ни кому-либо другому этого так и не удалось сделать.

Дело в том, что «Гомер», как и другие подобные программы того поколения, работал крайне медленно. Ведь сначала необходимо было по огромному объему заданных текстов посчитать матрицы совместной встречаемости для десятков тысяч слов (!), а затем – уже во время генерации текста – осуществить перебор десятков тысяч вариантов предложений для каждой позиции. При этом – для достижения лучшего «смыслового» качества текста – оценивалось сходство не только с ближайшим, но и еще с несколькими предложениями, как слева, так и справа по тексту. Все это осуществлялось при помощи чрезвычайно трудоемкой итеративной оптимизационной процедуры, известной как «имитационный отжиг» (imitation annealing). Процедура генерации текста занимала столько времени на мэйнфреймах IBM, что впору было переносить ее на крэевский суперкомпьютер. О персональных ЭВМ даже речи не могло идти. Какой уж тут коммерческий продукт для горизонтального рынка. Потребовалось развитие совсем иных технологий, связанных с Интернетом, чтобы дело стронулось с мертвой точки.

Задумывался ли когда-нибудь ты, уважаемый читатель, каким образом твоя любимая поисковая система (будь то Google, Яндекс или что-то еще) так быстро выдает ответ на твой запрос, введенный в строку поиска? Ведь очевидно, что за это время никак невозможно «пробежать» все сайты в Интернете да еще успеть сравнить строку-запрос со всеми хранящимися там текстами. Как же они это делают? Оказывается, процесс работы поисковой системы состоит из двух этапов. На первом этапе (его можно назвать «обучением») автоматические программы-роботы действительно посещают существующие Интернет-сайты (это происходит периодически, причем достаточно часто, чтобы успевать оперативно учитывать происходящие на сайтах изменения) и производят так называемое «предварительное индексирование» текстовых ресурсов. Суть этой процедуры заключается в следующем. Каждый сайт (точнее, каждая Интернет-страница) описывается некоторым вектором признаков, зависящим от того, какие слова и как часто встречаются на данном ресурсе. Затем эти вектора признаков вместе с Интернет-адресами заносятся в базу данных поисковой системы, после чего для текущей базы рассчитывается «дерево поиска» - такой специальный граф, в котором наиболее сходные вектора признаков всегда занимают соседние позиции. В результате каждый Интернет-ресурс оказывается промаркирован специальным поисковым индексом, представляющим собой указание на номер соответствующей вершины в графе. Второй «такт» работы поисковой системы выполняется в тот момент, когда от пользователя поступает строка-запрос, вхождения которой нужно искать в располагаемой базе ресурсов. При этом для строки-запроса также вычисляется индекс поиска (для одного короткого запроса это можно сделать практически мгновенно), после чего из базы сразу могут быть извлечены ссылки на все ресурсы, обладающие близкими поисковыми индексами (а значит, и сходными векторами признаков, а значит, и искомым текстовым содержанием). Фокус здесь заключается в том, что требующая больших затрат времени работа по вычислению, сравнению и упорядочиванию векторов признаков, характеризующих тексты Интернет-страниц, перенесена на первый этап, которого пользователь не видит, зато непосредственно в момент запроса выполняются очень быстрые и простые операции по выборке из уже индексированного массива. (Специалисты могут упрекнуть меня в том, что я несколько упростил суть поисковой технологии, но в принципе она описана достаточно близко к тому, как это происходит на самом деле.) В результате мы теперь имеем возможность чрезвычайно быстрого и эффективного поиска в больших текстовых базах по достаточно сложным текстовым запросам.

Удивительно, но, несмотря на надвигающийся бум Интернет-технологий, до самого 1998 года никому не приходило в голову использовать технологии индексирования и последующего быстрого поиска в текстовых массивах для радикального ускорения процесса генерации Марковских псевдо-осмысленных текстов. Третьекурсник Стэнфордского университета Марк Куриозис, запатентовавший эту идею, и стал основателем фирмы NetWrite, которая до сих пор является практическим монополистом на рынке текст-ориентированных коммерческих приложений в области автоматической генерации текстов. Свою технологию Куриозис справедливо назвал Smart Text, ведь по-английски “smart” означает не только «умный», но и «быстрый». И действительно, текстогенераторы, созданные NetWrite, способны работать даже на достаточно слабых (по современным понятиям) персоналках с достаточно приемлемой производительностью. При этом качество создаваемых текстов не идет ни в какое сравнение с любыми поделками, на которые способна технология VCM!

Пожалуй, хватит уже исторических и технологических отступлений, посмотрим

Как работает и что может Smart Screenplay сегодня?

Выше мы уже обсуждали, что значит, написать небольшую компьютерную пьесу для «виртуальной машины характеров» GMW 3.01. Рассмотрим теперь, как то же самое можно сделать в NetWrite Dramaturge’2005.

Алгоритм написания пьесы в NW Dramaturge’05 выглядит следующим образом:

шаг 1. Задать список действующих лиц.

шаг 2. Для каждого действующего лица произвести обучение речевым особенностям на выбранной текстовой базе.

шаг 3. Задать циклограмму или логико-вероятностную схему речевого взаимодействия персонажей.

шаг 4. В цикле: генерировать варианты текста пьесы до тех пор, пока вы не будете удовлетворены результатами.

Раз уж мы дали себе труд разобрать по шагам процесс программирования пьесы в VCM, сделаем это и для Smart Screenplay, тем более, что описание будет гораздо короче, да и сам процесс в реальности куда как менее трудоемок.

шаг 1. Задать список действующих лиц.

Означает именно то, что написано. Просто забить в стандартную электронную форму список имен действующих персонажей. Времени требуется ровно две минуты.

шаг 2. Для каждого действующего лица произвести обучение речевым особенностям на выбранной текстовой базе.

Вот это действительно ключевой момент. В технологии Smart Screenplay «создать характер», значит задать тот корпус текстов, из которого персонаж будет впоследствии черпать свои реплики. При этом каждому персонажу, естественно, соответствует отдельный объект типа Smart Text Generator, обучаемый по отдельному набору текстов. Что может служить источником текстовой базы персонажа? Да что угодно! Любая книга (набор книг). Любая пьеса (набор пьес). Любой Интернет-ресурс (да хоть весь Интернет, если времени не жалко!). Так, модной темой в компьюрайтерской тусовке является сегодня использование в качестве сорс-текстов для кодогенераторов произвольных Интернет-блогов незнакомых пользователей, благо они вряд ли об этом узнают, если пьеса не прославится, а если прославится, то вряд ли будут возражать:). Короче говоря, в качестве исходного материала действительно может быть выбран любой текст или набор текстов, заданных в цифровой форме. Однако если вы хотите добиться действительно драматического эффекта, необходимо будет самым серьезным образом позаботиться об однородности текстовой базы и ее соответствии вашему представлению о характере персонажа.

Казалось бы: хочешь, чтобы герой говорил языком Толстого, скорми смарттекстовской обучалке «Войну и мир», хочешь, чтобы говорил языком Чехова – засунь туда «Вишневый сад», язык Булгакова – «Мастер и Маргарита», Шекспир – «Гамлет» и т.д. и т.п. На практике, разумеется, все не так просто. В той же «Войне и мире», помимо авторского голоса, еще десятки голосов различных героев, и каждый говорит по-своему, со своими особенностями, своими темами, своей частотой употребления различных лов. Текстогенератор, обученный «на всем Толстом», скорее всего, будет говорить «никак», без узнаваемого стиля. Более того, случайно выбранные реплики из самых разных мест огромного романа вряд ли создадут впечатление осмысленной речи вменяемого персонажа. Поэтому (особенно начинающим) советую ограничиться обучением одного своего персонажа на репликах одного выбранного литературного героя. Это может быть герой какой-то пьесы, либо персонаж любого другого литературного повествования (романа, рассказа, поэмы), однако учтите, что в последнем случае вам, видимо, придется формировать необходимую текстовую базу вручную, копируя куски речи героя в соответствующий сорс-файл.

Тул для сегментации русскоязычной прозы на «ленты речи» отдельных героев для русифицированной версии NW Dramaturge’05 можно скачать непосредственно с сайта компании, но работает он пока, увы, из рук вон плохо. Программу то и дело сбивают непрямые указания типа «он сказал», «она промолчала» и т.п. Автоматически атрибутировать реплики персонажей внутри произвольного прозаического текста – пока что задача для разработчиков NW непосильная (говорят, англоязычная версия работает лучше, но я ее пока не тестировал). К счастью, существует целая категория сорс-текстов, словно специально подготовленных авторами для дальнейшего использования в Smart Screenplay. Разумеется, я говорю о театральных пьесах и киносценариях. Никакой проблемы с атрибутированием текста здесь нет, и если вы хотите обучить своего героя говорить как Гамлет, нужно просто указать в форме для настройки персонаже <Произведение=«Гамлет», Персонаж=«Гамлет»>, а если как Чацкий, то соответственно <Произведение=«Горе от ума», Персонаж=«Чацкий»>, и дело сделано. Предварительно следует убедиться, что тексты указанных произведений находятся в папке вашего проекта, либо уже присутствуют в индексированном виде в стандартной библиотеке сорсов NW Bible. Если нет, нужно просто скачать необходимый текст с одного из многочисленных и легко доступных литературных Интернет-ресурсов.

После того, как вы указали литературные источники для всех персонажей, система запускается на обучение. Если количество персонажей не превышает трех, не отходите далеко от компьютера, процесс займет менее минуты. Если же персонажей несколько десятков, можете сходить покурить или даже попить кофе. Соглашусь с теми из пользователей, кто скажет, что такие времена ожидания раздражают, однако напомню, что это все равно не идет ни в какое сравнение с тем временем, которое вам приходится тратить на описание характеров в GMW 3.01 (что касается версии GMW 3.15, о ней речь пойдет ниже).

На этом, собственно, и все, что касается шага 2.

шаг 3. Задать циклограмму или логико-вероятностную схему речевого взаимодействия персонажей.

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

Циклограмма NW Dramaturge – действительно мощный и эффективный инструмент в руках продвинутого пользователя. Однако начинающим компьюрайтерам, а равно и просто любопытствующим тестерам, я (как и в случае формирования речевой базы) рекомендую на первых порах воспользоваться встроенными стандартными шаблонами для генерации простых циклограмм – «Монолог», «Диалог», «Трое по жребию», «Четверо по кругу» и т.п. В этом случае очередность реплик либо уже жестко определена, либо определяется случайным генератором согласно заданной простой схеме, и в процессе настройки проекта пьесы вам всего лишь придется задать среднее ожидаемое время реплики (число слов или предложений) для каждого из героев.

шаг 4. В цикле: генерировать варианты текста пьесы до тех пор, пока вы не будете удовлетворены результатами.

Думаю, те, кто раньше работал с VCM, и ни разу не пробовал Smart ScreenPlay, будут не просто удовлетворены, а с первого же раза поражены качеством текста, сгенерированного NW Dramaturge’2005. (О том, что собственно генерация текста, в отличие от обучения, происходит практически мгновенно – не стоит и говорить). Тем не менее, я рекомендую все-таки сгенерировать для любого литературного проекта несколько текстовых реализаций с немного различающимися настройками, чтобы прочувствовать все то разнообразие вариантов, которое обеспечивает технология Smart Screenplay. Скорее всего, в десятках сгенерированных по одному проекту пьес почти не окажется буквальных текстовых пересечений, да и логика развития диалога может оказаться совершенно различной. Не могу еще раз не отметить, как разительно это отличается от унылых повторяющихся реплик персонажей, созданных с использованием VCM.

Чтобы не быть голословным, предлагаю вашему вниманию компьесу собственного сочинения «Моцарт, Фальстаф и Хлестаков: Три мудреца в одном тазу», спроектированную при помощи NW Dramaturge’2005. В уже упоминавшемся электронном приложении, в директории /KUZMANIA/DRAMS_SS/ находятся собственно проект пьесы в формате NWProject и пять первых же сгенерированных программой вариантов пьесы. Признаюсь, с циклограммой я все-таки немного поигрался, но исходные характеры оставлены мной в неприкосновенной цельности и чистоте. Обратите внимание на вариант N3 (анонимное тестирование на сайте drama.ru показало, что этот вариант, видимо, является наиболее удачным). И если вам вдруг покажется, что эта пьеса наполнена глубоким философским смыслом, а местами даже поднимается от типового абсурда и бытовой иронии до высот подлинного драматизма, не забудьте отдать должное господам Пушкину, Шекспиру и Гоголю… а также технологии Smart Screenplay и специалистам фирмы NetWrite.

Проблемы и ограничения технологии Smart Screenplay

Как и следовало ожидать, ограничения и недостатки технологии Smart Screenplay, да и технологии Smart Text в целом, являются продолжением их же достоинств. Не нужно быть специалистом, чтобы заметить эти проблемы. В этой связи я позволю себе привести и прокомментировать несколько характерных реплик рядовых лит-пользователей из популярного ЖЖ-сообщества ru_compuwriting.

genitaller: В поступках персонажей нет никакой логики. Они вообще ничего не делают – только разговаривают.

Комментарий: Конечно, персонажи любой компьесы в основном занимаются тем, что разговаривают – ведь их создала программа генерации текстов, а не программа генерации действий!:) Что же касается логики развития диалогов и полилогов, здесь все зависит от удачно сформированных обучающих выборок, с одной стороны, и от правильно угаданных настроек Марковского текстогенератора – с другой. В самом деле, вспомним еще раз, как формируется последовательность реплик персонажа пьесы в технологии Smart Screenplay. Здесь каждая новая реплика персонажа зависит, во-первых, от предыдущих нескольких реплик других персонажей, а во-вторых, от нескольких собственных последних реплик. Какое из влияний окажется сильнее – определяется упомянутыми настройками. Если настройки генератора таковы, что существенно больший вес придается памяти о собственных предыдущих репликах в ущерб памяти о репликах других персонажей, возникает ощущение, что герои «не слышат» друг друга, а просто читают каждый свой собственный независимый монолог (между прочим, это хороший способ имитации современных «апсихологических» пьес). Если вы хотите избавиться от такого эффекта, увеличьте настроечные веса для учета реплик других персонажей. Только не переусердствуйте, иначе получите обратный, но столь же неприятный эффект – поведение героев станет хаотичным, они потеряют способность «держать мысль» на протяжении нескольких последовательных реплик, что также создает впечатление отсутствия логики в развитии пьесы.

Другой причиной подобного «алогичного» поведения персонажей может быть неоднородная текстовая выборка, на которой производилось их обучение. Один из очевидных приемов лит-хакеров заключается в том, что они не доверяются полностью автоматическим сегментаторам сорс-текстов, и перед запуском на обучение дополнительно вручную вычищают из «речевых лент» персонажей все противоречивые реплики. Представьте себе, что вы взяли для обучения персонажа из пьесы, где в первом акте он молодой, влюбленный и подающий надежды студент, а во втором – одинокий спивающийся инженер-неудачник. Тупое обучение на всей речевой ленте даст довольно противоречивые результаты – ведь фразы из первого и второго актов генератор будет выдавать случайным образом, вперемешку. Если же выбрать для обучения фразы только одного из актов (в зависимости от того, какой тип героя вы собственно хотите здесь иметь) – результаты генерации речи будут выглядеть значительно более логично. Приемов подобного рода достаточно много, и именно их использование определяет разницу между опытными мастерами и начинающими компьюрайтерами.

belka_Byron: Хитовые фразы известных литературных персонажей легко узнаваемы. Выходит, такие тексты могут рассматриваться только как пародийные, однако юмора-то там нет!

Проблема узнаваемости текстов – действительно одна из существеннейших проблем, которые мешают использовать классические произведения в качестве сорс-текстов для создания по-настоящему оригинальных компьес. Речь идет, конечно, не о том, что, используя характер «Отелло» для создания пьесы, главного героя которой зовут Михаил, а влюблен он в девушку по имени Маша, необходимо не забыть на этапе подготовки сорс-текстов указать в списке текстовых подстановок «Дездемона»=«Маша, Мария». Речь о том, что фраза «Молилась ли ты на ночь, Мария?» - не менее узнаваема и автоматически создает переключающую контекст восприятия культурную отсылку там, где она нам, возможно, совсем и не нужна – например, при написании тривиально-реалистической бытовой коллизии.

С этой проблемой каждый лит-хакер справляется по-своему. Мейнстримом является использование в качестве сорс-текстов малоизвестных произведений (например, пьес советских драматургов), редко исполнявшихся на театре и главное – никогда не экранизировавшихся в кино или на телевидении. Выше я также уже упоминал последнюю моду использовать в качестве готовых «речевых лент» Интернет-блоги много пишущих, но не особо популярных блоггеров. Лично мне этот ход представляется тупиковым – а основном из-за качества речевого контента. Тексты современных сетевых аффторов, как ни крути, в среднем сильно уступают персонажам средних советских драматургов как по уровню владения русским языком, так и по степени речевой индивидуализации. Не могут же все герои пьесы говорить только «Превед-медвед» и «Убей себя ап стену!».

При использовании советских пьес, конечно, возникает другая проблема – необходимо отслеживать речевые реалии советских времен и заменять их на соответствующие современные. Однако, проделав это однажды, вы с удивлением убедитесь, что для того, чтобы ударники из типовой советской производственной пьесы заговорили в точности как современный офисный планктон, достаточно подобрать каких-то двадцать-тридцать удачных текстовых подстановок. Их можно использовать как на этапе текстового препроцессинга (до обучения персонажей), так и на этапе постпроцессинга уже сгенерированного текста пьесы. Иногда постпроцессинг дает даже лучшие результаты. Насколько мне известно, именно таким приемом пользовались, например, сценаристы популярного сериала «Не родись в рубашке!» (впрочем, официально представители компании «Г-медиа» всячески отрицают, что к созданию сериала привлекались компьюрайтеры и утверждают, что их сценарий является полностью оригинальным адаптированным лицензионным продуктом).

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

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

Муж: «Перестань со мной спорить. Я еще конь с яйцами!»
Жена: «Пожалуй, на обед у нас сегодня будет яичница…»

Как видно, шутка сомнительная во всех отношениях, и основана на чисто механической игре слов «яйца(мужские)-яйца(куриные)», присущей русскому языку. Однако то, что Smart Screenplay способен автоматически (пусть пока и случайно) порождать хотя бы такие «юмористические» фрагменты, может, мне кажется, служить основанием для пусть и осторожного, но все-таки оптимизма в отношении перспектив генерации юмора и иронии в рамках технологи Smart Text.

Ne4mat: Изначально центонный характер генерируемых текстов делает принципиально невозможным создание в чего-то нового и оригинального.

На мой взгляд, у этого вопроса, как и у предыдущего, две стороны.

Во-первых, как я уже отмечал выше, центонность и культурные отсылки – неотъемлемая часть современной постмодернистской традиции. Более того, в рамках развиваемого постмодернизмом дискурса сама возможность новизны в литературе и – более широко – культуре является крайне сомнительной. Представьте себе гигантскую поисковую машину, которая могла бы искать соответствия текстов не только в Интернете, а вообще среди всех текстов, когда-либо созданных людьми – устных, письменных, песенных… Путем мысленного эксперимента легко убедиться, что 90% того, что мы говорим и пишем в своей обыденной жизни – уже кем-то было сказано, причем неоднократно. В самом деле, как часто, вероятно, должны повторяться фразы типа «Сходи в магазин!», «Учи уроки!», «Какая прелестная шубка!»… Не лучше обстоит дело и с фразами «Я тебя люблю» и «Я тебя ненавижу». Возникновение оригинального короткого утверждения (афоризма) – событие редчайшее. Да и то, если внимательно поискать, почти любому новому афоризму можно найти аналог в какой-нибудь древней книге или устной народной мудрости. Если брать более крупно, то все сюжеты и характеры в литературе также архетипичны, давно перечислены и сотни раз использованы. Получается, что ничего нового нет, и быть не может, а следовательно, писателю остается только сознательно конструировать новые сочетания из фрагментов сказанного ранее… чем и занимается технология Smart Text. Можно сказать, что Smart Text – это postmodernism ex machine со всеми отсюда вытекающими последствиями.

Во-вторых, говоря о центонах, нельзя замолчать тот факт, что Smart Text – единственная на сегодня технология, способная создавать, пусть и центонные, но зато вполне полноценные, благозвучные и даже не лишенные метафоричности поэтические тексты, в том числе – пьесы в стихах, что для конкурирующей технологии VCM не просто трудно, а по определению находится за гранью возможного.

Знаменитый центон «Люблю грозу в начале мая/ когда весенний первый гром/ как бы резвяся и играя/ все ходит по цепи кругом» вполне мог бы написать современный лит-хакер при помощи программы NetWrite Poet’2005. Русская поэзия золотого и серебряного века, к нашему счастью, дает неисчерпаемый источник сорс-текстов для создания интересных центонов, а подбор логаэтических соответствий строк, написанных классическими размерами – одна из наиболее успешно решаемых копьютерными средствами задач анализа звучащей речи по ее текстовой записи. Конечно, и здесь возникает все та же проблема с узнаваемостью «хитовых» строчек, однако, использование в качестве сорс-текстов как произведений советских поэтов, так и стихотворных контентов таких поэтических сайтов как stihi.ru, poezia.ru и т.п., открывает перед автоматической стихогенерацией практически неограниченные горизонты. Таким образом, псевдо-смысловое центонное стихосложение, как более формализованная задача по сравнению с псевдо-смысловой генерацией произвольных по форме прозаических текстов, демонстрирует сегодня наибольшее продвижение по сравнению с остальными областями применения данной технологии. Кажется, только ленивый, обсуждая уровень нашей эстрады, не возмущается тем, что композиторы-песенники перестали прибегать к услугам профессиональных поэтов и вовсю, уже без какого-либо стеснения, пользуются стихогенераторами (что, естественно, позволяет не платить никому роялти с ротации). С другой стороны, если компьютер недавно в очередной раз выиграл у чемпиона мира по шахматам, стоит ли удивляться тотальному проигрышу наших поэтов, которых при всем уважении вряд ли назовешь не только гроссмейстерами, но даже и кандидатами в мастера?:)

Pushkinator: Объясните мне, наконец, хоть кто-нибудь, есть смысл во всей этой белиберде, которую генерят наши программы, или это просто ловко замаскированный бред?

Иными словами, пользователь Pushkinator задается сакраментальным вопросом, получился ли в итоге у NetWrite заветный Эшбиевский уловитель смысла, или это по-прежнему всего лишь дешевый фокус, жалкая псевдо-имитация? И если это жалкий фокус, добавлю я от себя – тогда зачем мы с упорством, достойным лучшего применения, продолжаем всем этим заниматься и тратим на написание, чтение и обсуждение компьес часы, дни и годы собственной жизни?

Увы, и на этот вопрос у меня нет однозначного ответа. Как и на более простой вопрос: «кто вкладывает смысл в обычные литературные тексты, написанные без всякой помощи компьютера?». Казалось бы, очевидно, что источником всех возможных смыслов является автор текста, тот, кто его написал. Но в таком случае, почему же, читая какое-нибудь классическое произведение, один читатель находит в нем для себя что-то одно, а другой – нечто совсем другое? Это ведь действительно так, иначе откуда столько различных режиссерских трактовок того же «Гамлета» или «Вишневого сада»? Почему каждый актер по-своему играет все те же классические роли, что и сотни его предшественников? Более того, несмотря на то, что на всем протяжении прошедшего двадцатого века писатели и поэты стремились перещеголять друг друга в том, кто напишет текст вычурнее и невразумительнее, выскажется туманнее и загадочнее – читатели-то по-прежнему продолжают находить смысл в их произведениях, даже если те представляют собой нудный список примечаний к несуществующей телефонной книге. Всегда найдется интерпретатор, готовый найти в любом литературном тексте смысл и объяснить, в чем он заключается. Жаль только, что два различных интерпретатора всегда отыщут в одном и том же тексте два совершенно разных смысла, и никогда не согласятся друг с другом по поводу того, кто из них прав.

Выходит, смысл, который извлекается из текста при чтении (или из спектакля, фильма при просмотре), вкладываем туда мы, читатели и слушатели? В значительной степени, так оно и есть. Именно поэтому одного читателя некое произведение «торкает», пробирает до глубины души, до слез, до мурашек по коже, а другого оно же оставляет абсолютно равнодушным. Процесс восприятия сложного литературного текста всегда сродни излюбленному психиатрами тесту Роршаха. Пациенту показывают абстрактные картинки (симметричные кляксы), и он должен рассказать, что они напоминают. И ведь всем что-нибудь напоминают – бабочек, летучих мышей, гномов под зонтиком… – только каждому что-нибудь свое, в зависимости от настроения, характера, личного опыта. Таким же образом и случайные фразы давно умерших авторов, собранные в новые сочетания по прихоти компьютерного генератора случайных чисел, могут неожиданно наполниться для нас глубоким философским смыслом или даже намеками на наши собственные жизненные обстоятельства.

Так или иначе, тема эта, как мы видим, совершенно схоластическая. Помните средневековый спор об универсалиях? Существуют ли идеи «до вещей» (в мире идей), «в вещах» и «после вещей» (в нашем сознании)? Или – на современный лад – существуют ли смыслы литературного произведения «до текста» (в сознании автора), «в тексте» (непосредственно в словесном выражении) и «после текста» (в уме читателя)? Как мы только что убедились, в случае, когда автор=текстогенератор, остается единственный логически допустимый ответ: смыслы существуют только «после текста», в уме читателя-интерпретатора. Есть, однако, и альтернативная точка зрения, заключающаяся в том, что «до текста» – как в случае живого писателя, так и в случае «писателя» компьютерного – смыслы существуют не менее объективно. Причем в обоих случаях в одном и том же источнике – разуме Бога. Но это уже, пожалуй, такие материи, которые вряд ли пристало обсуждать в статье, посвященной всего-навсего тестированию бета-версии какой-то программы.:)

Кстати, пора уже вспомнить и о ней.

GMW 3.15: новая вершина эволюции VCM

Итак, как мы убедились ранее, в предыдущей версии GMW процесс создания литературного проекта долог и нуден, персонажи получаются плоскими и схематичными, а о качестве генерируемого текста (в случае драматургического текста это, естественно, реплики действующих лиц) и говорить не приходится. В то же время возможности технологии SmartScreenplay, реализованные в NetWrite Dramaturge, кажутся потенциально беспредельными, а имеющиеся на сегодня проблемы и ограничения – временными и преходящими. Казалось бы, диспозиция на рынке ясна, и выбор очевиден. Однако если помните, по результатам тестирования новой версии GMW я обещал явить вам некие чудеса и метаморфозы – извольте, вот они!

Собственно, чуда всего два, зато какие:

 – во-первых, реализованная в Graphoman Modern Writer 3.15 возможность создания «комплексных характеров» переворачивает все наши представления об уровне доступного в рамках VCM психологизма;

– во-вторых, заимствованная из области средств быстрой разработки ПО (rapid software design) технология визуального программирования позволяет отныне создавать качественные литературные проекты за считанные минуты, вообще не прикасаясь к клавиатуре – всего лишь несколькими кликами и движениями мыши!

Разумеется, каждое из чудес как минимум заслуживает отдельного параграфа.

«Комплексные характеры» или «VCM с эпициклами»

Помните американский сериал, в котором несколько актеров буквально «в лицах» разыгрывают, что творится в голове главного героя (Whats on a mans mind)? Один из персонажей – это его гнев, другой – его желания, третий – его любовь, четвертый – интеллект и так далее. В зависимости от ситуации, в которую попадает герой, эти суб-личности каждая по своему реагируют на проблему, спорят, борются между собой, договариваются, и в итоге один из «внутренних персонажей» (не хотелось бы называть их шизоидными компонентами:)) «берет управление» на себя и помогает герою разрешить ситуацию. Иногда несколько внутренних персонажей действуют одновременно, порой они сами становятся причиной жизненных неурядиц героя, и тогда другим компонентам личности приходится, уже в свою очередь, подключаться и вытаскивать его из передряги… Возможно, именно этот сериал вдохновил разработчиков GMW на создание и реализацию в новой версии своей литпрограммы соответствующей концепции «комплексного характера». А может быть, и даже скорее всего, будучи по натуре технарями- математиками, и уже только во вторую очередь литераторами-гуманитариями, они просто прибегли к основному принципу решения любых технических задач: если перед тобой стоит одна сложная проблема – раздели ее на много простых и реши каждую по отдельности! Этот принцип еще называют принципом модульности. Действует безотказно – стоит только догадаться, на какие именно части нужно разделить задачу. Как правило, это далеко не очевидно, пока задача еще не решена, зато постфактум всегда кажется проще пареной репы.

Так вот, имея перед собой проблему моделирования в литературных текстах сложных человеческих характеров, разработчики GMW 3.15 решили: давайте имитировать любой сложный характер некоторым набором связанных между собой простых характеров (пусть даже для начала таких примитивных и плоских как наши Пьеро, Арлекин и Коломбина). Поскольку ни их количество, ни их взаимодействие «внутри» создаваемого комплексного персонажа не будет, естественно, доступны для восприятия внешнего читателя, то с точки зрения этого самого внешнего читателя поведение такого «составного» персонажа должно казаться и «сложным», и «живым». Так оно в итоге и получилось!

Самое замечательное здесь то, что им почти не пришлось ничего переделывать в существовавшем ранее движке «виртуальной машины характеров». В виртуальной конструкции GMW добавился всего лишь один дополнительный класс – «характер, составленный из характеров», и это сразу позволило строить и использовать структуры характеров со сколь угодно большим числом уровней вложенности (а ведь на практике, замечу, и двух за глаза хватает!). При этом изменения в собственно программной части оказались столь незначительны, что им даже удалось сохранить вертикальную совместимость литературных проектов новой версии с проектами, порожденными более ранними версиями! И в то же время эффект от данного нововведения оказался столь разительным, что приходится вспомнить старика Гегеля и говорить об истинном переходе количества в качество.

Приходится признать – «комплексные характеры», создаваемые в Graphoman Modern Writer 3.15, выглядят воистину впечатляюще. Поставляемые вместе с бета-версией библиотеки готовых суб-характеров и демо-версии фирменных лит-проектов демонстрируют возможность встраивания в комплексные характеры неограниченного количества всевозможных (как стандартных, так и программируемых) фобий, маний, фрейдистских комплексов, «идей фикс» и т.д. и т.п. И все это развивается со временем, взаимодействует, борется между собой… У меня было не так много времени для тестирования (триальная версия, как и было обещано, исправно дохнет через 15 суток и повторно уже никак не устанавливается), однако во всех моих тестах (и на базе готовых демо-проектов, и во вновь создаваемых сценариях) «комплексные характеры» GMW 3.15 действительно ведут себя как настоящие полнокровные литературные персонажи, разве что высказываются по-прежнему достаточно коряво (но это уже настолько базовая проблема технологии  VCM, что здесь мы даже не будем снова к этому возвращаться). Даже будучи предоставлены самим себе, они по ходу пьесы могут порой (по опыту – один раз из 10-15 последовательных запусков проекта на генерацию текста при одних и тех же начальных условиях и степени рандомизации поведения порядка 20-25%) создать неожиданную интригу, способную увлечь зрителя или читателя (если, конечно, переписать реплики персонажей менее дубовым языком).

Но даже и это еще не все, на что способна версия 3.15! Видимо, вдохновившись успехом невидимых миру «внутренних персонажей», разработчики GMW вводят в игру еще и внешних по отношению к героям, также скрытых от публики персонажей. Я говорю «персонажей», поскольку во внутреннем объектном описании (листинги стандартных библиотек как всегда открыты, и это неизменно выгодно отличает Graphoman Software, например, от Philosoft) эти сущности являются наследниками того же базового класса “CVirtualCharacter”, что и “CHumanCharacter”, от которого в свою очередь, происходит “CComplexHumanCharacter”, о котором шла речь выше. Упомянутые «внешние невидимые персонажи» описываются классом “CCollisionCharacter”, что можно условно перевести как «характер коллизии», «характер ситуации» или даже – если отталкиваться не от названия, а от функции – как «драматический конфликт»! Ни больше, ни меньше. В самом деле, во многих классических и современных пьесах (а равно и романах, повестях, рассказах, этсетера) движущий действие драматический конфликт вовсе не исчерпывается исходной посылкой (завязкой) и последующими взаимодействиями героев. Зачастую он обладает собственной волей, неумолимо (а порой и прихотливо) влекущих сюжет к развязке. Именно эту функцию и призваны выполнять в новой версии GMW невидимые «характеры коллизии». Возможно, эту достаточно свежую (хотя совершенно непонятно, почему до сих пор ни разу не реализованную в рамках технологии VCM) идею было бы не так просто принять и оценить с первого раза, если бы не прекрасный иллюстративный пример, входящий в расширенную поставку (всего за 99 долларов 99 центов). Демонстрационный литературный проект «Царь Эдип» - без сомнения лучшая лит-хакерская пьеса, которую я видел в этом году. Более того, хотя в ходе своих тестов я запускал этот проект на генерацию более 50 раз, доведя в итоге степени рандомизации поведения персонажей 80% (!), пьеса все еще оставалась читабельной, не лишенной интереса и даже не слишком отклоняющейся от классического подлинника – безусловно, за счет неизменно присутствующего «характера коллизии». Пожалуй, не будет преувеличением заявить (хотя даже сами авторы технологии пока на это не осмеливаются), что впервые пьесу, искусственно созданную в рамках «виртуальной машины характеров», поддерживает не только инерция заданных характеров и обстоятельств, но подлинный и осмысленный драматический конфликт. А ведь согласно описанию GMW 3.15 ничто не мешает ввести в наш литературный проект и несколько конфликтов одновременно, да еще заставить их взаимодействовать между собой, да еще по хитрой циклограмме, чтобы новые коллизии включались, когда перестают действовать старые…

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

Визуальное программирование VCM – революция в технологии литературного творчества

Вернемся к приснопамятной пьесе для театра Карабаса Барабаса. Согласитесь, что выше мы немало намучились, описывая даже один единственный простейший характер – Пьеро. Теперь представьте себе, что в пьесе действуют не три, а три десятка персонажей, причем каждый из них является «комплексным характером», включающим не менее пяти «характеров-компонент», плюс еще несколько «характеров коллизий», каждый из которых также является, в свою очередь, комплексным характером. А теперь вообразите, что вам придется по аналогии с Пьеро подробно вручную описать каждый из этих нескольких сотен характеров все на том же старом добром CDL (Character Description Language – язык описания характеров), которым мы привыкли пользоваться во всех предыдущих версиях Graphoman Modern Writer. Думаю, от этой невеселой перспективы разом поблекнут все те качественные достижения VCM, которые с такой помпой были разрекламированы мной в предыдущем параграфе. Так вот, вторая, и поистине приятная новость заключается в том, что В НОВОЙ ВЕРСИИ GMW ВАМ БОЛЬШЕ НЕ ПРИДЕТСЯ НИЧЕГО ПРОГРАММИРОВАТЬ!

Постойте, скажет опытный драм-хакер, как же это можно – написать виртуальную пьесу для VCM, не программируя при этом на языке описания характеров? Да это все равно что пытаться написать серьезную программу для ЭВМ, не используя никакого языка программирования!

Что будет ему ответом? Правильно – дружный смех современных инженеров и программистов, которые давно уже привыкли львиную долю пользовательского ПО создавать не дедовским путем набора на клавиатуре последовательностей загадочных магических команд, имен переменных и т.д., а гораздо более простым, экономичным, приятным и понятным путем визуального программирования, заключающегося в перетаскивании на рабочую панель готовых визуальных компонент, хранящихся в специальных палитрах, настройки их связей на уровне drag-and-drop («бери и бросай»), настройке их свойств при помощи соответствующих интерактивных таблиц атрибутов, в полях которых значения выбираются из заранее заданных выпадающих списков, и так далее, и так далее. Нет, разумеется, когда-то нужно создавать и новые компоненты – но более 90% работы сегодня программист выполняет, даже не притрагиваясь к клавиатуре, исключительно при помощи мыши.

Наконец-то нечто подобное, реализованное на должном уровне, появилось и в области продуктов для поддержки лит-творчества. Тем, кому это что-то говорит, могу намекнуть, что палитры и средства для работы с визуальными компонентами, используемые в новой версии GMW, удобны и продуманы почти так же хорошо как в Delphi, а тул для непосредственного визуального программирования связей между персонажами пьесы и компонентами комплексного характера выполнен в лучших традициях LabVIEW. Остальным придется пока просто поверить мне на слово – это очень удобно. Более того – это очень, очень быстро. Удавалось ли вам когда-либо ранее с нуля создать проект пьесы для пяти персонажей за пятнадцать минут? Доказано на собственном опыте: после нескольких дней тренировки в GMW 3.15 – это возможно! Разумеется, при этом я использовал грандиозную библиотеку готовых характеров, любезно предоставленную вместе с демо-версией бесплатно.

Так вот где собака порылась! – презрительно воскликнет все тот же искушенный драм-хакер. Кому, скажите, интересны такие скороспелые лит-проекты, составленные из стандартных характеров? Много ли нового можно создать таким путем?

Спрашивали – отвечаем. Я ведь не сказал, что непосредственно использовал для создания своих персонажей готовые шаблоны и классы из библиотеки. На их основе я строил комплексные характеры, содержащие не менее пяти (а порой – из интереса – и до двадцати компонент). Все дело здесь в количестве сочетаний. Попробуйте подсчитать, сколько их можно составить из двух с половиной тысяч компонент упомянутой библиотеки характеров, и вы убедитесь, что даже не в состоянии вообразить себе такого большого числа, а воспринимаете его только в качестве последовательности цифр на экране вашего калькулятора.

Причем тут составные типы? – может возразить наш воображаемый литературный зануда. Вот вы попробуйте создать принципиально нового героя, цельного, яркого, неизвестного ранее в текстах других авторов. Разве не в этом заключается мастерство и гордость настоящего драматурга, да и вообще писателя?

Увы. Гордость, может, и составляет, вот только логике такое требование существенным образом противоречит. Что касается оригинальных (несоставных) человеческих типов, то во всех известных мне классификациях – от древнешей «холерик-сангвиник-флегматик-меланхолик» до, допустим, соционической, где действуют такие типы как «Штрилиц» и «Дюма» - таких типов насчитывается от нескольких штук до нескольких десятков. Не более! И если появится новый тип, новая классификация, вряд ли ее автором станет писатель – скорее это будет психолог или социолог. В литературе, как мне кажется, дело именно в нюансах, в отличиях второго порядка, которые как раз и оживляют мертвые схемы, превращая их в живых персонажей «из плоти и крови». Например, Д’Артаньян – не просто холерик, а еще и француз, дуэлянт, воин (мушкетер), влюбленный (в доверенное лицо королевы), друг (преданный своим друзьям-мушкетерам) и враг (ненавидящий гвардейцев кардинала). Как видите, для описания того, что превращает библиотечный тип «холерик» в сценический характер «Д’Артаньян», я воспользовался всего лишь семью простыми «характерами-компонентами» и четырьмя связями. Всей работы – на три минуты в GMW 3.15, если не зевать и щелкать мышью почаще.

Не скрою, на первых порах мне было непривычно и даже стыдно добиваться столь глубокого психологизма, затратив лишь несколько минут на совершенно ненапряжное перетаскивание иконок из окошка в окошко. Но потом я распечатал сгенерённые программой пьесы, и стыд немедленно покинул меня. Потому что за такие сюжеты и таких героев нестыдно. (Желающие могут ознакомиться с результатами моего «блиц-творчества» в соавторстве с GMW 3.15, обратившись к уже упоминавшемуся электронному приложению, см. директорию /KUZMANIA/DRAMS_315/. Как говорится, почувствуйте разницу.)

Moralite

Итак, резюмирую. Новая версия Graphoman Modern Writer 3.15, официальный релиз которой ожидается в следующем месяце – это действительно революционный продукт, возможно, высшая точка в развитии технологии «виртуальных машин характеров». На сегодня это, пожалуй, лучшее решение в области поддержки литературного творчества, и уж безусловно лучший тул для драм-хакеров на ближайшие несколько лет. Максимальный респект руководству Graphoman Software, ее программистам, лит-хакерам и всем-всем-всем, кто имел отношение к созданию этой замечательной «писалки» (кто еще не сталкивался на форумах с сим прелестным жаргонизмом, легко уловит его смысл по аналогии с «бродилками», «стрелялками», «леталками» и прочими компьютерными «делалками»).

И тем не менее, уважаемый читатель, не спеши срочно загружать GraphomanSoftware.com, дабы за известную сумму скачать эту великую программу и начать немедленно ваять в ней свои новые нетленки. Тем, чье увлечение компьюрайтингом не мимолетно, кто собирается и через год, и через два оставаться в этой теме, я по-прежнему настоятельно советую присмотреться к технологии Smart Text. Казалось бы, странно после всех дифирамбов, пропетых только что в адрес новой версии GMW, построенной на базе столь удачно модернизированной и усовершенствованной Virtual Character Machine. Но несмотря на этот локальный успех, я все же по-прежнему твердо уверен в том, что будущее – в долгосрочной, и даже среднесрочной перспективе – не за сюжет- или характер-ориентированными, а только и исключительно за текст-ориентированными технологиями.

И дело здесь не в том, программисты какой фирмы более изворотливы и умелы, а в том, что сама логика развития культуры выступает сегодня против VCM на стороне Smart Text. Потому что исходная идея, дух концепции Virtual Character Machine восходит своими корнями к той самой, уже неоднократно скомпрометировавшей себя просвещенческой парадигме, которая осмеливалась наивно утверждать, будто наш мир может быть до конца научно познан и рационально объяснен. Помнится, Лаплас как-то говорил, что, если бы ему были известны положения, массы и скорости всех тел во Вселенной, он мог бы предсказать ее состояние в любой последующий миг времени. Ему же, по преданию, принадлежит и другая гордая фраза: «Вы спрашиваете меня о Боге? Эта гипотеза мне не понадобилась!». Модель VCM – это, пусть и на новом уровне технологий, все тот же Лапласов «прозрачный ящик», в котором мы можем рассмотреть каждую причину, каждую связь, каждую детальку, приводящую в действие героев, определяющую их поступки и судьбы. И вот уже все это механическое великолепие во всем своем обманчивом жизнеподобии – начинает вертеться, работать, функционировать, существовать: как ему и положено – без божества, без вдохновенья, без тайны… На доказательство того, что человеческий мир на самом деле устроен не так, двадцатый век без остатка потратил все свои силы. Сегодня мы знаем, что наш мир – это вовсе не «прозрачный», а напротив, загадочный «черный» ящик, непредсказуемый, коварный и жестокий. И единственным адекватным отражением его в литературе может быть разве что сумасшедший оракул, бормочущий в экстатическом угаре свои неразборчивые пророчества, собирающий из разломанных мозаик прошлых чудес слово «вечность», раз за разом насмешливо рассыпающееся у него в руках.

Тексты, создаваемые Smart Screenplay, в лучших своих образцах, несомненно, воспроизводят этот столь ценимый современной культурой дух тления и благородного безумия. Продукция же Virtual Character Machine, как и прежде, напоминает убогий кукольный вертеп, в котором слишком заметны все нити, ведущие от картонных персонажей к отвратительному механическому кукольнику, ведущему свое происхождение даже не от папы Карло, а от его старой шарманки.

И это все о них.

Кузьма Дмитриев,
специально для журнала “ПиСи-Обсёрвер”

Hosted by uCoz