В статье рассмотрены принципы функционирования IPGS (Intellectual Program Generation System) — отечественной интеллектуальной системы автоматизированного программирования, качественно отличающейся от большинства аналогов.

Применение естественного языка для постановки задач

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

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

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

Принципы работы системы IPGS

В нашей системе IPGS сделана попытка освободить пользователя от изучения каких-либо исходных специфических языков описания и сформулировать задачу на естественном языке. Но поскольку такой язык очень противоречив и многообразен, то пришлось ввести определенные ограничения. В чем же они заключаются? Во-первых, установлен строгий порядок слов в предложении: подлежащее — сказуемое — остальные члены предложения. Причем программа проверки порядка следования слов при формулировке любой задачи исключительно сложна. Во-вторых, необходимо привязать текст к определенной предметной области. В-третьих, следует составлять научные тексты на естественном языке с использованием деловой лексики.

В связи с последними двумя ограничениями базы данных (БД) и базы знаний (БЗ) требуют соответствующего информационного наполнения. При этом действия должны выполняться в следующей последовательности:

  • анализ текста задачи на ограниченном естественном языке;
  • построение плана решения задачи;
  • составление алгоритма решения по этому плану;
  • создание текста на целевом алгоритмическом языке программирования, отражающем полученный алгоритм.

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

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


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

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

Таблица 1. Фрагмент встроенного справочника арифметических операций

*0 — описание арифметической операции, состоящее только из группы операторов;

1 — описание арифметической операции, включающее имена других арифметических операций;

ПР — арифметическая операция в виде отдельной процедуры;

Ф — стандартная арифметическая функция.

В результате получается функциональная семантическая сеть, в которой хранятся обозначения, законы, правила, алгоритмы и формулы, необходимые для последующего построения плана решения исходной задачи. Они соответствуют понятиям или совокупности понятий в семантической сети понятий. Здесь имеется в виду, что могут быть такие понятия в семантической сети понятий, которым соответствуют некоторые фрагменты функциональной семантической сети. Причем отдельным фрагментам функциональной сети могут соответствовать несколько понятий в сети понятий. В сложных случаях некоторые вершины функциональной семантической сети могут также являться фрагментами функциональной семантической сети более низкого уровня. Процесс построения функциональной семантической сети для нашего случая более простой (рис. 4—6).



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


Описание фрагментов этой сети в определенной последовательности дает план решения задачи. Таким образом, к выходной информации процесса построения плана решения задачи относятся файл с планом решения задачи, дополненные семантические сети в БЗ и семантическая сеть плана решения. Она представляет собой модифицированную семантическую сеть задачи с замененными на определенные символы целевыми и указательными словами, дополненную законами, правилами, алгоритмами, формулами, которые должны использоваться в процессе решения задачи. Выходная информация для представленного примера приведена на рис. 7 и в листинге 1.

Автоматическое порождение алгоритма и программы

Цель процесса порождения алгоритма по плану решения задачи — создание алгоритма на языке описания алгоритмов (ЯОА) на основе правил, содержащихся в плане решения задачи. Этот ЯОА разработан на основе языка схем программ В. Е. Котова и В. К. Сабельфельда. Он представляет собой формализованный язык с элементами естественного. Алгоритм, написанный на ЯОА, достаточно детально отображает устройство программы, а точнее, ее логическую структуру. При проектировании такого алгоритма применяется элементарный (по сравнению с алгоритмическими языками программирования) синтаксис ЯОА, исключающий описание структуры (типов) данных, которые при этом используются. Следует отметить, что несмотря на свой довольно простой синтаксис, ЯОА позволяет строить логически сложные, вложенные конструкции.

Таким образом, процесс порождения алгоритма в основном заключается в перекодировании символьного обозначения вершин и дуг простых фрагментов или отдельных составляющих сложных фрагментов семантической сети плана решения задачи в операторы или группы операторов ЯОА. Для формул во встроенных справочниках, а также для ряда целевых слов в соответствующей таблице приведены уже готовые алгоритмические конструкции операторов, используемые в процессе перекодировки. Выходная информация — текст алгоритма на ЯОА в виде файла. В рассматриваемом примере содержимое файла будет выглядеть следующим образом (см. листинг 2).

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

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

ОБ АВТОРАХ: А.А. Аленкин — аспирант, В.П. Зубков — к. т. н., доцент кафедры ПОКС Ивановского государственного энергетического университета.