CYK алгоритм - CYK algorithm

В Информатика, то Алгоритм Кок-Янга-Касами (также называется CYK, или CKY) это разбор алгоритм для контекстно-свободные грамматики изобретен Ичиро Сакаи.[1] Алгоритм назван в честь некоторых из его открывателей: Джон Кок, Дэниел Янгер и Тадао Касами. В нем работают восходящий анализ и динамическое программирование.

Стандартная версия CYK работает только с контекстно-свободными грамматиками, приведенными в Нормальная форма Хомского (CNF). Однако любая контекстно-свободная грамматика может быть преобразована (после соглашения) в грамматику CNF, выражающую тот же язык (Сипсер 1997 ).

Важность алгоритма CYK проистекает из его высокой эффективности в определенных ситуациях. С помощью Обозначение Big O, то худшее время работы CYK - это , где - длина анализируемой строки и размер грамматики CNF (Хопкрофт и Ульман, 1979, п. 140). Это делает его одним из самых эффективных алгоритмов синтаксического анализа с точки зрения наихудшего случая. асимптотическая сложность, хотя существуют другие алгоритмы с лучшим средним временем работы во многих практических сценариях.

Стандартная форма

В динамическое программирование алгоритм требует, чтобы контекстно-свободная грамматика была преобразована в Нормальная форма Хомского (CNF), потому что он проверяет возможность разделения текущей последовательности на две меньшие последовательности. Любая контекстно-свободная грамматика, которая не генерирует пустую строку, может быть представлена ​​в CNF с использованием только правила производства форм и .

Алгоритм

Как псевдокод

Алгоритм в псевдокод составляет:

позволять вход будет строкой я состоящий из п символы: а1 ... ап.позволять грамматика содержит р нетерминальные символы р1 ... рр, с начальным символом р1.позволять п[п,п,р] быть массивом логических значений. Инициализировать все элементы п к ложному.для каждого s = От 1 до п    для каждого единичное производство рvаs        набор п[1,s,v] = правдадля каждого л = От 2 до п - Длина пролета    для каждого s = От 1 до п-л+1 - Начало пролета        для каждого п = От 1 до л-1 - Перегородка пролета            для каждого производство рарб рc                если п[п,s,б] и п[л-п,s+п,c] тогда набор п[л,s,а] = правдаесли п[п,1,1] правда тогда    я является членом языкаеще    я не является членом языка

Вероятностный CYK (для поиска наиболее вероятного синтаксического анализа)

Позволяет восстановить наиболее вероятный синтаксический анализ с учетом вероятностей всех производств.

позволять вход будет строкой я состоящий из п символы: а1 ... ап.позволять грамматика содержит р нетерминальные символы р1 ... рр, с начальным символом р1.позволять п[п,п,р] быть массивом действительных чисел. Инициализировать все элементы п до нуля.позволять назад[п,п,р] - массив троек обратных указателей.для каждого s = От 1 до п  для каждого единичное производство рvаs    набор п[1,s,v] = Pr (рvаs)для каждого л = От 2 до п - Длина пролета  для каждого s = От 1 до п-л+1 - Начало пролета    для каждого п = От 1 до л-1 - Перегородка пролета             для каждого производство рарб рc        prob_splitting = Pr (рарб рc) * п[п,s,б] * п[л-п,s+п,c]        если п[п,s,б]> 0 и п[л-п,s+п,c]> 0 и п[л,s,а] тогда           набор п[л,s,а] = prob_splitting набор назад[л,s,а] = 

Как проза

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

пример

Разбор предложений с использованием алгоритма CYK

Это пример грамматики:

Теперь приговор она ест рыбу вилкой анализируется с использованием алгоритма CYK. В следующей таблице в , я номер строки (начиная с 1 снизу), а j - номер столбца (начиная с 1 слева).

Таблица CYK
S
Вице-президент
 
S
Вице-президентPP
SНПНП
НПВ, ВПДет.NпDetN
онаестарыбыс участиемавилка

