Difference between revisions of "Курсы машинного перевода для языков России/Раздел 3"
m (moved Машинный перевод для языков России/Раздел 3 to Курсы машинного перевода для языков России/Раздел 3: ... to get a better structure.) |
|||
(14 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TOCD}} |
{{TOCD}} |
||
В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются |
В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать поиск ошибок при определении части речи и исправление ошибок через создание правил. |
||
==Теория== |
==Теория== |
||
Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит |
Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит вследствие того, что, исходя из формы слова можно сделать несколько видов морфологического анализа (также называется как ''омонимичность'' — samenameness). Например, чувашское слово ''чалка'' может быть, |
||
* |
* Существительным "чалка" единственного числа в именительном падеже. |
||
* |
* Прилагательным "чалка". |
||
* |
* Глаголом "чалка" в повелительном наклонении, 2 лицо, единственное число. |
||
Есть также переводная омонимия, например слово ''чалка'' как глагол может быть переведено на русский язык глаголами ''кричать'', ''стрекотать'', ''верещать'', ''галдеть'' и т.д., которая не относится к морфологической омонимии и поэтому в данном разделе не рассматривается. |
|||
===Морфологическая омонимия=== |
|||
===Morphological ambiguity=== |
|||
Существует два основных вида морфологической омонимии. Морфологическая омонимия между частями речи (например, слово может быть как существительным, так и глаголом)и морфологическая омонимия внутри частей речи (например, слово может быть только именем существительным, но одинаковым по форме как для именительного, так и для родительного падежей). Обычно, чем сложнее морфологическая структура языка, тем выше соотношение между омонимией внутри части речи и омонимией между частями речи. |
|||
There are two principle types of morphological ambiguity. The morphological ambiguity between parts of speech (for example a word that could be either noun or verb) and the morphological ambiguity within parts of speech (for example that a word form can only be a noun, but may be nominative or genitive). Typically the more complex morphology a language has, the higher the ratio of within part-of-speech ambiguity to between part-of-speech ambiguity. |
|||
====Омонимия между частями речи==== |
|||
====Between parts-of-speech==== |
|||
Пример омонимии между частями речи был приведен выше, слово ''чалка'' может быть существительным, глаголом или прилагательным. Нужно принимать во внимание, что омонимия часто встречается между прилагательными, обозначающими народность (например, по-русски ''русский'') или профессии (например, в русском языке ''военный'') и существительными, обозначающими языки или людей (''русский'') или профессии (''военный''). |
|||
An example of ambiguity between parts-of-speech is given above, the word ''чалка'' can be a noun, a verb or an adjective. Consider also the frequent ambiguity between adjectives denoting ethnic groups (e.g. in Russian ''русский'') or professions (e.g. in Russian ''военный'') and the nouns denoting the languages or people (''русский'') or professions (''военный''). |
|||
В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском ''-n, -t, -i''). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински ''tule-'' "приходить" и ''tuli'' "пожар": ''tuli'' = "пожар" сущ., ед.ч или "s/он пришел", ''tulet'' = "пожары" или "ты приходишь"; ''tulen" = "пожара" или "я прихожу". |
|||
Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени (и поэтому прилагательного)) и глагола настоящего времени 3 лица множественного числа всегда совпадает: ''laulavat'' = они поют / поющие (кто-то), ''tulevat'' = они приходят / приходящие (кто-то), cf. ''Laulavat baritonit laulavat usein'' (поющие баритоны часто поют). |
|||
Derivational processes may also overlap with inflection. Thus, in Finnish, the plural of present participle (hence adjective) and the 3rd person present plural are always identical: ''laulavat'' = they sing / the singing (ones), ''tulevat'' = they come / the coming (ones), cf. ''Laulavat baritonit laulavat usein'' (the singing baritons often sing). |
|||
В киргизском языке есть несколько примеров ''ак'' "белый" и ''ак'' "течь/бежать (о жидкостях)", которые имеют омонимичную форму, как например ''акты'' "белый + сущ (винит.падеж)" и "акты" "оно текло". Другой пример из казахского языка ''жай'', со следующими значениями: в качестве прилагательного "медленный, простой, тихий, поздний"; в качестве наречия "медленно, просто, тихо"; в качестве существительного "молния", "причина, условие", "проживание", "лук (оружие)"; в качестве глагола "вывешивать для сушки / выкладывать, раскладывать / развешивать, расстилать", "гнать животных на пастбище". |
|||
====Омонимия внутри части речи==== |
|||
====Within parts-of-speech==== |
|||
В качестве примеров омонимии внутри одной части речи давайте рассмотрим славянские языки, где часто встречается падежный синкретизм между именительным, винительным и родительным падежами. |
|||
For examples of ambiguity within parts-of-speech we can look at the Slavic languages, where there is a frequent syncretism between nominative, accusative and genitive. |
|||
* ''Примером может быть конденсация '''воды'''.''{{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.). |
|||
This is not however exclusive to Slavic languages, Turkic and Finno-Ugric languages also exhibit limited within part-of-speech ambiguity, consider the Chuvash ''итлĕр'' (ambiguous future and imperative), and Finnish ''voivat'' ("they can, they could"; this present/past ambiguity holds for all monosyllabic i-final verbs, like for example ''voida'' "could" ''soida'' "ring", ''naida'' "fuck", etc.). |
|||
В языке коми существует системная омонимия у глаголов первого и третьего лица единственного числа прошедшего времени. В нижеприведенном предложении форма ''кывлі''может быть первого и третьего лица. |
|||
In Komi, there is a systematic ambiguity between 1st and 3rd person singular in the past tense. In the sentence below, the form ''кывлі'' can be 1st or 3rd person. |
|||
:''Ме кывлі, тэ пӧ уджалан вузасянінын.''{{slc|kv}} |
:''Ме кывлі, тэ пӧ уджалан вузасянінын.''{{slc|kv}} |
||
:Я слышала, что ты работаешь в магазине. |
:Я слышала, что ты работаешь в магазине. |
||
В казахском языке системная омонимия наблюдается между всеми глаголами в форме третьего лица единственного и множественного числа. Например, "барады" может означать "она/он/оно идет" или "они идут". |
|||
In Kazakh, there is also a systematic ambiguity between singular and plural in all 3rd person verb forms. For example, "барады" could mean "s/he/it goes" or "they go". |
|||
=== Синтаксическая неоднозначность=== |
|||
===Syntactic ambiguity=== |
|||
Еще одна форма омонимии - синтаксическая неоднозначность, при которой одно и тоже предложение или фраза могут пониматься по-разному, но иметь одинаковую морфологическую структуру. Примером может служить фраза с предлогом (предложный оборот), в которой морфологические средства не позволяют показать, к какому компоненту относится фраза с предлогом. Посмотрите на следующие примеры |
|||
Another form of ambiguity is syntactic ambiguity, that is where a sentence or phrase has more than one possible interpretation that cannot be resolved morphologically. An example might be prepositional phrase attachment, where it is not necessarily clear from the morphology to which constituent the prepositional phrase attaches. Consider the following example |
|||
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. ( |
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной) |
||
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. ( |
* Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны) |
||
Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит неоднозначность, а не в языке перевода. Если омонимия сохранена, это вызывает меньше трудностей. |
|||
A problem arises for machine translation when a sentence or phrase is ambiguous in the source language, but not in the target language. If the ambiguity is preserved there is less problem. |
|||
Например, для вышеприведенных примеров неоднозначность сохраняется для большинства западно-европейских языков (например, индо-европейских), но для 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=== |
|||
There are many ways of writing disambiguation rules, but the most important thing is to be able to express the rule in terms of the context that provides disambiguation. For example, while individual words can be very ambiguous, often they are disambiguated by context. Take the Russian phrase '' « нашим старым преподавателям »'', while both ''нашим'' and ''старым'' are quite ambiguous (three analyses for both), the head of the phrase ''преподавателям'', which only has one analysis, disambiguates them. |
|||
Существует много способов написания правил для разрешения неоднозначности, самое важное - это суметь объяснить правила в рамках того контекста, который создает омонимию. Например, так как отдельные слова очень часто могут быть омонимами, такая омонимия снимается контекстом. Возьмем фразу на русском языке '' « нашим старым преподавателям »'', так как оба слова ''нашим'' и ''старым'' имеют достаточно омонимов (по три варианта на каждое слово), главное слово фразы ''преподавателям'', у которого только один вариант после анализа, помогает снять омонимию с двух других слов. |
|||
* наш{{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: | ||
* ... |
* ... |
||
Таким образом мы приходим к выводу, что необходимо написать правило, которое исключало бы варианты анализа, которые не согласовываются с главным словом. |
|||
We could thus conceive of writing a rule which removes the analyses that do not agree with the head of the phrase. |
|||
====Грамматика ограничений==== |
|||
====Constraint grammar==== |
|||
Один из способов написания правил - это использование формальной системы, которая называются грамматикой ограничений (constraint grammar). Правила грамматики ограничений состоят из двух частей: действия по шаблону (образцу), и по контексту. Примеры по первой части: |
|||
One way of writing rules is with a formalism called constraint grammar. Constraint grammar rules consist of two parts: an operation on a pattern, and a context. The following are examples of operations: |
|||
* {{sc|select}}: Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующего шаблону. |
|||
* {{sc|select}}: Given a context, remove all the readings apart from the one(s) matched by the pattern. |
|||
* {{sc|remove}}: Учитывая контекст, удалите вариант (ы), соответствующий шаблону. |
|||
* {{sc|remove}}: Given a context, remove the reading(s) that match the pattern. |
|||
Контекстом может служить любая комбинация слов или тэгов в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил снятия неоднозначности. Мы будем пользоваться фразами на русском языке: |
|||
A context can be any combination of words or tags in a given sentence. To get an idea of the kind of contexts that can be used, let's look at some real disambiguation rules. We're going to use the Russian phrase: |
|||
<center>« ''Услугами детских садов пользуются 135 тысяч работающих матерей.'' »</center> |
<center>« ''Услугами детских садов пользуются 135 тысяч работающих матерей.'' »</center> |
||
<!-- ''Z usług żłobków korzysta 135 tysięcy pracujących matek'' --> |
<!-- ''Z usług żłobków korzysta 135 tysięcy pracujących matek'' --> |
||
;Омонимия #1 |
|||
;Ambiguity #1 |
|||
Слово ''детских'' имеет омонимию между родительным, предложным и винительным падежами. Нам нужно выбрать родительный падеж. |
|||
The word ''детских'' is ambiguous between genitive, prepositional and accusative. We want to select the genitive reading. |
|||
* <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>: After the current word there is a word which is only in the genitive case. Keep searching the words after the current word until a word which is any word except a word which can modify a noun, or an adverb. |
|||
;Омонимия #2 |
|||
;Ambiguity #2 |
|||
Слово ''работающих'' имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественном числе винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа. |
|||
The word ''работающих'' is ambiguous between genitive plural, prepositional plural, accusative plural. We want to select the genitive plural reading. |
|||
* <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>: Before the current word there is a word which can only be a numeral followed by a word which can only be genitive, keep searching towards the beginning of the sentence until there is a word that does not contain the genitive tag. |
|||
;Омонимия #3 |
|||
;Ambiguity #3 |
|||
Слово ''матери'' имеет омонимию в форме множественного числа родительного и винительного падежей. Нам нужно выбрать вариант родительного падежа (или лучше, убрать вариант винительного падежа). |
|||
The word ''матери'' is ambiguous between genitive plural and accusative plural. We want to select the genitive plural reading (or better, remove the accusative). |
|||
* <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>) |
||
==Практическое задание== |
|||
==Practice== |
|||
В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько ошибок определения части речи, и, наконец, предложим несколько правил снятия омонимии для решения проблемы выбора части речи. |
|||
In this practice session, we are going to run the tagger, discover some tagging errors and finally propose some disambiguation rules for solving these tagging errors. |
|||
===Работа с морфологическим анализатором=== |
|||
===Running the morphological analyser=== |
|||
Давайте попытаемся провести морфологический анализ фразы, которая выглядит довольно просто: |
|||
Let's try running the morphological analyser on what seems like a fairly simple phrase: |
|||
<pre> |
<pre> |
||
Line 128: | Line 129: | ||
</pre> |
</pre> |
||
Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную неоднозначность. |
|||
What seemed like a fairly simple phrase is not, there are multiple ambiguities. |
|||
=== |
===Поиск ошибок=== |
||
Apertium предлагает статистический маркировщик, который работает следующим образом: |
|||
Apertium comes with a statistical tagger, which can be run as follows: |
|||
<pre> |
<pre> |
||
Line 143: | 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 174: | Line 176: | ||
SOFT-DELIMITERS = "<,>" ; |
SOFT-DELIMITERS = "<,>" ; |
||
LIST BOS = (>>>) ; # |
LIST BOS = (>>>) ; # Начало предложения |
||
LIST EOS = (<<<) ; # |
LIST EOS = (<<<) ; # Конец предложения |
||
LIST Hyphen = guio ; |
LIST Hyphen = guio ; |
||
Line 186: | 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 220: | Line 222: | ||
</pre> |
</pre> |
||
И вместе с <code>apertium-tagger</code>: |
|||
<pre> |
<pre> |
||
Line 229: | 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)