Курсы машинного перевода для языков России/Раздел 3

From Apertium
Jump to navigation Jump to search

В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать discovering tagging errors и попытки решения ошибок при помощи правил.

Теория

Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит из-за того, что, по форме слова можно сделать несколько видов морфологического анализа (также называется как омонимичность — samenameness). Например, чувашского слово чалка может быть,

  • Существительное "чалка" единственного числа в именительном падеже.
  • Прилагательное "чалка".
  • Глагол "чалка" в повелительном наклонении, 2 лицо, единственное число.

Переводная омонимия, а именно что чалка как глагол может быть переведено на русский язык как кричать, стрекотать, верещать, галдеть и т.д., не относится морфологической омонимии и поэтому в данном разделе не рассматривается.

Морфологическая омонимия

Существует два основных вида морфологической омонимии. Морфологическая омонимия между частями речи (например, слово может быть как существительным, так и глаголом)и морфологическая омонимия внутри частей речи (например, слово может быть только именем существительным, но форма одинаковая как для именительного, так и для родительного падежа). Обычно, чем более сложная морфологическая структура языка, тем выше соотношение между омонимией внутри части речи и омонимией между частями речи.

Омонимия между частями речи

Пример омонимии между частями речи был приведен выше, слово чалка может быть существительным, глаголом или прилагательным. Нужно принимать во внимание, что омонимия часто встречается между прилагательными, обозначающими этнические группы (например, по-русски русский) или профессии (например, в русском языке военный) и существительными, обозначающими языки или людей (русский) или профессии (военный).

В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском -n, -t, -i). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински tule- "приходить" and tuli "пожар": tuli = "fire" сущ., ед.ч или "s/он пришел", tulet = "пожары" or "ты приходишь"; tulen" = "пожара" или "я прихожу".

Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени (Thus, in Finnish, the plural of present participle (и поэтому прилагательное)) и глагола настоящего времени 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)
Я слышала, что ты работаешь в магазине.

В казахском языке системная омонимия наблюдается между всеми глаголами в форме третьего лица единственного и множественного числа. Например, "барады" может означать "она/он/оно идет" или "они идут".

Синтаксическая омонимия

Еще одна форма омонимии - синтаксическая омонимия, при которой одно и тоже предложение или фраза могут пониматься по-разному, но иметь одинаковую морфологическую структуру. Примером может служить предложный оборот prepositional phrase attachment, в котором, морфологические средства не позволяют показать, к какому компоненту относится предложный оборот prepositional phrase attaches. Посмотрите на следующие примеры

  • Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной)
  • Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны)

Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит омонимию, а не в языке перевода. Если омонимия сохранена, это вызывает меньше трудностей.

Например 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
  • yyy

Основанное на правилах снятие омонимии Rule-based disambiguation

Существует много способов для написания правил по устранению омонимии, самое важное - это суметь объяснить правила в рамках того контекста, которые создает омонимию but the most important thing is to be able to express the rule in terms of the context that provides disambiguation. Например, так как отдельные слова очень часто могут иметь омонимию, такая омонимия часто снимается контекстом. Возьмем фразу на русском языке « нашим старым преподавателям », так как оба слова нашим и старым имеют достаточно омонимов (по три варианта (анализа) на каждое слово three analyses for both), главное слово фразы the head of the phrase преподавателям, у которого только один анализ, помогает снять омонимию с двух других слов which only has one analysis, disambiguates them.

  • наш<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>
  • ...

Таким образом мы можем придти к выводу, что необходимо написать правило, которое исключало бы варианты (анализы), которые не согласовываются с главным словом We could thus conceive of writing a rule which removes the analyses that do not agree with the head of the phrase.

Грамматика ограничений

Один из способов написания правил - это использование формулы formalism которые называются грамматика ограничений called constraint grammar. Правила грамматики ограничений состоят из двух частей: действия по образцу, и по контексту an operation on a pattern, and a context. Примеры по первой части:

  • select: Given a context, remove all the readings apart from the one(s) matched by the pattern.Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующих образцу шаблону.
  • remove: Учитывая контекст, удалите вариант (ы), соответствующие образцу Given a context, remove the reading(s) that match the pattern.

Контекстом может служить любая комбинация слов или tags в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил избавления от омонимии. Мы будем пользоваться фразами на русском языке:

« Услугами детских садов пользуются 135 тысяч работающих матерей. »
Омонимия #1

Слово детских имеет омонимию между родительным, предложным и винительным падежами. Нам нужно выбрать родительный падеж.

  • SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);
    • SELECT Gen: Select genitive, IF
    • (0C A): The current word only has adjective readings.
    • (*1C GEN BARRIER NPNHA): После искомого слова идет слово, которое только в родительном падеже. Продолжаем искать слова после текущего слова, пока не найдем слово, которое не может изменять существительное и не является наречием 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

Слово работающих имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественного числа винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа.

  • SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);
    • SELECT Gen: Select genitive, IF
      • (0C ACC-GEN-PRP): The current word can only be accusative, genitive or locative
      • (*-1C Num LINK 1C Gen BARRIER NOTGEN): Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит родительный тега.

hat does not contain the genitive tag.

Омонимия #3

Слово матери имеет омонимию в форме множественного числа родительного и винительного падежей. Нам нужно выбрать вариант родительного падежа (или лучше, убрать вариант винительного падежа).

  • REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);
    • REMOVE Acc: Remove accusative, IF
      • (0C ACC-OR-GEN): The current word can only be accusative or genitive
      • (*-1C Num LINK 1C Gen BARRIER NOTGEN): У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,'тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже There is a previous numeral which has a word which can only be genitive after it (e.g. тысяч) and we stop searching when we find a word that is not in genitive (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>$

В маркировщике довольно легко найти ошибки, их две:

  • "Уран" должно стоять в именительном падеже, а не винительном.
  • После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным.

Со остальных слов омонимия была снята правильно.

Разработка правил

При разработке правил, важно принимать во внимание следующее:

  • Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом?
  • Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи?
  • Подумать о виде омонимии для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных?
  • Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило.

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.

DELIMITERS = "<.>" "<!>" "<?>" ;
SOFT-DELIMITERS = "<,>" ;

LIST BOS = (>>>) ; # Beginning of sentence
LIST EOS = (<<<) ; # End of sentence

LIST Hyphen = guio ;
LIST Nom = nom ;
LIST Acc = acc ;
LIST Gen = gen ;

LIST Not-Gen-Prep = "по";

SET  Acc-Or-Nom = Acc | Nom ;

SECTION

# Rule 1
REMOVE Acc IF                          # Remove accusative reading if,
              (0C Acc-Or-Nom)          #   the current word is only accusative or nominative
              (1C Hyphen LINK 1 Nom);  #   there is a hyphen directly to the right, with a nominative following

# Rule 2
REMOVE Gen IF                          # Remove a genitive reading if,
              (-1C Not-Gen-Prep);      # it is preceeded by a preposition which does not ever govern the genitive

Copy this file into a text editor, and save it as rules.rlx. First we need to compile the rules:

$ cg-comp rules.rlx rules.bin

Sections: 1, Rules: 2, Sets: 17, Tags: 18

And now run them:

$ 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>$

And in conjunction with the 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>$

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)