Курсы машинного перевода для языков России/Раздел 3
В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать discovering tagging errors и попытки решения ошибок при помощи правил.
Теория
Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит в следствие того, что, исходя из формы слова можно сделать несколько видов морфологического анализа (также называется как омонимичность — samenameness). Например, чувашское слово чалка может быть,
- Существительным "чалка" единственного числа в именительном падеже.
- Прилагательным "чалка".
- Глаголом "чалка" в повелительном наклонении, 2 лицо, единственное число.
Есть также переводная омонимия, например слово чалка как глагол может быть переведено на русский язык глаголами кричать, стрекотать, верещать, галдеть и т.д., которая не относится к морфологической омонимии и поэтому в данном разделе не рассматривается.
Морфологическая омонимия
Существует два основных вида морфологической омонимии. Морфологическая омонимия между частями речи (например, слово может быть как существительным, так и глаголом)и морфологическая омонимия внутри частей речи (например, слово может быть только именем существительным, но форма одинаковая как для именительного, так и для родительного падежей). Обычно, сложнее морфологическая структура языка, тем выше соотношение между омонимией внутри части речи и омонимией между частями речи.
Омонимия между частями речи
Пример омонимии между частями речи был приведен выше, слово чалка может быть существительным, глаголом или прилагательным. Нужно принимать во внимание, что омонимия часто встречается между прилагательными, обозначающими народность (например, по-русски русский) или профессии (например, в русском языке военный) и существительными, обозначающими языки или людей (русский) или профессии (военный).
В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском -n, -t, -i). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински tule- "приходить" и tuli "пожар": tuli = "пожар" сущ., ед.ч или "s/он пришел", tulet = "пожары" or "ты приходишь"; tulen" = "пожара" или "я прихожу".
Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени (и поэтому прилагательного)) и глагола настоящего времени 3 лица множественного числа всегда совпадает: laulavat = они поют / поющие (кто-то), tulevat = они приходят / приходящие (кто-то), cf. Laulavat baritonit laulavat usein (поющие баритоны часто поют).
В киргизском языке есть несколько примеров ак "белый" and ак "течь/бежать (о жидкостях)", которые имеют омонимичную форму, как например акты "белый + сущ (винит.падеж)" и "акты" "оно текло". Другой пример из казахского языка жай, со следующими значениями: в качестве прилагательного "медленный, простой, тихий, поздний"; в качестве наречия "медленно, просто, тихо"; в качестве существительного "молния", "причина, условие", "проживание", "лук (оружие)"; в качестве глагола "вывешивать для сушки / выкладывать, раскладывать / развешивать, расстилать", "гнать животных на пастбище".
Омонимия внутри части речи
В качестве примеров омонимии внутри одной части речи давайте рассмотрим славянские языки, где часто встречается падежный синкретизм между именительным, винительным и родительным падежами.
- Примером может быть конденсация воды.(
ru
) - Príkladom môže byť kondenzácia vody.(
sk
) - Przykładem może być kondensacja wody.(
pl
) - Primer je lahko kondenzacija vode.(
sl
)
Однако нельзя сказать что это присуще только славянским языками, тюркские и фино-угорские языки также имеют примеры омонимии, ограниченной частью речи, например, чувашское слово итлĕр (омонимия между повелительным наклонением и будущем временем), и финское voivat ("они могут, они могли"; это омонимия между настоящим и прошедшим временем сохраняется для всех глаголов, состоящих из одного слога и заканчивающихся на -i, например voida "мог" soida "звонить", naida "fuck", etc.).
В языке коми существует системная омонимия у глаголов первого и третьего лица единственного числа прошедшего времени. В нижеприведенном предложении форма кывліможет быть первого и третьего лица.
- Ме кывлі, тэ пӧ уджалан вузасянінын.(
kv
) - Я слышала, что ты работаешь в магазине.
В казахском языке системная омонимия наблюдается между всеми глаголами в форме третьего лица единственного и множественного числа. Например, "барады" может означать "она/он/оно идет" или "они идут".
Синтаксическая неоднозначность
Еще одна форма омонимии - синтаксическая неоднозначность, при которой одно и тоже предложение или фраза могут пониматься по-разному, но иметь одинаковую морфологическую структуру. Примером может служить фраза с предлогом (предложный оборот), в которой морфологические средства не позволяют показать, к какому компоненту относится фраза с предлогом. Посмотрите на следующие примеры
- Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной)
- Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны)
Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит неоднозначность, а не в языке перевода. Если омонимия сохранена, это вызывает меньше трудностей.
Например, для вышеприведенных примеров неоднозначность сохраняется для большинства западно-европейских языков (например, индо-европейских), но для XXX два различных толкования требуют двух разных переводов:
- xxx
- yyy
Разрешение неоднозначности при помощи правил
Существует много способов для написания правил для разрешения неоднозначности, самое важное - это суметь объяснить правила в рамках того контекста, который создает омонимию. Например, так как отдельные слова очень часто могут быть омонимами, такая омонимия снимается контекстом. Возьмем фразу на русском языке « нашим старым преподавателям », так как оба слова нашим и старым имеют достаточно омонимов (по три варианта на каждое слово), главное слово фразы преподавателям, у которого только один вариант после анализа, помогает снять омонимию с двух других слов.
- наш
<det>
<pos>
<m>
<sg>
<ins>
старый<adj>
<m>
<sg>
<ins>
преподаватель<n>
<m>
<aa>
<pl>
<dat>
- наш
<det>
<pos>
<nt>
<sg>
<ins>
старый<adj>
<m>
<sg>
<ins>
преподаватель<n>
<m>
<aa>
<pl>
<dat>
- наш
<det>
<pos>
<mfn>
<pl>
<dat>
старый<adj>
<m>
<sg>
<ins>
преподаватель<n>
<m>
<aa>
<pl>
<dat>
- наш
<det>
<pos>
<m>
<sg>
<ins>
старый<adj>
<mfn>
<pl>
<dat>
преподаватель<n>
<m>
<aa>
<pl>
<dat>
- наш
<det>
<pos>
<nt>
<sg>
<ins>
старый<adj>
<mfn>
<pl>
<dat>
преподаватель<n>
<m>
<aa>
<pl>
<dat>
- наш
<det>
<pos>
<mfn>
<pl>
<dat>
старый<adj>
<mfn>
<pl>
<dat>
преподаватель<n>
<m>
<aa>
<pl>
<dat>
- ...
Таким образом мы приходим к выводу, что необходимо написать правило, которое исключало бы варианты анализа, которые не согласовываются с главным словом.
Грамматика ограничений
Один из способов написания правил - это использование формальной системы, которая называются грамматикой ограничений (constraint grammar). Правила грамматики ограничений состоят из двух частей: действия по шаблону (образцу), и по контексту. Примеры по первой части:
- select: Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующего шаблону.
- remove: Учитывая контекст, удалите вариант (ы), соответствующий шаблону.
Контекстом может служить любая комбинация слов или тэгов в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил снятия неоднозначности. Мы будем пользоваться фразами на русском языке:
- Омонимия #1
Слово детских имеет омонимию между родительным, предложным и винительным падежами. Нам нужно выбрать родительный падеж.
SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);
SELECT Gen
: Select genitive,IF
(0C A)
: Слово только имеет трактовки прилагательного has adjective readings.(*1C GEN BARRIER NPNHA)
: После данного слова идет слово, которое может быть только в родительном падеже. Продолжаем искать слова после данного слова, пока не найдем слово, которое может быть любым словом, которое не может изменять существительное и не является наречием.
- Омонимия #2
Слово работающих имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественном числе винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа.
SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);
SELECT Gen
: Выберите родительный падеж,IF
(0C ACC-GEN-PRP)
: Данное словом может стоять только в винительном, родительном или местном падежах(*-1C Num LINK 1C Gen BARRIER NOTGEN)
: Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит тэга родительного падежа.
- Омонимия #3
Слово матери имеет омонимию в форме множественного числа родительного и винительного падежей. Нам нужно выбрать вариант родительного падежа (или лучше, убрать вариант винительного падежа).
REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);
REMOVE Acc
: Уберите винительный падеж,IF
(0C ACC-OR-GEN)
: Данное слово может стоять только в винительном или родительном падежах(*-1C Num LINK 1C Gen BARRIER NOTGEN)
: У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,'тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже (BARRIER NOTGEN
)
Практическое задание
В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько tagging errors и наконец предложим несколько правил снятия омонимии для решения проблемы tagging errors.
Работа с морфологическим анализатором
Давайте попытаемся провести морфологический анализ фразы, которая выглядит довольно просто:
echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin ^Уран/Уран<np><top><m><sg><acc>/Уран<np><top><m><sg><nom>$ ^—/—<guio>$ ^седьмая/седьмой<det><ord><f><sg><nom>$ ^по/по<pr>$ ^удалённости/удалённость<n><f><nn><sg><gen>/удалённость<n><f><nn><sg><dat>/удалённость<n><f><nn><sg><prp>/удалённость<n><f><nn><pl><acc>/удалённость<n><f><nn><pl><nom>$ ^от/от<pr>$ ^Солнца/Солнце<n><nt><nn><sg><gen>/Солнце<n><nt><nn><pl><acc>/Солнце<n><nt><nn><pl><nom>$ ^./.<sent>$
Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную неоднозначность.
Поиск ошибок
Apertium предлагает статистический маркировщик statistical tagger, который работает следующим образом:
$ echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin | apertium-tagger -p -g kv-ru.prob ^Уран/Уран<np><top><m><sg><acc>$ ^—/—<guio>$ ^седьмая/седьмой<det><ord><f><sg><nom>$ ^по/по<pr>$ ^удалённости/удалённость<n><f><nn><sg><gen>$ ^от/от<pr>$ ^Солнца/Солнце<n><nt><nn><sg><gen>$^./.<sent>$
В маркировщике довольно легко найти ошибки, их две:
- "Уран" должно стоять в именительном падеже, а не винительном.
- После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным.
С остальных слов омонимия была снята правильно.
Разработка правил
При разработке правил, важно принимать во внимание следующее:
- Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом?
- Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи?
- Подумать о типе неоднозначности для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных?
- Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило.
К вышеприведенным примерам, мы можем разработать следующие правила:
- Если слово может стоять либо в именительном либо в винительном падежах, а после него следуют дефис(—) и прилагательное, которое может быть только в именительном падеже, тогда выбираем вариант именительного падежа.
- После предлога "по" невозможен вариант родительного падежа.
Создайте несколько правил, которые снимают проблему языковой омонимии для выбранной вами пары языков.
Грамматика ограничений
Если вы завершили этап создания (описания) правил, вы можете попробовать преобразовать их в коды в грамматике ограничений, как показано в примере на русском языке. Ниже приведен план создания файла грамматики ограничений для кодирования двух правил из предыдущих примеров и инструкция как с этим работать.
DELIMITERS = "<.>" "<!>" "<?>" ; SOFT-DELIMITERS = "<,>" ; LIST BOS = (>>>) ; # Начало предложения LIST EOS = (<<<) ; # Конец предложения LIST Hyphen = guio ; LIST Nom = nom ; LIST Acc = acc ; LIST Gen = gen ; LIST Not-Gen-Prep = "по"; SET Acc-Or-Nom = Acc | Nom ; Раздел # Правило 1 REMOVE Acc IF # Удалите вариант винительного падежа если, (0C Acc-Or-Nom) # данное слово или только в винительном или именительном падежах (1C Hyphen LINK 1 Nom); # есть дефис сразу справа, после которого именительный падеж # Правило 2 REMOVE Gen IF # Удалите родительный падеж если, (-1C Not-Gen-Prep); # до него идет предлог, который не управляет родительным падежом
Скопируйте данный файл в текстовый редактор и сохраните как rules.rlx
. Сначала нам нужно скомпилировать правила:
$ cg-comp rules.rlx rules.bin Секции: 1, Правила: 2, Наборы: 17, Тэги: 18
Теперь запустите их:
$ echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin | cg-proc rules.bin ^Уран/Уран<np><top><m><sg><nom>$ ^—/—<guio>$ ^седьмая/седьмой<det><ord><f><sg><nom>$ ^по/по<pr>$ ^удалённости/удалённость<n><f><nn><pl><nom>/удалённость<n><f><nn><sg><dat>/удалённость<n><f><nn><sg><prp>/удалённость<n><f><nn><pl><acc>$ ^от/от<pr>$ ^Солнца/Солнце<n><nt><nn><sg><gen>/Солнце<n><nt><nn><pl><acc>/Солнце<n><nt><nn><pl><nom>$ ^./.<sent>$
И вместе с apertium-tagger
:
$ echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin | cg-proc rules.bin |\ apertium-tagger -g ru-kv.prob ^Уран<np><top><m><sg><nom>$ ^—<guio>$ ^седьмой<det><ord><f><sg><nom>$ ^по<pr>$ ^удалённость<n><f><nn><pl><nom>$ ^от<pr>$ ^Солнце<n><nt><nn><sg><gen>$^.<sent>$
Мы видим, что, хотя мы удалили неправильный вариант родительного падежа, у нас появился неправильны вариант множественного числа именительного падежа. Так как предлог "по" не может управлять именительным падежом, мы может это тоже удалить, используя похожее правило ко второму варианту.
Для дальнейшего чтения
- van Halteren, H. (1999) Syntactic wordclass tagging (Dordrecht: Kluwer)