Для удобства чтения таблица CYK для п здесь представлена ​​как 2-мерная матрица M содержащий набор нетерминальных символов, таких что рk в если и только если, . В приведенном выше примере, поскольку начальный символ S в , предложение может быть порождено грамматикой.

Расширения

Создание дерева синтаксического анализа

Вышеупомянутый алгоритм является распознаватель это только определит, есть ли предложение на языке. Его легко расширить до парсер который также создает дерево синтаксического анализа, сохраняя узлы синтаксического дерева как элементы массива вместо логического 1. Узел связан с элементами массива, которые использовались для его создания, чтобы построить древовидную структуру. Только один такой узел в каждом элементе массива необходим, если нужно создать только одно дерево синтаксического анализа. Однако, если все деревья синтаксического анализа неоднозначного предложения должны быть сохранены, необходимо сохранить в элементе массива список всех способов, которыми соответствующий узел может быть получен в процессе синтаксического анализа. Иногда это делается с помощью второй таблицы B [n, n, r] так называемого обратные указателиКонечным результатом является общий лес возможных деревьев синтаксического анализа, в котором общие части деревьев разлагаются между различными синтаксическими анализами. Этот общий лес удобно рассматривать как неоднозначная грамматика генерирует только проанализированное предложение, но с той же неоднозначностью, что и исходная грамматика, и те же деревья синтаксического анализа, вплоть до очень простого переименования нетерминалов, как показано Ланг (1994).

Анализ контекстно-свободных грамматик, не относящихся к CNF

Как указал Ланге и Лайсс (2009), недостатком всех известных преобразований в нормальную форму Хомского является то, что они могут привести к нежелательному увеличению размера грамматики. Размер грамматики - это сумма размеров ее производственных правил, где размер правила равен единице плюс длина его правой части. С помощью чтобы обозначить размер исходной грамматики, размер увеличенного размера в худшем случае может варьироваться от к , в зависимости от используемого алгоритма преобразования. Для использования в обучении Ланге и Лайсс предлагают небольшое обобщение алгоритма CYK, «без ущерба для эффективности алгоритма, ясности его представления или простоты доказательств» (Lange & Leiß 2009 ).

Анализ взвешенных контекстно-свободных грамматик

Также возможно расширить алгоритм CYK для анализа строк, используя взвешенный и стохастические контекстно-свободные грамматики. Затем веса (вероятности) сохраняются в таблице P вместо логических значений, поэтому P [i, j, A] будет содержать минимальный вес (максимальную вероятность) того, что подстрока от i до j может быть получена из A. Дальнейшие расширения алгоритм позволяет перечислить все синтаксические разборы строки от наименьшего до наибольшего веса (от наибольшей до наименьшей вероятности).

Алгоритм Valiant

В худшее время работы CYK - это , где п - длина анализируемой строки, а |г| размер грамматики CNF г. Это делает его одним из наиболее эффективных алгоритмов распознавания общих контекстно-свободных языков на практике. Доблестный (1975) дал расширение алгоритма CYK. Его алгоритм вычисляет ту же таблицу синтаксического анализа, что и алгоритм CYK; но он показал, что алгоритмы эффективного умножения из матрицы с 0-1 элементами можно использовать для выполнения этого вычисления.

С использованием Алгоритм Копперсмита – Винограда для умножения этих матриц, это дает асимптотическое время работы в худшем случае . Однако постоянный член, скрытый за Обозначение Big O настолько велик, что алгоритм Копперсмита-Винограда применим только для матриц, которые слишком велики для обработки на современных компьютерах (Кнут 1997 ), и этот подход требует вычитания и поэтому подходит только для распознавания. Нельзя полностью избежать зависимости от эффективного умножения матриц: Ли (2002) доказал, что любой синтаксический анализатор контекстно-свободных грамматик, работающий во времени может быть эффективно преобразован в алгоритм, вычисляющий произведение -матрицы с 0-1 элементами по времени .

Смотрите также

использованная литература

  1. ^ Грун, Дик (2008). Методы парсинга: практическое руководство (2-е изд.). Нью-Йорк: Спрингер. ISBN  978-0-387-20248-8.

Источники

внешние ссылки