Курсы машинного перевода для языков России/Раздел 6
Contents |
Системы базового структурного переноса, описанного в session 5 достаточно для работы с большинством расхождений, которые имеются в родственных языках (например, башкирский и татарский, финский и квен), при работе с языками, которые имеют больше морфологических и синтаксических расхождений необходимо использовать более мощную систему структурного переноса. В данном разделе мы познакомим вас с системой уровня Apertium 3+, которая была разработана для работы с более длинными шаблонами и языками, которые сильнее отличаются друг от друга.
Теория[edit]
Перенос c помощью разбивки на блоки (Chunking-based transfer)[edit]
Обычное применение данного метода состоит из трех модулей: разбивание на блоки (chunker), процессы между блоками (interchunk) и после разбивки на блоки (postchunk). При необходимости данная модель может быть расширена до двух и более модулей intertchunk.
Разбивание на блоки (Chunker)[edit]
Идея разбивания на блоки (chunker) - расширить существующие правила переноса для группировки ряда лексических единиц. Эти группы называются блоки (chunks) . Блоки могут объединять именные части речи, делать согласование, вставлять и удалять слова, и выполнять местную перестановку слов, например,
Входной шаблон | Пример | Блок на выходе | Пример |
---|---|---|---|
nom |
ҫурт | SN{nom} |
дом |
adj nom |
хитре ҫурт | SN{nom adj} |
красивый дом |
nom |
ҫуртӑм | SN{det nom} |
мой дом |
det nom |
манăн ҫурт | SN{det nom} |
мой дом |
det nom |
манăн ҫуртӑм | SN{det nom} |
мой дом |
num nom |
икĕ ҫурт | SN{num nom} |
два дома |
num nom |
пилĕ ҫурт | SN{num nom} |
пять домов |
adj nom |
хитре ҫуртсем | SN{adj nom} |
красивые домы |
adv adj nom |
питĕ хитре ҫурт | SN{adv adj nom} |
очень красивый дом |
num adv adj nom |
пилĕ питĕ хитре ҫурт | SN{num adv adj nom} |
пять очень красивых домов |
Где nom
= существительное, adj
= прилагательное, num
= числительное, det
= артикль, SN
= именная конструкция.
Такой же процесс и для формирования глагольных блоков:
Входной шаблон | Пример | Блок на выходе Output chunk | Пример |
---|---|---|---|
verb |
вулать | V{verb} |
читает |
verb |
вуламасть | V{neg_adv verb} |
не читает |
verb |
вуларĕ | V{verb} |
читал |
verb |
вуламĕ | V{aux inf} |
будет читать |
verb |
вуламарĕ | V{neg_adv aux inf} |
не будет читать |
verb |
вуласшăн | V{aux part inf} |
хотел бы говорить |
verb |
вулӑттӑм | V{verb part} |
говорил бы |
adv verb |
ан вула ! | V{adv verb} |
не читай ! |
ger verb |
вулама пуçлать | V{verb inf} |
начинает читать. |
Таким образом, если мы хотим согласовать именное словосочетание с основным глаголом, мы только можем использовать одно правило (для SN V
) во втором модуле переноса (процесс между блоками interchunk) вместо отдельных правил для nom verb
, adj nom verb
, det adj nom verb
, и тд.
Очень важно помнить о том, что блоки (chunks) не могут быть вложенными (т.е. блок не может содержать другой блок). В определенных обстоятельствах, и при определенном усилии они могут быть сведены к интерблоку interchunk — например, можно присоединить одну или несколько однородных именных словосочетаний, но не вложить их друг в друга.
Важно отметить, что лексические формы переводятся на язык перевода в первом модуле; последующие модули работают с лексическими формами уже на языке перевода.
Процессы между блоками (Interchunk)[edit]
Как только созданы эти блоки, следующий модуль между блоками помогает проводить операции между блоками так, как будто они являются лексическими единицами: блоки используются на уровне абстракции, таким образом эквивалентные слова и фразы также могут переводиться с использованием одинаковых для них правил.
Этот модуль позволяет распознавать лицо, а также согласовывать слов в роде, определять порядок слов — например, согласовывать глагол прошедшего времени с местоимением в предложении на чувашском языке. В русском предложении Я вчера читалa, разделение на блоки привел бы к следующему результату:
^pron<SN><p1><mf><sg><nom>{^Эпĕ<prn><pers><2><3><4><5>$}$ ^adv<ADV>{^ĕнер<adv>$}$ ^verb<SV><imperf><tv><evid><PD><f><sg>{^вула<v><3><4><5><7>$}$
Формат блоков во многом похож на формат выделения лексических единиц, ^
указывает на начало, и $
на конец. Разница в том, что блок может содержать внутри себя другие лексические единицы {
и }
.
Лексические единицы, которые заключены внутри блока (между обозначениями {
и }
) не могут быть обработаны и изменены модулем "между блоками"; на данном этапе мы можем только работать и изменять элементы описания блока, которые находятся в области после ^
и перед первым {
. Описание блока содержит лемму блока (как pron
в предыдущем примере) и морфологические тэги блока (для pron
это <SN><p1><mf><sg><nom>
).
Эти тэги могут быть связаны с лексическими формами внутри блока: этим объясняются цифры <5>
и <7>
в лексических формах глагольного блока verb
: они связаны с пятым и седьмым тэгами блока (<PD>
и <sg>
) и будут заменены на них в модуле "после разбивания на блоки".
Модуль "между блоками" имеет правила для разных видов блоков: 'именные части речи' 'наречие' 'глагол', которые копируют лицо из первого блока "именные части речи" для имени в глагольном блоке, заменяя тэг 'PD'; в данном примере присваивая тэгу <p1>
(первое лицо) значение:
^pron<SN><p1><mf><sg><nom>{^Эпĕ<prn><pers><2><3><4><5>$}$ ^adv<ADV>{^ĕнер<adv>$}$ ^verb<SV><imperf><tv><evid><p1><f><sg>{^вула<v><3><4><5><7>$}$
Итоговый модуль работы с блоками припишет этот тэг глаголу внутри блока.
Итоговый модуль работы с блоками (Postchunk)[edit]
Модель "после разбивки на блоки" позволяет нам использовать результаты взаимодействия между блоками и еще раз поработать с контентом.
Изменения, которые блоки претерпели после прохождения модуля "между блоками" будут применены к контенту блока: тэги, содержащие число, будут заменены на значение, соответствующее тэгу вне блока. Модуль после разбивания на блоки удаляет блоки лемма и тэги, и оставляет в качестве итогового продукта ряд лексических единиц.
Модуль "после разбивания на блоки" может работать одновременно с одним блоком. В добавление к элементам clip, которые соотносятся с отдельными словами, содержащимися в блоке, есть также элемент clip под номером 0 (ноль), который позволяет получать информацию из леммы, которые может использоваться для получения информации "вне" блока (измененной в модуле "между блоками") для слов внутри. Также, так как число слов в блоке может быть разным, есть элемент, lu-count, которые подсчитывает количество слов в блоке, и, соответственно влияет на наши действия.
Практика[edit]
На практической части мы посмотрим, как происходит процесс переноса в три этапа в Apertium в паре татарский —киргизский, apertium-tt-ky
, и затем, опишем правило переноса в рамках трех и более уровней. Поэтому перейдите к папке apertium-tt-ky
и убедитесь, что данная языковая пара создана.
Знакомство с трех-этапным переносом[edit]
Мы переведем предложение Әхмәт тиз генә иске зур бер агачка йөгерә. с татарского на киргизский и проследим за процессом перевода на трех уровнях.
Вводные данные[edit]
Так как полный переводчик с татарского на киргизский еще не закончен, мы будем пользоваться некоторыми подготовленными вводными данными из пары татарский и башкирский.
$ cat input ^Әхмәт<np><ant><m><nom>$ ^тиз<adv>$ ^гына<postadv>$ ^иске<adj>$ ^зур<adj>$ ^бер<det><ind>$ ^агач<n><dat>$ ^йөгер<v><iv><pres><p3><sg>$^..<sent>$
Разделение на блоки[edit]
Итог работы маркировщика части речи передается лексическому переносу, а потом идет первый уровень переноса:
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin ^ant<SN>{^Акмат<np><ant><m><nom>$}$ ^adv<ADV>{^катуу<adv>$ ^гана<postadv>$}$ ^a_a_d_n<SN><dat>{^эски<adj><pst>$ ^чоң<adj><pst>$ ^бир<det><ind>$ ^дарак<n><2>$}$ ^чурка<V>{^чурка<v><iv><prt_perf>$ ^бар<v><iv><prt_impf>$ ^жат<vaux><aor><p3><sg>$}$^sent<SENT>{^..<sent>$}$
Существует четыре правила, применяемые модулем переноса первого уровня:
ПРАВИЛО: NP-ANT
: Данное правило соответствует антропониму (имя человека). Оно создает новый блок имен<SN>
.ПРАВИЛО: ADV POSTADV
: Это правило соответствует ряду наречий и прилагательных, оно создает блок наречий<ADV>
который содержит две лексические единицы.ПРАВИЛО: ADJ ADJ DET NOM
: Данное правило соответствует набору из двух прилагательных, артикля и существительного. Они помещаются внутрь блока имен<SN>
и падеж блока соответствует падежу существительного. Данное существительное имеет специальный показатель<2>
на случай, если изменяется падеж блока, он копируется внутри.ПРАВИЛО: V-PRES
: Это правило стандартного глагола настоящего времени, оно соответствует любому глаголу в настоящем времени. В настоящем примере оно изменяет синтетическое настоящее время в татарском на продолженное настоящее время со вспомогательном глаголом в киргизском. This is because the Kyrgyz cognate to the Tatar present means either "future" or "habitual/general". This Tatar form is "habitual/general" and "present progressive". When translating the "present progressive" reading of the Tatar "present", then we need to translate to a different form in Kyrgyz, namely the participle + жат auxiliary.
Обратите внимание, что после первой стадии переноса появляется несколько проблем. Грамматическое время правильное, но падеж существительного неверен, и обстоятельство не на месте. В киргизском языке оно должно стоять перед глаголом.
Между блоками[edit]
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin |\ apertium-interchunk apertium-tt-ky.tt-ky.t2x tt-ky.t2x.bin ^ant<SN>{^Акмат<np><ant><m><nom>$}$ ^a_a_d_n<SN><acc>{^эски<adj><pst>$ ^чоң<adj><pst>$ ^бир<det><ind>$ ^дарак<n><2>$}$ ^post<POST>{^көздөй<post>$}$ ^adv<ADV>{^катуу<adv>$ ^гана<postadv>$}$ ^чурка<V>{^чурка<v><iv><prt_perf>$ ^бар<v><iv><prt_impf>$ ^жат<vaux><aor><p3><sg>$}$^sent<SENT>{^..<sent>$}$
В модуле "между блоками" применяется одно правило:
ПРАВИЛО: ADV SN V
: Правило соответствует блоку обстоятельства (ADV
), за которым следует блок имен (SN
) а потом глагольный блок (V
). Оно содержит макроэлементconv_arg1
, который настраивает падеж блока имен и предлагает послеслог в зависимости от леммы глагольного блока. Оно также меняет местоположения субстантивного блока и блока обстоятельств, помещая второй перед глаголом.
Мы можем видеть, что в результате работы модуля "между блоками", обстоятельство было передвинуто и субстантивный блок стоит в правильном падеже с послеслогом.
После разбивания на блоки[edit]
Последний модуль переноса использует результат работы модуля "между блоками", и заменяет связанный тэг (e.g. <2>
) на значение из блока.
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin |\ apertium-interchunk apertium-tt-ky.tt-ky.t2x tt-ky.t2x.bin | apertium-postchunk apertium-tt-ky.tt-ky.t3x tt-ky.t3x.bin ^Акмат<np><ant><m><nom>$ ^эски<adj><pst>$ ^чоң<adj><pst>$ ^бир<det><ind>$ ^дарак<n><acc>$ ^көздөй<post>$ ^катуу<adv>$ ^гана<postadv>$ ^чурка<v><iv><prt_perf>$ ^бар<v><iv><prt_impf>$ ^жат<vaux><aor><p3><sg>$^..<sent>$
Теперь предложение готово к морфологическому построению. Папка tr-ky.autogen.hfst
может быть скопирована из пары apertium-tr-ky
в trunk/
.
Итог[edit]
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin |\ apertium-interchunk apertium-tt-ky.tt-ky.t2x tt-ky.t2x.bin | apertium-postchunk apertium-tt-ky.tt-ky.t3x tt-ky.t3x.bin |\ hfst-proc -g tr-ky.autogen.hfst Акмат эски чоң бир даракты көздөй катуу гана чуркап бара жатат.
Описание правила многоступенчатого переноса[edit]
При создании правила многоступенчатого переноса очень важно понять как разбить правило между разными ступенями переноса. Например, перестановки (на уровне слов 1—5) наверное следует провести на первой ступени. Блоки должны быть в какой-то степени тематическими, например, спрягаемые глаголы не должны группироваться с прилагательными и существительными.