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

From Apertium
Jump to navigation Jump to search

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.


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 Spanish word tiempo into Romanian, when there are two possible translations timp and vreme comes under the first. And deciding the gender of the Spanish word estudiante when translating to French étudiant 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 Spanish word programa could be a verb, or a noun, leading to the translations programmieren or Programm in German respectively.

Spanish French
estación saison
temporada saison
estación gare
estación station

This is an example of a more-or-less one-to-one correspondence, the meanings for programa in Spanish and Programm in German 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 Spanish words estación and temporada can translate to saison in French. In fact, the relationship between the words is many-to-many.

For machine translation, to say that saison, gare and station all translate to estación is not problematic. That saison can also translate to temporada and that estación has three translations in French 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 estación 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 gare.

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. Spanish gente — in singular translates to German Leute or Menschen — in plural)
  • 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).


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

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.

So, for example, search for the entry >moteur<,

  <e><p><l>moteur<s n="n"/></l><r>motor<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>moteur<s n="n"/></l><r>motor<s n="n"/></r></p></e>

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

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 <s n="m"/> to both sides.

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

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

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

We can test it as follows:

$ echo "los transductores" | lt-proc es-fr.automorf.bin | apertium-tagger -g es-fr.prob  |\
  apertium-pretransfer | lt-proc -b es-fr.autobil.bin 
^el<det><def><m><pl>/le<det><def><mf><pl>$ ^transductor<n><m><pl>/transducteur<n><m><pl>$

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 det.def.m.pl has been converted to the French determiner le with the analysis det.def.mf.pl. 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 apertium-fr-es.fr-es.dix again, and search for the following entries:

  <e r="RL">
      <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>
  <e r="RL">
      <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>

The important thing to note here is the r="RL" 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:

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

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