TP1 : DÉMONSTRATIONS ET SIMULATIONS

Description

Le but de ce TP est d'introduire la problématique du traitement automatique du langage naturel par quelques démonstrations de logiciels  :

  1. Traduction automatique
  2. Identification de la langue
  3. et un peu de lecture illustrant le positionnement du cours par rapport au Machine Learning.

Nous vous recommandons fortement de prendre des notes personnelles (par exemple dans un éditeur) sur le déroulement de ce TP.


Traduction automatique

Task specification

Machine translation aims at automatically translating text in source language to its equivalent in target language.
It is certainly one of – if not “the” – the foundation tasks of NLP, dating back to the early (19)50s.
It’s also one of the most complicated NLP tasks and still remain the “holy grail” of NLP.

Inputs:

Output:

As any input-to-output association tasks, machine translation can be modeled as an optimization task:


o* = argmaxo  ℒs, t(o, i)

where here:

Evaluation metrics: (for information only; more details next week)

Hands on

Pour illustrer la problématique de la traduction automatique, utilisez au choix plusieurs des traducteurs suivants :

The goal of this exercice is to have an engineer look at the automated translation task: evaluate several tools with respect to some objectives. So think about some objective (something between "provide a rough idea about the content of a web page" and "automatic translation of the whole litterature") and how this objective could be evaluate. Then relate to the evaluation at different NLP levels. We recommend you to use at least two different machine translation systems.

  1. Commencez par quelques essais personnels dans les langues que vous souhaitez.

    Essayez des exemples qui fonctionnent bien, puis chercher des exemples plus problématiques. Essayez en particulier de mettre en évidences des difficultés aux différents niveaux : lexical, syntaxique, sémantique et pragmatique.

    Suggestions:

    This course is cool.

    (anglais -> une langue que vous connaissez bien),

    Il mange un avocat.

    (français -> anglais).

    Could you find a way to output the correct translation of "avocat" in this case, by adding more context ? What if you use its plural form ?

    All systems have bias which comes either from the corpus or the model. Is the bias corresponding to our task ? For example, in Wikipedia, the word "pilot" appears more often in a context of "men" than "women" or inversely for the word "dancer".

    Voir aussi la suite.

  2. (Exemple faussement historique ; voir ici pour une explication [pdf] de John Hutchin (1995)) Traduire la phrase [Marc 14:38 ; Matthieu 26:41]

    L'esprit est fort mais la chair est faible.

    de français en anglais puis retraduire le résultat obtenu d'anglais en français.

    Qu'obtient-on ?

    By the way, Google used recently this kind of disambiguation problems as a data augmentation technique for Question-Answering System (ICLR2018).

  3. Considérez la phrase

    Time flies like an arrow

    1. En quoi peut elle poser problème ?
    2. Essayez sa traduction en français...
    3. Retraduire le résultat obtenu d'anglais en français.
  4. Faire de même avec les expressions :

    il tombe des cordes
    il pleut des cordes

    1. Sont-elles correctement traduites ?
    2. voir les différences (expressions idiomatiques)
    3. Retraduire pour étudier la symétrie
    4. Autres exemples :

      il offre un cadeau à son fils.
      il offre un cadeau à la mode.
      il offre un cadeau à la dernière minute.

      la mère a élevé ses fils.
      l'araignée a tissé ses fils.
      on a vu ses fils.

  5. Essayez d'évaluer (pour une tâche donnée) la qualité de ce logiciel du point de vue de sa tâche : quels seraient les différents points à évaluer ? How to evaluate the quality of the translation automatically ?
    Évaluez la robustesse par rapports aux erreurs : au niveau des mots (niveau lexical), au niveau des phrases (niveau syntaxique) et au niveau du sens (sémantique/pragmatique).
    Regardez par exemple (et trouvez des exemples) les traductions

Pistes de solutions / Remarques / Commentaires :

Pour revenir sur le premier exemple :

This course is cool
-> Ce cours est cool
   (Note: some systems, especially oldest ones, propose: "Ce cours est frais")
  

Est-ce que tous les mots ont pu être identifiés et sont en Français ?

->  oui

Est-ce que la structure de la phrase finale est bien formée sur le plan syntaxique en Français ?

->  oui

Est-ce que la phrase d'origine est correcte ?

->  oui

D'où vient le problème (traduction «incorrecte») ?

->  du mot «cool» qui possède plusieurs sens.

Le logiciel de traduction est confronté à un mot polysémique qui veut dire soit «détendu», soit «frais». Le logiciel va devoir faire un choix pour trouver le bon mot. La difficulté apparait donc au niveau lexical mais sa résolution est de nature pragmatique.

Le problème ne vient pas du rôle grammatical du mot, car on ne change pas de type entre "détendu" et "frais" : ils sont tous les deux adjectifs.

