Применение деревьев синтаксического анализа для извлечения смысла
Грамматики Prolog чрезвычайно хорошо приспособлены для трактовки смысла фраз, особенно на естественных языках. Для обработки смысла фраз могут использоваться параметры, которые закреплены за нетерминальными символами грамматики. Один из подходов к решению задачи извлечения смысла предусматривает использования двух этапов.
1. Формирование дерева синтаксического анализа заданной фразы.
2. Обработка дерева синтаксического анализа для определения смысла.
Часть II. Применение языка Prolog в области искусственного интеллекта
Безусловно, такой подход может применяться на практике, только если синтаксическая структура, представленная с помощью дерева синтаксического анализа, отражает также семантическую структуру; это означает, что и синтаксическая, и семантическая декомпозиции имеют аналогичные структуры. В таком случае смысл фразы можно составить из смыслов синтаксических конструкций, на которые раскладывается фраза в результате синтаксического анализа.
Проиллюстрируем этот двухэтапный метод на несложном примере. Для упрощения снова будем рассматривать движения робота. Грамматика с описанием движений робота, позволяющая вырабатывать дерево синтаксического анализа, приведена ниже.
move( move( Step)) -> step{ Step).
move( move( Step, Move)) -> step( Step), move I Move).
step( step( up)) -> [ up] .
step( step( down)) -> [ down].
Теперь определим смысл движения как расстояние между положением робота перед выполнением движения и после него. Пусть каждый шаг имеет длину 1 мм в положительном или отрицательном направлении. Поэтому смысл движения "up up down up" составляет 1 + 1 - 1 + 1 = 2. Расстояние перемещения (distance) в результате выполнения движения можно вычислить на основании дерева синтаксического анализа движения, как показано на рис. 21.4. Ниже приведены соответствующие арифметические расчеты.
distance ( 'up up down up') =
distance('up') + distancet'u p down up') =1 + 1 = 2
Рис. 21.4. Извлечение смысла движения как расстояния перемещения в результате его выполнения
Ниже приведена процедура, которая определяет смысл движения (как соответствующего расстояния перемещения) на основании дерева синтаксического анализа движения.
Ч meaning{ Ра^эеТгее, Value) r.ieaning( move ( Step, Move), Dist) :-
meaning) Step, Dl),
meaning! Move D2)
Глава 21. Обработка лингвистической информации с помощью грамматических правил 519
Dist is Dl + D2 .
meaning! move{ Step), Dist) :-meaning! Step, Dist) .
meaning! step! up) , 1 ) . meaning! step( down), -1) .
Этой процедурой можно воспользоваться, например, для вычисления смысла движения "up up down up" следующим образом:
?• move[ Tree, ( up, up, down, up], [)), meaning[ Tree, Dist), Dist = 2
Tree = move( step ( up), move( step( up), move( stept down), move) step t up)))))
Упражнение
21.4. Эта грамматика и процедура meaning могут использоваться для решения противоположной задачи, т.е. для поиска движения, позволяющего переместить манипулятор робота на заданное расстояние, например, как показано ниже. ?- move( Tree, Move, []), meaning( Tree, 5), Обсудите перспективы применения такого подхода.