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

From Apertium
Jump to navigation Jump to search
Line 45: Line 45:
==Practice==
==Practice==


For this practical, the examples will be from the French--Spanish language pair, so navigate to the directory <code>apertium-fr-es</code>. The bilingual dictionary (or transfer lexicon) is in the file <code>apertium-fr-es.fr-es.dix</code>. Open it.
For this practical, the examples will be from the Tatar--Bashkir language pair, so navigate to the directory <code>apertium-tt-ba</code>. The bilingual dictionary (or transfer lexicon) is in the file <code>apertium-tt-ba.tt-ba.dix</code>. Open it.


===One to one===
===One to one===


You may remember that we added the word ''transductor'' to the Spanish dictionary in the first session, we'll keep with this example for the simple one-to-one bilingual dictionary entries.
You may remember that we added the word ''чалбар'' to the Tatar dictionary in the first session, we'll keep with this example for the simple one-to-one bilingual dictionary entries.


So, for example, search for the entry ''>moteur<'',
So, for example, search for the entry ''>песи<'',


<pre>
<pre>
<e><p><l>moteur<s n="n"/></l><r>motor<s n="n"/></r></p></e>
<e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e>
</pre>
</pre>


Line 60: Line 60:


<pre>
<pre>
<e><p><l>moteur<s n="n"/></l><r>motor<s n="n"/></r></p></e>
<e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e>


<e><p><l>transducteur<s n="n"/></l><r>transductor<s n="n"/></r></p></e>
<e><p><l>чалбар<s n="n"/></l><r>салбар<s n="n"/></r></p></e>
</pre>
</pre>


Save the dictionary and exit out of the text editor, and we can compile the dictionary with the following command:
This is the simple kind of entry. It can be good practice to also add the gender to both sides, although it is not mandatory if the gender is the same in both languages. In any case, here we'll add it, so just add <code>&lt;s n="m"/&gt;</code> to both sides.


<pre>
<pre>
$ lt-comp lr apertium-tt-ba.tt-ba.dix tt-ba.autobil.bin
<e><p><l>moteur<s n="n"/></l><r>motor<s n="n"/></r></p></e>

<e><p><l>transducteur<s n="n"/><s n="m"/></l><r>transductor<s n="n"/><s n="m"/></r></p></e>
</pre>

Save the dictionary and exit out of the text editor, and we can compile the dictionary with the following commands:

<pre>
$ xsltproc translate-to-default-equivalent.xsl apertium-fr-es.fr-es.dix | gawk '{gsub("&", "&amp;amp;"); print;}' >common-fr-es.dix
$ xsltproc --stringparam alt std alt.xsl common-fr-es.dix | gawk '{gsub("&", "&amp;amp;"); print;}' >fr-es.dix
$ lt-comp rl fr-es.dix es-fr.autobil.bin
final@standard 165 7293
main@standard 64955 84838

</pre>
</pre>


Line 87: Line 74:


<pre>
<pre>
$ echo "los transductores" | lt-proc es-fr.automorf.bin | apertium-tagger -g es-fr.prob |\
$ echo "чалбар" | hfst-proc tt-ba.automorf.hfst | apertium-tagger -g tt-ba.prob |\
apertium-pretransfer | lt-proc -b es-fr.autobil.bin
apertium-pretransfer | lt-proc -b tt-ba.autobil.bin
^чалбар<n><nom>/салбар<n><nom>$
^el<det><def><m><pl>/le<det><def><mf><pl>$ ^transductor<n><m><pl>/transducteur<n><m><pl>$
</pre>


This command shows you the input lexical form, and the output lexical form after having been passed through the bilingual dictionary. You can see also that the Spanish determiner ''el'' with the analysis <code>det.def.m.pl</code> has been converted to the French determiner ''le'' with the analysis <code>det.def.mf.pl</code>. This is because in French the plural form of the article ''les'' is the same for both masculine and feminine.

We can look in the bilingual dictionary to see how this is done, so open up the file <code>apertium-fr-es.fr-es.dix</code> again, and search for the following entries:

<pre>
<e r="RL">
<p>
<l>le<s n="det"/><s n="def"/><s n="mf"/><s n="pl"/></l>
<r>el<s n="det"/><s n="def"/><s n="m"/><s n="pl"/></r>
</p>
</e>
<e r="RL">
<p>
<l>le<s n="det"/><s n="def"/><s n="mf"/><s n="pl"/></l>
<r>el<s n="det"/><s n="def"/><s n="f"/><s n="pl"/></r>
</p>
</e>
</pre>
</pre>