Par contre avec une phrase type : «This can is empty», «can» est soit un nom, soit un verbe ! Dans ce cas un choix syntaxique (i.e. au niveau de la grammaire) est possible. Ce cas est beaucoup plus simple à traiter car on peut facilement deviner au niveau syntaxique que le mot "can" à choisir sera un nom (grâce au "this").

Peut-on faire la différence entre les deux sens de «cool» au niveau sémantique ? (i.e. compréhention de la phrase hors-contexte). Hors contexte, il est quand même difficile de savoir quel mot choisir pour «cool». En effet on pourrait imaginer le cours donné en hiver dans une salle mal chauffée. Le sens du mot «cool» fait référence au contexte auquel il est rataché.

Si on reste au seul niveau sématique, ici le mot «cool» se référence par rapport au mot «course», ainsi le plus logique (au niveau sémantique, i.e. hors-contexte) est de choisir la traduction «frais» car «course» n'est pas un être animé...
...à moins d'avoir représenté le sens de «cool» comme expression générale pour désigner quelque chose d'agréable...
(Ce qui illustre une des principales difficultés de la sémantique : le «knowledge representation bottleneck» : où arrêter la représentation des connaissances ?)

Note: Les règles données dans ce cours ne sont pas des règles absolues ! Dans le domaine du traitement des langues, il faut très souvent s'adapter au domaîne d'application et aux objectifs visés. D'où l'importance de bien les cerner.

Dans l'exemple ci-dessus, on peut créer un contexte qui contredit la dernière règle présentée. Ex: "This winter is cold and this course is cool..."

Pour passer maintenant au second exemple :

 Il mange un avocat 
->  He eats a lawyer
or  He's eating a lawyer
or  It eats a lawyer

dont la traduction semble fausse (on s'attendait plutôt à «He is eating an avocado»)... à moins que l'on soit tombé sur des animaux («it») mangeurs d'hommes (e.g. un lion). Là encore, la pragmatique peut devoir jouer, mais dans la plupart des cas usuels (ce qui implique de bien cerner le cadre applicatif) la sémantique suffira ici.

Le problème vient encore ici du niveau lexical car il se pose sur le sens d'un mot (ici «avocat») et sa résolution sera au niveau sémantique (cf remarque précédente).

On pourrait faire la distinction au niveau du verbe auquel est rataché le mot «avocat», ici c'est le verbe «manger», cela nous permetterait donc savoir lequel choisir.

Pour l'exemple :

The spirit is willing but the flesh is weak
-> L'esprit est prêt mais la chair est faible
   (Note: the word "willing" is often translated in "prêt", "disposé", "prompt" or "fort".)
-> The spirit is willing but the flesh is weak

With proposed translation systems, even if the French translation is not entirely correct, they are able to translate it back correctly. However, with some systems you might get "The spirit is strong but the flesh is weak"

Il n'y aucune différence entre la première version est la deuxième (sauf peut etre strong -> willing). La traduction est acceptable.

Ce n'est pas toujours le cas. Cela dépend de l'investissement mis au niveau du développement du logiciel dans le traitement des «exceptions» (au sens large, ici une expression idiomatique).

Pour l'exemple :

Time flies like an arrow
-> Le temps file comme une flèche
or Le temps vole comme une flèche
-> Time slips by like an arrow

Ici le problème (comme vu en cours) vient du fait que l'on peut y voir plusieurs interprétations. En effet:

Le résultat obtenu montre que le traducteurs connait certaines expression allant de l'anglais aux autres langues, mais pas dans l'autre sens. Cela montre une limite aux ressources du traducteur !
Et peut être aussi la statégie de développement utilisée (séparer les équipes par langues (N équipes) et non pas par paires de langues(N2 équipes), en tout cas un manque de cohérence entre les deux).

Concernant :

il tombe des cordes
-> it falls from the cords

il pleut des cordes
-> it is raining cats and dogs
-> il pleut des chats et des chiens

La première partie pose des problème de traduction, elle est traduite litéralement. (là aussi cette traduction pourrait être possible, par exemple sur un trois mats)

La seconde partie ne pose aucun problème, le traducteur doit avoir dans ses ressources la traduction de cette expression (du Français à l'Anglais, mais pas dans l'autre sens !). Mais la symétrie n'est pas assurée. On se retrouve de nouveau confronté à une limitiation dûe au ressources du traducteur. Il ne connait pas toutes les expressions et leurs traductions dans toutes les langues.

Ce qu'il faut comprendre c'est jusqu'à quel niveau le traducteur peut/doit monter pour produire une traduction correcte :

[pyramide des
niveaux de traduction]

Pour les expression idomatique, il ne faut pas «monter trop haut», i.e. il ne faut pas essayer de les comprendre, mais bien les traduire comme un tout lexical (avec éventuellement un peu de syntaxe pour la conjuguaison des verbes).
Pour la plupart des cas usuels (pas trops ambigus) une analyse jusqu'au niveau syntaxique pourrait suffire. Cependant pour un certain nombre de cas limites, tels que ceux que précisément nous recherchons dans ce TP, la compréhension sémantique, voire pragmatique, est nécessaire.

Concernant l'évaluation du traducteur :

Les différents points à évaluer sont les étapes nécessaires et obligatoires dont doit être pourvu un logiciel de traitement du langage naturel, c'est-à-dire aux différents niveaux (lexical, syntaxique, sémantique et pragmatique).

Au niveau lexical la phrase de l'exemple du début est bon car le mot «cool» possède plusieurs sens. Il va donc falloir choisir parmis eux.

Au niveau syntaxique, la phrase «This can is empty» peut servir d'exemple car après le «This» on ne peut avoir par exemple de verbe. Cela permet donc de choisir parmis les définitions de "can" (verbe ou mot).

Au niveau sémantique l'exemple du début, «This course is cool» montre le problème. La traduction sur le plan sémantique est correcte (car "course" n'étant pas un objet animé on ne peut logiquement utiliser la traduction "détendu" !). Par contre sur le plan pragmatique cela n'est pas parfait !

