Difference between revisions of "Курсы машинного перевода для языков России/Раздел 5"

From Apertium
Jump to navigation Jump to search
Line 160: Line 160:
 
| {{tag|when}} || §3.5.4.25 || Определяет условие и операцию, которая должна быть выполнено при выполнении данного условия. Условие в тэге <code>test</code>, а операция идет за ним.
 
| {{tag|when}} || §3.5.4.25 || Определяет условие и операцию, которая должна быть выполнено при выполнении данного условия. Условие в тэге <code>test</code>, а операция идет за ним.
 
|-
 
|-
| {{tag|otherwise}} || §3.5.4.26 || A default condition, which contains actions that are run if none of the <code>when</code> conditions in a <code>choose</code> block are matched.
+
| {{tag|otherwise}} || §3.5.4.26 || Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий <code>when</code> в блоке <code>choose</code> не подойдет.
 
|-
 
|-
| {{tag|test}} || §3.5.4.27 || Describes a condition. For example "test if the number of the first pattern matched is singular".
+
| {{tag|test}} || §3.5.4.27 || Описывает условие. Например "проверьте, в единственном ли числе стоит первый сопоставленный образец".
 
|-
 
|-
| {{tag|or}} || §3.5.4.28 || A tag allowing more than one condition to be matched. This tag is a [http://en.wikipedia.org/wiki/Logical_operator Boolean operator], other Boolean operators available are: {{tag|and}} and {{tag|not}}
+
| {{tag|or}} || §3.5.4.28 || Тэг, разрешающий соответствие более, чем одному условиюA tag allowing more than one condition to be matched. This tag is a [http://en.wikipedia.org/wiki/Logical_operator Boolean operator], other Boolean operators available are: {{tag|and}} and {{tag|not}}
 
|-
 
|-
 
| {{tag|equal}} || §3.5.4.28 || Tests if two strings or tags are equal.
 
| {{tag|equal}} || §3.5.4.28 || Tests if two strings or tags are equal.

Revision as of 08:24, 13 January 2012

Цель данного раздела познакомить с понятием сопоставительного морфологического и синтаксического анализов, и показать как основные (т.е. одноуровневые) правила морфологической и синтаксической передачи могут создаваться в Apertium.

Теория

Сопоставительный анализ

Сопоставительный анализ подразумевает анализ и сравнение двух языков с целью обнаружения какие они имеют общие и отличительные характеристики. При работе над неглубоким машинным переводом мы можем рассмотреть, например, как морфологические так и синтаксические различия When working on shallow-transfer machine translation, we can consider for example, both morphological contrasts and syntactic contrasts.

Морфологические различия сопоставления Morphological contrasts

Морфологические различия - это различия между морфологическими характеристикам двух языков. Например, если в одном языке категория определенности выражено морфологически, а в другом нет, или одни язык имеет категорию падежа и рода, а другой нет. Или когда инструменты выражения падежа/рода отличаются между языками. Примеры: Morphological contrasts are differences in which morphological features are expressed in each language, and how they differ. For example, if one language expresses definiteness morphologically, and another doesn't, or one language has case or gender while the other doesn't. Or if the case/gender inventories differ between the languages. Examples:

  • В казахском языке нет грамматического рода, а в русском их три (мужской, женский, средний). Род в русском языке играет роль при согласовании внутри словосочетания с существительным
    • Жаңа әуежай(kk)Новый аэропорт(ru)
  • В русском языке два вида числа (единственное и множественное), а в мансийском три (единственное, двойственное и множественное).
    • Я читаю эту книгу(ru)Ам ти книга ловиньтилум(mns)
    • Я читаю эти две книги(ru)Ам ти книгаг ловиньтиягум(mns)
    • Я читаю эти книги(ru)Ам ти книгат ловиньтиянум(mns)
  • Венгерский содержит огромное количество падежей, которых нет в финском (например, временный падеж -kor, который на финский может быть переведен творительным аблативом, адессивом или эссив изобразительный палеж ablative, adessive, or essive). В венгерском и финском языках падеж не играет роли при согласовании в словосочетании с существительным Case in Hungarian and Finnish does not play a rôle in noun-phrase agreement.
    • Ötkor(hu)Viideltä(fi)
    • Éjfélkor(hu)Keskiyöllä(fi)
    • Karácsonykor(hu)Jouluna(fi)

Синтаксические различия Syntactic contrasts

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

  • Например в абхазском языке есть прикрепленный сзади postfixed неопределенный артикль, и прикрепленный спереди prefixed определенный артикль, а в русском нет.
    • Сара кьылак акәац аасхәоит(ab)Я покупаю килограмм мяса(ru)
    • Иара амшын ахь дцоит.(ab)Он идёт в море.(ru)
  • В русском языке обязательно употребление личного местоимения в качестве подлежащего, а в венгерском нет,
    • Я сплю.(ru)Alszom.(hu)
  • В чувашском используется аблятив, а в русском используется предлог и другой падеж.
    • Я получил письмо от друга.(ru)Юлташран ҫыру илтӗм.(cv)

Передача

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

Базовые операции

Когда вы начинаете применять правила передачи, стоит разложить их на самые базовые действия.

A) Вставка

Вставка - это добавление нового тэга или слова, например, при переводе существительного с дунганского на русский язык, необходимо вставить tag указывающий падеж (именительный, винительный, ...), так как в дунганском языке отсутствует категория падежа. Очень часто в переводе требуется вставить слово. Например при переводе повелительного наклонения с турецкого на чувашский, необходимо в начале добавить наречие ан: Yeme!Ан çи!.

B) Удаление

