Александр Пиперски
«Квант» №1, 2018
Начало. Окончание — в следующем номере.
24 декабря 2017 года в возрасте 82 лет ушел из жизни великий российский лингвист, академик РАН Андрей Анатольевич Зализняк (1935–2017). На его счету — множество выдающихся открытий. Он изучал древненовгородские берестяные грамоты и описал грамматику древненовгородского диалекта; он убедительно доказал, что «Слово о полку Игореве» действительно было написано около 1200 года, а не является подделкой XVIII века, как многие считали раньше; он создал словарь русского словоизменения, который и по сей день лежит в основе компьютерных программ, работающих с русским языком; он развил и доработал определение падежа, данное А. Н. Колмогоровым, — и многое другое. Строгость и доказательность работ Андрея Анатольевича была и остается идеалом для всех его учеников — а таковыми считают себя почти все лингвисты Москвы и не только.
Отличительная черта научной деятельности Зализняка — интерес к математике и точным методам в языкознании. В 1950-е годы он учился на французском отделении филологического факультета Московского университета — казалось бы, что может быть более гуманитарным и далеким от точных наук? Однако он стал ходить к В. А. Успенскому на занятия по математике для филологов и оказался в числе лучших студентов. «Он меня абсолютно потряс. Он задавал какие-то вопросы, чрезвычайно глубокие, но совершенно перпендикулярные к вопросам всех остальных и к тому, чего я мог ожидать. Какой-то такой был поворот в его вопросах, словно он с другой стороны на все смотрел. Сразу стало ясно, что это гений», — вспоминает Успенский1. Вскоре Зализняк стал одним из руководителей семинара по математической лингвистике на механико-математическом факультете МГУ. О некоторых достижениях Зализняка, связанных с формализацией лингвистического знания, мне бы и хотелось рассказать поподробнее.
В 1957–1958 годах Зализняк был на стажировке в Париже. Там он преподавал французским студентам русский язык и обнаружил, что существующих описаний русского склонения и спряжения для иностранцев недостаточно: они слишком расплывчатые. Уже в 1961 году Зализняк издал «Краткий русско-французский учебный словарь», приложив к нему абсолютно формальный 150-страничный очерк русского словоизменения. В 1965 году из этого очерка выросла кандидатская диссертация; работа оказалась настолько новаторской, что ее сразу засчитали за докторскую. В 1967 году Зализняк издал книгу «Русское именное словоизменение», а в 1977 году — «Грамматический словарь русского языка».
В этом словаре при каждом слове стоят непривычные пометы: дуб м 1с, порог м 3a, фонарь м 2b. Ясно, что «м» обозначает мужской род, а зачем все остальное? Ведь мы со школьных лет и так знаем, что дуб, порог и фонарь — это II склонение.
Однако для полного описания русского языка такого знания недостаточно. Чтобы убедиться в этом, образуем родительный падеж единственного числа и именительный падеж множественного числа:
нет дуба — есть дубы,
нет порога — есть пороги,
нет фонаря — есть фонари.
Видно, что в окончаниях этих слов появляются разные буквы (в одном — а и ы, в другом — а и и, в третьем — я и и), да и с ударением все непросто: у слова дуб оно падает то на окончание, то на основу, у слова порог оно в обеих формах на основе, а у слова фонарь — на окончании. Именно эту информацию и несут в себе пометы.
Цифры обозначают, на что оканчивается основа и как будут выглядеть окончания:
1 — основа на твердый согласный (кроме заднеязычных к, г и х, шипящих ш и ж и свистящего ц);
2 — основа на мягкий согласный (кроме ч и й);
3 — основа на к, г и х
и т.д.
Таких типов у существительных насчитывается девять: 0 — несклоняемые слова (например, кенгуру), 1–7 — варианты традиционных I и II склонений (например, акула, поезд, ведро) и 8 — традиционное III склонение (например, крепость).
Буква обозначает схему ударения:
a — всегда на основе;
b — всегда на окончании;
c — подвижное ударение: в единственном числе на основе, а во множественном — на окончании
и т.д.
Всего у существительных насчитывается восемь схем, включающих в себя по крайней мере 10 слов. Больше 90% существительных в «Грамматическом словаре» Зализняка относятся к схеме a — но это не значит, что остальными схемами можно пренебречь. Дело в том, что редкие схемы включают в себя очень частотные слова: например, многие названия частей тела. Посклоняйте слово рука и посмотрите, когда ударение будет на основе, а когда на окончании: распределение там очень прихотливое. И вот если считать не по словарю, а по текстам, то на все схемы, кроме a, придется более четверти всех существительных (табл. 1).
Таблица 1
Кстати, в этой таблице пары слов в каждой ячейке упорядочены так же, как и в самом «Грамматическом словаре», — в инверсионном (обратном) порядке, т.е. по алфавиту при чтении справа налево, а не слева направо. Если объединить эти 16 слов в один список и упорядочить его таким образом, получим: изба, губа, рука, спина, гора, карта, душа, дуб, порог, море, вино, ухо, червь, фонарь, доля, ступня (как и при обычной алфавитной сортировке, если последние буквы одинаковы, смотрим на предпоследние и т.д.).
Зализняк не зря выбрал такой порядок. Благодаря этому в словаре оказываются рядом слова с одинаковой правой частью, т.е. те, которые изменяются похоже: глаголы на -нуть, существительные на -а и т.п. В нашем примере видно: подряд расположились 7 слов традиционного I склонения, потом 7 слов II склонения и потом еще 2 слова I склонения. Сейчас цель такой сортировки кажется надуманной: можно же взять оцифрованную версию словаря и за доли секунды выбрать все слова на -нуть, — но в 1977 году такой возможности не было. Однако с распространением компьютеров обнаружилось новое применение «Грамматического словаря»: именно на нем основаны программы, которые работают с русской морфологией. Без словаря гораздо хуже функционировали бы современные поисковые системы и голосовые помощники. Например, введя в поиск Пушкин стихи, вы получаете страницы, на которых написано в стихах Пушкина. Это не просто слова, которые отличаются на 1–2 буквы (иначе находились бы и страницы со словами пушки и стихия, а такого не происходит), а именно формы слов, построенные по моделям Зализняка. А голосовой помощник без словаря не построил бы родительный падеж от слова фонарь, а если бы он просто озвучивал текст, то не узнал бы, что надо читать фонаря, а не фонаря.
Легко понять, как на основе словаря Зализняка работает морфологический синтез. Если мы строим формы от слова фонарь, надо взять его помету (2b), выбрать из окончаний типа 2 то, которое выражает нужную комбинацию падежа и числа: например -я для род. ед., — и узнать во вводной части словаря, что основа слов типа 2 получается отбрасыванием конечного ь. В результате выходит: фонар- + -я = фонаря. Чуть сложнее со словами, у которых несколько основ: так, слово огурец имеет помету 5*b, где * обозначает наличие беглой гласной (т.е. основ будет две: огурец- и огурц-). Опять-таки из вводной части словаря узнаем, что окончание род. ед. в типе 5 имеет вид -а; если есть знак *, то берется основа без гласной в случае, если окончание не входит в множество {-ε (пустая строка); -й; -ь; -ью}. Получаем огурц- + -а = огурца.
Противоположная задача — опираясь на «Грамматический словарь», понять по строке символов, является ли она формой какого-либо русского слова, и если да, то какие это могут быть формы и от каких слов — с вычислительной точки зрения решается сложнее. Требуется не только хранить все возможные наборы окончаний и помету для каждого слова, но и заранее построить все возможные основы и записать, в какой форме какая из основ используется. Дальше можно предложить такой алгоритм: разбиваем слово на две части всеми возможными способами и смотрим, является ли первая часть основой каких-либо слов. Если да, проверяем, бывает ли вторая часть окончанием у этих слов при такой основе, и если да, то выписываем те слова и формы, в которых это возможно. Проанализируем в качестве примера слово паром, для которого получается три разбора (табл. 2).
Таблица 2
Аркадий Волож, руководитель «Яндекса», вспоминает, что в начале 1990-х его другу и коллеге Илье Сегаловичу на основе словаря Зализняка удалось создать морфологический анализатор, который работал настолько эффективно, что умещался в оперативную память тогдашнего персонального компьютера — 640 килобайт.
Можно, конечно, сказать: зачем все эти сложные обозначения, схемы ударения, чередования основ и т.д.? Давайте просто для каждого слова выпишем все формы с ударением, и готово. Но это очень неэкономно: на каждое существительное придется по 12 форм, а на некоторые глаголы — больше 100 (считая четыре причастия во всех родах, числах и падежах). А «Грамматический словарь» — не такая уж и толстая книга, хотя и имеет большой формат: в 4-м издании описание русского словоизменения занимает 118 страниц, а за ними следуют 586 страниц собственно словаря.
Стремясь описать язык оптимальным образом, Зализняк ставил и решал в том числе и математические задачи. К одной из них подводит пример, с которого мы начали. Напомним, что слово фонарь имеет схему ударения b, т.е. ударение всегда на окончании. Прежде чем читать дальше, подумайте: нет ли здесь некоторого противоречия, которое надо разрешить?
Зададимся странным вопросом: куда падает ударение в форме фонарь — на основу или на окончание? На этот вопрос есть три варианта ответа:
Обозначим ударение на основе через +, ударение на окончании через −, а «не знаем» через 0. Примем вариант 1 — самый, как кажется, естественный — и изобразим схему ударения во всех числах и падежах2 у нескольких русских существительных (табл. 3). Нулей в полученной таблице не будет, поскольку этот вариант не предполагает ответа «не знаем».
Таблица 3
Видно, что вариант 1 не очень экономный: нам приходится вводить разные схемы ударения для неодушевленного слова фонарь и одушевленного слова вратарь (у них различается вин. ед.: вижу фонарь, но вижу вратаря), не говоря уже про очень похожее слово сапог, для которого понадобится схема V из-за того, что у него род. мн. имеет нулевое окончание: нет сапог. Всего таких схем, как посчитал Зализняк, окажется 22.
Еще менее экономен вариант 2, который дает нам таблицу с нулями (табл. 4). Если использовать его, схем выйдет целых 39. Слова карта, тигр и порог получат не ту же схему, что юноша (строка II не изменится, а в строках III–V вместо плюсов будут нули).
Таблица 4
А самым экономным оказывается вариант 3 (табл. 5): если использовать его, выяснится, что юноша, карта, тигр и порог — это одна схема; ступня, фонарь, вратарь и сапог — еще одна схема (и да, как это ни странно, в слове порог ударение на основе, а в слове фонарь — на окончании). Всего для русского языка потребуется 11 таких схем. Выше были продемонстрированы только 8 из них, обозначенные как a, b, c, d, e, f, d′ и f′, поскольку остальные представлены совсем небольшим числом слов.
Таблица 5
Зализняк не просто получил это решение интуитивно, но и доказал строго математически, что оно оптимально, если мы хотим минимизировать число строк в таблице. Вот как выглядит задача, которую он перед собой поставил:
Имеется матрица из m строк и n столбцов, элементами которой являются знаки +, − и 0. Требуется заменить каждый из имеющихся в матрице нулей плюсом или минусом так, чтобы в полученной матрице без нулей (назовем ее результирующей для данной матрицы) число s различных строк было минимальным.
Читателей, заинтересовавшихся полным решением, отсылаем к книге А. А. Зализняка «Русское именное словоизменение» (М.: Наука, 1967; переиздание: М.: Языки славянской культуры, 2002) и заметим, что для решения этой задачи автор сформулировал и доказал три теоремы; это нечасто встречается в лингвистических работах — но, оказывается, встречается!
Начало. Окончание — в следующем номере.
1 Борьба за лингвистику. Беседа с математиком Владимиром Успенским. Часть 1 // Полит.ру, 9.07.2009.
2 За исключением винительного падежа множественного числа, поскольку он всегда совпадает либо с родительным, либо с именительным в зависимости от одушевленности (вин. вижу столы как им. стоят столы, вин. вижу кошек как род. глаза кошек).
В. А. Успенский (слева) и А. А. Зализняк на Летней школе «Современная математика» (Дубна, 2009 г.)