This command shows you the input lexical form, and the output lexical form after having been passed through the bilingual dictionary.
The important thing to note here is the <code>r="RL"</code> which is a direction restriction that means, in this case, "only perform this translation from Spanish to French".

If there is time left over, we can also try adding the multiword expression from [[Session 2: Advanced dictionaries|Session 2]]:

<pre>
<e><p>
<l>transducteur<g><b/>à<b/>états<b/>finis</g><s n="n"/><s n="m"/></l>
<r>transductor<g><b/>de<b/>estados<b/>finitos</g><s n="n"/><s n="m"/></r>
</p></e>
</pre>


===Many to one===
===Many to one===

Revision as of 12:53, 29 December 2011

The objective of this session is to describe the process of lexical transfer and lexical selection. The theory section will cover some details of why a transfer lexicon (or bilingual dictionary) cannot always be just correspondences between lemmas/parts-of-speech in one language and lemmas/parts-of-speech in another. In the practice section, we will add three entries, a simple one-to-one entry, a many-to-one entry and a one-to-many entry.

Theory

There are two aspects to lexical transfer, the first is choosing the most adequate translation, the second is marking in the entries features which need to be inferred by transfer rules. For example, choosing the most frequent translation of the Chuvash word тӳпе into Russian, when there are several possible translations including вершина, крыша and небо comes under the first. And deciding the number of the Russian word брюки when translating to Tatar (e.g. чалбар, чалбарлар) comes into the second.

Translation equivalences

The simple model of translation is that you look up each word in the source language sentence in a list to find the target language equivalent and then substitute it. This is problematic because the relationship between words in the source language, and words in the target language is often many-to-many, not one-to-one — this is because words can be polysemous (have many meanings) and these meanings can have different translations. One way of extending this basic model is to allow words to be distinguished based on lexical category, or part-of-speech. So for example, the Kyrgyz word жаз could be a verb, or a noun, leading to the translations писать or весна in Russian respectively.

Chuvash Russian
тӳпе вершина
temporada saison
тӳпе крыша
тӳпе небо

This is an example of a more-or-less one-to-one correspondence, the meanings for жаз in Kyrgyz and весна in Russian match up. However this is not always the case. Another possibility is that more than one word in the source language translates to a single word in the target language. For example, both of the Russian words вершина and небо can translate to тӳпе in Chuvash. In fact, the relationship between the words is many-to-many.

For machine translation, to say that вершина, небо and крыша all translate to тӳпе is not problematic. That saison can also translate to temporada and that тӳпе has three (or more) translations in Russian is problematic.

Using part-of-speech information to disambiguate lexical relationships can reduce the problem, but not eliminate it entirely. Even after the part-of-speech has been disambiguated, one word may have many translations, as in the тӳпе example. So, how can this one-to-many translation problem be solved. The most obvious way is to choose the most frequent, or general translation — in this case xxx.

