Difference between revisions of "Курсы машинного перевода для языков России/Раздел 5"
m (moved Машинный перевод для языков России/Раздел 5 to Курсы машинного перевода для языков России/Раздел 5: ... to get a better structure.) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 105: | Line 105: | ||
* {{tag|section-rules}}: Содержит правила. |
* {{tag|section-rules}}: Содержит правила. |
||
===Заранее заданные образцы=== |
|||
===Стандартные установки Default parts=== |
|||
В добавление к частям, которые определены в <code>section-def-attrs</code>, модуль переноса |
В добавление к частям, которые определены в <code>section-def-attrs</code>, модуль переноса определяет заранее заданный шаблон каждой лексической единицы. |
||
Для того чтобы понятнее продемонстрировать имеющиеся стандартные установки (части), давайте возьмем следующий пример: |
Для того чтобы понятнее продемонстрировать имеющиеся стандартные установки (части), давайте возьмем следующий пример: |
||
Line 127: | Line 127: | ||
===Описание правил переноса=== |
===Описание правил переноса=== |
||
Цель данного упражнения - описать как |
Цель данного упражнения - описать как работает правило переноса на примере ввода предложения на турецком: ''Yeme!''. Сначала мы хотели бы дать предварительную информацию как структурируются правила переноса, затем посмотрим на реально существующее правило и опишем его. |
||
Правила |
Правила переноса в системе Apertium сделаны из двух главных частей. Шаблон ''pattern'' — это ряд категорий, которые будут сопоставляться, и действие''action'', которое содержит операции, которые выполняются в сопоставленных образцах. Итоговая схема для правила может выглядеть соответственно: |
||
<pre> |
<pre> |
||
Line 142: | Line 142: | ||
</pre> |
</pre> |
||
Значения тэгов, которые были использованы в вышеприведенных примерах, даны здесь, а также приведены ссылки на документацию с полным описанием. |
|||
{|class=wikitable |
{|class=wikitable |
||
! Наименование !! Doc. ref. !! Описание |
! Наименование !! Doc. ref. !! Описание |
||
|- |
|- |
||
| {{tag|rule}} || §3.5.4.18 || Задает новое правило, оно содержит |
| {{tag|rule}} || §3.5.4.18 || Задает новое правило, оно содержит на высшем уровне образец и действие. |
||
|- |
|- |
||
| {{tag|pattern}} || §3.5.4.19 || Содержит один или более <code>pattern-item</code> тэгов, которые определяют образцы лексических форм, которые должны быть сопоставлены. |
| {{tag|pattern}} || §3.5.4.19 || Содержит один или более <code>pattern-item</code> тэгов, которые определяют образцы лексических форм, которые должны быть сопоставлены. |
||
|- |
|- |
||
| {{tag|pattern-item}} || §3.5.4.20 || Содержит ссылки на |
| {{tag|pattern-item}} || §3.5.4.20 || Содержит ссылки на шаблоны лексических форм, определенных в части <code>section-def-cats</code> файла с правилами. |
||
|- |
|- |
||
| {{tag|action}} || §3.5.4.21 || Содержит тэги, определяющие действия, которые должны быть |
| {{tag|action}} || §3.5.4.21 || Содержит тэги, определяющие действия, которые должны быть после завершения сопоставления ряда лексических единиц. |
||
|- |
|- |
||
| {{tag|choose}} || §3.5.4.24 || Содержит одно или более <code>when</code> утверждений, которые определяют |
| {{tag|choose}} || §3.5.4.24 || Содержит одно или более <code>when</code> утверждений, которые определяют дальнейшие действия в зависимости от различных условий, и иногда <code>otherwise</code> утверждение, которое определяет стандартную процедуру, если ни одно из условий <code>when</code>s не подошло. |
||
|- |
|- |
||
| {{tag|when}} || §3.5.4.25 || Определяет условие и операцию, которая должна быть |
| {{tag|when}} || §3.5.4.25 || Определяет условие и операцию, которая должна быть выполнена при выполнении данного условия. Условие в тэге <code>test</code>, а операция идет за ним. |
||
|- |
|- |
||
| {{tag|otherwise}} || §3.5.4.26 || Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий <code>when</code> в блоке <code>choose</code> не подойдет. |
| {{tag|otherwise}} || §3.5.4.26 || Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий <code>when</code> в блоке <code>choose</code> не подойдет. |
||
|- |
|- |
||
| {{tag|test}} || §3.5.4.27 || Описывает условие. Например "проверьте, в единственном ли числе стоит первый |
| {{tag|test}} || §3.5.4.27 || Описывает условие. Например "проверьте, в единственном ли числе стоит первый сопоставляемый образец". |
||
|- |
|- |
||
| {{tag|or}} || §3.5.4.28 || Тэг, разрешающий соответствие более, чем одному условию. Этот тэг [http://en.wikipedia.org/wiki/Logical_operator Boolean operator], другие доступные тэги логического значения: {{tag|and}} и {{tag|not}} |
| {{tag|or}} || §3.5.4.28 || Тэг, разрешающий соответствие более, чем одному условию. Этот тэг [http://en.wikipedia.org/wiki/Logical_operator Boolean operator], другие доступные тэги логического значения: {{tag|and}} и {{tag|not}} |
||
|- |
|- |
||
| {{tag|equal}} || §3.5.4.28 || Проверяет являются ли два условия или тэга аналогичными. |
| {{tag|equal}} || §3.5.4.28 || Проверяет, являются ли два условия или тэга аналогичными. |
||
|- |
|- |
||
| {{tag|clip}} || §3.5.4.29 || Выделяет часть лексической единицы, которая соответствует признаку, указанному в разделе <code>section-def-attrs</code> |
| {{tag|clip}} || §3.5.4.29 || Выделяет часть лексической единицы, которая соответствует признаку, указанному в разделе <code>section-def-attrs</code> файла переноса. Часть, которая должна быть извлечена, указана определением <code>part</code>. |
||
|- |
|- |
||
| {{tag|lit-tag}} || §3.5.4.31 || Генерирует условие, входящее в {{tag| }}, то есть тэг. |
| {{tag|lit-tag}} || §3.5.4.31 || Генерирует условие, входящее в {{tag| }}, то есть тэг. |
||
Line 177: | Line 177: | ||
| {{tag|lu}} || §3.5.4.41 || Включает контент в <code>^</code> и <code>$</code>, то есть определяет является ли контент лексической единицей. |
| {{tag|lu}} || §3.5.4.41 || Включает контент в <code>^</code> и <code>$</code>, то есть определяет является ли контент лексической единицей. |
||
|- |
|- |
||
| {{tag|b}} || §3.5.4.46 || Выдает |
| {{tag|b}} || §3.5.4.46 || Выдает итог форматирования, содержащегося на данном этапе |
||
|- |
|- |
||
| {{tag|get-case-from}} || §3.5.4.34 || Преобразует |
| {{tag|get-case-from}} || §3.5.4.34 || Преобразует падеж любого слова, включенного в него, в падеж слова, отмеченного признаком <code>pos</code>. |
||
|- |
|- |
||
|} |
|} |
||
Правило, которое мы хотели бы описать это <code>regla: v_neg_imp</code>, поэтому найдите его в |
Правило, которое мы хотели бы описать это <code>regla: v_neg_imp</code>, поэтому найдите его в файле. Вот как выглядит правило: |
||
<pre> |
<pre> |
||
Line 211: | Line 211: | ||
</pre> |
</pre> |
||
Образец для сопоставления определяется как: |
|||
<pre> |
<pre> |
||
Line 226: | Line 226: | ||
====Описание==== |
====Описание==== |
||
Итак, |
Итак, описав тэги и правила, мы можем сказать что правило это: |
||
* Данное правило соответствует ряду "vb_neg_imp" |
* Данное правило соответствует ряду "vb_neg_imp" |
||
* Определен шаблон лексической формы "vb_neg_imp", в {{tag|section-def-cats}} |
* Определен шаблон лексической формы "vb_neg_imp", в файле {{tag|section-def-cats}}, так как после тэга {{tag|v}} идет любой тэг (например {{tag|iv}} или {{tag|tv}}, после которого идут тэги {{tag|neg><imp}} и потом любые другие тэги. |
||
* Затем правило определяет, подходит ли часть лексической единицы |
* Затем правило определяет, подходит ли часть лексической единицы заданному признаку <code>a_neg</code> или нет (если нет, то удаляет ее) |
||
* Правило выдает лемму "ан", после которой идет тэг {{tag|adv}} в единственной лексической единице (между <code>^</code> и <code>$</code>). |
* Правило выдает лемму "ан", после которой идет тэг {{tag|adv}} в единственной лексической единице (между <code>^</code> и <code>$</code>). |
||
* Затем правило оставляет пустое пространство |
* Затем правило оставляет пустое пространство |
||
* Затем правило выдает лексическую единицу с информацией от глагола, соответствующего изначальному |
* Затем правило выдает лексическую единицу с информацией от глагола, соответствующего изначальному шаблону. |
||
⚫ | |||
⚫ | |||
;Ввод текста |
;Ввод текста |
||
Line 245: | Line 244: | ||
</pre> |
</pre> |
||
;Результат после |
;Результат после переноса |
||
<pre> |
<pre> |
||
Line 257: | Line 256: | ||
Если вы хотите отслеживать, какие правила сопоставляются, добавьте -t опцию к apertium-transfer: |
Если вы хотите отслеживать, какие правила сопоставляются, добавьте -t опцию к apertium-transfer: |
||
;Результат после |
;Результат после переноса |
||
<pre> |
<pre> |
||
Line 270: | Line 269: | ||
===Описание нового правила переноса=== |
===Описание нового правила переноса=== |
||
Цель данной части практики - |
Цель данной части практики - показать создание нового правила переноса. Переведите какой-нибудь текст при помощи выбранного вами переводчика и опишите новое правило на языке, как было сделано в предыдущем разделе. Если у вас останется время после описания правил на русском языке, попробуйте перевести его в формат XML. |
||
==Для дальнейшего чтения== |
==Для дальнейшего чтения== |
||
* Ginestí i Rosell, M. (ed.) (2007) [https://wiki.apertium.org/w/images/d/d0/Apertium2-documentation.pdf Documentation of the Open-Source Shallow-Transfer Machine Translation Platform ''Apertium''] |
* Ginestí i Rosell, M. (ed.) (2007) [https://wiki.apertium.org/w/images/d/d0/Apertium2-documentation.pdf Документы по общедоступному поверхностному машинном перевода платформы Apertium / Documentation of the Open-Source Shallow-Transfer Machine Translation Platform ''Apertium''] |
||
Latest revision as of 12:00, 31 January 2012
Цель данного раздела познакомить с понятием сопоставительного морфологического и синтаксического анализов, и показать как основные (т.е. одноуровневые) правила морфологической и синтаксической передачи могут создаваться в 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.