Основные понятия языка
Формальный язык определяется как (возможно бесконечное) множество строк. Каждая строка представляет собой конкатенацию терминальных символов, иногда называемых словами. Например, в языке логики первого порядка терминальные символы включают л и Р, типичной строкой является "Р л 0", а строка "Р Q л" не считается элементом этого языка. Формальные языки, такие как логика первого порядка и Java, имеют строгие математические определения. В этом они отличаются от естественных языков, таких как китайский, датский и английский, которые не имеют строгого определения, но совместно используются сообществом говорящих на них людей. Но в этой главе будет предпринята попытка трактовать естественные языки так, как если бы они были формальными языками, хотя авторы признают, что эта попытка провести между ними аналогию не будет идеальной.
Грамматика — это конечное множество правил, которое определяет язык. Формальные языки всегда имеют официально утвержденную грамматику, описанную в руководствах или учебниках. Естественные языки не имеют официально утвержденной грамматики, но лингвисты стремятся раскрыть свойства языка в процессе научного исследования, а затем узаконить свои открытия в грамматике. До сих пор еще ни одному лингвисту не удалось добиться в этом полного успеха. Следует отметить, что лингвисты — это ученые, пытающиеся дать определение естественному языку в том виде, в каком он есть. Но некоторые специалисты берут также на себя роль распространителей норм грамматики и пытаются диктовать, каким должен быть язык. Они создают правила, подобные тому, что "нельзя применять инфинитив с отделенной частицей" (split infinitive), а эти правила иногда публикуются в руководствах по языковому стилю, но оказывают очень малое влияние на то, как фактически используется язык.
И в формальных, и в естественных языках с каждой допустимой строкой связан смысл, или семантика. Например, в языке арифметики может быть предусмотрено правило, указывающее, что если "X" и "У" — выражения, то "Х+У" — также выражение, а его семантикой является сумма X и У. В естественных языках важно также понимать прагматику строки — фактический смысл строки, как речи, высказанной в данной конкретной ситуации. Смысл заложен не только в самих словах, но и в интерпретации этих слов в сложившихся обстоятельствах.
Большинство формальных систем представления грамматических правил основано на идее структуры словосочетаний, согласно которой строки состоят из подстрок, называемых словосочетаниями, которые относятся к различным категориям. Например, словосочетания "the wumpus", "the king" и "the agent in the comer" представляют собой примеры категории именного словосочетания, или сокращенно NP (Noun Phrase). Есть две причины, по которым целесообразно классифицировать словосочетания именно таким образом. Во-первых, словосочетания обычно соответствуют естественным семантическим элементам, из которых можно конструировать смысл фрагмента; например, именные словосочетания указывают на объекты в рассматриваемом мире. Во-вторых, классификация словосочетаний позволяет описывать строки, допустимые в данном языке. В частности, можно утверждать, что любое из именных словосочетаний может комбинироваться с глагольным словосочетанием (или сокращенно VP— Verb Phrase), таким как "is dead" (мертв), для формирования словосочетания, относящегося к категории .предложения (или сокращенно S— Sentence). Без таких вспомогательных понятий, как именное словосочетание и глагольное словосочетание, было бы трудно объяснить, почему строка, состоящая из слов "the wumpus is dead", представляет собой предложение, a "wumpus the dead is" — нет.
Такие имена категорий, как NP, VP и S, называются нетерминальными символами. В формальных грамматиках нетерминальные символы определяются с использованием правил подстановки. Авторы приняли в качестве системы обозначений для правил подстановки форму Бэкуса-Наура (Backus-Naur Form — BNF), которая описана в приложении Б на с. 1297. В этой системе обозначений смысл приведенного ниже правила состоит в том, что конструкция S может состоять из любой конструкции NP, за которой следует любая конструкция VP:
ПОРОЖДАЮЩАЯ СПОСОБНОСТЬ
Грамматические формальные системы можно классифицировать по их порождающей способности — по тому множеству языков, которое они позволяют представить. Ноам Хомский [251] описал четыре класса грамматических формальных систем, которые различаются только по форме правил подстановки. Эти классы можно расположить в виде иерархии, в которой каждый класс может использоваться для описания всех языков, которые могут быть описаны с помощью менее мощного класса, а также некоторых дополнительных языков. Ниже приведен список классов этой иерархии, в котором вначале приведен наиболее мощный класс.
• Рекурсивно перечислимые грамматики имеют неограниченные правила; по обе стороны правил подстановки может находиться любое количество терминальных и нетерминальных символов, как в правиле А В —> С. Эти грамматики по своей выразительной мощи эквивалентны машинам Тьюринга.
• Контекстно-зависимые грамматики ограничены лишь тем, что в правой части правил должно находиться по меньшей мере столько же символов, сколько и в левой части. Определение "контекстно-зависимый" связано с
S —> NP VP
тем фактом, что в правиле, подобном A S В —> А X В, указано, что вместо символа S может быть выполнена подстановка символа х в контексте предшествующего символа А и следующего символа В. Контекстно-зависимые грамматики способны представлять такие языки, как а11Ьпса (последовательность из п копий а, за которой следует такое же количество копий Ь, а затем с).
• В контекстно-свободных грамматиках (или сокращенно CFG — Context-Free Grammar) левая часть каждого правила состоит из одного нетерминального символа. Таким образом, каждое правило обеспечивает подстановку вместо нетерминального символа правой части правила в любом контексте. Грамматики CFG широко применяются для описания естественных языков и представления в виде программ грамматик формальных языков, хотя теперь широко признано, что некоторые естественные языки включают конструкции, которые не являются контекстно-свободными [1242]. Контекстно-свободные грамматики позволяют представить язык anbn, но не ас11.
• Регулярные грамматики представляют собой наиболее ограниченный класс. Каждое правило имеет один нетерминальный символ в левой части и терминальный символ, за которым может следовать или не следовать нетерминальный символ, в правой части. Регулярные грамматики эквивалентны по своей выразительной мощи конечным автоматам. Они плохо приспособлены для определения языков программирования, поскольку не позволяют представить такие конструкции, как сбалансированные открывающие и закрывающие скобки (один из вариантов языка апЬп). Самое большее, что они позволяют представить, — это язык а*Ь*, последовательность, состоящую из любого количества символов а, за которым следует любое количество символов Ь.
Составные этапы общения
Типичный эпизод общения, в котором отправитель сообщения S желает проинформировать получателя сообщения Я об истинности высказывания Р с использованием слов W, состоит из семи описанных ниже процессов.
• Намерение. В какой-то момент времени отправитель S решает, что есть некоторое высказывание Р, которое следует сообщить получателю Я. В качестве
Грамматики, расположенные выше в этой иерархии, имеют большую выразительную мощь, но алгоритмы для работы с ними являются менее эффективными. Вплоть до середины 1980-х годов усилия лингвистов были в основном сосредоточены на контекстно-свободных и контекстно-зависимых языках. Но в дальнейшем стали шире применяться регулярные грамматики, что было вызвано необходимостью очень быстро обрабатывать мегабайты и гигабайты текста в оперативном режиме, даже за счет менее полного анализа. Как сказал Фернандо Перейра: "Чем старше я становлюсь, тем ниже спускаюсь по иерархии Хомского". Чтобы узнать, что он имел в виду, сравните его книгу, которая вышла в 1980 году [1208], с книгой, выпущенной в 2002 году [1069].
примера предположим, что отправитель хочет дать знать получателю о том, что вампуса больше нет в живых.
• Выработка. Отправитель составляет план преобразования высказывания р во фрагмент речи, обеспечивающий высокую вероятность того, что получатель после восприятия этого фрагмента речи в текущей ситуации сможет восстановить логическим путем смысл высказывания р (или чего-то близкого к нему). Предположим, что отправитель способен составить предложение из слов "The wumpus is dead", и обозначим эти слова как W.
• .Синтез. Отправитель производит физическую реализацию w слов W. Это может выражаться в нанесении чернил на бумагу, создании колебаний воздуха или воздействии на какой-то другой носитель информации. На рис. 22.1 показано, что агент синтезирует строку звуков w , записанную в фонетическом алфавите, который определен на с. 1: " [thaxwahmpaxsihzdehd]". Слова сливаются друг с другом; это типично для быстро произносимой речи.
• .Восприятие. Получатель я воспринимает физическую реализацию W] как w21 и расшифровывает ее в виде слов w2. Если носитель информации предназначен для передачи звуковой речи, такой этап восприятия называется распознаванием речи, а если носитель информации обеспечивает создание двухмерных отображений знаков, такой этап называется оптическим распознаванием символов. Оба эти способа распознавания в 1990-х годах перешли из области действий, непостижимых по своей сложности, в сферу повседневного использования, в основном благодаря повышению вычислительной мощи настольных компьютеров.
• Анализ. Получатель я приходит к логическому выводу, что слова W2 имеют возможные толкования Plf..., Рп. Авторы подразделяют анализ на три основные части: синтаксическая интерпретация (или синтаксический анализ), семантическая интерпретация и прагматическая интерпретация. Синтаксический анализ — это процесс построения дерева синтаксического анализа для входной строки (см. рис. 22.1). Внутренние узлы дерева синтаксического анализа представляют словосочетания, а листовые узлы — слова. Семантическая интерпретация — это процесс извлечения смысла фрагмента речи как выражения в некотором языке представления. На рис. 22.1 показаны две возможные семантические интерпретации: то, что вампуса нет в живых, и то, что он полностью обессилел (в английском языке слово "dead" может иметь в разговорной речи и этот смысл). Фрагменты речи с несколькими возможными интерпретациями называются неоднозначными. В прагматической интерпретации учитывается тот факт, что одни и те же слова могут иметь разный смысл в разных ситуациях. Синтаксическая интерпретация может рассматриваться как функция от одного параметра (строки), а прагматическая интерпретация — как функция от фрагмента речи и контекста, или ситуации, в которой эта строка была сформирована. В этом примере прагматическая интерпретация сводится к выполнению двух действий: замене константы Now константой S3, которая обозначает текущую ситуацию, и замене константы Wumpus константой Wumpus1, которая обозначает того единственного вампуса, который, как известно, находится в этой пещере. Вообще говоря, прагматическая интерпретация способна внести гораздо больший вклад в окончательное толкование фрагмента речи; представьте себе, как изменяется смысл фразы "I'm looking at the diamond", когда ее произносит ювелир ("Я разглядываю бриллиант") или игрок в бейсбол ("Я смотрю на площадку для игры в бейсбол"). В разделе 22.7 будет показано, что прагматическая интерпретация позволяет толковать словосочетание "It is dead" как означающее, что вампус мертв, если мы находимся в той ситуации, в которой существование вампуса для нас многое значит.
• Устранение неоднозначности. Получатель я приходит к выводу, что отправитель S намеревался донести до него смысл высказывания Pi (где в идеале Pi=P). Большинство отправителей сообщений не намерены придавать неоднозначный смысл своим речам, но большинство фрагментов речи имеет несколько допустимых интерпретаций. Тем не менее общение возможно благодаря тому, что получатель берет на себя труд по выяснению того, каковой именно является интерпретация, которую отправитель по всей вероятности хотел до него донести. Обратите внимание на то, что здесь впервые в этой главе авторы употребили слово вероятность, поскольку устранение неоднозначности — это основной процесс в общении, в котором интенсивно используется формирование рассуждений в условиях неопределенности. В результате анализа вырабатываются возможные интерпретации; если будет обнаружено больше одной интерпретации, то на этапе устранения неоднозначности должен быть сделан выбор той из них, которая является наилучшей.
• Усвоение. Получатель Я решает, что нужно поверить (или не поверить) в истинность высказывания pL. Совершенно наивный агент может верить всему, что он слышит, но более развитый агент трактует речевой акт как свидетельство в пользу истинности высказывания Pi? а не как ее подтверждение.
Совмещение всех этих этапов позволяет создать программу агента, приведенную в листинге 22.1. В данном случае агент действует как ведомый робот, которым может командовать ведущий агент. При каждом акте общения ведомый отвечает на вопрос или выполняет команду, если ведущий выдал эту команду, а также принимает на веру все утверждения, высказанные ведущим. Кроме того, он комментирует (однократно) текущую ситуацию, если не имеет никаких срочных дел, которые должен был бы сделать, а также планирует свои собственные действия, если его оставляют в покое. Типичный диалог между ведущим и ведомым приведен в табл. 22.1.
Таблица 22.1. Типичный диалог между ведущим и ведомым
Ведомый робот Ведущий агент
I feel a breeze. (Я чувствую ветерок.) Go to [1,2]. (Отправляйся в квадрат [1,2].)
Nothing is here. (Здесь ничего нет.) Go north. (Иди на север.)
I feel a breeze and I smell a stench and I see a Grab the gold. (Хватай золото.) glitter. (Я чувствую ветерок, и я ощущаю неприятный запах, и я вижу блеск.)
Листинг 22.1. Общающийся агент, который принимает команды, вопросы и утверждения. Этот агент способен также описывать текущее состояние или выполнять "обычные" действия, не связанные с речевым актом, если в данных обстоятельствах не о чем говорить
function Naive-Cornmunicating-Agent(percept) returns действие action static: KB, база знаний
state, текущее состояние среды
action, последнее по времени действие, первоначально пустое
state <— Update-State(state, action, percept) words <— Speech-Part(percept)
semantics <— Disambiguate(Pragmatics(Semantics(Parse{words) )) ) if words - None и действием action не является Say
then /* Описать состояние */
return Say(Generate-Description(state)) else if Type[semantics] - Command then /* Подчиниться команде */
return Contents[semantics] else if Type[semantics] = Question then /* Ответить на вопрос */
answer <— Ask (.ЮЗ, semantics)
return Say(Generate-Description(answer)) else if Type[semantics] = Statement
then /* Принять на веру утверждение */
Tell(KB, Contents[semantics]) /* Если программа дошла до этой точки, выполнить
"обычное" действие */ return First(Planner(KB, state))