Difference between revisions of "Курсы машинного перевода для языков России/Раздел 4"
Line 1: | Line 1: | ||
{{TOCD}} |
{{TOCD}} |
||
Цель данного раздела - описать процессы лексического переноса и лексического выбора. В теоретической части более подробно будет описано почему переносной словарь (или двуязычный словарь)это не всегда лишь соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три вида записи: один к одному, |
Цель данного раздела - описать процессы лексического переноса и лексического выбора. В теоретической части более подробно будет описано почему переносной словарь (или двуязычный словарь)это не всегда лишь соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три вида записи: один к одному, множество к одному, один к многим. |
||
==Теория== |
==Теория== |
||
Line 9: | Line 9: | ||
===Переводные эквиваленты=== |
===Переводные эквиваленты=== |
||
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке |
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке оригинала, находите переводной эквивалент на языке перевода и заменяете слово. Эта модель проблематична, потому что отношения между словами в языке-источнике и языке перевода, это не один к одному, а множество к множеству, потому что слова могут быть "полисемичны" (многозначны) и этим значениям могут соответствовать различные варианты перевода. Один из способов расширить эту простую модель перевода - снять омонимию со слов, опираясь на лексическую категорию или принадлежность к части речи. Например, киргизское слово ''жаз'' может быть как глаголом, так и существительным, что в свою очередь может на русский язык соответственно переводиться как ''писать'' или ''весна''. |
||
<div style="float:right;"> |
<div style="float:right;"> |
||
{|class=wikitable |
{|class=wikitable |
||
! |
! чувашский !! !! русский |
||
|- |
|- |
||
| тӳпе || ↔ || вершина |
| тӳпе || ↔ || вершина |
||
Line 25: | Line 25: | ||
|} |
|} |
||
</div> |
</div> |
||
Это пример |
Это пример практически соответствия один к одному, значения слова ''жаз'' на киргизском и ''весна'' на русском соответствуют друг другу. Однако это не всегда так. Может быть так, что не одно, а несколько слов в языке-оригинале будут переводиться одним и тем же словом на язык перевода. Например, оба слова из русского языка ''вершина'' и ''небо'' могут быть переведены на чувашский как ''тӳпе''. На самом деле, отношения между словами можно описать как множество к множеству. |
||
Для машинного перевода не составляет проблемы |
Для машинного перевода не составляет проблемы запомнить, что ''вершина'', ''небо'' и ''крыша'' - все слов будут переводиться как ''тӳпе''. Но что ''saison'' может быть переведено также как ''temporada'' и что ''тӳпе'' имеет три (или больше) вариантов перевода на русский - это проблема. |
||
Применение знаний о части речи для разрешения неоднозначности при переводе может частично, но не полностью решить проблему. Даже после того как снята омонимия с части речи, одно слово может иметь несколько вариантов перевода, как в примере с ''тӳпе''. Итак, как же решить проблему один к множеству? Самый очевидный способ - это выбрать наиболее часто встречающийся вариант, или общее значение — в данном случае ''xxx''. |
|||
В данное время Apertium имеет экспериментальный модуль для решения проблемы ''лексического выбора'', то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, использования |
В данное время Apertium имеет экспериментальный модуль для решения проблемы ''лексического выбора'', то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, но использования словосочетаний тоже может быть частичным решением, например в случаях, когда существуют часто встречающиеся коллокации, которые являются исключением по отношению к общему переводу (например, с испанского на французский) : ''estación del año'' → ''saison de l'année''). |
||
===Диалектные формы=== |
===Диалектные формы=== |
||
Часто бывает |
Часто бывает, что диалектные формы одного языка желательно перевести на другой язык в нормативном стиле. Например, из русского языка слово ''мясо'' "meat" может быть переведено на чувашский язык как ''аш'', ''какай'', или ''аш-какай''. Первые два варианты перевода считаются более диалектными и в основном употребляются в разговорном языке. Третий вариант более нормативный и более подходит для письменного варианта. |
||
===Грамматическое различие=== |
|||
===Грамматическая дивергенция=== |
|||
Еще одна проблема лексической передачи - грамматическое различие между двумя языками |
Еще одна проблема лексической передачи - грамматическое различие между двумя языками |
||
* Слова могут при переводе менять род и число (например, русское слово ''брюки'' — множественного числа переводятся на башкирский ''салбар'' — единственного числа) |
* Слова могут при переводе менять род и число (например, русское слово ''брюки'' — множественного числа переводятся на башкирский ''салбар'' — единственного числа) |
||
* Слова в языке-источнике могут иметь омонимию в числе (французское слово ''temps'' на испанское ''tiempo'' или ''tiempos'') или роде (испанское слово ''estudiante'' — может быть мужского или женского рода во |
* Слова в языке-источнике могут иметь омонимию в числе (французское слово ''temps'' на испанское ''tiempo'' или ''tiempos'') или роде (испанское слово ''estudiante'' — может быть мужского или женского рода во французском ''étudiant'', мужской род, ''étudiante'', женский род). |
||
* Другие характеристики, которые могут быть полезными при |
* Другие характеристики, которые могут быть полезными при лексическом переносе между двумя языками, это является ли переводное существительное абстрактным или исчисляемым — это нужно, например, чтобы решить какой поставить артикль при переводе с языка, где отсутствует категория артикля, на язык, где такая категория присутствует. |
||
* Также в двуязычном словаре полезно указать, если |
* Также в двуязычном словаре полезно указать, если есть два вида прилагательных, которые изменяют окончания в степенях сравнения и нет. |
||
Обо всем этом необходимо подумать при составлении |
Обо всем этом необходимо подумать при составлении словаря переноса (двуязычного словаря). |
||
==Практика== |
==Практика== |
||
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите |
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите папку <code>apertium-tt-ba</code>. Двуязычный словарь находится в файле <code>apertium-tt-ba.tt-ba.dix</code>. Откройте ее. |
||
===Один к одному=== |
===Один к одному=== |
Revision as of 08:43, 17 January 2012
Цель данного раздела - описать процессы лексического переноса и лексического выбора. В теоретической части более подробно будет описано почему переносной словарь (или двуязычный словарь)это не всегда лишь соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три вида записи: один к одному, множество к одному, один к многим.
Теория
Существует два аспекта лексического переноса, первый - выбор наиболее подходящего перевода, второй - маркировка в записях тех особых характеристик, которые должны согласовываться с правилами переноса. Например, выбор наиболее подходящего русского перевода для чувашского слова тӳпе, когда существует несколько вариантов переводов, включая вершина, крыша и небо - это пример первого аспекта, а выбор единственного или множественного числа при переводе русского слова брюки на татарский (например чалбар, чалбарлар) - это пример второго аспекта перевода лексики.
Переводные эквиваленты
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке оригинала, находите переводной эквивалент на языке перевода и заменяете слово. Эта модель проблематична, потому что отношения между словами в языке-источнике и языке перевода, это не один к одному, а множество к множеству, потому что слова могут быть "полисемичны" (многозначны) и этим значениям могут соответствовать различные варианты перевода. Один из способов расширить эту простую модель перевода - снять омонимию со слов, опираясь на лексическую категорию или принадлежность к части речи. Например, киргизское слово жаз может быть как глаголом, так и существительным, что в свою очередь может на русский язык соответственно переводиться как писать или весна.
чувашский | русский | |
---|---|---|
тӳпе | ↔ | вершина |
тăрă | → | вершина |
тӳпе | ← | небо |
тӳпе | ← | крыша |
... |
Это пример практически соответствия один к одному, значения слова жаз на киргизском и весна на русском соответствуют друг другу. Однако это не всегда так. Может быть так, что не одно, а несколько слов в языке-оригинале будут переводиться одним и тем же словом на язык перевода. Например, оба слова из русского языка вершина и небо могут быть переведены на чувашский как тӳпе. На самом деле, отношения между словами можно описать как множество к множеству.
Для машинного перевода не составляет проблемы запомнить, что вершина, небо и крыша - все слов будут переводиться как тӳпе. Но что saison может быть переведено также как temporada и что тӳпе имеет три (или больше) вариантов перевода на русский - это проблема.
Применение знаний о части речи для разрешения неоднозначности при переводе может частично, но не полностью решить проблему. Даже после того как снята омонимия с части речи, одно слово может иметь несколько вариантов перевода, как в примере с тӳпе. Итак, как же решить проблему один к множеству? Самый очевидный способ - это выбрать наиболее часто встречающийся вариант, или общее значение — в данном случае xxx.
В данное время Apertium имеет экспериментальный модуль для решения проблемы лексического выбора, то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, но использования словосочетаний тоже может быть частичным решением, например в случаях, когда существуют часто встречающиеся коллокации, которые являются исключением по отношению к общему переводу (например, с испанского на французский) : estación del año → saison de l'année).
Диалектные формы
Часто бывает, что диалектные формы одного языка желательно перевести на другой язык в нормативном стиле. Например, из русского языка слово мясо "meat" может быть переведено на чувашский язык как аш, какай, или аш-какай. Первые два варианты перевода считаются более диалектными и в основном употребляются в разговорном языке. Третий вариант более нормативный и более подходит для письменного варианта.
Грамматическое различие
Еще одна проблема лексической передачи - грамматическое различие между двумя языками
- Слова могут при переводе менять род и число (например, русское слово брюки — множественного числа переводятся на башкирский салбар — единственного числа)
- Слова в языке-источнике могут иметь омонимию в числе (французское слово temps на испанское tiempo или tiempos) или роде (испанское слово estudiante — может быть мужского или женского рода во французском étudiant, мужской род, étudiante, женский род).
- Другие характеристики, которые могут быть полезными при лексическом переносе между двумя языками, это является ли переводное существительное абстрактным или исчисляемым — это нужно, например, чтобы решить какой поставить артикль при переводе с языка, где отсутствует категория артикля, на язык, где такая категория присутствует.
- Также в двуязычном словаре полезно указать, если есть два вида прилагательных, которые изменяют окончания в степенях сравнения и нет.
Обо всем этом необходимо подумать при составлении словаря переноса (двуязычного словаря).
Практика
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите папку apertium-tt-ba
. Двуязычный словарь находится в файле apertium-tt-ba.tt-ba.dix
. Откройте ее.
Один к одному
Возможно вы помните, что, в первом разделе мы добавили слово чалбар в татарский словарь, мы будем пользоваться этим примером для простых один к одному записей в двуязычном словаре.
Например, найдите запись >песи<,
<e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e>
Скопируйте запись и измените лексические формы в языке-источнике и языке перевода, чтобы у вас получилось что-то подобное:
<e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e> <e><p><l>чалбар<s n="n"/></l><r>салбар<s n="n"/></r></p></e>
Сохраните словарь и выйдите из текстового редактора, и мы можем скомпилировать словарь при помощи следующей команды:
$ lt-comp lr apertium-tt-ba.tt-ba.dix tt-ba.autobil.bin
Давайте протестируем:
$ echo "чалбар" | hfst-proc tt-ba.automorf.hfst | apertium-tagger -g tt-ba.prob |\ apertium-pretransfer | lt-proc -b tt-ba.autobil.bin ^чалбар<n><nom>/салбар<n><nom>$
Данная команда показывает вам вводимую лексическую форму, и получаемую лексическую форму после ее прохождения через двуязычный словарь.
Многие к одному
Следующая стадия, это осуществить перевод от многих слов к одному слову. Татарское слово морон может быть переведено на башкирский язык как борын, но в настоящий момент данное слово не занесено в словари. Сначала мы ищем слово борын в папке apertium-tt-ba.tt-ba.dix
, и мы находим следующую запись:
<e><p><l>борын<s n="n"/></l><r>танау<s n="n"/></r></p></e>
Мы можем добавить запись для перевода слова морон → борын, но для того чтобы это сделать, нам нужно добавить ограничение в области направления перевода, при котором данная запись имеет силу только при переводе с башкирского на татарский. Ограничения добавляются к элементу <e>
с описанием r
и выделяются цветами, LR
слева направо или справа налево RL
. Папка называется apertium-tt-ba.tt-ba.dix
где татарский вариант слева, а башкирский справа. Итак, если мы хотим, чтобы перевод происходил только в направлении с башкирского на татарский язык нам необходимо добавить ограничение по направлению справа налево(RL
). Скопируйте запись и вставьте ее ниже, затем измените лемму и добавьте ограничение.
<e><p><l>борын<s n="n"/></l><r>танау<s n="n"/></r></p></e> <e r="RL"><p><l>борын<s n="n"/></l><r>морон<s n="n"/></r></p></e>
Для ознакомления с важностью ограничений по направлению перевод, посмотрите раздел 7Session 7. Теперь скомпилируйте словарь и протестируйте запись:
$ lt-comp rl apertium-tt-ba.tt-ba.dix ba-tt.autobil.bin main@standard 1228 1995 $ lt-comp lr apertium-tt-ba.tt-ba.dix tt-ba.autobil.bin main@standard 1226 1990 $ echo "борын" | hfst-proc tt-ba.automorf.hfst | apertium-tagger -g tt-ba.prob |\ apertium-pretransfer | lt-proc -b tt-ba.autobil.bin ^борын<n><nom>/танау<n><nom>$ $ echo "танау" | hfst-proc ba-tt.automorf.hfst | apertium-tagger -g ba-tt.prob |\ apertium-pretransfer | lt-proc -b ba-tt.autobil.bin ^танау<n><nom>/борын<n><nom>$ $ echo "морон" | hfst-proc ba-tt.automorf.hfst | apertium-tagger -g ba-tt.prob |\ apertium-pretransfer | lt-proc -b ba-tt.autobil.bin ^морон<n><nom>/борын<n><nom>$
Мы используем ограничение по направлению перевода если мы хотим чтобы перевод ни в коем случае не был возможен в данном направлении или в случае перевода диалектных и не нормативных форм. Но иногда бывает желательно иметь два возможных перевода.
Один ко многим
Finnish | North Sámi | |
---|---|---|
pitää | ↔ | doallat |
pitää | → | berret |
pitää | → | liikot |
pitää | → | coakcut |
pitää | ← | galgat |
Для данной части практики вы должны находиться в директории apertium-sme-fin
directory. Двуязычный словарь apertium-sme-fin.sme-fin.dix
В данном подразделе мы добавим несколько записей для лексических форм с более чем одним переводом и напишем правила для лексического выбора для выбора нестандартного варианта перевода In this subsection we will add some entries for lexical forms with more than one translation, and write lexical selection rules to select the non-default translations.
Возьмем для примера финское слово pitää, мы обнаружим, что данное слово может быть переведено несколькими вариантами на северо-саамский язык, следовательно, чтобы добавить несколько вариантов нестандартного перевода мы делаем следуещее so if we want to add some non-default translations of it, we can do it as follows:
<e c="hold (acc)"><p><l>doallat<s n="V"/><s n="TV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e> <e c="ought to"><p><l>berret<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e> <e c="like (ela)"><p><l>liikot<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e> <e c="get a foothold"><p><l>coakcut<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e>
Если мы хотим добавить перевод galgat → pitää, тогда нам нужно сделать еще одну запись, в этот раз с пометкой LR
чтобы перевод шел только в направлении из северо-саамского на финский.
<e r="LR"><p><l>galgat<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e>--><!-- skulle, should -->
Скомпилируйте словарь обычным способом:
$ lt-comp rl apertium-sme-fin.sme-fin.dix fin-sme.autobil.bin main@standard 15454 19523
Внимательно проверьте новые записи следующими способами:
$ echo "Minä pidän kirjan." | hfst-proc fin-sme.automorf.hfst | cg-proc fin-sme.rlx.bin | apertium-tagger -g fin-sme.prob | lt-proc -b fin-sme.autobil.bin ^Mikä<Pron><Interr><Sg><Ess>/Mii<Pron><Interr><Sg><Ess>$ ^pitää<V><Act><Ind><Prs><Sg1><@+FMAINV>/berret<V><IV><Ind><Prs><Sg1><@+FMAINV>/liikot<V><IV><Ind><Prs><Sg1><@+FMAINV>/doallat<V><TV><Ind><Prs><Sg1><@+FMAINV>/coakcut<V><IV><Ind><Prs><Sg1><@+FMAINV>$ ^kirja<N><Sg><Gen><@←OBJ>/girji<N><Sg><Gen><@←OBJ>$^.<Punct><CLB>/.<CLB>$
В случае омонимии при лексической передаче, передающий компонент the transfer component выберет первый перевод для дальнейшей обработки, если первый вариант перевод не подходящий, может быть применено правил лексической выборки, которое выберет другой вариант переводаwill pick the first translation to continue with, if the first translation is not the desired translation, a lexical selection rule can be made which chooses a different one:
Создайте папку apertium-sme-fin.fin-sme.lrx
, и вставьте следующий текст
<rules> <rule> <match lemma="pitää" tags="V.*"> <select lemma="doallat" tags="V.TV.*"/> </match> </rule> </rules>
Вы можете создать это правило используя apertium-lrx-comp
:
$ apertium-lrx-comp apertium-sme-fin.fin-sme.lrx fin-sme.lrx.bin 1 Written 1 rules, 2 patterns.
И протестируйте следующим образом:
$ echo "Minä pidän kirjan." | hfst-proc fin-sme.automorf.hfst | cg-proc fin-sme.rlx.bin | apertium-tagger -g fin-sme.prob | lt-proc -b fin-sme.autobil.bin | apertium-lrx-proc fin-sme.lrx.bin ^Mikä<Pron><Interr><Sg><Ess>/Mii<Pron><Interr><Sg><Ess>$ ^pitää<V><Act><Ind><Prs><Sg1><@+FMAINV>/doallat<V><TV><Ind><Prs><Sg1><@+FMAINV>$ ^kirja<N><Sg><Gen><@←OBJ>/girji<N><Sg><Gen><@←OBJ>$^.<Punct><CLB>/.<CLB>$
Как вы видите стандартный перевод doallat был выбран. Но что если мы хотим выбрать нестандартный перевод в определенном контексте? При последующем исходном падеже в противовес винительному/родительному более подходящим вариантом перевода будет With an elative following as opposed to an accusative/genitive, a better translation is liikot, поэтому давайте добавим для этого правило:
<rule> <match lemma="pitää" tags="V.*"> <select lemma="liikot" tags="V.*"/> </match> <match tags="*.Ela"/> </rule>
Вы можете снова сделать компиляцию и протестировать это правило на предложении Minä pidän sinusta. "Ты мне нравишься" .
Лексическая выборка
Для использования правил выбора лексики подготовлен отдельный раздаточный материал.