L3
Informatique et aléatoire
Détection automatique de langue d'un texte

1. But du projet

L'objectif de ce projet est de construire une fonction permettant de déterminer automatiquement à quelle langue appartient un mot, comme dans les deux examples suivants :
  1. Det-langue('pommme') français
  2. Det-langue('apple') anglais
Vous devrez rendre votre code et un compte-rendu de quelques pages après le TP4. Le projet peut se faire en binôme. Le code doit être écrit en langage Pyhton. Le rendu du projet doit suivre la démarche suivante :
  1. envoyez un mél avec le sujet : [LI3-InfAleat-projet1] nom-etu1 nom-etu2
  2. le mél doit contenir, en attachement, le compte rendu du projet (dans un format standard, .doc, .ods ou .pdf), et une archive contenant votre code Pyhton.

2. Construction d'un modèle de langue

La méthode d'identification est fondée sur l'observation que la fréquence d'apparition d'une lettre dépend de la langue dans laquelle on écrit. Par exemple un texte français comportera beaucoup plus de e qu'un texte écrit en anglais ou en italien. Dans la suite de ce document, nous noterons un mot composé de n lettres . Nous supposerons que, pour une langue l donnée, la probabilité d'observer un mot ne dépend que de la probabilité d'apparition de ses lettres :

Q1. Sur quelle hypothèse est basé l'égalité précédente? Cette hypothèse est-elle vraisemblable? Si l'on dispose d'un corpus (c.-à-d. un ensemble de documents) écrit dans la langue l, il est possible de déterminer automatiquement les probabilités en la confondant avec la fréquence d'apparition de la lettre dans le corpus de la langue l:
les comptages se faisant sur l'ensemble des mots des documents rédigés dans la langue l.


Nous allons utiliser les probabilités calculées au paragraphe précédent pour prédire la langue l, d'un mot . Pour cela, nous allons considérer la fonction de décision suivante :

est l'ensemble des langues que notre système connaît, et est le résultat de la prédiction. La probabilité peut être déterminée grâce à la formule de Bayes :

Q2. À quoi correspondent les différents termes de cette relation ? Peuvent-ils être tous calculés ? En particulier, est-il nécessaire de déterminer la probabilité ? Quelle est à votre avis le meilleur moyen de déterminer ?

3. Réalisation

On dispose d'un ensemble de documents écrits dans différentes langues l . Les documents ont été pré-traités de la manière suivante :
  1. toutes les majuscules ont été converties en minuscules ;
  2. toutes les lettres accentuées ont été supprimées ;
  3. tous les signes de ponctuation ont été supprimés.
Les questions suivantes sont indicatives. Vous pouvez organiser vos classes de la manière qui vous convient. Faites attention cependant à la rapidité algorithmique de votre implémentation (en particulier, ne lire qu'une fois chaque corpus !). Ecrivez une classe qui prend en charge la lecture d'un corpus pour une langue donnée et qui calcule son modèle de langage. En particulier, elle doit permettre de :
Q3. de lire un corpus d'une langue donnée.
Q4. Compter le nombre de fois qu'une lettre w est utilisée.
Q5. Calculez la probabilités de la langue choisie pour la lettre w à l'aide de l'Equation fréquentielle précédente.
Q6. Calculez la probabilité du mot Tester votre fonction et déterminer les deux probabilités suivantes : ; .
Q7. Ecrivez une classe permettant de déterminer la langue d'un mot.
Q8. Pour évaluer les performances du système, on considère la fonction d'erreur suivante :

Q9. Programmez cette fonction et testez les performances de votre système en utilisant le fichier test qui contient des mots trouvés alétoirement sur des pages wikipedia en français, allemand, italien et anglais.

Q10. (Bonus) on suppose que les lettres apparaissant dans un mot sont dépendants de la lettre qui les précède. Avec cette hypothèse, la probabilité d'un mot sachant une langue se décompose comme :

Les estimés des probabilités de lettres au sens du maximum de vraisemblance sont :



Implémenter ce modèle (appelé modèle bi-gramme) et comparer ses performances avec le modèle précédent en utilisant la même base.