Sujets des projets L3 LI - 2017-2018

Détection de la langue d'un texte

Pour détecter la langue d'un texte, on peut constituer une base de connaissances à partir d'un corpus de textes classés par langue. Pour chaque langue, un premier programme (à écrire) recueillera des statistiques significatives, basées sur les lettres (par exemple, il y a plus de "w" en anglais qu'en français). Le choix du modèle probabiliste employé et de ses paramètres (bigrammes, trigrammes) devra être justifié dans le rapport. On peut en proposer plusieurs et discuter de leurs avantages et inconvénients (rapport entre précision de la reconnaissance et volume de la base de connaissances ou longueur du texte nécessaire pour reconnaître sa langue). Par la suite, un deuxième programme (à écrire), utilisera ces bases de connaissances pour reconnaître la langue d'un texte.

Vous utiliserez un corpus d'apprentissage comprenant des textes plus ou moins variés d'un certain nombre de langues (le plus de langues possible, au moins 4). Le corpus de test ne devra pas contenir de texte appartenant au corpus d'apprentissage.

Amélioration possible : gérer des textes dans différents encodages, pour les langues à alphabet non latin.

Responsable
Timothée Bernard
Groupe
2 personnes
Difficulté
Facile à moyen

Correction orthographique

Le projet consiste à implémenter un correcteur orthographique basé sur la distance d'édition de Levenshtein. On peut distinguer deux types d'erreur:

  • Erreur lexicale: la forme fautive n'est pas dans le lexique
  • Erreur grammaticale: la forme fautive est dans le lexique
On s'intéresse uniquement aux erreurs lexicales, faciles à détecter.

Le programme prend un texte en entrée, et aura deux modes: :

  • interactif: pour chaque forme non présente dans le dictionnaire, propose à l'utilisateur 
    • de choisir un de ses remplaçants, pour l'occurrence, ou pour toutes les occurrences
    • d'ignorer la correction, c'est-à-dire conserver le mot initial, pour cette occurrence ou pour toutes, en l'insérant ou non dans le lexique.
  • batch: le programme effectue toutes les corrections
La correction devra être évaluée, et il vous faudra pour cela constituer un corpus d'évaluation, par exemple à partir de sites d'apprentissage du français ou de forums, etc...
Responsable
Marie Candito
Groupe
2 personnes
Difficulté
Moyen à difficile

Reconnaissance d'entités nommées

On regroupe sous le terme "entités nommées" les noms de personnes, de lieux, de dates, noms d'entreprises, adresses, etc. Il s'agit d'expressions qui dénotent une entité unique de façon presque indépendante du contexte. On s'intéresse aux entités nommées pour plusieurs raisons :

  • elles constituent des syntagmes dont la structure est relativement spécifique (par exemple une adresse, ou un nom d'association) dont le repérage préalable peut grandement simplifier une analyse syntaxique ;
  • dans une perspective de recherche d'information, la reconnaissance des entités nommées permet de savoir de quoi parle un texte ;
  • elles sont nécessaires pour la résolution des anaphores.

Il s'agit dans ce projet de repérer de la façon la plus complète possible les entités de type "personne", organisation et "lieu". Le texte pourra avoir été préalablement taggé. L'enjeu du projet est :

  • mettre en place des ressources comme des listes d'introducteurs de noms de personnes (par exemple les titres Mlle Mme etc...), et récupérer des ressources externes (listes de prénoms, listes de lieux par exemple extractible de wikipédia)
  • de bien séparer dans le code la partie algorithme de recherche, et la partie ressources;

La version de base comprend un moteur de reconnaissance des entités, et son évaluation (qui utilise un corpus où les entités nommées ont été manuellement annotées). Une version plus sophistiquée permettra d'augmenter les performances en couvrant plus que les cas simples, et en utilisant des ressources externes.

Responsable
Marie Candito
Groupe
2 personnes
Difficulté de la version de base
Facile à moyen

Saisie prédictive pour téléphone portable

Aujourd'hui les téléphones tactiles de type smartphones sont légion. Le principal problème d'une telle technologie repose sur le fait qu'à la longue, il n'est pas toujours aisé, voire peu intuitif de taper du texte, que ce soit SMS, e-mails ou courts messages sur les réseaux sociaux. De fait, ce projet consiste en la création d'un système de saisie prédictive à la manière des téléphones portables.

La difficulté réside dans l'interface entre l'utilisateur final et le programme :

  • Est-ce facile de sélectionner le texte prédit ?
  • Le texte est-il suffisamment précis pour répondre au besoin de l'utilisateur ?
  • Comment gérer les mots inconnus ? Peut-on les ajouter à un dictionnaire, les modifier, les supprimer ?

Dans un premier temps, il sera nécessaire de concevoir un programme utilisant un dictionnaire pour la prédiction. Dans un second temps, vous pourrez vous attacher à utiliser des corpus de bigrammes ou trigrammes de mots pour pouvoir prédire le mot le plus fréquent après un mot déjà tapé. Enfin, vous pourrez améliorer votre projet, afin de prendre en compte les bigrammes ou les trigrammes les plus fréquents en fonction de l'habitude de l'utilisateur.

Responsable
Timothée Bernard
Groupe
2 personnes
Difficulté
Facile à difficile

Moteur de recherche

Dans ce projet, nous vous proposons de créer un moteur de recherche fondé sur l'approche vectorielle.

  • On considère un ensemble de documents, chacun étant représenté comme un vecteur de descripteurs.
  • Les descripteurs sont en général les mots du document.
  • Une requête entrée par un utilisateur est également transformée en vecteur. La recherche des documents pertinents pour la requête revient à faire une mesure de similarité entre le vecteur de la requête et les vecteurs des documents, et retourner les documents par ordre décroissant de similarité.

Pour permettre de traiter une base documentaire avec un nombre important de documents, l'aspect crucial est d'utiliser la notion d'index, ce qui permet au moment de la recherche de documents pertinents pour une requête de ne pas reparcourir tous les documents.

Une extension consiste à faire de l'expansion de requête, technique consistant à ajouter des termes à une requête, voire à remplacer celle-ci. L'objectif est de retourner à l'utilisateur des documents qu'il n'aurait pas trouvé avec sa requête initiale (exemple : la requête "voiture" ne permettra pas de trouver les documents ne contenant que le terme "automobile", qui sont pourtant pertinents).

  • Expansion par synonymie, hyperonymie.
  • Expansion morphologique (ajout des autres formes fléchies des lemmes des termes de la requête)

Le projet est structuré en 3 parties :

  1. En amont, avant toute recherche : indexation des documents
  2. Puis utilisation du moteur : pour une requête, recherche des documents pertinents
  3. Ajout et évaluation de la fonctionnalité d'expansion de requête
La version de base devra pouvoir traiter des requêtes sur une petite base (par ex. 3000 documents). Une version plus robuste devra pouvoir traiter un volume bien supérieur. Des données d'évaluation seront fournies (base documentaire, et ensemble de requêtes avec documents attendus) permettant une évaluation du moteur (mesure de précision / rappel à X documents).
Responsable
Timothée Bernard
Groupe
2 personnes
Difficulté
Facile à moyen

Concordancier et outils statistiques pour corpus annoté

On propose de réaliser une suite d'outils pour l'exploration de corpus annotés en morphosyntaxe. Celle-ci se composera de deux sous-composantes :

  1. Une suite d'outils statistiques qui permettront d'obtenir des informations quantitatives sur le corpus.
    • Version de base : le programme devra donner des informations générales sur le corpus (nombre de formes dans le corpus, nombre de phrases, graphe des rangs de fréquences, etc).
    • Améliorations possibles : le programme permet à l'utilisateur de faire des requêtes sur des mots précis pour connaître sa fréquence, son rang de fréquence, ses principales collocations (déterminées en utilisant une heuristique guidée par l'information mutuelle ).
  2. Un concordancier.
    • Version de base : le concordancier permettra de faire des recherches sur le corpus annoté. A minima, il doit pouvoir lister les contextes d'apparition d'un mot ou d'une chaîne de caractères donné par l'utilisateur. On veillera à ce que le concordancier soit relativement indépendant des formats de corpus sur lequel il sera développé.
    • Idéalement, il devrait pouvoir traiter des requêtes plus complexes : regexes, n-grammes, utilisation des parties-du-discours pour généraliser des contextes, etc...
Les difficultés du projet résident dans :
  • La gestion du langage de requêtes ;
  • L'efficacité des recherches en terme de temps de réponse ;
  • L'interface utilisateur.

Responsable
Marie Candito
Difficulté
Facile à difficile
Groupe
2 personnes

Tagger de Brill (1992)

Le tagger de Brill (1992) permet d'étiqueter un texte en partie-du-discours à l'aide de règles apprises automatiquement sur un corpus. L'apprentissage fonctionne en 2 étapes:

  • Chaque mot-forme est taggé par sa catégorie la plus fréquente (donc sans prendre en compte le contexte). Par exemple, tous les le sont taggés comme déterminants.
  • Apprentissage de règles de correction. Répéter:
    • Générer des règles de correction du type. "Si un mot est taggé B dans le contexte C, alors changer son tag en B". (exemple: si un mot est taggé "verbe" alors que le tag précédent est "déterminant", changer son tag en "nom")
    • Conserver la règle qui corrige le plus d'erreurs (et ajoute le moins possible de nouvelles erreurs!)
    • Appliquer la nouvelle règle choisie

Pour tagger un nouveau texte, on commence par tagger chaque mot-forme avec sa catégorie la plus fréquente puis on applique les règles de correction dans l'ordre où on les a apprises.

Dans un premier temps, le projet consiste à implémenter un tagger de Brill et à l'évaluer sur corpus. Dans un second temps, on vous propose d'analyser les erreurs produites par ce tagger (i.e. pourquoi s'est-il trompé sur tel mot ? quels sont les types d'erreurs les plus fréquentes ?) et à suggérer des améliorations. Éventuellement, il pourrait être intéressant de comparer les erreurs faites par le tagger de Brill à celles faites par un tagger statistique (dont la sortie vous sera fournie).

Références

Responsable
Timothée Bernard
Difficulté
Moyen à difficile
Groupe
2 personnes
Langage
Python ou Java

Thésaurus distributionnel

Un thésaurus distributionnel est un dictionnaire dont chaque entrée (typiquement un couple lemme / catégorie) est associée à une liste "voisins" distributionnels (à savoir des mots qui apparaîssent fréquemment dans les mêmes contextes), chacun avec un score mesurant la force de l'association.

Ce type de thésaurus se montre extrêmement utile (comme complément ou même comme substitut à une ressource statique telle que Wordnet) pour de nombreuses tâches de TAL, car il permet de généraliser les données lexicales. Par exemple en analyse syntaxique, si on a observé dans un corpus que le rattachement de "couper" et de "avec un couteau" est fréquent, et que l'on sait par ailleurs que "couteau" a pour voisin distributionnel "canif", alors on pourra en déduire que rattacher "avec un canif" à "couper" est plausible.

La construction d'un thésaurus distributionnel comprend trois grandes étapes:

  • l'extraction et le prétraitement d'un corpus de grande taille (plusieurs millions de mots),
  • l'identification des contextes associés à chaque mot (ces contextes peuvent être "linéaires", comme par exemple "le premier mot à droite est 'canif'", ou "le deuxième mot à gauche est 'souvent'", ou bien syntaxiques, comme par exemple "a pour objet direct 'canif'"),
  • et un calcul de similarité entre contextes.
Ce projet mettra donc en oeuvre cette procédure pour la construction d'un thésaurus automatique du français. La version de base utilisera un petit corpus (par ex. 50000 phrases), et n'utilisera que les contextes linéaires. Les deux pistes d'amélioration sont d'une part d'utiliser des contextes syntaxiques et d'autre part de pouvoir traiter un corpus de 100M de mots qui vous sera fourni déjà taggé et analysé syntaxiquement en dépendances.

Vous évaluerez le thésaurus construit sur une tâche de similarité lexicale, pour laquelle des données d'évaluation vous seront fournies.

Références:

  • Automatic construction of distributional thesauri for French Enrique Henestroza Anguiano and Pascal Denis, TALN 2011 (pointeur vers références)
  • Responsable(s)
    Marie Candito
    Difficulté version de base
    Moyenne (sujet initialement proposé en M1, mais faisable pour groupe à l'aise en info)
    Groupe
    2 personnes
    Langage
    Python ou Java