Удаление - это операция, противоположная вставке, когда необходимо удалить слово или tag, например, как в предыдущем примере, как только мы добавили наречие, необходимо убрать отрицание от последующего глагола, так как наречие передает отрицательное значение.

C) Замена

Замена происходит, когда один tag заменяется другим, например, когда изменяется род слова. Это часто применяется при лексическом переносе, о чем мы читали в первом разделе, но также часто происходит при передаче. Например, при переводе с русского на башкирский, мои брюки, слово брюки будем помечено специальным тэгом ND (которое указывает в каком числе употребляется существительное) при лексическом переносе, и потом, согласно правилам переноса, при переводе число будет изменено.

D) Изменение порядка слов

Изменение порядка слов или тэгов. Например, изменение порядка следования категорий числа и принадлежности при переводе с турецкого на чувашский kitap·lar·ımкӗнеке·м·сем.

E) Комбинированные операции

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

Cамое длинное соответствие с лева направо Left-to-right longest match (LRLM)

Структурный перенос

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

<transfer default="chunk">
  <section-def-cats>
    <def-cat n="adj_or_pp">
      <cat-item tags="adj.*">
      <cat-item tags="vblex.pp.*">
    </def-cat>
    ...
  </section-def-cats>
  <section-def-attrs>
    <def-attr n="nbr">
      <attr-item n="sg"/>
      <attr-item n="pl"/>
    </def-attr>
    ...
  </section-def-attrs>
  <section-def-vars>
    <def-var n="number"/> 
    ...
  </section-def-vars>
  <section-rules>
    ...
  </section-rules>
</transfer>

Это минимальный расклад. Вот четыре секции:

  • <section-def-cats>: Содержит одну или более <def-cat> записей. Они определяют образцы, которые могут сопоставляться по правилами переноса, и могут соответствовать ряду тэгов или лемм. <def-cat> Запись приведенная выше для adj_or_pp соответствует любой лексической единице, где тэги начинаются с <adj> или <vblex><pp>. Это может быть полезно в случае, когда две части речи выглядят похоже (например, прилагательные и причастия прошедшего времени в испанском).
  • <section-def-attrs>: Содержит одну или более <def-attr> записей. Здесь перечислены возможные тэги, относящиеся к данной характеристике. В данном случае, такая характеристика как nbr "число" может быть выражено одним из двух тэгов <sg> "единственное число" или <pl> "множественное число". Когда мы используем тэг <clip>, для извлечения part, это позволяет нам определить искомые установки(части), вдобавок к стандартным частям (установкам).
  • <section-def-vars>: Содержит переменные определения. Они используются для передачи информации между правилами. Например, возможно мы хотим сохранить запись о роде или числе, которыми мы пользовались в последний раз, или о лемме последнего спрягаемого глагола.
  • <section-rules>: Содержит правила.

