- •Глава 8
- •8.1. Введение
- •8.2. Понятия теории формальных языков
- •8.2.1. Определения
- •8.2.2. Типы грамматик
- •8.2. Понятия теории формальных языков
- •8.3. Постановка задачи синтаксического распознавания образов
- •8.4. Синтаксическое описание образов
- •8.5. Грамматики, используемые в распознавании образов
- •8.5.2. Распознавание образов, представленных графами
- •8.5.3. Распознавание древовидных структур
- •8.6 Статистический анализ
- •8.6.1. Стохастические грамматики и языки
- •8.6.2. Оценка вероятностей правил подстановки с помощью процедур обучения
- •8.7.1. Вывод цепочечных грамматик
- •Часть I. Строится нерекурсивная грамматика, порождающая в точности заданное множество выборочных цепочек. Выборочные цепочки обрабатываются в порядке уменьшения длины.
- •8.7.2. Вывод двумерных грамматик
- •8.8. Автоматы как распознающие устройства
8.7.1. Вывод цепочечных грамматик
На рис. 8.10 представлена модель вывода цепочечных грамматик. Задача, показанная на этом рисунке, заключается в том, что множество выборочных цепочек i подвергается обработке с помощью адаптивного обучающего алгоритма, представленного на рисунке блоком. На выходе этого блока в конечном счете воспроизводится грамматика G, согласованная с данными цепочками, т. е. множество цепочек {хi} является подмножеством языка L{G). К сожалению, ни одна из известных нам схем не в состоянии решить эту задачу в общем виде, представленном на рис. 8.10. Вместо этого предлагаются
многочисленные алгоритмы для вывода ограниченных грамматик. Алгоритм, рассматриваемый в этом пункте, является во многих отношениях типичным отражением результатов, полученных в данной области. Этот алгоритм, являющийся модификацией процедуры, разработанной Фельдманом [1967,1969], для заданного множества терминальных цепочек выводит автоматную грамматику. Основная идея метода Фельдмана заключается в том, чтобы сначала построить нерекурсивную грамматику, порождающую в точности заданные цепочки, а затем, сращивая нетерминальные элементы, получить более простую рекурсивную грамматику, порождающую бесконечное число цепочек. Алгоритм можно разделить на три части. Первая часть формирует нерекурсивную грамматику. Вторая часть преобразует ее в рекурсивную грамматику. Затем в третьей части происходит упрощение этой грамматики. Эту процедуру лучше всего пояснить на примере.
Рассмотрим выборочное множество терминальных цепочек {саааЬ, ЬЬааЬ, сааЬ,ЬЬаЬ, cab, ЬЬЬ, сЬ}. Требуется получить автоматную грамматику, способную порождать эти цепочки. Алгоритм построения грамматики состоит из следующих этапов.
Часть I. Строится нерекурсивная грамматика, порождающая в точности заданное множество выборочных цепочек. Выборочные цепочки обрабатываются в порядке уменьшения длины.
Правила подстановки строятся и прибавляются к грамматике по мере того, как они становятся нужны для построения соответствующей цепочки из выборки. Заключительное правило подстановки, используемое для порождения самой длинной выборочной цепочки, называется остаточным правилом, а длина его правой части равна 2. Остаточное правило длины п имеет вид
где А—нетерминальный символ, а a1, a2 .... an—терминальные элементы. Предполагается, что остаток каждой цепочки максимальной длины является суффиксом (хвостовым концом) некоторой более короткой цепочки. Если какой-либо остаток не отвечает этому условию, цепочка, равная остатку, добавляется к обучающей выборке. Из последующих рассуждений будет ясно, что выбор остатка длины 2 не связан с ограничением на алгоритм. Можно выбрать и более длинный остаток, но тогда потребуется более полная обучающая выборка в связи с условием, что каждый остаток является суффиксом некоторой более короткой цепочки.
В нашем примере первой цепочкой максимальной длины в обучающей выборке является цепочка саааЬ. Для порождения этой цепочки строятся следующие правила подстановки:
где A3 — правило остатка. Вторая цепочка — ЬЬааЬ. Для порождения этой цепочки к грамматике добавляются следующие
Поскольку цепочка ЬЬааЬ И предыдущая цепочка саааЬ имеют одинаковую длину, требуется остаточное правило длины 2. Заметим также, что работа первой части алгоритма приводит к некоторой избыточности правил подстановки. Например, вторая цепочка может быть с равным успехом получена введением следующих правил подстановки: S—>bA4, A4->bA2. Но в первой части мы занимаемся лишь определением множества правил подстановки, которое способно в точности порождать обучающую выборку, и не касаемся вопроса избыточности. В сложных ситуациях трудно соблюдать выполнение этого условия и одновременно уменьшать число необходимых правил подстановки. Значительно проще просматривать введенные правила слева направо, чтобы определить, будут ли они порождать новую цепочку, не стремясь при этом минимизировать число правил подстановки. Об устранении избыточности речь пойдет в третьей части алгоритма.
Для порождения третьей цепочки caab требуется добавление к грамматике только одного правила
Рассмотрев остальные цепочки из обучающей выборки, устанавливаем, что окончательно множество правил подстановки, построенных для порождения обучающей выборки, выглядит следующим образом:
Часть 2. В этой части, соединяя каждое правило остатка длины 2 другим (неостаточным) правилом грамматики, получаем рекурсивную автоматную грамматику. Это происходит в результате слияния каждого нетерминального элемента правила остатка с нетерминальным элементом неостаточного правила, который может порождать остаток. Так, например, если Аr—остаточный нетерминал вида Ar ->a1a2 и Аn—неостаточный нетерминал вида An ->a1Am где Am —> a2, все встречающиеся Ar, заменяются на An, a правило подстановки Ar ->a1a2 отбрасывается. Таким способом создается автоматная грамматика, способная порождать данную обучающую выборку, а также обладающая общностью, достаточной для порождения бесконечного множества других цепочек.
В рассматриваемом примере A6 может сливаться с A5, a A3 может сливаться с A2, образуя следующие правила подстановки.
Рекурсивными правилами являются A2 —> aA2 и A5 —> aA5.
Часть 3. Здесь грамматика, полученная во второй части, упрощается объединением эквивалентных правил подстановки, Два правила с левыми частями Ai и Aj эквивалентны, если соблюдены следующие условия. Предположим, что, начиная с Ai можно породить множество цепочек {x}i. Аналогичным образом предположим, что, начиная с Aj, можно породить множество {x}j. Если {x}i== [x}j, то два правила подстановки считаются эквивалентными, и каждый символ Aj может быть заменен на Ai, без ущерба для языка, порождаемого этой грамматикой. Формально два правила подстановки эквивалентны, если
порождается из Ai, соответствующим применением правил подстановки.
В приведенном примере эквивалентны правила с левыми частями А1 и A2. После слияния А1 и A2 получаем
где исключены многократные повторения одного и того же правила. Точно так же, заметив, что А1 и A5, эквивалентны, получаем
где
Легко проверить, что эта грамматика может порождать обучающую выборку, использованную в процессе ее вывода.