Difference between revisions of "Курсы машинного перевода для языков России/Раздел 3"
m (moved Машинный перевод для языков России/Раздел 3 to Курсы машинного перевода для языков России/Раздел 3: ... to get a better structure.) |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TOCD}} |
{{TOCD}} |
||
В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать |
В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать поиск ошибок при определении части речи и исправление ошибок через создание правил. |
||
==Теория== |
==Теория== |
||
Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит |
Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит вследствие того, что, исходя из формы слова можно сделать несколько видов морфологического анализа (также называется как ''омонимичность'' — samenameness). Например, чувашское слово ''чалка'' может быть, |
||
* |
* Существительным "чалка" единственного числа в именительном падеже. |
||
* |
* Прилагательным "чалка". |
||
* |
* Глаголом "чалка" в повелительном наклонении, 2 лицо, единственное число. |
||
Есть также переводная омонимия, например слово ''чалка'' как глагол может быть переведено на русский язык глаголами ''кричать'', ''стрекотать'', ''верещать'', ''галдеть'' и т.д., которая не относится к морфологической омонимии и поэтому в данном разделе не рассматривается. |
|||
===Морфологическая омонимия=== |
===Морфологическая омонимия=== |
||
Существует два основных вида морфологической омонимии. Морфологическая омонимия между частями речи (например, слово может быть как существительным, так и глаголом)и морфологическая омонимия внутри частей речи (например, слово может быть только именем существительным, но |
Существует два основных вида морфологической омонимии. Морфологическая омонимия между частями речи (например, слово может быть как существительным, так и глаголом)и морфологическая омонимия внутри частей речи (например, слово может быть только именем существительным, но одинаковым по форме как для именительного, так и для родительного падежей). Обычно, чем сложнее морфологическая структура языка, тем выше соотношение между омонимией внутри части речи и омонимией между частями речи. |
||
====Омонимия между частями речи==== |
====Омонимия между частями речи==== |
||
Пример омонимии между частями речи был приведен выше, слово ''чалка'' может быть существительным, глаголом или прилагательным. Нужно принимать во внимание, что омонимия часто встречается между прилагательными, обозначающими |
Пример омонимии между частями речи был приведен выше, слово ''чалка'' может быть существительным, глаголом или прилагательным. Нужно принимать во внимание, что омонимия часто встречается между прилагательными, обозначающими народность (например, по-русски ''русский'') или профессии (например, в русском языке ''военный'') и существительными, обозначающими языки или людей (''русский'') или профессии (''военный''). |
||
В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском ''-n, -t, -i''). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински ''tule-'' "приходить" |
В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском ''-n, -t, -i''). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински ''tule-'' "приходить" и ''tuli'' "пожар": ''tuli'' = "пожар" сущ., ед.ч или "s/он пришел", ''tulet'' = "пожары" или "ты приходишь"; ''tulen" = "пожара" или "я прихожу". |
||
Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени |
Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени (и поэтому прилагательного)) и глагола настоящего времени 3 лица множественного числа всегда совпадает: ''laulavat'' = они поют / поющие (кто-то), ''tulevat'' = они приходят / приходящие (кто-то), cf. ''Laulavat baritonit laulavat usein'' (поющие баритоны часто поют). |
||
В киргизском языке есть несколько примеров ''ак'' "белый" |
В киргизском языке есть несколько примеров ''ак'' "белый" и ''ак'' "течь/бежать (о жидкостях)", которые имеют омонимичную форму, как например ''акты'' "белый + сущ (винит.падеж)" и "акты" "оно текло". Другой пример из казахского языка ''жай'', со следующими значениями: в качестве прилагательного "медленный, простой, тихий, поздний"; в качестве наречия "медленно, просто, тихо"; в качестве существительного "молния", "причина, условие", "проживание", "лук (оружие)"; в качестве глагола "вывешивать для сушки / выкладывать, раскладывать / развешивать, расстилать", "гнать животных на пастбище". |
||
====Омонимия внутри части речи==== |
====Омонимия внутри части речи==== |
||
В качестве примеров омонимии внутри одной части речи давайте рассмотрим славянские языки, где часто встречается |
В качестве примеров омонимии внутри одной части речи давайте рассмотрим славянские языки, где часто встречается падежный синкретизм между именительным, винительным и родительным падежами. |
||
* ''Примером может быть конденсация '''воды'''.''{{slc|ru}} |
* ''Примером может быть конденсация '''воды'''.''{{slc|ru}} |
||
Line 35: | Line 35: | ||
* ''Primer je lahko kondenzacija '''vode'''.''{{slc|sl}} |
* ''Primer je lahko kondenzacija '''vode'''.''{{slc|sl}} |
||
Однако нельзя сказать что это присуще только славянским языками, тюркские и фино-угорские языки также имеют примеры ограниченной частью речи |
Однако нельзя сказать что это присуще только славянским языками, тюркские и фино-угорские языки также имеют примеры омонимии, ограниченной частью речи, например, чувашское слово ''итлĕр'' (омонимия между повелительным наклонением и будущем временем), и финское ''voivat'' ("они могут, они могли"; это омонимия между настоящим и прошедшим временем сохраняется для всех глаголов, состоящих из одного слога и заканчивающихся на -i, например ''voida'' "мог" ''soida'' "звонить", ''naida'' "fuck", etc.). |
||
В языке коми существует системная омонимия у глаголов первого и третьего лица единственного числа прошедшего времени. В нижеприведенном предложении форма ''кывлі''может быть первого и третьего лица. |
В языке коми существует системная омонимия у глаголов первого и третьего лица единственного числа прошедшего времени. В нижеприведенном предложении форма ''кывлі''может быть первого и третьего лица. |
||
Line 44: | Line 44: | ||
В казахском языке системная омонимия наблюдается между всеми глаголами в форме третьего лица единственного и множественного числа. Например, "барады" может означать "она/он/оно идет" или "они идут". |
В казахском языке системная омонимия наблюдается между всеми глаголами в форме третьего лица единственного и множественного числа. Например, "барады" может означать "она/он/оно идет" или "они идут". |
||
=== Синтаксическая |
=== Синтаксическая неоднозначность=== |
||
Еще одна форма омонимии - синтаксическая |
Еще одна форма омонимии - синтаксическая неоднозначность, при которой одно и тоже предложение или фраза могут пониматься по-разному, но иметь одинаковую морфологическую структуру. Примером может служить фраза с предлогом (предложный оборот), в которой морфологические средства не позволяют показать, к какому компоненту относится фраза с предлогом. Посмотрите на следующие примеры |
||
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной) |
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной) |
||
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны) |
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны) |
||
Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит |
Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит неоднозначность, а не в языке перевода. Если омонимия сохранена, это вызывает меньше трудностей. |
||
Например, для вышеприведенных примеров неоднозначность сохраняется для большинства западно-европейских языков (например, индо-европейских), но для XXX два различных толкования требуют двух разных переводов: |
|||
Например For example for the above sentence, the ambiguity is retained in the majority of western-European languages (e.g. Indo-European), but for XXX the two different readings require different translations: |
|||
* xxx |
* xxx |
||
* yyy |
* yyy |
||
===Разрешение неоднозначности при помощи правил=== |
|||
===Основанное на правилах снятие омонимии Rule-based disambiguation=== |
|||
Существует много способов |
Существует много способов написания правил для разрешения неоднозначности, самое важное - это суметь объяснить правила в рамках того контекста, который создает омонимию. Например, так как отдельные слова очень часто могут быть омонимами, такая омонимия снимается контекстом. Возьмем фразу на русском языке '' « нашим старым преподавателям »'', так как оба слова ''нашим'' и ''старым'' имеют достаточно омонимов (по три варианта на каждое слово), главное слово фразы ''преподавателям'', у которого только один вариант после анализа, помогает снять омонимию с двух других слов. |
||
* наш{{tag|det}}{{tag|pos}}{{tag|m}}{{tag|sg}}{{tag|ins}} старый{{tag|adj}}{{tag|m}}{{tag|sg}}{{tag|ins}} преподаватель{{tag|n}}{{tag|m}}{{tag|aa}}{{tag|pl}}{{tag|dat}} |
* наш{{tag|det}}{{tag|pos}}{{tag|m}}{{tag|sg}}{{tag|ins}} старый{{tag|adj}}{{tag|m}}{{tag|sg}}{{tag|ins}} преподаватель{{tag|n}}{{tag|m}}{{tag|aa}}{{tag|pl}}{{tag|dat}} |
||
Line 69: | Line 70: | ||
* ... |
* ... |
||
Таким образом мы |
Таким образом мы приходим к выводу, что необходимо написать правило, которое исключало бы варианты анализа, которые не согласовываются с главным словом. |
||
====Грамматика ограничений==== |
====Грамматика ограничений==== |
||
Один из способов написания правил - это использование |
Один из способов написания правил - это использование формальной системы, которая называются грамматикой ограничений (constraint grammar). Правила грамматики ограничений состоят из двух частей: действия по шаблону (образцу), и по контексту. Примеры по первой части: |
||
* {{sc|select}}: |
* {{sc|select}}: Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующего шаблону. |
||
* {{sc|remove}}: Учитывая контекст, удалите вариант (ы), |
* {{sc|remove}}: Учитывая контекст, удалите вариант (ы), соответствующий шаблону. |
||
Контекстом может служить любая комбинация слов или |
Контекстом может служить любая комбинация слов или тэгов в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил снятия неоднозначности. Мы будем пользоваться фразами на русском языке: |
||
<center>« ''Услугами детских садов пользуются 135 тысяч работающих матерей.'' »</center> |
<center>« ''Услугами детских садов пользуются 135 тысяч работающих матерей.'' »</center> |
||
Line 88: | Line 89: | ||
* <code>SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);</code> |
* <code>SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);</code> |
||
** <code>SELECT Gen</code>: Select genitive, <code>IF</code> |
** <code>SELECT Gen</code>: Select genitive, <code>IF</code> |
||
** <code>(0C A)</code>: |
** <code>(0C A)</code>: Слово ''только'' имеет трактовки прилагательного has adjective readings. |
||
** <code>(*1C GEN BARRIER NPNHA)</code>: После |
** <code>(*1C GEN BARRIER NPNHA)</code>: После данного слова идет слово, которое может быть только в родительном падеже. Продолжаем искать слова после данного слова, пока не найдем слово, которое может быть любым словом, которое не может изменять существительное и не является наречием. |
||
;Омонимия #2 |
;Омонимия #2 |
||
Слово ''работающих'' имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и |
Слово ''работающих'' имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественном числе винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа. |
||
* <code>SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code> |
* <code>SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code> |
||
** <code>SELECT Gen</code>: |
** <code>SELECT Gen</code>: Выберите родительный падеж, <code>IF</code> |
||
*** <code>(0C ACC-GEN-PRP)</code>: |
*** <code>(0C ACC-GEN-PRP)</code>: Данное словом может стоять только в винительном, родительном или местном падежах |
||
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит |
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит тэга родительного падежа. |
||
hat does not contain the genitive tag. |
|||
;Омонимия #3 |
;Омонимия #3 |
||
Line 106: | Line 106: | ||
* <code>REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code> |
* <code>REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code> |
||
** <code>REMOVE Acc</code>: |
** <code>REMOVE Acc</code>: Уберите винительный падеж, <code>IF</code> |
||
*** <code>(0C ACC-OR-GEN)</code>: |
*** <code>(0C ACC-OR-GEN)</code>: Данное слово может стоять только в винительном или родительном падежах |
||
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,''''тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже |
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,''''тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже (<code>BARRIER NOTGEN</code>) |
||
==Практическое задание== |
==Практическое задание== |
||
В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько |
В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько ошибок определения части речи, и, наконец, предложим несколько правил снятия омонимии для решения проблемы выбора части речи. |
||
===Работа с морфологическим анализатором=== |
===Работа с морфологическим анализатором=== |
||
Давайте попытаемся провести морфологический анализ |
Давайте попытаемся провести морфологический анализ фразы, которая выглядит довольно просто: |
||
<pre> |
<pre> |
||
Line 129: | Line 129: | ||
</pre> |
</pre> |
||
Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную |
Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную неоднозначность. |
||
===Поиск ошибок=== |
===Поиск ошибок=== |
||
Apertium предлагает статистический маркировщик |
Apertium предлагает статистический маркировщик, который работает следующим образом: |
||
<pre> |
<pre> |
||
Line 144: | Line 144: | ||
</pre> |
</pre> |
||
В маркировщике довольно легко найти ошибки, их две: |
|||
It is fairly easy to find the errors in the tagging, there are two: |
|||
* "Уран" должно стоять в именительном падеже, а не винительном. |
|||
* После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным. |
|||
С остальных слов омонимия была снята правильно. |
|||
* "Уран" should be nominative, not accusative. |
|||
* After the preposition "по", the case of "удалённость" should be dative, not genitive. |
|||
===Разработка правил=== |
|||
The rest of the words have been disambiguated correctly. |
|||
При разработке правил, важно принимать во внимание следующее: |
|||
===Conceiving rules=== |
|||
* Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом? |
|||
When thinking about rules, it is important to take into account the following: |
|||
* Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи? |
|||
* Подумать о типе неоднозначности для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных? |
|||
* Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило. |
|||
К вышеприведенным примерам, мы можем разработать следующие правила: |
|||
* The scope of application of the rule. Should it work just on the current word, the current word and one or two words context either side, at the level of the clause, or on the whole sentence ? |
|||
* Should the rule only apply to one lemma, or should it apply to any word that has the same part of speech ? |
|||
* The kind of ambiguity we want the rule to work on, for example, should it work on any ambiguity between nominative and accusative, or only ambiguities in case involving nouns ? |
|||
* There are often several rules which could equally well disambiguate a sentence, it is important not to get caught up in finding the "perfect" one. |
|||
* Если слово может стоять либо в именительном либо в винительном падежах, а после него следуют дефис(—) и прилагательное, которое может быть только в именительном падеже, тогда выбираем вариант именительного падежа. |
|||
In the above example, we could consider the following rules: |
|||
* После предлога "по" невозможен вариант родительного падежа. |
|||
Создайте несколько правил, которые снимают проблему языковой омонимии для выбранной вами пары языков. |
|||
* If a word can only be nominative or accusative and the following word is the hyphen (—) with an adjective that can only be in nominative following, then select the nominative reading. |
|||
* After the preposition "по" remove any genitive readings. |
|||
===Грамматика ограничений=== |
|||
For your chosen language pair, describe some rules that solve specific disambiguation problems you have found. |
|||
Если вы завершили этап создания (описания) правил, вы можете попробовать преобразовать их в коды в грамматике ограничений, как показано в примере на русском языке. Ниже приведен план создания файла грамматики ограничений для кодирования двух правил из предыдущих примеров и инструкция как с этим работать. |
|||
===Constraint grammar=== |
|||
If you have finished with describing the rules, you can try coding them in constraint grammar, as in the Russian example above. Below is a skeleton constraint grammar file to encode the two rules from the previous example, and instructions on how to run it. |
|||
<pre> |
<pre> |
||
Line 175: | Line 176: | ||
SOFT-DELIMITERS = "<,>" ; |
SOFT-DELIMITERS = "<,>" ; |
||
LIST BOS = (>>>) ; # |
LIST BOS = (>>>) ; # Начало предложения |
||
LIST EOS = (<<<) ; # |
LIST EOS = (<<<) ; # Конец предложения |
||
LIST Hyphen = guio ; |
LIST Hyphen = guio ; |
||
Line 187: | Line 188: | ||
SET Acc-Or-Nom = Acc | Nom ; |
SET Acc-Or-Nom = Acc | Nom ; |
||
Раздел |
|||
SECTION |
|||
# |
# Правило 1 |
||
REMOVE Acc IF # |
REMOVE Acc IF # Удалите вариант винительного падежа если, |
||
(0C Acc-Or-Nom) # |
(0C Acc-Or-Nom) # данное слово или только в винительном или именительном падежах |
||
(1C Hyphen LINK 1 Nom); # |
(1C Hyphen LINK 1 Nom); # есть дефис сразу справа, после которого именительный падеж |
||
# |
# Правило 2 |
||
REMOVE Gen IF # |
REMOVE Gen IF # Удалите родительный падеж если, |
||
(-1C Not-Gen-Prep); # |
(-1C Not-Gen-Prep); # до него идет предлог, который не управляет родительным падежом |
||
</pre> |
</pre> |
||
Скопируйте данный файл в текстовый редактор и сохраните как <code>rules.rlx</code>. Сначала нам нужно скомпилировать правила: |
|||
Copy this file into a text editor, and save it as <code>rules.rlx</code>. First we need to compile the rules: |
|||
<pre> |
<pre> |
||
$ cg-comp rules.rlx rules.bin |
$ cg-comp rules.rlx rules.bin |
||
Секции: 1, Правила: 2, Наборы: 17, Тэги: 18 |
|||
</pre> |
</pre> |
||
Теперь запустите их: |
|||
And now run them: |
|||
<pre> |
<pre> |
||
Line 221: | Line 222: | ||
</pre> |
</pre> |
||
И вместе с <code>apertium-tagger</code>: |
|||
<pre> |
<pre> |
||
Line 230: | Line 231: | ||
</pre> |
</pre> |
||
Мы видим, что, хотя мы удалили неправильный вариант родительного падежа, у нас появился неправильный вариант множественного числа именительного падежа. Так как предлог "по" не может управлять именительным падежом, мы может это тоже удалить, используя похожее правило ко второму варианту. |
|||
We can see that although we've removed the incorrect genitive, now we get an incorrect plural nominative reading. As "по" never governs the nominative, we can remove that too, using a similar rule to the second one. |
|||
==Для дальнейшего чтения== |
|||
==Further reading== |
|||
* van Halteren, H. (1999) ''Syntactic wordclass tagging'' (Dordrecht: Kluwer) |
* van Halteren, H. (1999) ''Syntactic wordclass tagging'' (Dordrecht: Kluwer) |
Latest revision as of 12:00, 31 January 2012
В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать поиск ошибок при определении части речи и исправление ошибок через создание правил.
Теория[edit]
Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит вследствие того, что, исходя из формы слова можно сделать несколько видов морфологического анализа (также называется как омонимичность — samenameness). Например, чувашское слово чалка может быть,
- Существительным "чалка" единственного числа в именительном падеже.
- Прилагательным "чалка".
- Глаголом "чалка" в повелительном наклонении, 2 лицо, единственное число.
Есть также переводная омонимия, например слово чалка как глагол может быть переведено на русский язык глаголами кричать, стрекотать, верещать, галдеть и т.д., которая не относится к морфологической омонимии и поэтому в данном разделе не рассматривается.
Морфологическая омонимия[edit]
Существует два основных вида морфологической омонимии. Морфологическая омонимия между частями речи (например, слово может быть как существительным, так и глаголом)и морфологическая омонимия внутри частей речи (например, слово может быть только именем существительным, но одинаковым по форме как для именительного, так и для родительного падежей). Обычно, чем сложнее морфологическая структура языка, тем выше соотношение между омонимией внутри части речи и омонимией между частями речи.
Омонимия между частями речи[edit]
Пример омонимии между частями речи был приведен выше, слово чалка может быть существительным, глаголом или прилагательным. Нужно принимать во внимание, что омонимия часто встречается между прилагательными, обозначающими народность (например, по-русски русский) или профессии (например, в русском языке военный) и существительными, обозначающими языки или людей (русский) или профессии (военный).
В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском -n, -t, -i). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински tule- "приходить" и tuli "пожар": tuli = "пожар" сущ., ед.ч или "s/он пришел", tulet = "пожары" или "ты приходишь"; tulen" = "пожара" или "я прихожу".
Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени (и поэтому прилагательного)) и глагола настоящего времени 3 лица множественного числа всегда совпадает: laulavat = они поют / поющие (кто-то), tulevat = они приходят / приходящие (кто-то), cf. Laulavat baritonit laulavat usein (поющие баритоны часто поют).
В киргизском языке есть несколько примеров ак "белый" и ак "течь/бежать (о жидкостях)", которые имеют омонимичную форму, как например акты "белый + сущ (винит.падеж)" и "акты" "оно текло". Другой пример из казахского языка жай, со следующими значениями: в качестве прилагательного "медленный, простой, тихий, поздний"; в качестве наречия "медленно, просто, тихо"; в качестве существительного "молния", "причина, условие", "проживание", "лук (оружие)"; в качестве глагола "вывешивать для сушки / выкладывать, раскладывать / развешивать, расстилать", "гнать животных на пастбище".
Омонимия внутри части речи[edit]
В качестве примеров омонимии внутри одной части речи давайте рассмотрим славянские языки, где часто встречается падежный синкретизм между именительным, винительным и родительным падежами.
- Примером может быть конденсация воды.(
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
) - Я слышала, что ты работаешь в магазине.
В казахском языке системная омонимия наблюдается между всеми глаголами в форме третьего лица единственного и множественного числа. Например, "барады" может означать "она/он/оно идет" или "они идут".
Синтаксическая неоднозначность[edit]
Еще одна форма омонимии - синтаксическая неоднозначность, при которой одно и тоже предложение или фраза могут пониматься по-разному, но иметь одинаковую морфологическую структуру. Примером может служить фраза с предлогом (предложный оборот), в которой морфологические средства не позволяют показать, к какому компоненту относится фраза с предлогом. Посмотрите на следующие примеры
- Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной)
- Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны)
Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит неоднозначность, а не в языке перевода. Если омонимия сохранена, это вызывает меньше трудностей.
Например, для вышеприведенных примеров неоднозначность сохраняется для большинства западно-европейских языков (например, индо-европейских), но для XXX два различных толкования требуют двух разных переводов:
- xxx
- yyy
Разрешение неоднозначности при помощи правил[edit]
Существует много способов написания правил для разрешения неоднозначности, самое важное - это суметь объяснить правила в рамках того контекста, который создает омонимию. Например, так как отдельные слова очень часто могут быть омонимами, такая омонимия снимается контекстом. Возьмем фразу на русском языке « нашим старым преподавателям », так как оба слова нашим и старым имеют достаточно омонимов (по три варианта на каждое слово), главное слово фразы преподавателям, у которого только один вариант после анализа, помогает снять омонимию с двух других слов.
- наш
<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>
- ...
Таким образом мы приходим к выводу, что необходимо написать правило, которое исключало бы варианты анализа, которые не согласовываются с главным словом.
Грамматика ограничений[edit]
Один из способов написания правил - это использование формальной системы, которая называются грамматикой ограничений (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
)
Практическое задание[edit]
В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько ошибок определения части речи, и, наконец, предложим несколько правил снятия омонимии для решения проблемы выбора части речи.
Работа с морфологическим анализатором[edit]
Давайте попытаемся провести морфологический анализ фразы, которая выглядит довольно просто:
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>$
Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную неоднозначность.
Поиск ошибок[edit]
Apertium предлагает статистический маркировщик, который работает следующим образом:
$ 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>$
В маркировщике довольно легко найти ошибки, их две:
- "Уран" должно стоять в именительном падеже, а не винительном.
- После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным.
С остальных слов омонимия была снята правильно.
Разработка правил[edit]
При разработке правил, важно принимать во внимание следующее:
- Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом?
- Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи?
- Подумать о типе неоднозначности для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных?
- Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило.
К вышеприведенным примерам, мы можем разработать следующие правила:
- Если слово может стоять либо в именительном либо в винительном падежах, а после него следуют дефис(—) и прилагательное, которое может быть только в именительном падеже, тогда выбираем вариант именительного падежа.
- После предлога "по" невозможен вариант родительного падежа.
Создайте несколько правил, которые снимают проблему языковой омонимии для выбранной вами пары языков.
Грамматика ограничений[edit]
Если вы завершили этап создания (описания) правил, вы можете попробовать преобразовать их в коды в грамматике ограничений, как показано в примере на русском языке. Ниже приведен план создания файла грамматики ограничений для кодирования двух правил из предыдущих примеров и инструкция как с этим работать.
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>$
Мы видим, что, хотя мы удалили неправильный вариант родительного падежа, у нас появился неправильный вариант множественного числа именительного падежа. Так как предлог "по" не может управлять именительным падежом, мы может это тоже удалить, используя похожее правило ко второму варианту.
Для дальнейшего чтения[edit]
- van Halteren, H. (1999) Syntactic wordclass tagging (Dordrecht: Kluwer)