Au niveau pragmatique : c'est le gros problème. En effet actuellement c'est possible d'en tenir compte mais uniquement dans des domaines très limités où l'on peut bien définir des règles (ex: pragmatisme pour des rapports de Laboratoires, etc.). Mais il est actuellement impossible de faire ceci de manière générale.

Pour finir, il faut bien avoir conscience que lorsqu'on évalue les performances d'un système de traduction, il ne suffit pas de se demander si l'on comprend le résultat (ce qui reste toujours subjectif) mais bien d'évaluer les résultats par rapport à un objectif fixé (évaluation objectives !).

Quelques conclusions / Idées à retenir :

Translation is a very hard NLP problem. The main difficulty is to capture the context (semantic) but also the relations among words, e.g. a fruit is eatable whereas a person should not be. Even state-of-the-art systems for translation (and other tasks) are far from producing broad range acceptable results.

Pour toute application LN :

References

[1]    Published Google system in 2017 and Published Google system in 2018

[2]    Quantitative comparison of DeepL with other state-of-the-art systems.


Identification de la langue

Le rôle du logiciel considéré ici est de détecter automatiquement la langue (ou le «type de langue») dans laquelle a été écrit un texte donné.

Les applications d'un tel module (au sens le plus large) sont par exemple :

Les performances usuelles de tels systèmes sont voisines de 99%.

Here area few language identifiers we propose you to compare:

Pick up at least two of them and compare.

Commencer par essayer sur quelques exemples personnels.

Essayez la phrase

Le bug dans le soft a engendré un crash du système

Étonnant, non ?

Essayez la même phrase en remplaçant les mots pleins (i.e. les mots non-grammaticaux) par n'importe quoi, par exemple

Le xwt dans le xwt a xwtyxwy un xwt du wxt

De plus en plus surprenant...

Essayez maintenant la même séquence mais sans les mots grammaticaux. Par exemple

xwt xwt xwtyxwy xwt wxt

Et avec les mots d'origine (i.e.

bug soft engendré crash système

Un tel système utilise en fait trois techniques combinées :

  1. présence de caractères spécifiques à une langue comme œ, č (langues slaves), caractères chinois, ...
  2. reconnaissance de mots fréquents importants (et discriminants) tels que par exemple les mots grammaticaux. D'où le comportement précédent.
  3. identification de séquences de lettres fréquentes.

Pour illustrer ce dernier point, tapez du texte sans mots grammaticaux et ne contenant que des mots ressemblant à du français sans en être vraiement, par exemple

ordinateuret rajmanisme douguilette

Essayez d'autres exemples dans votre langue maternelle.

Essayez votre nom de famille.

Pistes de solutions / Remarques / Commentaires :

Exemple de n-grammes de lettres pour "chat":

bi-grammes : ch ha at

tri-grammes : cha hat

lesquels peuvent être utilisés pour calculer la probabilité d'une séquence de lettre correspondant à une langue L:

P(chat|L) = P(c|L) * P(h|c,L) * P(a|ch,L) * P(t|cha,L)

laquelle peut être approximée par (hypothèse de Markov):

P(chat|L) ~ P(c|L) * P(h|c,L) * P(a|h,L) * P(t|a,L)

i.e.:

P(chat|L) ~ P(ch|L) * P(ha|L)/P(h|L) * P(at|L)/P(a|L)

où l'on voit l'utilisation des statistiques des bi- et mono-grammes de la langue L.

If there are enough occurences of a letter-sequence that is characteristic for a language, the n-gram model is considered before the others; e.g. "bip", "pib" is typical in Romanian.