Стандартные установки Default parts

В добавление к частями, которые определены в section-def-attrs, модуль переноса содержит набор стандартных установок (частей) каждой лексической единицы the transfer module predefines a number of default parts of each lexical unit.

Для того чтобы понятнее продемонстрировать имеющиеся стандартные установки (части), давайте возьмем следующий пример:

^правило# по безопасности<n><nt><nn><pl>$
  • whole: как видно из названия, оно дает полное содержание лексической единицы.
  • lem: лемма: в данном примере, правило# по безопасности
  • tags: все тэги в одном месте: <n><nt><nn><pl>
  • lemh: лемма главное слово; часть словосочетания, которая изменяется: правило
  • lemq: лемма queue; остальная часть словосочетания (the <g></g> part in the dictionaries): # по безопасности

Практика

Для данной практической части, мы будем использовать языковую пару турецкий-чувашский в Apertium, мы можете выбрать другую пару с одно-уровневой передачей single-level transfer (например, татарский-башкирский). Итак, перейдите в директорию apertium-cv-tr и откройте папку с правилами передачи из турецкого языка на чувашский apertium-cv-tr.tr-cv.t1x, для других пар это может быть папка .t1x.

Описание правила переноса

Цель данного упражнения - описать как срабатывает правило переноса на примере ввода предложения на турецком: Yeme!. Сначала мы хотели бы дать предварительную информацию как структурируются правила переноса, затем посмотрим на действительно существующее правило и опишем его.

Правила передачи в системе Apertium сделаны из двух главных частей. Образец pattern — это ряд категорий, которые будут сопоставляться, и действиеaction, которое содержит операции, которые выполняются в сопоставленных образцах. Итоговая схема для правила может выглядеть соответственно:

<rule>
 <pattern>
        ...
 </pattern>
 <action>
        ...
 </action>
</rule>

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

Наименование Doc. ref. Описание
<rule> §3.5.4.18 Задает новое правило, оно содержит высший уровень образца и действия it contains at the highest level a pattern and an action.
<pattern> §3.5.4.19 Содержит один или более pattern-item тэгов, которые определяют образцы лексических форм, которые должны быть сопоставлены.
<pattern-item> §3.5.4.20 Содержит ссылки на образцы лексических форм, определенных в части section-def-cats папки с правилами.
<action> §3.5.4.21 Содержит тэги, определяющие действия, которые должны быть происходить, после завершения сопоставления ряда лексических единиц.
<choose> §3.5.4.24 Содержит одно или более when утверждений, которые определяют разные дальнейшие действия в зависимости от различных условий, и иногда otherwise утверждение, которое определяет стандартную процедуру если ни одно из whens не подошло.
<when> §3.5.4.25 Определяет условие и операцию, которая должна быть выполнено при выполнении данного условия. Условие в тэге test, а операция идет за ним.
<otherwise> §3.5.4.26 Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий when в блоке choose не подойдет.
<test> §3.5.4.27 Описывает условие. Например "проверьте, в единственном ли числе стоит первый сопоставленный образец".
<or> §3.5.4.28 Тэг, разрешающий соответствие более, чем одному условиюA tag allowing more than one condition to be matched. This tag is a Boolean operator, other Boolean operators available are: <and> and <not>
<equal> §3.5.4.28 Tests if two strings or tags are equal.
<clip> §3.5.4.29 Extracts the part of a lexical unit corresponding to an attribute as defined in the section-def-attrs section of the transfer file. The part to be extracted is specified in the part attribute.
<lit-tag> §3.5.4.31 Generates a string enclosed in < >, that is to say, a tag.
<lit> §3.5.4.30 Generates a string.
<out> §3.5.4.40 Contains everything that will be output by the rule.
<lu> §3.5.4.41 Encloses the contents in ^ and $, that is defines the contents as a lexical unit.
<b> §3.5.4.46 Outputs a space, or the formatting contained at the given position.
<get-case-from> §3.5.4.34 Converts the case (e.g. upper, lower) of whatever is enclosed in it to the case of the word marked by the pos attribute.

