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 :
- Det-langue('pommme') français
- 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 :
- envoyez un mél à
Massih[-]Reza[point]Amini[AT]imag[point]fr
avec le sujet : [LI3-InfAleat-projet1] nom-etu1 nom-etu2
- le mél doit contenir, en attachement la notebook Jupyter avec 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 :
où 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 :
- toutes les majuscules ont été converties en minuscules ;
- toutes les lettres accentuées ont été supprimées ;
- 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.