Other examples of application of language identification, where you look at domain-specific words rather than grammatical words:

Conclusions / Key ideas:

Language identification is heavily based on Zipf law

As any statistical technique, each of the above techniques works only when there is enough material:

The fundamental rules of corpus-based approaches:


Un peu de lecture illustrant le positionnement du cours par rapport au Machine Learning

Finaly, we propose you to read the three following blog articles which, we found, are a good complementary illustration of the positionning of this course w.r.t. ML courses:


Extras

En guise de conclusion (dessert ?) vous pouvez aussi vous amuser à essayer de comprendre le texte suivant (si, si, il a un sens !) puis à y chercher les (nombreux) pièges pour le traitement automatique qui s'y trouvent.


Si vous souhaitez «jouer» avec d'autres démonstrations, vous pouvez faire un tour sur la page Pointeurs WWW relatifs au cours.


F.A.Q.

Je ne comprends pas comment il peut y avoir des ambiguïtés autres que lexicales dans le domaine d'une traduction.

Il suffit que la phrase à traduire soit ambiguë syntaxiquement. Par exemple «la petite brise la glace». C'est le cas le plus simple.

On peut aussi choisir un exemple un tout petit peu plus subtil où ce n'est pas la phrase source qui est ambiguë dans la syntaxe de la langue source, mais ses traductions possibles dans la langue cible qui peuvent avoir des structure syntaxique différentes.
On a alors là aussi une ambiguïté syntaxique : dans le choix de la structure syntaxique cible, exactement comme dans le cas de l'ambiguïté lexicale où on a le choix entre deux mots différents dans la langue cible.

Un exemple simple de ce cas était donné avec la phrase «Il mange des avocats» : le présent français est ambigu pour sa traduction en anglais : simple present («he eats») ou present continuous («he is eating») ?

L'exemple «Rolling Stones» se traduit en «pierre qui roule» ou «pierre de roulement». Pourquoi n'est-ce pas une ambiguïté lexicale («qui roule» par opposition à «de roulement»)?

Parce que l'ambiguïté ne se situe pas au niveau du choix d'un mot ou d'un autre mais est bien au niveau du choix d'une structure syntaxique ou d'une autre (pour faire plus simple à ce niveau du cours où l'on n'a pas encore défini en détail ce qu'est une structure syntaxique, disons que cette ambiguïté est sur le choix des rattachements des mots entre eux et leur rôle dans la phrase).

Bien sûr cette ambiguïté va finalement se traduire par des mots différents (on parle de «formes de surface» différentes), mais notez bien que ce n'est pas ici un choix sur un mot plutôt qu'un autre, mais bien une séquence de mots qui, par dessus tout, à un rôle différent.

Le mot où le groupe de mots se traduirait donc d'une manière identique (sinon il y aurait forcément une ambiguïté lexicale).

Non c'est là je pense que se situe l'incompréhension.

Deux traductions possibles différentes ne proviennent pas forcément d'une ambiguïté lexicale (c'est-à-dire d'un problème de choix au seul niveau des mots).

Un meilleur exemple (qui reste à trouver) serait à prendre dans la vie courante dans ce que l'on qualifie de mauvaises traductions.
Quand on trouve qu'une phrase a été mal traduite (par un humain je veux dire ici, je ne parle plus de machine) c'est souvent qu'il y avait une ambiguïté sémantique ou pragmatique que le traducteur ne semble pas avoir vu (et que nous voyons). Cela donnera au final deux traductions possibles (notre «bonne» et la mauvaise du traducteur) qui diffèrent évidement au niveau de la séquence de mots choisis, mais dont la différence ne se situe en général pas au niveau d'un mot ambigu mal traduit, mais plutôt d'une idée générale de sens que l'on trouve.

Le désambiguïsateur de Xerox différencie deux sortes d'adjectifs (ADJ_ et ADJ2_ ). Ils donnent un exemple :
gentil = ADJ_SG
petit = ADJ2_SG
mais je ne vois toujours pas la différence.

Dans leur documentation, ils indiquent «special» pour la version «2» de certaines étiquettes. Mais je ne sais pas ce que cela représente exactement :-(.

La seule petite idée que j'aurais, c'est par rapport au substantif : on peut dire «le petit» (en tant que nom) mais pas «le gentil»... mais je ne suis pas convaincu.

Une autre idée serait que «gentil» ne s'appliquerait qu'à des êtres vivants/animés alors que «petit» est plus universel... ...mais cela supposerait avoir cette information (sémantique) pour les noms, ce qui ne semble pas être le cas.

Par contre, c'est sûrement une distinction qui a augmenté les performances d'un de leur module... mais je ne vois pas bien d'où elle pourrait venir.


Dernière mise à jour le 13 septembre 2022