Wiki TALEP

Traitement automatique du langage écrit et parlé

Outils pour utilisateurs

Outils du site


projets-l3:langid

Deviner la langue d'un texte

Le problème posé ici est simple à énoncer : comment peut-on deviner automatiquement dans quelle langue un texte a été écrit ?

Un système d'identification automatique de la langue est utile, par exemple, dans un système de traduction automatique, pour savoir depuis quelle langue traduire. Il peut être utilisé également pour adapter les paramètres d'un système de reconnaissance vocale selon la langue de l'utilisateur. Les robots qui balaient le web utilisent des systèmes de détection de la langue pour catégoriser et indexer correctement les pages. On peut aussi utiliser un tel système pour détecter et ignorer des passages en langue étrangère lors qu'on est en train d'analyser un texte en français.

Techniques existants

L'identification de la langue est une tâche assez facile en TAL, comparée à la traduction automatique ou à la reconnaissance de la parole. Cependant, certains défis peuvent se poser pour distinguer les langues proches (p. ex. portugais et espagnol) et pour traiter des textes très courts comme les tweets, par exemple, qui ne dépassent pas les 140 caractères.

La plupart des systèmes utilisent des classifieurs appris automatiquement à partir de textes pour lesquels on connait la langue. C'est ce que vous allez implémenter aussi. Cependant, on peut exploiter cette base de textes d'apprentissage de plusieurs façons différentes :

  • Vocabulaire des mots : On peut mémoriser les mots les plus fréquents dans chaque langue du corpus d'apprentissage. Ensuite, quand un nouveau texte doit être classifié, on renvoie la langue dont le vocabulaire est le plus proche.
  • N-grammes de caractères : Une approche similaire consiste à effectuer la même chose en utilisant les n-grammes de caractères à la place des mots. Puisqu'ils sont moins nombreux que les mots, il y a plus de chances qu'un n-gramme soit présent dans un vocabulaire, même pour des textes courts.
  • N-grammes/mots prototypiques : On peut aussi essayer de repérer les mots ou n-grammes de caractères qui apparaissent uniquement dans les textes d'une langue et n'apparaissent pas dans les textes d'une autre langue. Par exemple, la letttre “ñ” est prototypique de l'espagnol, alors que la lettre “ß” est prototypique de l'allemand.

Il est possible de combiner les méthodes décrites ci-dessus dans des classifieurs comme Weka. Cela donne souvent de bons résultats en pratique.

Logiciels à tester

Il existe de nombreuses boîtes à outils pour la classification de textes et notamment pour l'identification de la langue. Voici quelques liens qui peuvent vous donner un point de départ dans vos recherches :

N'hésitez pas à comparer ces outils de manière systématique. Pour une base de textes donnée comme celles décrites ci-dessous, quel est le taux d'erreur de chaque système ? Est-il doué sur des textes courts ? Y a-t-il des langues plus difficiles à identifier que d'autres ?

Développement à faire

Vous devez écrire un logiciel qui devine, pour un texte donné en entrée, quelle est sa langue. Par exemple, si on donne en entrée le texte “Hallo, wie geht es dir?” votre programme doit donner comme résultat “de”, qui est le code de la langue allemande. Cependant, si le texte en entrée est “المعلمة صحيحة” votre système doit indiquer en sortie “ar”, qui est le code de la langue arabe.

Format des données

Ce projet fonctionne sur le modèle d'une campagne d'évaluation. Nous vous fournissons des textes sur lesquels la langue est connue (train) et des textes sur lesquels nous connaissons la langue, mais nous la gardon sécrète (test). Nous fournissons aussi un échantillon de données de développement pour lesquelles nous vous fournissons les bonnes réponses (dev). Ce dernier sert à évaluer votre système pendant le développement et à apporter des améliorations de manière incrémentale.

Données d'entraînement : Pour chaque tâche proposée ci-dessous, nous fournissons un ensemble de textes pour lesquels nous connaissons déjà la langue. C'est le corpus d'entraînement. Chaque base de textes est dans un fichier nommé selon le code de la langue, et chaque texte est identifié par son nom de fichier.

Données de développement : Pendant le développement du système, vous pouvez l'évaluer sur un petit échantillon de données de développement pour lesquelles nous vous fournissons les bonnes réponses. Attention, cet échantillon ne doit pas être utilisé pour apprendre votre système. Avec ces données, vous pouvez vérifier, par exemple, si la dernière modification effectuée améliore effectivement la performance du système.