Apertium currently has an experimental module to treat the problem of lexical selection, that is choosing the most appropriate translation of a source language lexical form given its context, but the use of multiwords can also offer a partial solution, for example in the cases where there are frequent collocations which are exceptions to the general translation (for example, Spanish to French: estación del añosaison de l'année).

Grammatical divergence

Another problem of lexical transfer is grammatical divergence between the two languages.

  • Words may change gender and number between languages (e.g. Russian брюки — in plural translates to Bashkir салбар — in singular)
  • Words in the source language may be ambiguous for features such as number (French temps to Spanish tiempo or tiempos) or gender (Spanish estudiante — which can be masculine or feminine to French étudiant, masculine or étudiante, feminine).
  • Other features than can be useful for lexical transfer between some languages are if the target noun is mass or count — for example to decide if an article should be inserted when translating from a language without articles to a language with articles.
  • Also, for languages that have both adjectives which inflect for comparison, and adjectives which don't — it is useful to specify this in the bilingual dictionary.

All of these need to be taken care of in the transfer lexicon (bilingual dictionary).

Practice

For this practical, the examples will be from the Tatar--Bashkir language pair, so navigate to the directory apertium-tt-ba. The bilingual dictionary (or transfer lexicon) is in the file apertium-tt-ba.tt-ba.dix. Open it.

One to one

You may remember that we added the word чалбар to the Tatar dictionary in the first session, we'll keep with this example for the simple one-to-one bilingual dictionary entries.

So, for example, search for the entry >песи<,

    <e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e>

Copy the entry and change the lexical forms on the source and target side, so you have something that looks like:

    <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>

Save the dictionary and exit out of the text editor, and we can compile the dictionary with the following command:

$ lt-comp lr apertium-tt-ba.tt-ba.dix tt-ba.autobil.bin

We can test it as follows:

$ 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>$

This command shows you the input lexical form, and the output lexical form after having been passed through the bilingual dictionary.

Many to one

The next job is to perform a translation from many words, to one word. The word pico in Spanish can be transated as bec in French, but this word is not currently in the dictionaries. We first want to search for the word pico in the file apertium-fr-es.fr-es.dix, and we'll find the following entry:

  <e a="webform"><p><l>pioche<s n="n"/><s n="f"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>

We can add an entry to translate becpico, but in order to do this we need to also add a direction restriction, so that that this entry only applies when translating from French to Spanish. Restriction are added to the <e> element with the r attribute and come in two flavours, LR or left-to-right and RL or right-to-left. The file is called apertium-fr-es.fr-es.dix with French on the left and Spanish on the right. So, if we want to translate only from French to Spanish we need to add a left-to-right (LR) direction restriction. Copy the entry and paste it below, then change the lemma and gender and add the restriction.

  <e a="webform"><p><l>pioche<s n="n"/><s n="f"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>
  <e r="LR"><p><l>bec<s n="n"/><s n="m"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>

For the importance of direction restrictions, see Session 7

One to many

French Spanish
pioche pico
bec pico
bec:1 boquilla
bec boquilla

Although there is currently no lexical selection module in Apertium — to choose the most adequate translation of a source language lexical form into the target language given the source language context when there is more than one possible translation in the target language — the dictionaries are prepared for the eventuality that one is developed. So in this subsection we will add some entries for lexical forms with more than one translation, following the Apertium convention, even though it is not currently possible to select the non-default translations.

If we continue with the bec example, we find that it can also be translated with boquilla in Spanish, so if we want to add a non-default translation to boquilla, we can do it as follows:

  <e a="webform"><p><l>pioche<s n="n"/><s n="f"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>
  <e r="LR"><p><l>bec<s n="n"/><s n="m"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>
  <e slr="1" r="LR"><p><l>bec<s n="n"/><s n="m"/></l><r>boquilla<s n="n"/><s n="f"/></r></p></e>

The slr attribute defines an alternative translation, these can be numbers, as in the case above, or any other appropriate mnemonic, for example, the following would also be possible:

  <e slr="boquilla" r="LR"><p><l>bec<s n="n"/><s n="m"/></l><r>boquilla<s n="n"/><s n="f"/></r></p></e>

If we also want to add a translation from boquillabec, then we need to add another entry, this time marking it with RL for translating only from Spanish to French.

  <e r="RL"><p><l>bec<s n="n"/><s n="m"/></l><r>boquilla<s n="n"/><s n="f"/></r></p></e>

Many to many

Many more entries in Apertium transfer lexica (bilingual dictionaries) are many-to-many relationships, or could be, for example given the example above, the current entries we have are:

  <e a="webform"><p><l>pioche<s n="n"/><s n="f"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>
  <e r="LR"><p><l>bec<s n="n"/><s n="m"/></l><r>pico<s n="n"/><s n="m"/></r></p></e>
  <e slr="1" r="LR"><p><l>bec<s n="n"/><s n="m"/></l><r>boquilla<s n="n"/><s n="f"/></r></p></e>
  <e r="RL"><p><l>bec<s n="n"/><s n="m"/></l><r>boquilla<s n="n"/><s n="f"/></r></p></e>

To this could be added:

  • pic(fr)pico(es)
  • pic(fr)pájaro carpintero(es)

And multiword entries like:

  • bec à bec(fr)frente a frente(es)

If you have time, add these entries, along with the direction restrictions (→ = r="LR", ← = r="RL") to the Spanish and French dictionary.

Lexical selection

There is a separate handout on using lexical selection rules.

See also

Further reading