Курсы машинного перевода для языков России/Раздел 5
Цель данного раздела познакомить с понятием сопоставительного морфологического и синтаксического анализов, и показать как основные (т.е. одноуровневые) правила морфологической и синтаксической передачи могут создаваться в Apertium.
Теория[edit]
Сопоставительный анализ[edit]
Сопоставительный анализ подразумевает анализ и сравнение двух языков с целью обнаружения их общих и отличительных характеристик. При работе над неглубоким машинным переводом мы можем рассмотреть, например, как морфологические так и синтаксические различия.
Морфологические различия[edit]
Морфологические различия - это различия между морфологическими характеристикам двух языков. Например, если в одном языке категория определенности выражена морфологически, а в другом нет, или одни язык имеет категорию падежа и рода, а другой нет. Или когда инструменты выражения падежа/рода отличаются между языками. Примеры:
- В казахском языке нет грамматического рода, а в русском их три (мужской, женский, средний). Род в русском языке играет роль при согласовании внутри словосочетания с существительным
- В русском языке два вида числа (единственное и множественное), а в мансийском три (единственное, двойственное и множественное).
- Венгерский содержит огромное количество падежей, которых нет в финском (например, временный падеж -kor, который на финский может быть переведен творительным аблативом, адессивом или эссивом изобразительный палеж ablative, adessive, or essive). В венгерском и финском языках падеж не играет роли при согласовании в словосочетании с существительным.
Синтаксические различия[edit]
Синтаксические различия наблюдаются в том, как устроена синтаксическая система разных языков, например, наличие или отсутствие артиклей, порядок слабых местоимений (clitic), количество падежей, аналитические временные формы глаголов, употребление личных местоимений и тд.
- Например в абхазском языке есть примыкающий сзади (postfixed) неопределенный артикль, и прикрепленный спереди (prefixed) определенный артикль, а в русском нет.
- В русском языке обязательно употребление личного местоимения в качестве подлежащего, а в венгерском нет,
- В чувашском используется аблятив, а в русском используется предлог и другой падеж.
Перенос[edit]
Перенос - это процесс преобразования промежуточной репрезентации языка-источника в язык перевода. В системе Apertium, перенос воздействует на промежуточную репрезентацию лемм и тэгов, определяющих морфологические характеристики (лексические формы).
Базовые операции[edit]
Когда вы начинаете применять правила переноса, стоит разложить их на самые базовые действия.
- A) Вставка
Вставка - это добавление нового тэга или слова, например, при переводе существительного с дунганского на русский язык, необходимо вставить тэг, указывающий на падеж (именительный, винительный, ...), так как в дунганском языке отсутствует категория падежа. Очень часто в переводе требуется вставить слово. Например при переводе повелительного наклонения с турецкого на чувашский, необходимо вначале добавить наречие ан: Yeme! → Ан çи!.
- B) Удаление
Удаление - это операция, противоположная вставке, когда необходимо удалить слово или тэг, например, как в предыдущем примере, как только мы добавили наречие, необходимо убрать отрицание от последующего глагола, так как наречие передает отрицательное значение.
- C) Замена
Замена происходит, когда один тэг заменяется другим, например, когда изменяется род слова. Это часто применяется при лексическом переносе, о чем мы читали в первом разделе, но также часто происходит при передаче. Например, при переводе с русского на башкирский, мои брюки, слово брюки будет помечено специальным тэгом ND
(которое указывает в каком числе употребляется существительное) при лексическом переносе, и потом, согласно правилам переноса, при переводе число будет изменено.
- D) Изменение порядка слов
Изменение порядка слов или тэгов. Например, изменение порядка следования категорий числа и принадлежности при переводе с турецкого на чувашский kitap·lar·ım → кӗнеке·м·сем.
- E) Комбинированные операции
Очень часто, для создания правила переноса требуется набор из всех вышеуказанных операций, например, при переводе с одного языка слова, стоящего в определенном падеже на язык, в котором, для передачи такого же значения требуется употребления предлога и падежа, необходимо провести две операции, во-первых, слово,выражающее предлог должно быть вставлено перед существительным, и затем необходимо изменить характеристику, определяющую падеж.
Cамое длинное соответствие с лева направо Left-to-right longest match (LRLM)[edit]
Структурный перенос[edit]
Файлы, которые содержат правила переноса в 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>
: Содержит правила.
Заранее заданные образцы[edit]
В добавление к частям, которые определены в section-def-attrs
, модуль переноса определяет заранее заданный шаблон каждой лексической единицы.
Для того чтобы понятнее продемонстрировать имеющиеся стандартные установки (части), давайте возьмем следующий пример:
^правило# по безопасности<n><nt><nn><pl>$
whole
: как видно из названия, оно дает полное содержание лексической единицы.lem
: лемма: в данном примере, правило# по безопасностиtags
: все тэги в одном месте: <n><nt><nn><pl>lemh
: лемма главное слово; часть словосочетания, которая изменяется: правилоlemq
: лемма очередь; остальная часть словосочетания (the<g></g>
part в словарях): # по безопасности
Практика[edit]
Для данной практической части, мы будем использовать языковую пару турецкий-чувашский в Apertium, мы можете выбрать другую пару с одно-уровневой передачей single-level transfer (например, татарский-башкирский). Итак, перейдите в директорию apertium-cv-tr
и откройте папку с правилами передачи из турецкого языка на чувашский apertium-cv-tr.tr-cv.t1x
, для других пар это может быть папка .t1x
.
Описание правил переноса[edit]
Цель данного упражнения - описать как работает правило переноса на примере ввода предложения на турецком: Yeme!. Сначала мы хотели бы дать предварительную информацию как структурируются правила переноса, затем посмотрим на реально существующее правило и опишем его.
Правила переноса в системе Apertium сделаны из двух главных частей. Шаблон pattern — это ряд категорий, которые будут сопоставляться, и действиеaction, которое содержит операции, которые выполняются в сопоставленных образцах. Итоговая схема для правила может выглядеть соответственно:
<rule> <pattern> ... </pattern> <action> ... </action> </rule>
Значения тэгов, которые были использованы в вышеприведенных примерах, даны здесь, а также приведены ссылки на документацию с полным описанием.
Наименование | Doc. ref. | Описание |
---|---|---|
<rule> |
§3.5.4.18 | Задает новое правило, оно содержит на высшем уровне образец и действие. |
<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 утверждение, которое определяет стандартную процедуру, если ни одно из условий when s не подошло.
|
<when> |
§3.5.4.25 | Определяет условие и операцию, которая должна быть выполнена при выполнении данного условия. Условие в тэге test , а операция идет за ним.
|
<otherwise> |
§3.5.4.26 | Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий when в блоке choose не подойдет.
|
<test> |
§3.5.4.27 | Описывает условие. Например "проверьте, в единственном ли числе стоит первый сопоставляемый образец". |
<or> |
§3.5.4.28 | Тэг, разрешающий соответствие более, чем одному условию. Этот тэг Boolean operator, другие доступные тэги логического значения: <and> и <not>
|
<equal> |
§3.5.4.28 | Проверяет, являются ли два условия или тэга аналогичными. |
<clip> |
§3.5.4.29 | Выделяет часть лексической единицы, которая соответствует признаку, указанному в разделе section-def-attrs файла переноса. Часть, которая должна быть извлечена, указана определением part .
|
<lit-tag> |
§3.5.4.31 | Генерирует условие, входящее в < > , то есть тэг.
|
<lit> |
§3.5.4.30 | Генерирует условие. |
<out> |
§3.5.4.40 | Содержит всю информацию по итогам применения правила. |
<lu> |
§3.5.4.41 | Включает контент в ^ и $ , то есть определяет является ли контент лексической единицей.
|
<b> |
§3.5.4.46 | Выдает итог форматирования, содержащегося на данном этапе |
<get-case-from> |
§3.5.4.34 | Преобразует падеж любого слова, включенного в него, в падеж слова, отмеченного признаком pos .
|
Правило, которое мы хотели бы описать это regla: v_neg_imp
, поэтому найдите его в файле. Вот как выглядит правило:
<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>
Образец для сопоставления определяется как:
<section-def-cats> ... <def-cat n="v_neg_imp"> <cat-item tags="v.*.neg.imp.*"/> </def-cat> ... </section-def-cats>
Описание[edit]
Итак, описав тэги и правила, мы можем сказать что правило это:
- Данное правило соответствует ряду "vb_neg_imp"
- Определен шаблон лексической формы "vb_neg_imp", в файле
<section-def-cats>
, так как после тэга<v>
идет любой тэг (например<iv>
или<tv>
, после которого идут тэги<neg><imp>
и потом любые другие тэги. - Затем правило определяет, подходит ли часть лексической единицы заданному признаку
a_neg
или нет (если нет, то удаляет ее) - Правило выдает лемму "ан", после которой идет тэг
<adv>
в единственной лексической единице (между^
и$
). - Затем правило оставляет пустое пространство
- Затем правило выдает лексическую единицу с информацией от глагола, соответствующего изначальному шаблону.
Пример итога[edit]
- Ввод текста
$ 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>$
- Результат после переноса
$ 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>$
Если вы хотите отслеживать, какие правила сопоставляются, добавьте -t опцию к apertium-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>$
Описание нового правила переноса[edit]
Цель данной части практики - показать создание нового правила переноса. Переведите какой-нибудь текст при помощи выбранного вами переводчика и опишите новое правило на языке, как было сделано в предыдущем разделе. Если у вас останется время после описания правил на русском языке, попробуйте перевести его в формат XML.