The rule we're going to describe is regla: v_neg_imp, so search for it in the file. Here is what the rule looks like:


    <rule comment="regla: v_neg_imp (yeme! → ан ҫи!)">
      <pattern>
        <pattern-item n="v_neg_imp"/>
      </pattern>
      <action>
        <let>
          <clip pos="1" side="tl" part="a_neg"/>
          <lit v=""/>
        </let>
        <out>
          <lu>
            <lit v="ан"/>
            <lit-tag v="adv"/>
          </lu>
          <b/>
          <lu>
            <clip pos="1" side="tl" part="whole"/>
          </lu>
        </out>
      </action>
    </rule>

For reference, the pattern being matched are defined as:

  <section-def-cats>
    ...
    <def-cat n="v_neg_imp">
      <cat-item tags="v.*.neg.imp.*"/>
    </def-cat>

    ...
  </section-def-cats>

Description

So, given the description of the tags, and the contents of the rule, we could describe the rule as follows:

  • This rule matches a sequence of "vb_neg_imp"
  • The lexical form pattern "vb_neg_imp" is defined, in the <section-def-cats> of the file, as the tag <v> followed by any tag (e.g. <iv> or <tv> followed by the tags <neg><imp> and then any other tags.
  • The rule then sets the value of the part of the lexical unit which matches the attribute a_neg to nothing (meaning it "deletes" it)
  • The rule outputs the lemma "ан", followed by the tag <adv> in a single lexical unit (between ^ and $).
  • The rule then outputs a blank space
  • The rule then outputs the a lexical unit with the information from the verb matched by the original pattern.

Example output

Input text
$ echo 'yeme!' | hfst-proc tr-cv.automorf.hfst | cg-proc tr-cv.rlx.bin | apertium-tagger -g tr-cv.prob

^ye<v><tv><neg><imp><p2><sg>$^!<sent>$^.<sent>$
Output from transfer
$ echo 'yeme!' | hfst-proc tr-cv.automorf.hfst | cg-proc tr-cv.rlx.bin | apertium-tagger -g tr-cv.prob |\
   apertium-pretransfer | lt-proc -b tr-cv.autobil.bin | apertium-lrx-proc tr-cv.lrx.bin  |\
   apertium-transfer -b apertium-cv-tr.tr-cv.t1x tr-cv.t1x.bin 

^ан<adv>$ ^ҫи<v><tv><imp><p2><sg>$^!<sent>$

If you want to trace which rules are matched, add the -t option to the apertium-transfer:

Output from transfer
$ echo 'yeme!' | hfst-proc tr-cv.automorf.hfst | cg-proc tr-cv.rlx.bin | apertium-tagger -g tr-cv.prob |\
   apertium-pretransfer | lt-proc -b tr-cv.autobil.bin | apertium-lrx-proc tr-cv.lrx.bin  |\
   apertium-transfer -t -b apertium-cv-tr.tr-cv.t1x tr-cv.t1x.bin 

apertium-transfer: Rule 3 ye<v><tv><neg><imp><p2><sg>/ҫи<v><tv><neg><imp><p2><sg>
^ан<adv>$ ^ҫи<v><tv><imp><p2><sg>$^!<sent>$

Описание нового правила переноса

The objective of this part of the practical is to describe a new transfer rule. Run some text through the translator of your choice, and describe a new rule in natural language, as was done in the previous subsection. If you have time after defining the rule, try and write it out in XML format.

Для дальнейшего чтения