Données de test : Vous devez ensuite évaluer votre système sur une base de textes pour laquelle vous ne connaissez pas la langue. Votre système doit donner une sortie contenant deux colonnes : le nom du fichier et le code de la langue. Nous allons ensuite évaluer votre système automatiquement, en comparant votre sortie avec la vraie langue du texte, que nous gardons secrète pour le moment. Votre système sera évalué automatiquement par rapport à ces données, comme dans une vraie campagne d'évaluation.

Pour les trois tâches proposées, nous vous fournissons trois fichiers textuels (train, dev et test) encodés en UTF-8, avec LF en fin de ligne. Chaque ligne du fichier contient deux champs séparés par une tabulation. Le premier champs contient le texte, alors que le deuxième champs, après la tabulation, contient le code de la langue de ce texte, selon les codes décrits pour chaque tâche. Dans les données de test, le deuxième champs contient “??” pour toutes les lignes.

Evaluation

Pour faciliter le développement incrémental, nous proposons un système baseline. Il s'agit d'un script Python qui attribue une langue aléatoirement pour chaque texte donné en entrée. Bien entendu, c'est un système complètement artificiel sans grand intérêt conceptuel, mais qui permet d'avoir un point de départ pour se familiariser avec la tâche et le format des données.

Ce système peut être évalué sur un petit échantillon de données de développement pour lesquelles nous vous fournissons les bonnes réponses. Ainsi, vous pouvez vérifier que votre système a une précision supérieure à celle de la baseline ou que la dernière modification améliore la précision globale du système.

Pour exécuter le système baseline, exécutez le script langid-dummy.py de la façon suivante :

$ ./langid-dummy.py {european|similar|arabic} fichier-dev.txt > monsysteme.txt

Vous devez spécifier, avant la liste de langues, si vous travaillez sur la tâche des langues européennes, des langues similaires ou des dialects de l'arabe. L'entrée est le fichier de développement ou celui de test. La sortie sera un fichier identique à l'entrée, mais où la dernière colonne aura été remplacée par le code de la langue deviné aléatoirement.

Le script eval.sh calcule la précision d'un système d'identification de la langue par rapport à un fichier de référence. Ce script prend en paramètre le nom du fichier contenant la sortie de votre système et le nom du fichier contenant la référence. Par exemple, pour connaître la précision du système baseline sur l'ensemble de développement, vous pouvez exécuter :

$ ./eval.sh fichier-dev.txt monsysteme.txt

L'archive ci-dessous contient le script d'évaluation et l'identificateur de langue baseline.

Tâche 1 : langues européennes (facile)

Codes ISO des langues que vous devez inclure dans votre système :

  • bg - Bulgare
  • cs - Tchèque
  • da - Dannois
  • de - Allemand
  • el - Grec
  • en - Anglais
  • es - Espagnol
  • et - Estonian
  • fi - Finnois
  • fr - Français
  • hu - Hongrois
  • it - Italien
  • lt - Lituanian
  • lv - Letonian
  • nl - Néerlandais
  • pl - Polonais
  • pt - Portugais
  • ro - Roumain
  • sk - Slovaque
  • sl - Slovénien
  • sv - Suédois

Données : dataset-european.tar.gz

Ce corpus a été créé spécialement pour ce projet à partir du corpus parallèle Europarl. Attention, vous devez proposer des améliorations et/ou des extensions si vous travaillez uniquement sur ces données, car cette tâche est assez facile.

Tâche 2 : langues proches (difficile)

Codes des variantes que vous devez inclure dans votre système :

  • bs - Bosniaque
  • sr - Serbe
  • hr - Croate
  • es-AR - Espagnol d'Argentine
  • es-ES - Espagnol d'Espagne
  • es-MX - Espagnol du Mexique
  • fr-CA - Français du Canada
  • fr-FR - Français de France
  • id - Indonésien
  • my - Malaysien
  • pt-BR - Portugais du Brésil
  • pt-PT - Portugais du Portugal

Données : dataset-similar.tar.gz

Plus d'informations sur la création du corpus :

Tâche 3 : dialects de l'arabe (difficile)

Codes des dialects que vous devez inclure dans votre système :

  • EGY - Égypte
  • GLF - Pays du Golfe
  • LAV - Levantin - Moyen Orient
  • NOR - Nord-Africain - Maghreb
  • MSA - Arabe littéraire (Modern Standard Arabic)

Données : dataset-arabic.tar.gz

Plus d'informations sur la création du corpus :

LDAP: couldn't connect to LDAP server
projets-l3/langid.txt · Dernière modification: 2017/02/04 14:34 de carlos.ramisch